+
    nDjXx              
          ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
t^ RIt ^ RItRt^ RIHt ^ RIHtHtHtHtHtHtHtHt ^ RIHt ^ R	IHt ^ R
IH t   ^ RI!H"t" Rt# ^ RI%t%Rt&R t(R t)]PT                  ! RRR7      R 4       t+]&'       g   ]PT                  R 4       t,0 RImt-]P\                  ! ]R]P^                  P`                  R7      .t1]2! 4       t3]2! 4       t4]'       Ed    ^ RI5t5]1Pm                  ]P\                  ! ]5R]P^                  P`                  R7      4       ] Pn                  ! ]5Pp                  4      ] Pr                  ! R4      8  d	   ]! R4      h]5Pt                  ! RR7        ^ RI;t;]1Pm                  ]P\                  ! ];R]P^                  P`                  R7      4       ];Px                  ! ]4       ]R8w  d   ]3P{                  R4       ]P|                  ! RRR 7      t?]?R8X  d   ];P                  ! ];P                  4       M]?R!8w  d   ]B! R"]? R#24      h  ^ RICtC]1Pm                  ]P\                  ! ]CR]P^                  P`                  R7      4       ]3P{                  R4       ]P                  ! R$R%]ER&7       ^ R'IFHGtG AG ^ RIHtI]1Pm                  ]P\                  ! ]IP                  R]P^                  P`                  ]P^                  P                  .R7      4       ]IP                  P                  R(R4       ]IP                  P                  R)R!4       ]IP                  P                  R*]IP                  ! ]4      ^ ,          4       ]R8w  d   ]3P{                  R4       ]4P{                  R4        ^ RINHOtP ]1Pm                  ]P\                  ! ]PR]P^                  P`                  ]P^                  P                  .R7      4       ]4P{                  R4       ]1 U u0 uF  q P                  kK  	  up tR]R]-,
          '       d   Q h]S! ]]T4      '       d{   ]P                  ! 4       RJ9  de   ]2! ] P                  ! ]4      4      tW]WR+08w  dE   ]W]R,
          '       d   R,]R R-]W 2tX]B! ]X4      h]1 Uu. uF  pVP                  ]W9   g   K  VNK  	  upt1]PT                  ! ]1R.7      R/ 4       tY]P^                  P                  ]R0R17      t[R2 t\R3 R4 lt]]PT                  R5 4       tM]'       d   ]P                  P                  ]P                  P                  ]P                  ! 4       R64      4       ]P                  P                  R7RRR87       ]P                  P                  R9RRRR]e! ]P                  4      R:7       ]P                  P                  R;R94      ti]P                  P                  ]i4       ]#'       dx   ]RKR< l4       tk]k]"nl        ]2! . RLO4      ]"nm        . RMO]"nn        R=R>R?R>R@RARBRCRDRE/]"no        ]2! RF.4      ]"np        RG. RNO/]"nq        R]"nr        ]"P                  P{                  RH4       R# R#   ] d    Rt ELi ; i  ]$ d    Rt# ELi ; i  ]' d    Rt& ELi ; i  ] d     ELi ; i  ] d     ELbi ; i  ] d     ELi ; i  ] d     EL#i ; i  ] d     ELi ; iu up i u upi )O    N)contextmanager)LiteralTF)get_fpu_mode)SCIPY_ARRAY_APISCIPY_DEVICEarray_namespace
default_xpis_cupyis_daskis_jaxis_torch)FPUModeChangeWarning)patch_lazy_xp_functions)version)	dt_configc                   V P                  RR4       V P                  RR4       V P                  RR4       V P                  RR4       V P                  RR4       V P                  RR4       V P                  RR4        ^ RIp ^ RIHp \
        '       g7   V P                  RR
4       V P                  RR4       V P                  RR4       \        P                  R8X  dI   \        P                  R8  d2   \        P                  R8w  d   \        P                  ! RRR7       R# R# R# R#   \         d    T P                  RR4        Li ; i  \         d    T P                  RR	4        Li ; i)a  
Add pytest markers to avoid PytestUnknownMarkWarning

This needs to contain all markers that are SciPy-specific, as well as
dummy fallbacks for markers defined in optional test packages.

Note that we need both the registration here *and* in `pytest.ini`.
markerszslow: Tests that are very slow.zHxslow: mark test as extremely slow (not run unless explicitly requested)z8xfail_on_32bit: mark test as failing on 32-bit platformsz;array_api_backends: test iterates on all array API backendsNz.timeout: mark a test for a non-default timeout)parse_durationz8fail_slow: mark a test for a non-default timeout failurezUparallel_threads_limit(n): run the given test function in parallel using `n` threads.z8thread_unsafe: mark the test function as single-threadedzCiterations(n): run the given test function `n` times in each threadposixcygwin
forkserverT)forcezskip_xp_backends(backends, reason=None, np_only=False, cpu_only=False, eager_only=False, exceptions=None): mark the desired skip configuration for the `skip_xp_backends` fixturezxfail_xp_backends(backends, reason=None, np_only=False, cpu_only=False, eager_only=False, exceptions=None): mark the desired xfail configuration for the `xfail_xp_backends` fixturezuses_xp_capabilities(status, funcs=None, reason=None): mark whether pytest markers for array API backends are  generated from the xp_capabilities entries for one or  more functions)      )addinivalue_linepytest_timeout	Exceptionpytest_fail_slowr   PARALLEL_RUN_AVAILABLEosnamesysversion_infoplatformmultiprocessingset_start_method)configr   r   s   &  H/data/cameron/venvs/s3viz/lib/python3.14/site-packages/scipy/conftest.pypytest_configurer)   )   s    I)+
IRT
IBD
IEG
I
.0 I
/1 I/1IS 	4
 "!!	" 	F	
 	Q	

 
ww'c..8S\\X=U 	((TB	 >V83  IG	II  SQ	SSs$    D, E ,EEE/.E/c                 
   V P                  R 4      pVeI    \        \        P                  P	                  RR4      4      pV'       g   \        P                  ! R4       V P                  R4      pVeP   \        P                  ! ^ 4      P                  ^8  d+   \        P                  ! RVP                  ^ ,           24       \        P                  ! 4       ;_uu_ 4        \        P                  ! R\        P                   4        ^ R	IHp R
pV'       dw    \        \        P                  R,          4      p\        P*                  ! R4      '       g:   \        P,                  ! 4       ^,          p\/        Ye,          ^4      p X! TRR7       RRR4       R#   \
         d    Rp ELfi ; i  \&         d    Rp Li ; i  \(         d     RRR4       R# i ; i  \&         d     RRR4       R# i ; i  + '       g   i     R# ; i)xslowNSCIPY_XSLOW0Fz@very slow test; set environment variable SCIPY_XSLOW=1 to run itxfail_on_32bitz&Fails on our 32-bit test platform(s): ignore)threadpool_limitsTPYTEST_XDIST_WORKER_COUNTOMP_NUM_THREADSblas)user_api)get_closest_markerintr    environget
ValueErrorpytestskipnpintpitemsizexfailargswarningscatch_warningssimplefilter PytestUnraisableExceptionWarningthreadpoolctlr0   r   KeyErrorgetenv	cpu_countmax)itemmarkvr0   HAS_THREADPOOLCTLxdist_worker_countmax_openmp_threadsthreads_per_workers   &       r(   pytest_runtest_setuprQ   k   s   ""7+D	BJJNN=#67A KK K L""#34DBGGAJ//!3=diil^LM 
	 	 	"	"h(O(OP	&7 $
 
%(4O)P%Q"
 99.//%'\\^q%8"%();)QST%U"%&86J5 
#	"  	A	$  	& %	&  ) 
#	"$ !  = 
#	"67 
#	"	"s   )F &G1F*G1 F=7G1.G1
GF'&F'*F:7G19F::G1=GG1GG1G."G1-G..G11H	function)scopeautousec              #     "   \        4       pRx  \        4       pW8w  d)   \        P                  ! RVR RVR R2\        ^ R7       R# R# 5i)z1
Check FPU mode was not changed during the test.
NzFPU mode changed from z#xz to z during the test)category
stacklevel)r   rA   warnr   )requestold_modenew_modes   &  r(   check_fpu_moder\      sQ     
 ~H	~H.xm4} M! !3	C s   A	Ac                      ^# )    r_       r(   num_parallel_threadsra      s    r`   numpyarray_api_stricttorchcupy	jax.numpy
dask.array)idmarksz2.3z'array-api-strict must be >= version 2.3z2025.12)api_versioncpuSCIPY_DEFAULT_DTYPEfloat64)defaultfloat32zUSCIPY_DEFAULT_DTYPE env var, if set, can only be either 'float64' or 'float32'. Got 'z
' instead.r/   z#cupyx.jit.rawkernel is experimentalrV   )signaljax_enable_x64jax_default_matmul_precisionjax_default_deviceallz!'--array-api-backend' must be in z; got )paramsc           	   #    "   \        V R4       \        V R4       V P                  P                  R4      f   \        P                  ! R^ R7       V P
                  p\        VP                  ^ 4      4      p\        '       dJ   \        W P
                  R7      ;_uu_ 4        \        V4      ;_uu_ 4        Vx  RRR4       RRR4       R# Vx  R#   + '       g   i     L ; i  + '       g   i     R# ; i5i)a  Run the test that uses this fixture on each available array API library.

You can select all and only the tests that use the `xp` fixture by
passing `-m array_api_backends` to pytest.

You can select where individual tests run through the `@skip_xp_backends`,
`@xfail_xp_backends`, and `@skip_xp_invalid_arg` pytest markers.

Please read: https://docs.scipy.org/doc/scipy/dev/api-dev/array_api.html#adding-tests
r;   r?   uses_xp_capabilitiesNztest uses `xp` fixture without drawing from `xp_capabilities`  but is not explicitly marked with ``pytest.mark.uses_xp_capabilities(False)``)rW   rY   xp)skip_or_xfail_xp_backendsnoder5   rA   rX   paramr   emptyr   r   r	   ry   s   & r(   rz   rz   0  s      gv. gw/ ||&&'=>F; 		
 
B	!	%B %WGG
 B   HG    HGGs6   BC8 C$4C	9C$C8C!C$$C5	/	C8zsTest involves masked arrays, object arrays, or other types that are not valid input when `SCIPY_ARRAY_API` is used.reasonc           	        \        V P                  P                  V R24      4      p\         Uu/ uF  q3. bK  	  ppV EF  p\	        VP
                  4      0 Rm,
          pV'       d   \        RV 24      h\	        VP
                  P                  R. 4      4      pV\        ,
          p\        V\        ,
          4      ;p'       d   \        RV R	\        \        4       24      hVP
                  P                  RR
4      '       db   VP
                  P                  R4      ;'       g    Rp	VP                  4        F'  w  r:VR8w  g   K  W79  g   K  V
P                  V	4       K)  	  MVP
                  P                  RR
4      '       dR   VP
                  P                  R4      ;'       g    Rp	\        V,
           F  pWC,          P                  V	4       K  	  MrVP
                  P                  RR
4      '       dQ   VP
                  P                  R4      ;'       g    Rp	\        V,
           F  pWC,          P                  V	4       K  	  \        VP                  4      ^8X  d   VP                  ^ ,          pV\        9  d   \        RV R\        \        4       24      hVP
                  P                  R4      ;'       g    RV 2p	WC,          P                  ^ V	4       R F#  pWP
                  9   g   K  \        V RV 24      h	  EK  \        VP                  4      ^8X  d   \!        VP                  ^,          \"        \%        R4      ,          4      '       d   VP                  w  r<V\        9  d   \        RV R\        \        4       24      hV'       d4   VP
                  P                  R4      p	WC,          P                  ^ V	4       R F#  pWP
                  9   g   K  \        V RV 24      h	  EK  \        VP                  4      ^8  g   EK  \        RVP                   24      h	  VP                  4        UU
u/ uF  w  r:V
'       g   K  W:^ ,          bK  	  up
p# u upi u up
pi )zlA helper for {skip,xfail}_xp_backends.

Return dict of {backend to skip/xfail: top reason to skip/xfail it}
_xp_backendscpu_onlynp_only
eager_onlyr   
exceptionszInvalid kwargs: zUnknown backend(s): z; must be a subset of Fz"do not run with non-NumPy backendsrb   zTno array-agnostic implementation or delegation available for this backend and devicez*eager checks not executed on lazy backendszUnknown backend: z; must be one of z#do not run with array API backend: z is mutually exclusive with Nz,Please specify only one backend per marker: >   r   r   r   r   r   )r   r   r   r   )listr|   iter_markersxp_known_backendssetkwargs	TypeErrorr8   r9   itemsappendxp_skip_cpu_only_backendsxp_skip_eager_only_backendslenr@   insert
isinstancebooltype)rY   skip_or_xfailr   backendreasonsmarkerinvalid_kwargsr   invalid_exceptionsr   backend_reasonskwarg	conditions   &&           r(   _backends_kwargs_from_requestr   h  s   
 7<<,,l-KLMG*;<*;w{*;G<V]]+ /I I.~.>?@@**<<=
'*;;"&z4E'E"FFF34F3G H4489J4K3LN O O ==Y..]]&&x0XX4XF,3MMO(g%'*C#**62 -< ]]z511]]&&x0 / /.  5zAA ''/ B ]]|U33]]&&x0 > >< 6CC ''/ D v{{q kk!nG// #4WI >3378I3J2K"M N N]]&&x0 A A5gY?  ##Av.LMM)$w.J7)%TUU M "z&++a.$dBS'T'T "(G// #4WI >3378I3J2K"M N N **84  ''62LMM)$w.J7)%TUU M !>v{{mL I R -4MMO ,;( (GQ'',;   U =T s   Q*Q/Q/c                V    V ^8  d   QhR\         P                  R\        R,          RR/# )   rY   r   returnN)r;   r?   )r:   FixtureRequestr   )formats   "r(   __annotate__r     s.     =% =%v'<'< =%-4_-E=%JN=%r`   c                    V R2V P                   9  d   R# \        WR7      pV P                  pVP                  V9   d8   W#P                  ,          pV'       g   Q h\	        \
        V4      pV! VR7       R# R# )aT  
Helper of the `xp` fixture.
Skip or xfail based on the ``skip_xp_backends`` or ``xfail_xp_backends`` markers.

See the "Support for the array API standard" docs page for usage examples.

Usage
-----
::
    skip_xp_backends = pytest.mark.skip_xp_backends
    xfail_xp_backends = pytest.mark.xfail_xp_backends
    ...

    @skip_xp_backends(backend, *, reason=None)
    @skip_xp_backends(backend, condition, /, *, reason='skip because condition')
    @skip_xp_backends(*, cpu_only=True, exceptions=(), reason=None)
    @skip_xp_backends(*, eager_only=True, exceptions=(), reason=None)
    @skip_xp_backends(*, np_only=True, exceptions=(), reason=None)

    @xfail_xp_backends(backend, *, reason=None)
    @xfail_xp_backends(backend, condition, /, *, reason='xfail because condition')
    @xfail_xp_backends(*, cpu_only=True, exceptions=(), reason=None)
    @xfail_xp_backends(*, eager_only=True, exceptions=(), reason=None)
    @xfail_xp_backends(*, np_only=True, exceptions=(), reason=None)

Parameters
----------
backend : str, optional
    Backend to skip/xfail, e.g. ``"torch"``.
    Mutually exclusive with ``cpu_only``, ``eager_only``, and ``np_only``.
cpu_only : bool, optional
    When ``True``, the test is skipped/xfailed on non-CPU devices,
    minus exceptions. Mutually exclusive with ``backend``.
eager_only : bool, optional
    When ``True``, the test is skipped/xfailed for lazy backends, e.g. those
    with major caveats when invoking ``__array__``, ``__bool__``, ``__float__``,
    or ``__complex__``, minus exceptions. Mutually exclusive with ``backend``.
np_only : bool, optional
    When ``True``, the test is skipped/xfailed for all backends other
    than the default NumPy backend and the exceptions.
    Mutually exclusive with ``backend``. Implies ``cpu_only`` and ``eager_only``.
reason : str, optional
    A reason for the skip/xfail. If omitted, a default reason is used.
exceptions : list[str], optional
    A list of exceptions for use with ``cpu_only``, ``eager_only``, or ``np_only``.
    This should be provided when delegation is implemented for some,
    but not all, non-CPU/non-NumPy backends.
r   N)r   r   )keywordsr   r}   __name__getattrr:   )rY   r   skip_xfail_reasonsrz   r   s   &&   r(   r{   r{     so    d %W-=-==6 
B	{{((#KK0v6V$	 )r`   c                   \        V 4      '       d   \        P                  ! RR7       \        V 4      '       d   RR.# \	        V 4      '       d   \        P                  ! RR7       \        V 4      '       d(   V P                  4       P                  4       pR V 4       # \        V P                  4       P                  4       4      R,           # )aG  Fixture that returns a list of all devices for the backend, plus None.
Used to test input->output device propagation.

Usage
-----
from scipy._lib._array_api import xp_device

def test_device(xp, devices):
    for d in devices:
        x = xp.asarray(..., device=d)
        y = f(x)
        assert xp_device(y) == xp_device(x)
zdata-apis/array-api-compat#293r   rk   Nzjax-ml/jax#26000c              3   J   "   T F  qP                   R 8w  g   K  Vx  K  	  R# 5i)metaN)r   ).0devices   & r(   	<genexpr>devices.<locals>.<genexpr>  s     FW6v0EWs   #
#N)	r
   r:   r?   r   r   r   __array_namespace_info__devicestuple)rz   r   s   & r(   r   r     s     r{{ 	<=r{{t}bzz 	./||--/779FWFF,,.6689GCCr`   z.hypothesisnondeterministic)r!   deadline
print_blobdeterministic)r!   r   r   databasederandomizesuppress_health_checkSCIPY_HYPOTHESIS_PROFILEc           
   #  .  "   \        4       pRR.pV F  p\        \        RR7      W&   K  	  . pV F  p\        \        R7      W&   K  	  ^ RIHp RR.pV F  p\        VP
                  R	R7      W&   K  	  . ROpV F  p\        \        R7      W&   K  	  R
\        \        RR7      R\        R\        R7      R\        RVP
                  R7      /pVP                  V4       \        R4      p	^ RI
Hp
 ^ RIpV
! 4       ;_uu_ 4        VP                  P                  R4       \        P                   ! 4       ;_uu_ 4        V '       d=   V P"                  V9   d,   \        P$                  ! R/ WP"                  ,          B  Rx  MYV '       d   V P"                  V	9   d   Rx  M;\        P&                  ! R\(        4       \        P$                  ! RR\        4       Rx  RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i5i)z]Temporarily turn (almost) all warnings to errors.

Filter out known warnings which we allow.
zscipy.linalg.normzscipy.ndimage.center_of_masszdivide by zero)rV   messagerp   )	integratezscipy.special.ellip_normalzscipy.special.ellip_harm_2zThe occurrence of roundoffscipy.sparse.linalg.normzExited at iterationz
linalg.rstzthe matrix subclass is not)r   rV   z	stats.rstz"The maximum number of subdivisionsscipy.signal.normalize)_fixed_default_rngNr/   errorz.*odr.*)zscipy.stats.anderson_ksampzscipy.stats.kurtosistestzscipy.stats.normaltestr   )r/   )dictRuntimeWarningDeprecationWarningscipyr   IntegrationWarningUserWarningPendingDeprecationWarningupdater   scipy._lib._utilr   rb   randomseedrA   rB   r!   filterwarningsrC   Warning)testknown_warningsdivide_by_zeror!   
deprecatedr   integration_wuser_wdctlegitr   r<   s   &           r(   warnings_errors_and_rngr   E  s       !?
 #D#'0@$BN  #
 
D#'1C#DN   	$55
 "D#'1M1M0L$NN  "
HD#'#=N  
 'k3HI979A'::<

 	c" ,- 	8!!IINN4 ((**DII7++Ryy8QRdii50))'7;++HiAST + "!** "!!s>   DH9H>AG.	AG.	H$
H.G>9HH		HzND_regular_grid.rstzReST parser limitationzextrapolation_examples.rstzsampling_pinv.rstz__cinit__ unexpected argumentzsampling_srou.rstznan in scalar_powerzprobability_distributions.rstzintegration warningzintegrate.nquad(func,zio.rstz.text(>   re   rb   rd   rc   rf   rg   )1trueru   r   )zscipy.linalg.LinAlgErrorzscipy.fftpack.fftshiftzscipy.fftpack.ifftshiftzscipy.fftpack.fftfreqzscipy.special.sinczscipy.optimize.show_optionsr   r   z$scipy.io.matlab.MatlabObject.stridesz"scipy.io.matlab.MatlabObject.dtypez"scipy.io.matlab.MatlabOpaque.dtypez$scipy.io.matlab.MatlabOpaque.stridesz&scipy.io.matlab.MatlabFunction.stridesz$scipy.io.matlab.MatlabFunction.dtypezscipy.interpolate.lagrangez/scipy.interpolate.approximate_taylor_polynomialzscipy.interpolate.padezscipy.spatial.tsearchz"scipy.spatial.minkowski_distance_pz scipy.spatial.minkowski_distancezscipy.spatial.distance_matrix)zscipy.stats.distributionszscipy.optimize.cython_optimizez
scipy.testzscipy.show_configzscipy/special/_precomputez#scipy/interpolate/_interpnd_info.pyz'scipy/interpolate/_rbfinterp_pythran.pyzscipy/_build_utils/tempita.pyzscipy/_externalzscipy/_lib/array_api_compatzscipy/_lib/highszscipy/_lib/unuranzscipy/_lib/_gcutils.pyzscipy/_lib/doccer.pyzscipy/_lib/_uarrayz+scipy/linalg/_cython_signature_generator.pyzscipy/linalg/_generate_pyx.pyzscipy/linalg/_linalg_pythran.pyz$scipy/linalg/_matfuncs_sqrtm_triu.pyz1scipy/ndimage/utils/generate_label_testvectors.pyz scipy/optimize/_group_columns.pyz$scipy/optimize/_max_len_seq_inner.pyz"scipy/signal/_max_len_seq_inner.pyz%scipy/sparse/_generate_sparsetools.pyzscipy/special/_generate_pyx.pyzscipy/stats/_stats_pythran.py)zoctave_a.matzoctave_cells.matzoctave_struct.mat)tjsonr%   r    r"   rA   tempfile
contextlibr   typingr   rb   r<   r:   
hypothesishypothesis_availableImportErrorscipy._lib._fpumoder   scipy._lib._array_apir   r   r   r	   r
   r   r   r   scipy._lib._testutilsr   'scipy._external.array_api_extra.testingr   !scipy._external.packaging_versionr   scipy_doctest.conftestr   
HAVE_SCPDTModuleNotFoundErrorpytest_run_parallelr   r   r)   rQ   fixturer\   ra   r   r}   rK   array_api_backendsxp_available_backendsr   r   r   rc   r   parse__version__Versionset_array_api_strict_flagsrd   set_default_deviceaddrG   rn   set_default_dtyperm   r9   re   r   FutureWarningcupyx.scipyrq   	jax.numpyjaxthread_unsafer'   r   r   
dask.arrayarraydarh   xp_available_backend_idsr   strlowerloadsSCIPY_ARRAY_API_msgrz   skipifskip_xp_invalid_argr   r{   configurationset_hypothesis_home_dirpathjoin
gettempdirsettingsregister_profiler   HealthCheckr7   r8   r   load_profiler   user_context_mgrskiplistpytest_extra_ignorepytest_extra_xfail
pseudocodelocal_resourcesstrict_check	stopwords)pr}   s   00r(   <module>r     s     	 
   %   ! -   7 K 50J#!
?CD.b j$/C 0C ^^ 
#  LLv{{'E'EF   E !e ?$$LL).@%{{==?	@ ==)5569OOGHH33!	
$$LL7++002	3 	  .5 %))'2 ))19Ei##EMM2	!%%,IZ9  " 	$$LL&++002	3 	"%%f- 	;m	
 	'$$LL{;;11;;,,./	0 	

*D1 	

8)D

.L0I!0LM5 %))+6 	$''4$$LL;;11;;,,./	0 	$''5 /DD.C.CD'*;;;;; 	?C((!!#+??tzz/:;w&"::::236:J9KM o% $9%#8%88// #8%! ,-/ ./d kk((I ) K 
R j=%@ "D "DJ  44
X((*M: (($4 )  (($4":#9#9: )   "zz~~.H.= ?$$%=>  I IV "9I  I:%I!@ 	7$&><2')>$I   789I 
!I "I H%C e  ! !  J  #"#B  *  $  .  (    E%s   Y !Y *Y% 0BY5 9BZ Z ,A)Z C0Z A%Z- 0Z; [ [ 	YY	Y"!Y"%	Y21Y25Z ?Z ZZZZZ*)Z*-Z87Z8