+
    Y°³j3P  ã                   ó¦  € ^ RI t ^ RIt^ RIt^ RIt^RIHt ^ RIt^ RIt^ RIt^ RI	t	^RIH
t
HtHtHtHt . R#Ot] P                   R]R$,          3,          t] P                   ]]].]]]3,          3,          tR tR tR tR	 tR
 t]P                  ! ]]4       ]P                  ! ]P                  ]4       ]P                  ! ]]4       ]P                  ! ]]4       R t]P6                  R 4       t]P6                  R 4       tR tR%R R lltR&R lt R t!R t"R&RR/R llt#R t$R'R lt% ! R R4      t&R t'R t(R t)R t*RRR R/R! lt+RRR R/R" lt,R# )(é    N)Ú_uarray)ÚBackendNotImplementedErrorÚ	_FunctionÚ_SkipBackendContextÚ_SetBackendContextÚ_BackendStateÚDispatchable.c                 óö   € ^ RI p VP                  V 4      pVP                  R4      pTpV F  p\        WV4      pK  	  Ve   \        P
                  ! WR4      pV#   \        \        3 d   p^ RIH	p Y‡hRp?ii ; i)r   NÚ.)ÚUnpicklingError)
Ú	importlibÚimport_moduleÚsplitÚgetattrÚtypesÚ
MethodTypeÚImportErrorÚAttributeErrorÚpickler   )	Úmod_nameÚqnameÚself_r   ÚmoduleÚfuncÚqÚer   s	   &&&      Ú\/home/luca/screen-checking/.venv/lib/python3.14/site-packages/scipy/_lib/_uarray/_backend.pyÚunpickle_functionr   1   s|   € Ûð%Ø×(Ñ(¨Ó2ˆØ—‘˜CÓ ˆØˆÛˆAÜ˜4Ó#ŠDñ ð ÒÜ×#Ò# DÓ0ˆDàˆøÜœÐ(ô %Ý*àÐ$ûð%ús   †AA ÁA8Á+A3Á3A8c                 óú   € \        V R R4      p\        V RR4      p\        V RR4      p \        WV4      pW@Jd   \        P                  ! RV  RV 24      h\        WV33#   \        P                   d    Rp LDi ; i)Ú
__module__NÚ__qualname__Ú__self__zCan't pickle z: it's not the same object as )r   r   r   r   ÚPicklingError)r   r   r   r   Útests   &    r   Úpickle_functionr%   E   s—   € Ü�t˜\¨4Ó0€HÜ�D˜.¨$Ó/€EÜ�D˜* dÓ+€EðÜ  °%Ó8ˆð ÓÜ×"Ò"Ø˜D˜6Ð!?À¸vÐFó
ð 	
ô ˜x°Ð6Ð6Ð6øô ×!Ñ!ô ØŠðús   ©A  Á A:Á9A:c                 óV   € \         P                  P                  V P                  4       3# ©N)r   r   Ú	_unpickleÚ_pickle)Ústates   &r   Úpickle_stater+   W   s   € Ü× Ñ ×*Ñ*¨E¯M©M«OÐ;Ð;ó    c                 ó.   € \         V P                  4       3# r'   )r   r)   ©Úctxs   &r   Úpickle_set_backend_contextr0   [   s   € Ü˜sŸ{™{›}Ð,Ð,r,   c                 ó.   € \         V P                  4       3# r'   )r   r)   r.   s   &r   Úpickle_skip_backend_contextr2   _   s   € Ü §¡£Ð-Ð-r,   c                 ó,   € \         P                  ! 4       # )zÓ
Returns an opaque object containing the current state of all the backends.

Can be used for synchronization between threads/processes.

See Also
--------
set_state
    Sets the state returned by this function.
)r   Ú	get_state© r,   r   r4   r4   i   s   € ô ×ÒÓÐr,   c               #  ó†   "  € \        \        4       4      ;_uu_ 4        Rx € RRR4       R#   + '       g   i     R# ; i5i)zÊ
Returns a context manager that resets all state once exited.

See Also
--------
set_state
    Context manager that sets the backend state.
get_state
    Gets a state to be set by this context manager.
N)Ú	set_stater4   r5   r,   r   Úreset_stater8   w   s%   é € ô 
”9“;×	Õ	Û÷ 
 ×	×	Ò	üs   ‚Až-£
A­>	¸	Ac              #  ó¾   "  € \        4       p\        P                  ! V 4        Rx € \        P                  ! VR4       R#   \        P                  ! TR4       i ; i5i)z­
A context manager that sets the state of the backends to one returned by :obj:`get_state`.

See Also
--------
get_state
    Gets a state to be set by this context manager.
NT)r4   r   r7   )r*   Ú	old_states   & r   r7   r7   ‡   sD   é € ô “€IÜ×Ò�eÔð+Ûä×Ò˜) TÖ*øŒ×Ò˜) TÕ*üs   ‚!A¤A ¨AÁAÁAc                 ó   a a€ V V3R lpV# )aM  
Creates a decorator for generating multimethods.

This function creates a decorator that can be used with an argument
extractor in order to generate a multimethod. Other than for the
argument extractor, all arguments are passed on to
:obj:`generate_multimethod`.

See Also
--------
generate_multimethod
    Generates a multimethod.
c                 ó"   <€ \        V .SO5/ SB # r'   )Úgenerate_multimethod)ÚaÚargsÚkwargss   &€€r   ÚwrapperÚ#create_multimethod.<locals>.wrapper¨   s   ø€ Ü# AÐ7¨Ò7°Ñ7Ð7r,   r5   )r?   r@   rA   s   jl r   Úcreate_multimethodrC   ™   s   ù€ ö8ð €Nr,   c          	      ój   € V ^8„  d   QhR\         R\        R\        R\        P                  R,          /# )é   Úargument_extractorÚargument_replacerÚdomainÚdefaultN)ÚArgumentExtractorTypeÚArgumentReplacerTypeÚstrÚtypingÚCallable)Úformats   "r   Ú__annotate__rP   ®   sE   € ÷ KAñ KAÜ-ðKAä+ðKAô ðKAô �_‰_˜tÕ#ñ	KAr,   c                ój   € \        V 4      w  rEp\        V VVVVV4      p\        P                  ! Wp4      # )a#  
Generates a multimethod.

Parameters
----------
argument_extractor : ArgumentExtractorType
    A callable which extracts the dispatchable arguments. Extracted arguments
    should be marked by the :obj:`Dispatchable` class. It has the same signature
    as the desired multimethod.
argument_replacer : ArgumentReplacerType
    A callable with the signature (args, kwargs, dispatchables), which should also
    return an (args, kwargs) pair with the dispatchables replaced inside the
    args/kwargs.
domain : str
    A string value indicating the domain of this multimethod.
default: Optional[Callable], optional
    The default implementation of this multimethod, where ``None`` (the default)
    specifies there is no default implementation.

Examples
--------
In this example, ``a`` is to be dispatched over, so we return it, while marking it
as an ``int``.
The trailing comma is needed because the args have to be returned as an iterable.

>>> def override_me(a, b):
...   return Dispatchable(a, int),

Next, we define the argument replacer that replaces the dispatchables inside
args/kwargs with the supplied ones.

>>> def override_replacer(args, kwargs, dispatchables):
...     return (dispatchables[0], args[1]), {}

Next, we define the multimethod.

>>> overridden_me = generate_multimethod(
...     override_me, override_replacer, "ua_examples"
... )

Notice that there's no default implementation, unless you supply one.

>>> overridden_me(1, "a")
Traceback (most recent call last):
    ...
uarray.BackendNotImplementedError: ...

>>> overridden_me2 = generate_multimethod(
...     override_me, override_replacer, "ua_examples", default=lambda x, y: (x, y)
... )
>>> overridden_me2(1, "a")
(1, 'a')

See Also
--------
uarray
    See the module documentation for how to override the method by creating
    backends.
)Úget_defaultsr   Ú	functoolsÚupdate_wrapper)rF   rG   rH   rI   Úkw_defaultsÚarg_defaultsÚoptsÚua_funcs   &&&&    r   r=   r=   ®   sD   € ôB '3Ð3EÓ&FÑ#€K˜tÜØØØØØØó€Gô ×#Ò# GÓ@Ð@r,   Fc                óà   € \         P                  ! 4       p V P                  VRW3,          #   \         d    / T n         M\         d     Mi ; i\        YT4      pY@P                  TRY3&   T# )a”  
A context manager that sets the preferred backend.

Parameters
----------
backend
    The backend to set.
coerce
    Whether or not to coerce to a specific backend's types. Implies ``only``.
only
    Whether or not this should be the last backend to try.

See Also
--------
skip_backend: A context manager that allows skipping of backends.
set_global_backend: Set a single, global backend for a domain.
Úset)Ú	threadingÚget_native_idÚ__ua_cache__r   ÚKeyErrorr   )ÚbackendÚcoerceÚonlyÚtidr/   s   &&&  r   Úset_backendrc   ü   sy   € ô$ ×
!Ò
!Ó
#€CðØ×#Ñ# C¨°Ð$<Õ=Ð=øÜô "Ø!ˆÖÜô Ùðúô ˜W¨dÓ
3€CØ58×Ñ˜˜e VÐ1Ñ2Ø€Js   —- ­AÁAÁ
AÁAc                óÚ   € \         P                  ! 4       p V P                  VR3,          #   \         d    / T n         M\         d     Mi ; i\        T 4      pY P                  TR3&   T# )a‡  
A context manager that allows one to skip a given backend from processing
entirely. This allows one to use another backend's code in a library that
is also a consumer of the same backend.

Parameters
----------
backend
    The backend to skip.

See Also
--------
set_backend: A context manager that allows setting of backends.
set_global_backend: Set a single, global backend for a domain.
Úskip)r[   r\   r]   r   r^   r   )r_   rb   r/   s   &  r   Úskip_backendrf     sq   € ô  ×
!Ò
!Ó
#€CðØ×#Ñ# C¨ KÕ0Ð0øÜô "Ø!ˆÖÜô Ùðúô ˜gÓ
&€CØ(+×Ñ˜˜f˜Ñ%Ø€Js   —, ¬AÁ AÁ	AÁAc                 óö  € \         P                  ! V 4      p/ p. p\        4       pVP                  P	                  4        Fª  w  rVVP
                  \         P                  P                  Jd   VP
                  W%&   VP                  \         P                  P                  \         P                  P                  39   d   VP                  VP
                  4       VP                  V4       K¬  	  V\        V4      V3# r'   )ÚinspectÚ	signaturerZ   Ú
parametersÚitemsrI   Ú	ParameterÚemptyÚkindÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDÚappendÚaddÚtuple)ÚfÚsigrU   rV   rW   ÚkÚvs   &      r   rR   rR   8  sÁ   € Ü
×
Ò
˜AÓ
€CØ€KØ€LÜ‹5€DØ—‘×$Ñ$Ö&‰ˆØ�9‰9œG×-Ñ-×3Ñ3Ó3ØŸY™YˆK‰NØ�6‰6Ü×Ñ×-Ñ-Ü×Ñ×3Ñ3ð
ô 
ð ×Ñ §	¡	Ô*Ø�‰�Žñ 'ð œ˜lÓ+¨TÐ1Ð1r,   Útry_lastc               ó4   € \         P                  ! WW#4       R# )aý  
This utility method replaces the default backend for permanent use. It
will be tried in the list of backends automatically, unless the
``only`` flag is set on a backend. This will be the first tried
backend outside the :obj:`set_backend` context manager.

Note that this method is not thread-safe.

.. warning::
    We caution library authors against using this function in
    their code. We do *not* support this use-case. This function
    is meant to be used only by users themselves, or by a reference
    implementation, if one exists.

Parameters
----------
backend
    The backend to register.
coerce : bool
    Whether to coerce input types when trying this backend.
only : bool
    If ``True``, no more backends will be tried if this fails.
    Implied by ``coerce=True``.
try_last : bool
    If ``True``, the global backend is tried after registered backends.

See Also
--------
set_backend: A context manager that allows setting of backends.
skip_backend: A context manager that allows skipping of backends.
N)r   Úset_global_backend)r_   r`   ra   rx   s   &&&$r   rz   rz   J  s   € ô@ ×Ò˜w°Ö?r,   c                ó2   € \         P                  ! V 4       R# )a  
This utility method sets registers backend for permanent use. It
will be tried in the list of backends automatically, unless the
``only`` flag is set on a backend.

Note that this method is not thread-safe.

Parameters
----------
backend
    The backend to register.
N)r   Úregister_backend)r_   s   &r   r|   r|   m  s   € ô ×Ò˜WÖ%r,   Tc                ó4   € \         P                  ! WV4       R# )a  
This utility method clears registered backends.

.. warning::
    We caution library authors against using this function in
    their code. We do *not* support this use-case. This function
    is meant to be used only by users themselves.

.. warning::
    Do NOT use this method inside a multimethod call, or the
    program is likely to crash.

Parameters
----------
domain : Optional[str]
    The domain for which to de-register backends. ``None`` means
    de-register for all domains.
registered : bool
    Whether or not to clear registered backends. See :obj:`register_backend`.
globals : bool
    Whether or not to clear global backends. See :obj:`set_global_backend`.

See Also
--------
register_backend : Register a backend globally.
set_global_backend : Set a global backend.
N)r   Úclear_backends)rH   Ú
registeredÚglobalss   &&&r   r~   r~   }  s   € ô8 ×Ò˜6¨wÖ7r,   c                   ó>   a € ] tR tRt o RtRR ltR tR t]tRt	V t
R# )	r	   iœ  a±  
A utility class which marks an argument with a specific dispatch type.


Attributes
----------
value
    The value of the Dispatchable.

type
    The type of the Dispatchable.

Examples
--------
>>> x = Dispatchable(1, str)
>>> x
<Dispatchable: type=<class 'str'>, value=1>

See Also
--------
all_of_type
    Marks all unmarked parameters of a function.

mark_as
    Allows one to create a utility function to mark as a given type.
c                ó*   € Wn         W n        W0n        R # r'   )ÚvalueÚtypeÚ	coercible)Úselfrƒ   Údispatch_typer…   s   &&&&r   Ú__init__ÚDispatchable.__init__¸  s   € ØŒ
Ø!Œ	Ø"Žr,   c                ó@   € V P                   V P                  3V,          # r'   )r„   rƒ   )r†   Úindexs   &&r   Ú__getitem__ÚDispatchable.__getitem__½  s   € Ø—	‘	˜4Ÿ:™:Ð& uÕ-Ð-r,   c                ól   € R \        V 4      P                   RV P                   : RV P                  : R2# )Ú<z: type=z, value=Ú>)r„   Ú__name__rƒ   )r†   s   &r   Ú__str__ÚDispatchable.__str__À  s1   € Ø”4˜“:×&Ñ&Ð' w¨t¯y©y©m¸8ÀDÇJÁJÁ>ÐQRÐSÐSr,   )r…   r„   rƒ   N)T)r‘   r    r!   Ú__firstlineno__Ú__doc__rˆ   rŒ   r’   Ú__repr__Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r	   r	   œ  s!   ø‡ € ñô6#ò
.òTð †Hr,   c                ó:   € \         P                  ! \        V R7      # )z­
Creates a utility function to mark something as a specific type.

Examples
--------
>>> mark_int = mark_as(int)
>>> mark_int(1)
<Dispatchable: type=<class 'int'>, value=1>
©r‡   )rS   Úpartialr	   r›   s   &r   Úmark_asr�   Æ  s   € ô ×Òœ\¸ÔGÐGr,   c                ó   a € V 3R lpV# )zü
Marks all unmarked arguments as a given type.

Examples
--------
>>> @all_of_type(str)
... def f(a, b):
...     return a, Dispatchable(b, int)
>>> f('a', 1)
(<Dispatchable: type=<class 'str'>, value='a'>,
 <Dispatchable: type=<class 'int'>, value=1>)
c                 óJ   <a € \         P                  ! S 4      VV 3R  l4       pV# )c                  óx   <€ S! V / VB p\         ;QJ d    . V3R  lV 4       F  NK  	  5# ! V3R  lV 4       4      # )c              3   ól   <"  € T F)  p\        V\        4      '       g   \        VS4      MTx € K+  	  R # 5ir'   ©Ú
isinstancer	   )Ú.0ÚargÚarg_types   & €r   Ú	<genexpr>Ú<all_of_type.<locals>.outer.<locals>.inner.<locals>.<genexpr>å  s:   øé € ð ñ *�Cô " #¤|×4Ò4ô ˜S (Ô+àôó *ùó   ƒ14)rs   )r?   r@   Úextracted_argsr¦   r   s   *, €€r   ÚinnerÚ)all_of_type.<locals>.outer.<locals>.innerâ  sH   ø€ á! 4Ð2¨6Ñ2ˆNß”5ô ñ *ó	—5ð �5ô ñ *ó	ó ð r,   ©rS   Úwraps)r   r«   r¦   s   f €r   ÚouterÚall_of_type.<locals>.outerá  s%   ù€ Ü	�Š˜Ó	õ	ó 
ð	ð ˆr,   r5   )r¦   r¯   s   f r   Úall_of_typer±   Ó  s   ø€ õð €Lr,   c                óF   a € \         P                  ! S 4      V 3R l4       pV# )úÍ
Wraps a ``__ua_convert__`` defined for a single element to all elements.
If any of them return ``NotImplemented``, the operation is assumed to be
undefined.

Accepts a signature of (value, type, coerce).
c                 óÈ   <€ . pV  FX  pS! VP                   VP                  T;'       d    VP                  4      pV\        J d	   \        u # VP	                  V4       KZ  	  V# r'   ©rƒ   r„   r…   ÚNotImplementedrq   )Údispatchablesr`   Ú	convertedÚdÚcÚconvert_singles   &&   €r   Ú__ua_convert__Ú-wrap_single_convertor.<locals>.__ua_convert__ú  sX   ø€ àˆ	ÛˆAÙ˜qŸw™w¨¯©°×0FÐ0F¸1¿;¹;ÓGˆAà”NÓ"Ü%Ò%à×Ñ˜QÖñ ð Ðr,   r­   ©r»   r¼   s   f r   Úwrap_single_convertorr¿   ñ  ó(   ø€ ô ‡_‚_�^Ó$ô
ó %ð
ð Ðr,   c                óF   a € \         P                  ! S 4      V 3R l4       pV# )r³   c                 óÈ   <€ . pV FX  pS! YP                   VP                  T;'       d    VP                  4      pV\        J d	   \        u # VP	                  V4       KZ  	  V# r'   rµ   )r†   r·   r`   r¸   r¹   rº   r»   s   &&&   €r   r¼   Ú6wrap_single_convertor_instance.<locals>.__ua_convert__  sX   ø€ àˆ	ÛˆAÙ˜t§W¡W¨a¯f©f°f×6LÐ6LÀÇÁÓMˆAà”NÓ"Ü%Ò%à×Ñ˜QÖñ ð Ðr,   r­   r¾   s   f r   Úwrap_single_convertor_instancerÄ   
  rÀ   r,   ra   r`   c               ód   € \        WV4      3p\        P                  ! W%V4      p\        WdVR7      # )aJ  Set the backend to the first active backend that supports ``value``

This is useful for functions that call multimethods without any dispatchable
arguments. You can use :func:`determine_backend` to ensure the same backend
is used everywhere in a block of multimethod calls.

Parameters
----------
value
    The value being tested
dispatch_type
    The dispatch type associated with ``value``, aka
    ":ref:`marking <MarkingGlossary>`".
domain: string
    The domain to query for backends and set.
coerce: bool
    Whether or not to allow coercion to the backend's types. Implies ``only``.
only: bool
    Whether or not this should be the last backend to try.

See Also
--------
set_backend: For when you know which backend to set

Notes
-----

Support is determined by the ``__ua_convert__`` protocol. Backends not
supporting the type must return ``NotImplemented`` from their
``__ua_convert__`` if they don't support input of that type.

Examples
--------

Suppose we have two backends ``BackendA`` and ``BackendB`` each supporting
different types, ``TypeA`` and ``TypeB``. Neither supporting the other type:

>>> with ua.set_backend(ex.BackendA):
...     ex.call_multimethod(ex.TypeB(), ex.TypeB())
Traceback (most recent call last):
    ...
uarray.BackendNotImplementedError: ...

Now consider a multimethod that creates a new object of ``TypeA``, or
``TypeB`` depending on the active backend.

>>> with ua.set_backend(ex.BackendA), ua.set_backend(ex.BackendB):
...         res = ex.creation_multimethod()
...         ex.call_multimethod(res, ex.TypeA())
Traceback (most recent call last):
    ...
uarray.BackendNotImplementedError: ...

``res`` is an object of ``TypeB`` because ``BackendB`` is set in the
innermost with statement. So, ``call_multimethod`` fails since the types
don't match.

Instead, we need to first find a backend suitable for all of our objects.

>>> with ua.set_backend(ex.BackendA), ua.set_backend(ex.BackendB):
...     x = ex.TypeA()
...     with ua.determine_backend(x, "mark", domain="ua_examples"):
...         res = ex.creation_multimethod()
...         ex.call_multimethod(res, x)
TypeA

©r`   ra   )r	   r   Údetermine_backendrc   )rƒ   r‡   rH   ra   r`   r·   r_   s   &&$$$  r   rÇ   rÇ   #  s3   € ôH " %¸Ó?ÐA€MÜ×'Ò'¨¸vÓF€Gä�w°DÔ9Ð9r,   c               ó¾  a€ RV9   dE   VP                  R4      o\        ;QJ d    . V3R lV  4       F  NK  	  5M! V3R lV  4       4      p MP\        V 4      p \        ;QJ d    R V  4       F  '       d   K   RM	  RM! R V  4       4      '       g   \        R4      h\	        V4      ^ 8w  d   \        RV 24      h\
        P                  ! WV4      p\        WSVR7      # )	a	  Set a backend supporting all ``dispatchables``

This is useful for functions that call multimethods without any dispatchable
arguments. You can use :func:`determine_backend_multi` to ensure the same
backend is used everywhere in a block of multimethod calls involving
multiple arrays.

Parameters
----------
dispatchables: Sequence[Union[uarray.Dispatchable, Any]]
    The dispatchables that must be supported
domain: string
    The domain to query for backends and set.
coerce: bool
    Whether or not to allow coercion to the backend's types. Implies ``only``.
only: bool
    Whether or not this should be the last backend to try.
dispatch_type: Optional[Any]
    The default dispatch type associated with ``dispatchables``, aka
    ":ref:`marking <MarkingGlossary>`".

See Also
--------
determine_backend: For a single dispatch value
set_backend: For when you know which backend to set

Notes
-----

Support is determined by the ``__ua_convert__`` protocol. Backends not
supporting the type must return ``NotImplemented`` from their
``__ua_convert__`` if they don't support input of that type.

Examples
--------

:func:`determine_backend` allows the backend to be set from a single
object. :func:`determine_backend_multi` allows multiple objects to be
checked simultaneously for support in the backend. Suppose we have a
``BackendAB`` which supports ``TypeA`` and ``TypeB`` in the same call,
and a ``BackendBC`` that doesn't support ``TypeA``.

>>> with ua.set_backend(ex.BackendAB), ua.set_backend(ex.BackendBC):
...     a, b = ex.TypeA(), ex.TypeB()
...     with ua.determine_backend_multi(
...         [ua.Dispatchable(a, "mark"), ua.Dispatchable(b, "mark")],
...         domain="ua_examples"
...     ):
...         res = ex.creation_multimethod()
...         ex.call_multimethod(res, a, b)
TypeA

This won't call ``BackendBC`` because it doesn't support ``TypeA``.

We can also use leave out the ``ua.Dispatchable`` if we specify the
default ``dispatch_type`` for the ``dispatchables`` argument.

>>> with ua.set_backend(ex.BackendAB), ua.set_backend(ex.BackendBC):
...     a, b = ex.TypeA(), ex.TypeB()
...     with ua.determine_backend_multi(
...         [a, b], dispatch_type="mark", domain="ua_examples"
...     ):
...         res = ex.creation_multimethod()
...         ex.call_multimethod(res, a, b)
TypeA

r‡   c              3   ól   <"  € T F)  p\        V\        4      '       d   TM\        VS4      x € K+  	  R # 5ir'   r¢   )r¤   r¹   Ú	disp_types   & €r   r§   Ú*determine_backend_multi.<locals>.<genexpr>µ  s0   øé € ð 
á"�ô ˜Aœ|×,Ò,‰A´,¸qÀ)Ó2LÔLÛ"ùr©   c              3   óB   "  € T F  p\        V\        4      x € K  	  R # 5ir'   r¢   )r¤   r¹   s   & r   r§   rË   »  s   é € ÐF¹°1”:˜a¤×.Ð.»ùs   ‚FTz6dispatchables must be instances of uarray.Dispatchablez'Received unexpected keyword arguments: rÆ   )Úpoprs   ÚallÚ	TypeErrorÚlenr   rÇ   rc   )r·   rH   ra   r`   r@   r_   rÊ   s   &$$$, @r   Údetermine_backend_multirÑ   m  s½   ø€ ðL ˜&Ô Ø—J‘J˜Ó/ˆ	ßœô 
á"ó
Ÿ™ô 
á"ó
ó 
‰ô
 ˜mÓ,ˆß‹sÑF¹ÓF�s�sŠsÑF¹ÓF×FÒFÜÐTÓUÐUä
ˆ6ƒ{�aÔÜÐAÀ&ÀÐJÓKÐKä×'Ò'¨¸vÓF€Gä�w°DÔ9Ð9r,   )rc   rz   rf   r|   rÇ   rÑ   r~   rC   r=   r   r   r	   r¿   rÄ   r±   r�   r7   r4   r8   r   r   r   )r	   .r'   )FF)TF)-rM   r   rh   rS   Ú r   Úcopyregr   Ú
contextlibr[   r   r   r   r   r   Ú__all__rN   rs   rJ   ÚdictrK   r   r%   r+   r0   r2   r4   Úcontextmanagerr8   r7   rC   r=   rc   rf   rR   rz   r|   r~   r	   r�   r±   r¿   rÄ   rÇ   rÑ   r5   r,   r   Ú<module>rØ      sŽ  ðÛ Û Û Û Ý Û Û Û Û ÷õ ò€ð2 Ÿ™¨¨UÐ3FÕ-GÐ(GÕHÐ Ø—‘Ø
ˆD�%Ð˜%  t Õ,Ð,õÐ ò%ò(7ò$<ò-ò.ð ‡‚ˆy˜/Ô *Ø ‡‚ˆw×$Ñ$ lÔ 3Ø ‡‚Ð!Ð#=Ô >Ø ‡‚Ð"Ð$?Ô @òð ×Ññó ðð ×Ññ+ó ð+ò"÷*KAô\ò>ò:2ñ$ @Àeõ  @òF&ô 8÷>'ñ 'òT
Hòò<ò2ð2G:¸Dð G:Èô G:ðTV:Ø#'ðV:Ø05öV:r,   