ó
    Š*£hÂ/  ã                  óô   • % S SK Jr  S SKJr  S SKrSSKJrJrJrJ	r	  SSK
Jr  S SKr " S S\5      rS	 r " S
 S5      rS r\" 5       rS\S'   S/rS r\4S jr " S S5      rS r " S S\5      rS rS rg)é    )Úannotations)ÚwarnNé   )ÚorderingÚambiguitiesÚsuper_signatureÚAmbiguityWarning)Úexpand_tuplesc                  ó   • \ rS rSrSrSrg)ÚMDNotImplementedErroré
   z,A NotImplementedError for multiple dispatch © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/multipledispatch/dispatcher.pyr   r   
   s   † Ü7r   r   c                óL   • [        [        U R                  U5      [        5        g)a  Raise warning when ambiguity is detected

Parameters
----------
dispatcher : Dispatcher
    The dispatcher on which the ambiguity was detected
ambiguities : set
    Set of type signature pairs that are ambiguous within this dispatcher

See Also:
    Dispatcher.add
    warning_text
N)r   Úwarning_textÚnamer	   )Ú
dispatcherr   s     r   Úambiguity_warnr      s   € ô 	Œ�j—o‘o {Ó	3Ô5EÕFr   c                  ó$   • \ rS rSrSrS rS rSrg)ÚRaiseNotImplementedErroré!   z*Raise ``NotImplementedError`` when called.c                ó   • Xl         g ©N©r   )Úselfr   s     r   Ú__init__Ú!RaiseNotImplementedError.__init__$   s   € Ø$�r   c                óˆ   • [        S U 5       5      n[        SU R                  R                  < S[	        U5      < S35      e)Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr    )Útype)Ú.0Úas     r   Ú	<genexpr>Ú4RaiseNotImplementedError.__call__.<locals>.<genexpr>(   s   é € Ð,¢t !”d˜1—g�g¢tùó   ‚zAmbiguous signature for ú: <Ú>)ÚtupleÚNotImplementedErrorr   r   Ústr_signature)r"   ÚargsÚkwargsÚtypess       r   Ú__call__Ú!RaiseNotImplementedError.__call__'   s8   € ÜÑ,¡tÓ,Ó,ˆÝ!à�O‰O× Ô ¤-°Ö"6ð
óð 	r   r!   N)r   r   r   r   r   r#   r5   r   r   r   r   r   r   !   s   † Ù4ò%õr   r   c                ó®   • U HO  n[        [        U5      5      n[        [        U5      5      S:X  a  M1  U R	                  U[        U 5      [        S9  MQ     g)a‡  
If super signature for ambiguous types is duplicate types, ignore it.
Else, register instance of ``RaiseNotImplementedError`` for ambiguous types.

Parameters
----------
dispatcher : Dispatcher
    The dispatcher on which the ambiguity was detected
ambiguities : set
    Set of type signature pairs that are ambiguous within this dispatcher

See Also:
    Dispatcher.add
    ambiguity_warn
r   ©Úon_ambiguityN)r/   r   ÚlenÚsetÚaddr   Ú#ambiguity_register_error_ignore_dup)r   r   ÚambÚ	signatures       r   r=   r=   .   sP   € ó  ˆÜœ/¨#Ó.Ó/ˆ	ÜŒs�9‹~Ó !Ó#ÙØ�‰ØÔ/°
Ó;Ü<ð 	ó 	
ò	 r   zset[Dispatcher]Ú_unresolved_dispatchersTc                 ó   • S[         S'   g )NFr   )Ú_resolver   r   r   Úhalt_orderingrC   N   s   € Ø„HˆQ‚Kr   c                óŽ   • S[         S'   [        (       a1  [        R                  5       nUR                  U S9  [        (       a  M0  g g )NTr   r8   )rB   r@   ÚpopÚreorder)r9   r   s     r   Úrestart_orderingrG   R   s8   € Ø„HˆQ�Kß
!Ò
!Ü,×0Ñ0Ó2ˆ
Ø×Ñ¨ÐÑ5÷ "Ö
!r   c                  óº   • \ rS rSrSrSrSS jrS r\S 5       r	\S 5       r
\4S	 jr\4S
 jrS rS r\rS rS rS rS rS r\S 5       rS rS rS rS rSrg)Ú
DispatcheréY   a-  Dispatch methods based on type signature

Use ``dispatch`` to add implementations

Examples
--------

>>> from sympy.multipledispatch import dispatch
>>> @dispatch(int)
... def f(x):
...     return x + 1

>>> @dispatch(float)
... def f(x): # noqa: F811
...     return x - 1

>>> f(3)
4
>>> f(3.0)
2.0
)r   r   Úfuncsr   Ú_cacheÚdocNc                óV   • U=U l         U l        0 U l        0 U l        / U l        X l        g r    )r   r   rK   rL   r   rM   )r"   r   rM   s      r   r#   ÚDispatcher.__init__q   s*   € Ø$(Ð(ˆŒ	�D”MØˆŒ
ØˆŒØˆŒØ�r   c                ó   ^ ^^• UU U4S jnU$ )aŠ  Register dispatcher with new implementation

>>> from sympy.multipledispatch.dispatcher import Dispatcher
>>> f = Dispatcher('f')
>>> @f.register(int)
... def inc(x):
...     return x + 1

>>> @f.register(float)
... def dec(x):
...     return x - 1

>>> @f.register(list)
... @f.register(tuple)
... def reverse(x):
...     return x[::-1]

>>> f(1)
2

>>> f(1.0)
0.0

>>> f([1, 2, 3])
[3, 2, 1]
c                ó0   >• TR                   " TU 40 TD6  U $ r    )r<   )Úfuncr3   r"   r4   s    €€€r   Ú_ÚDispatcher.register.<locals>._“   s   ø€ Ø�HŠH�U˜DÑ+ FÒ+ØˆKr   r   )r"   r4   r3   rS   s   ``` r   ÚregisterÚDispatcher.registerx   s   ú€ ÷6	ð ˆr   c                óŽ   • [        [        S5      (       a0  [        R                  " U5      nUR                  R	                  5       $ g )Nr?   )ÚhasattrÚinspectr?   Ú
parametersÚvalues©ÚclsrR   Úsigs      r   Úget_func_paramsÚDispatcher.get_func_params˜   s7   € ä”7˜K×(Ñ(Ü×#Ò# DÓ)ˆCØ—>‘>×(Ñ(Ó*Ð*ð )r   c                óÌ   ^• U R                  U5      nU(       aK  [        R                  mU4S jU 5       n[        S U 5       5      n[	        U4S jU 5       5      (       d  U$ gg)z:Get annotations of function positional parameters
        c              3  óx   >#   • U  H/  nUR                   TR                  TR                  4;   d  M+  Uv •  M1     g 7fr    )ÚkindÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORD)r(   ÚparamÚ	Parameters     €r   r*   Ú2Dispatcher.get_func_annotations.<locals>.<genexpr>¦   s;   øé € ð 9ª ØŸ™Ø ×0Ñ0Ø ×6Ñ6ð8ñ8÷ ‘eªùs   ƒ*:±	:c              3  ó:   #   • U  H  nUR                   v •  M     g 7fr    )Ú
annotation)r(   rf   s     r   r*   rh   «   s   é € ð  %â#�Eð × Ö Ú#ùs   ‚c              3  ó>   >#   • U  H  oTR                   L v •  M     g 7fr    )Úempty)r(   Úannrg   s     €r   r*   rh   ¯   s   øé € ÐEº°#˜iŸo™oÕ-ºùs   ƒN)r_   rY   rg   r/   Úany)r]   rR   Úparamsr   rg   s       @r   Úget_func_annotationsÚDispatcher.get_func_annotationsž   sn   ø€ ð ×$Ñ$ TÓ*ˆÞÜ×)Ñ)ˆIô9©ó 9ˆFô
  ñ  %á#ó %ó %ˆKô ÔE¹ÓE×EÑEØ"Ð"ð Fð r   c           	     óÚ  • U(       d  U R                  U5      nU(       a  Un[        S U 5       5      (       a%  [        U5       H  nU R                  XRU5        M     gU HQ  n[	        U[
        5      (       a  M  SR                  S U 5       5      n[        SU< SU< SU R                  < 35      e   X R                  U'   U R                  US9  U R                  R                  5         g)	a  Add new types/method pair to dispatcher

>>> from sympy.multipledispatch import Dispatcher
>>> D = Dispatcher('add')
>>> D.add((int, int), lambda x, y: x + y)
>>> D.add((float, float), lambda x, y: x + y)

>>> D(1, 2)
3
>>> D(1, 2.0)
Traceback (most recent call last):
...
NotImplementedError: Could not find signature for add: <int, float>

When ``add`` detects a warning it calls the ``on_ambiguity`` callback
with a dispatcher/itself, and a set of ambiguous type signature pairs
as inputs.  See ``ambiguity_warn`` for an example.
c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr    )Ú
isinstancer/   )r(   Útyps     r   r*   Ú!Dispatcher.add.<locals>.<genexpr>Ì   s   é € Ð;²¨#Œz˜#œu×%Ð%²ùs   ‚Nú, c              3  óz   #   • U  H1  n[        U[        5      (       a  UR                  O
[        U5      v •  M3     g 7fr    )rt   r'   r   Ústr)r(   Úcs     r   r*   rv   Ó   s4   é € ð $DÚ9B°Aô 3=¸QÄ×2EÑ2E A§J¢JÜ),¨Q«ô%0Ú9Bùs   ‚9;zTried to dispatch on non-type: z
In signature: <z>
In function: r8   )rp   rn   r
   r<   rt   r'   ÚjoinÚ	TypeErrorr   rK   rF   rL   Úclear)r"   r?   rR   r9   r   Útypsru   Ústr_sigs           r   r<   ÚDispatcher.add²   sÒ   € ö( Ø×3Ñ3°DÓ9ˆKÞØ'�	ô Ñ;±Ó;×;Ñ;Ü% iÖ0�Ø—‘˜ \Ö2ñ 1àãˆCÜ˜c¤4×(Ó(ØŸ)™)ñ $DÙ9Bó$Dó D�åó "%£g¨t¯y«yð!:ó ;ð ;ñ	 ð !%�
‰
�9ÑØ�‰ ,ˆÑ/Ø�‰×ÑÕr   c                óÊ   • [         S   (       a@  [        U R                  5      U l        [        U R                  5      nU(       a	  U" X5        g g [        R                  U 5        g )Nr   )rB   r   rK   r   r@   r<   )r"   r9   r>   s      r   rF   ÚDispatcher.reorderÞ   sG   € Ü�A�;Ü$ T§Z¡ZÓ0ˆDŒMÜ˜dŸj™jÓ)ˆCÞÙ˜TÕ'ð ô $×'Ñ'¨Õ-r   c           	     ó&  • [        U Vs/ s H  n[        U5      PM     sn5      n U R                  U   n U" U0 UD6$ s  snf ! [         aN    U R                  " U6 nU(       d'  [        SU R                  < S[        U5      < S35      eXPR                  U'    Nef = f! [         ag    U R                  " U6 n[        U5        U H  n U" U0 UD6s  s $ ! [         a     M  f = f   [        SU R                  < S[        U5      < S35      ef = f)NúCould not find signature for r-   r.   zMatching functions for z(> found, but none completed successfully)r/   r'   rL   ÚKeyErrorÚdispatchr0   r   r1   r   Údispatch_iterÚnext)r"   r2   r3   Úargr4   rR   rK   s          r   r5   ÚDispatcher.__call__ç   s  € Ü©DÓ1ªD S”t˜C–y©DÑ1Ó2ˆð	&Ø—;‘;˜uÑ%ˆDð	KÙ˜Ð( Ñ(Ð(ùò 2øô ó 	&Ø—=’= %Ð(ˆDÞÝ)à—Y”Y¤¨eÖ 4ð6ó7ð 7ð "&�K‰K˜Óð	&ûô %ó 
	KØ×&Ò&¨Ð.ˆEÜ�ŒKÛ�ðÙ Ð0¨Ñ0Ô0øÜ,ó Úðúñ õ
 &à)-¯¬´MÀ%Ö4Hð'Jó Kð Kð
	KúsE   Š?§A ·B ÁABÂBÂ)DÃ	CÃDÃ
C#ÃDÃ"C#Ã#-Dc                ó    • SU R                   -  $ )Nz<dispatched %s>)r   ©r"   s    r   Ú__str__ÚDispatcher.__str__  s   € Ø  4§9¡9Ñ,Ð,r   c                ó�   • XR                   ;   a  U R                   U   $  [        U R                  " U6 5      $ ! [         a     gf = f)aï  Deterimine appropriate implementation for this type signature

This method is internal.  Users should call this object as a function.
Implementation resolution occurs within the ``__call__`` method.

>>> from sympy.multipledispatch import dispatch
>>> @dispatch(int)
... def inc(x):
...     return x + 1

>>> implementation = inc.dispatch(int)
>>> implementation(3)
4

>>> print(inc.dispatch(float))
None

See Also:
    ``sympy.multipledispatch.conflict`` - module to determine resolution order
N)rK   rˆ   r‡   ÚStopIteration©r"   r4   s     r   r†   ÚDispatcher.dispatch  sJ   € ð, —J‘JÓØ—:‘:˜eÑ$Ð$ð	Ü˜×*Ò*¨EÐ2Ó3Ð3øÜó 	Ùð	ús    8 ¸
AÁAc              '  óÐ   #   • [        U5      nU R                   HG  n[        U5      U:X  d  M  [        [        [        X5      5      (       d  M4  U R
                  U   nUv •  MI     g 7fr    )r:   r   ÚallÚmapÚ
issubclassrK   )r"   r4   Únr?   Úresults        r   r‡   ÚDispatcher.dispatch_iter#  sL   é € Ü�‹JˆØŸœˆIÜ�9‹~ Õ"¤s¬3¬z¸5Ó+L×'MÓ'MØŸ™ IÑ.�Ø”ò 'ùs   ‚(A&®A&ÁA&c                ó@   • [        S[        5        U R                  " U6 $ )zzDeterimine appropriate implementation for this type signature

.. deprecated:: 0.4.4
    Use ``dispatch(*types)`` instead
z-resolve() is deprecated, use dispatch(*types))r   ÚDeprecationWarningr†   r‘   s     r   ÚresolveÚDispatcher.resolve*  s#   € ô 	Ð<Üô	!ð �}Š}˜eÐ$Ð$r   c                ó4   • U R                   U R                  S.$ )N©r   rK   rŸ   rŒ   s    r   Ú__getstate__ÚDispatcher.__getstate__5  s   € ØŸ	™	ØŸ™ñ%ð 	%r   c                ón   • US   U l         US   U l        [        U R                  5      U l        0 U l        g )Nr   rK   )r   rK   r   rL   )r"   Úds     r   Ú__setstate__ÚDispatcher.__setstate__9  s/   € Ø�f‘IˆŒ	Ø�w‘ZˆŒ
Ü  §¡Ó,ˆŒØˆ�r   c                ó<  • SU R                   -  /nU R                  (       a  UR                  U R                  5        / nU R                  S S S2    HŽ  nU R                  U   nUR
                  (       aQ  S[        U5      -  nUS[        U5      -  S-   -  nXTR
                  R                  5       -  nUR                  U5        Mt  UR                  [        U5      5        M�     U(       a#  UR                  SSR                  U5      -   5        SR                  U5      $ )	NzMultiply dispatched method: %séÿÿÿÿzInputs: <%s>
Ú-Ú
zOther signatures:
    z
    ú

)
r   rM   Úappendr   rK   r   r1   r:   Ústripr{   )r"   ÚdocsÚotherr^   rR   Úss         r   r   ÚDispatcher.__doc__?  sà   € à0°4·9±9Ñ<Ð=ˆà�8�8Ø�K‰K˜Ÿ™Ô!àˆØ—=‘=¡ 2 Ô&ˆCØ—:‘:˜c‘?ˆDØ�|�|Ø$¤}°SÓ'9Ñ9�Ø�Sœ3˜q›6‘\ DÑ(Ñ(�Ø—\‘\×'Ñ'Ó)Ñ)�Ø—‘˜A–à—‘œ]¨3Ó/Ö0ñ 'ö Ø�K‰KÐ1°H·M±MÀ%Ó4HÑHÔIà�{‰{˜4Ó Ð r   c                óP   • U R                   " [        [        U5      6 R                  $ r    )r†   r•   r'   r   )r"   r2   s     r   Ú_helpÚDispatcher._helpV  s   € Ø�}Š}œc¤$¨›oÐ.×6Ñ6Ð6r   c                ó4   • [        U R                  " U6 5        g)z9Print docstring for the function corresponding to inputs N)Úprintr²   ©r"   r2   r3   s      r   ÚhelpÚDispatcher.helpY  s   € äˆd�jŠj˜$ÐÕ r   c                óv   • U R                   " [        [        U5      6 nU(       d  [        S5      e[	        U5      $ )NzNo function found)r†   r•   r'   r|   Úsource)r"   r2   rR   s      r   Ú_sourceÚDispatcher._source]  s/   € Ø�}Š}œc¤$¨›oÐ.ˆÞÜÐ/Ó0Ð0Ü�d‹|Ðr   c                ó4   • [        U R                  " U6 5        g)z;Print source code for the function corresponding to inputs N)rµ   r»   r¶   s      r   rº   ÚDispatcher.sourcec  s   € äˆd�lŠl˜DÐ!Õ"r   )r   rL   rM   rK   r   r   r    )r   r   r   r   r   Ú	__slots__r#   rU   Úclassmethodr_   rp   r   r<   rF   r5   r�   Ú__repr__r†   r‡   rœ   r    r¤   Úpropertyr²   r·   r»   rº   r   r   r   r   rI   rI   Y   s¨   † ñð* I€Iôòð@ ñ+ó ð+ð
 ñ#ó ð#ð& 1?ô *ðX $2ô .òKò4-à€Hòò<ò	%ò%òð ñ!ó ð!ò,7ò!òõ#r   rI   c                ój   • S[         R                  " U 5      -  nU[         R                  " U 5      -   nU$ )Nz
File: %s

)rY   ÚgetsourcefileÚ	getsource)rR   r¯   s     r   rº   rº   h  s1   € Øœ×.Ò.¨tÓ4Ñ4€AØ	ŒG×Ò˜dÓ#Ñ#€AØ€Hr   c                  ó4   • \ rS rSrSr\S 5       rS rS rSr	g)ÚMethodDispatcherin  zCDispatch methods based on type signature

See Also:
    Dispatcher
c                óº   • [        [        S5      (       aF  [        R                  " U5      n[        R                  " UR
                  R                  5       SS 5      $ g )Nr?   r   )rX   rY   r?   ÚitlÚislicerZ   r[   r\   s      r   r_   Ú MethodDispatcher.get_func_paramsu  sD   € ä”7˜K×(Ñ(Ü×#Ò# DÓ)ˆCÜ—:’:˜cŸn™n×3Ñ3Ó5°q¸$Ó?Ð?ð )r   c                ó   • Xl         X l        U $ r    )Úobjr]   )r"   ÚinstanceÚowners      r   Ú__get__ÚMethodDispatcher.__get__{  s   € ØŒØŒØˆr   c                óü   • [        U Vs/ s H  n[        U5      PM     sn5      nU R                  " U6 nU(       d'  [        SU R                  < S[        U5      < S35      eU" U R                  /UQ70 UD6$ s  snf )Nr„   r-   r.   )r/   r'   r†   r0   r   r1   rÍ   )r"   r2   r3   r‰   r4   rR   s         r   r5   ÚMethodDispatcher.__call__€  sq   € Ü©DÓ1ªD S”t˜C–y©DÑ1Ó2ˆØ�}Š}˜eÐ$ˆÞÝ%Ø'+§y¤y´-ÀÖ2Fð'Hó Ið Iá�D—H‘HÐ.˜tÒ. vÑ.Ð.ùò 2s   ŠA9)r]   rÍ   N)
r   r   r   r   r   rÀ   r_   rÐ   r5   r   r   r   r   rÇ   rÇ   n  s'   † ñð ñ@ó ð@ò
õ
/r   rÇ   c                ó2   • SR                  S U  5       5      $ )z–String representation of type signature

>>> from sympy.multipledispatch.dispatcher import str_signature
>>> str_signature((int, float))
'int, float'
rw   c              3  ó8   #   • U  H  oR                   v •  M     g 7fr    )r   )r(   r]   s     r   r*   Ú str_signature.<locals>.<genexpr>�  s   é € Ð1ªS c—\–\ªSùr,   )r{   )r^   s    r   r1   r1   ‰  s   € ð �9‰9Ñ1©SÓ1Ó1Ð1r   c                ó  • SU -  nUS-  nU H$  nUSSR                  S U 5       5      -   S-   -  nM&     US-  nUSR                  U Vs/ s H   nS	[        [        U5      5      -   S
U -  -   PM"     sn5      -  nU$ s  snf )z The text for ambiguity warnings z.
Ambiguities exist in dispatched function %s

z;The following signatures may result in ambiguous behavior:
Ú	rw   c              3  óD   #   • U  H  nS [        U5      -   S-   v •  M     g7f)Ú[Ú]N)r1   )r(   r¯   s     r   r*   Úwarning_text.<locals>.<genexpr>™  s   é € ÐAºD°q�cœM¨!Ó,Ñ,¨sÖ2ºDùs   ‚ r©   z,

Consider making the following additions:

rª   z
@dispatch(z)
def %s(...))r{   r1   r   )r   r>   ÚtextÚpairr¯   s        r   r   r   “  s·   € à>À$ÑG€DØÐJÑJ€DÛˆØ�Ø�I‰IÑA¹DÓAÓAñBØDHñIñ 	IŠñ ð 	Ð>Ñ>€DØˆF�K‰KÙ<?óAÚ<?°qð &¬´oÀaÓ6HÓ(IÑIØ+¨dÑ2ô3Ù<?ñAó Bñ B€Dà€KùòAs   Á
'A<
)Ú
__future__r   Úwarningsr   rY   Úconflictr   r   r   r	   Úutilsr
   Ú	itertoolsrÉ   r0   r   r   r   r=   r;   r@   Ú__annotations__rB   rC   rG   rI   rº   rÇ   r1   r   r   r   r   Ú<module>rå      s‰   ðÞ "å Û ß NÓ NÝ  Û ô8Ð/ô 8òG÷"ñ ò
ñ8 ,/«5Ð ˜Ó 0Øˆ6€òð #1ô 6÷L#ñ L#ò^ô/�zô /ò62ó
r   