Ë
    7^(hÂ/  ã                  óò   — U d dl mZ d dlmZ d dlZddlmZmZmZm	Z	 ddl
mZ d dlZ G d„ de«      Zd	„ Z G d
„ d«      Zd„ Z e«       Zded<   dgZd„ Zefd„Z G d„ d«      Zd„ Z G d„ de«      Zd„ Zd„ Zy)é    )Úannotations)ÚwarnNé   )ÚorderingÚambiguitiesÚsuper_signatureÚAmbiguityWarning)Úexpand_tuplesc                  ó   — e Zd ZdZy)ÚMDNotImplementedErrorz- A NotImplementedError for multiple dispatch N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/multipledispatch/dispatcher.pyr   r   
   s   „ Ú7r   r   c                óL   — t        t        | j                  |«      t        «       y)aC   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                  ó   — e Zd ZdZd„ Zd„ Zy)ÚRaiseNotImplementedErrorz*Raise ``NotImplementedError`` when called.c                ó   — || _         y ©N)r   )Úselfr   s     r   Ú__init__z!RaiseNotImplementedError.__init__$   s	   € Ø$ˆ�r   c                ó„   — t        d„ |D «       «      }t        d| j                  j                  ›dt	        |«      ›d�«      ‚)Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Útype)Ú.0Úas     r   ú	<genexpr>z4RaiseNotImplementedError.__call__.<locals>.<genexpr>(   s   è ø€ Ò, !”d˜1—gÑ,ùs   ‚zAmbiguous signature for ú: <ú>)ÚtupleÚNotImplementedErrorr   r   Ústr_signature)r   ÚargsÚkwargsÚtypess       r   Ú__call__z!RaiseNotImplementedError.__call__'   s8   € ÜÑ, tÔ,Ó,ˆÝ!à�O‰O× Ó ¤-°Õ"6ð
óð 	r   N)r   r   r   r   r   r-   r   r   r   r   r   !   s   „ Ù4ò%ór   r   c                ó¬   — |D ]O  }t        t        |«      «      }t        t        |«      «      dk(  rŒ/| j	                  |t        | «      t        ¬«       ŒQ y)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   r4   r4   .   sU   € ð  ò 
ˆÜœ/¨#Ó.Ó/ˆ	ÜŒs�9‹~Ó !Ò#ØØ�‰ØÔ/°
Ó;Ü<ð 	õ 	
ñ	
r   zset[Dispatcher]Ú_unresolved_dispatchersTc                 ó   — dt         d<   y )NFr   )Ú_resolver   r   r   Úhalt_orderingr:   N   s   € Ø„HˆQ‚Kr   c                ó~   — dt         d<   t        r.t        j                  «       }|j                  | ¬«       t        rŒ-y y )NTr   r/   )r9   r7   ÚpopÚreorder)r0   r   s     r   Úrestart_orderingr>   R   s5   € Ø„HˆQ�KÝ
!Ü,×0Ñ0Ó2ˆ
Ø×Ñ¨ÐÔ5÷ "Ð
!r   c                  ó¬   — e Zd ZdZdZdd„Zd„ Zed„ «       Zed„ «       Z	e
fd„Ze
fd	„Zd
„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zd„ Zd„ Zd„ Zd„ Zy)Ú
Dispatcheraj   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                óX   — |x| _         | _        i | _        i | _        g | _        || _        y r   )r   r   rA   rB   r   rC   )r   r   rC   s      r   r   zDispatcher.__init__q   s,   € Ø$(Ð(ˆŒ	�D”MØˆŒ
ØˆŒØˆŒØˆ�r   c                ó   ‡ ‡‡— ˆˆ ˆfd„}|S )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   •—  ‰j                   ‰| fi ‰¤Ž | S r   )r3   )Úfuncr+   r   r,   s    €€€r   Ú_zDispatcher.register.<locals>._“   s   ø€ ØˆD�H‰H�U˜DÑ+ FÒ+ØˆKr   r   )r   r,   r+   rH   s   ``` r   ÚregisterzDispatcher.registerx   s   ú€ ö6	ð ˆr   c                ó‚   — t        t        d«      r/t        j                  |«      }|j                  j	                  «       S y )Nr6   )ÚhasattrÚinspectr6   Ú
parametersÚvalues©ÚclsrG   Úsigs      r   Úget_func_paramszDispatcher.get_func_params˜   s4   € ä”7˜KÔ(Ü×#Ñ# DÓ)ˆCØ—>‘>×(Ñ(Ó*Ð*ð )r   c                ó´   ‡— | j                  |«      }|rDt        j                  Šˆfd„|D «       }t        d„ |D «       «      }t	        ˆfd„|D «       «      s|S yy)z; Get annotations of function positional parameters
        c              3  ój   •K  — | ]*  }|j                   ‰j                  ‰j                  fv r|–— Œ, y ­wr   )ÚkindÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORD)r"   ÚparamÚ	Parameters     €r   r$   z2Dispatcher.get_func_annotations.<locals>.<genexpr>¦   s;   øè ø€ ò 9 ØŸ™Ø ×0Ñ0Ø ×6Ñ6ð8ñ8ô ñ 9ùs   ƒ03c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   )Ú
annotation)r"   rX   s     r   r$   z2Dispatcher.get_func_annotations.<locals>.<genexpr>«   s   è ø€ ò  %àð × Õ ñ %ùó   ‚c              3  ó:   •K  — | ]  }|‰j                   u –— Œ y ­wr   )Úempty)r"   ÚannrY   s     €r   r$   z2Dispatcher.get_func_annotations.<locals>.<genexpr>¯   s   øè ø€ ÒE°#�s˜iŸo™oÔ-ÑEùs   ƒN)rR   rL   rY   r'   Úany)rP   rG   Úparamsr   rY   s       @r   Úget_func_annotationszDispatcher.get_func_annotationsž   sk   ø€ ð ×$Ñ$ TÓ*ˆÙÜ×)Ñ)ˆIó9¨ô 9ˆFô
  ñ  %à#ô %ó %ˆKô ÓE¸ÔEÔEØ"Ð"ð Fð r   c           	     ó®  — |s| j                  |«      }|r|}t        d„ |D «       «      r$t        |«      D ]  }| j                  |||«       Œ y|D ]H  }t	        |t
        «      rŒdj                  d„ |D «       «      }t        d|›d|›d| j                  ›�«      ‚ || j                  |<   | j                  |¬«       | j                  j                  «        y)	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  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   )Ú
isinstancer'   )r"   Útyps     r   r$   z!Dispatcher.add.<locals>.<genexpr>Ì   s   è ø€ Ò;¨#Œz˜#œu×%Ñ;ùs   ‚Nú, c              3  ój   K  — | ]+  }t        |t        «      r|j                  n
t        |«      –— Œ- y ­wr   )re   r!   r   Ústr)r"   Úcs     r   r$   z!Dispatcher.add.<locals>.<genexpr>Ó   s3   è ø€ ò $DØ45ô 3=¸QÄÔ2E A§J¢JÜ),¨Q«ó%0ñ $Dùs   ‚13zTried to dispatch on non-type: z
In signature: <z>
In function: r/   )rb   r`   r
   r3   re   r!   ÚjoinÚ	TypeErrorr   rA   r=   rB   Úclear)r   r6   rG   r0   r   Útypsrf   Ústr_sigs           r   r3   zDispatcher.add²   sÚ   € ñ( Ø×3Ñ3°DÓ9ˆKÙØ'�	ô Ñ;°Ô;Ô;Ü% iÓ0ò 3�Ø—‘˜˜t \Õ2ð3ààò 	;ˆCÜ˜c¤4Õ(ØŸ)™)ñ $DØ9Bô$Dó D�åò "%¢g¨t¯yªyð!:ó ;ð ;ð		;ð !%ˆ�
‰
�9ÑØ�‰ ,ˆÔ/Ø�‰×ÑÕr   c                ó¸   — t         d   r<t        | j                  «      | _        t        | j                  «      }|r
 || |«       y y t        j                  | «       y )Nr   )r9   r   rA   r   r7   r3   )r   r0   r5   s      r   r=   zDispatcher.reorderÞ   sI   € Ü�AŠ;Ü$ T§Z¡ZÓ0ˆDŒMÜ˜dŸj™jÓ)ˆCÙÙ˜T 3Õ'ð ô $×'Ñ'¨Õ-r   c           	     ó  — t        |D �cg c]  }t        |«      ‘Œ c}«      }	 | j                  |   }	  ||i |¤ŽS c c}w # t        $ rH  | j                  |Ž }|s%t        d| j                  ›dt        |«      ›d�«      ‚|| j                  |<   Y Œ^w xY w# t        $ rb  | j                  |Ž }t        |«       |D ]  }	  ||i |¤Žc cY S # t        $ r Y Œw xY w t        d| j                  ›dt        |«      ›d�«      ‚w xY w)NúCould not find signature for r%   r&   zMatching functions for z(> found, but none completed successfully)r'   r!   rB   ÚKeyErrorÚdispatchr(   r   r)   r   Údispatch_iterÚnext)r   r*   r+   Úargr,   rG   rA   s          r   r-   zDispatcher.__call__ç   s#  € Ü¨DÖ1 S”t˜C•yÒ1Ó2ˆð	&Ø—;‘;˜uÑ%ˆDð	KÙ˜Ð( Ñ(Ð(ùò 2øô ò 	&Ø �4—=‘= %Ð(ˆDÙÝ)à—Y“Y¤¨eÕ 4ð6ó7ð 7ð "&ˆD�K‰K˜Óð	&ûô %ò 
	KØ&�D×&Ñ&¨Ð.ˆ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                ó    — d| j                   z  S )Nz<dispatched %s>)r   ©r   s    r   Ú__str__zDispatcher.__str__  s   € Ø  4§9¡9Ñ,Ð,r   c                óŒ   — || j                   v r| j                   |   S 	 t         | j                  |Ž «      S # t        $ r Y yw xY w)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)rA   rv   ru   ÚStopIteration©r   r,   s     r   rt   zDispatcher.dispatch  sO   € ð, �D—J‘JÑØ—:‘:˜eÑ$Ð$ð	ÜÐ*˜×*Ñ*¨EÐ2Ó3Ð3øÜò 	Ùð	ús   Ÿ7 ·	AÁAc              '  ó¾   K  — t        |«      }| j                  D ]?  }t        |«      |k(  sŒt        t        t        ||«      «      sŒ-| j
                  |   }|–— ŒA y ­wr   )r1   r   ÚallÚmapÚ
issubclassrA   )r   r,   Únr6   Úresults        r   ru   zDispatcher.dispatch_iter#  sQ   è ø€ Ü�‹JˆØŸ™ò 	ˆIÜ�9‹~ Ó"¤s¬3¬z¸5À)Ó+LÕ'MØŸ™ IÑ.�Ø“ñ	ùs   ‚)A¬AÁAc                ó@   — t        dt        «        | j                  |Ž S )z“ Deterimine appropriate implementation for this type signature

        .. deprecated:: 0.4.4
            Use ``dispatch(*types)`` instead
        z-resolve() is deprecated, use dispatch(*types))r   ÚDeprecationWarningrt   r}   s     r   ÚresolvezDispatcher.resolve*  s%   € ô 	Ð<Üô	!ð ˆt�}‰}˜eÐ$Ð$r   c                ó4   — | j                   | j                  dœS )N©r   rA   rˆ   ry   s    r   Ú__getstate__zDispatcher.__getstate__5  s   € ØŸ	™	ØŸ™ñ%ð 	%r   c                ón   — |d   | _         |d   | _        t        | j                  «      | _        i | _        y )Nr   rA   )r   rA   r   rB   )r   Úds     r   Ú__setstate__zDispatcher.__setstate__9  s/   € Ø�f‘IˆŒ	Ø�w‘ZˆŒ
Ü  §¡Ó,ˆŒØˆ�r   c                ó  — d| j                   z  g}| j                  r|j                  | j                  «       g }| j                  d d d…   D ]ˆ  }| j                  |   }|j
                  rQdt        |«      z  }|dt        |«      z  dz   z  }||j
                  j                  «       z  }|j                  |«       Œo|j                  t        |«      «       ŒŠ |r#|j                  ddj                  |«      z   «       dj                  |«      S )	NzMultiply dispatched method: %séÿÿÿÿzInputs: <%s>
ú-ú
zOther signatures:
    z
    ú

)
r   rC   Úappendr   rA   r   r)   r1   Ústriprk   )r   ÚdocsÚotherrQ   rG   Úss         r   r   zDispatcher.__doc__?  sç   € à0°4·9±9Ñ<Ð=ˆà�8Š8Ø�K‰K˜Ÿ™Ô!àˆØ—=‘=¡ 2 Ñ&ò 	1ˆCØ—:‘:˜c‘?ˆDØ�|Š|Ø$¤}°SÓ'9Ñ9�Ø�Sœ3˜q›6‘\ DÑ(Ñ(�Ø�T—\‘\×'Ñ'Ó)Ñ)�Ø—‘˜A•à—‘œ]¨3Ó/Õ0ð	1ñ Ø�K‰KÐ1°H·M±MÀ%Ó4HÑHÔIà�{‰{˜4Ó Ð r   c                óP   —  | j                   t        t        |«      Ž j                  S r   )rt   r€   r!   r   )r   r*   s     r   Ú_helpzDispatcher._helpV  s   € Øˆt�}‰}œc¤$¨›oÐ.×6Ñ6Ð6r   c                ó4   — t         | j                  |Ž «       y)z: Print docstring for the function corresponding to inputs N)Úprintr˜   ©r   r*   r+   s      r   ÚhelpzDispatcher.helpY  s   € äˆjˆd�j‰j˜$ÐÕ r   c                ól   —  | j                   t        t        |«      Ž }|st        d«      ‚t	        |«      S )NzNo function found)rt   r€   r!   rl   Úsource)r   r*   rG   s      r   Ú_sourcezDispatcher._source]  s1   € Øˆt�}‰}œc¤$¨›oÐ.ˆÙÜÐ/Ó0Ð0Ü�d‹|Ðr   c                ó4   — t         | j                  |Ž «       y)z< Print source code for the function corresponding to inputs N)rš   rŸ   r›   s      r   rž   zDispatcher.sourcec  s   € äˆlˆd�l‰l˜DÐ!Õ"r   r   )r   r   r   r   Ú	__slots__r   rI   ÚclassmethodrR   rb   r   r3   r=   r-   rz   Ú__repr__rt   ru   r†   r‰   rŒ   Úpropertyr˜   rœ   rŸ   rž   r   r   r   r@   r@   Y   s¨   „ ñð* I€Ióòð@ ñ+ó ð+ð
 ñ#ó ð#ð& 1?ó *ðX $2ó .òKò4-à€Hòò<ò	%ò%òð ñ!ó ð!ò,7ò!òó#r   r@   c                óf   — dt        j                  | «      z  }|t        j                  | «      z   }|S )Nz
File: %s

)rL   ÚgetsourcefileÚ	getsource)rG   r–   s     r   rž   rž   h  s1   € Øœ×.Ñ.¨tÓ4Ñ4€AØ	ŒG×Ñ˜dÓ#Ñ#€AØ€Hr   c                  ó,   — e Zd ZdZed„ «       Zd„ Zd„ Zy)ÚMethodDispatcherzP Dispatch methods based on type signature

    See Also:
        Dispatcher
    c                ó¬   — t        t        d«      rDt        j                  |«      }t        j                  |j
                  j                  «       dd «      S y )Nr6   r   )rK   rL   r6   ÚitlÚislicerM   rN   rO   s      r   rR   z MethodDispatcher.get_func_paramsu  sA   € ä”7˜KÔ(Ü×#Ñ# DÓ)ˆCÜ—:‘:˜cŸn™n×3Ñ3Ó5°q¸$Ó?Ð?ð )r   c                ó"   — || _         || _        | S r   )ÚobjrP   )r   ÚinstanceÚowners      r   Ú__get__zMethodDispatcher.__get__{  s   € ØˆŒØˆŒØˆr   c                óè   — t        |D �cg c]  }t        |«      ‘Œ c}«      } | j                  |Ž }|s%t        d| j                  ›dt        |«      ›d�«      ‚ || j                  g|¢­i |¤ŽS c c}w )Nrr   r%   r&   )r'   r!   rt   r(   r   r)   r®   )r   r*   r+   rw   r,   rG   s         r   r-   zMethodDispatcher.__call__€  so   € Ü¨DÖ1 S”t˜C•yÒ1Ó2ˆØˆt�}‰}˜eÐ$ˆÙÝ%Ø'+§y£y´-ÀÕ2Fð'Hó Ið Iá�D—H‘HÐ.˜tÒ. vÑ.Ð.ùò 2s   ŠA/N)r   r   r   r   r¢   rR   r±   r-   r   r   r   r©   r©   n  s'   „ ñð ñ@ó ð@ò
ó
/r   r©   c                ó2   — dj                  d„ | D «       «      S )z§ String representation of type signature

    >>> from sympy.multipledispatch.dispatcher import str_signature
    >>> str_signature((int, float))
    'int, float'
    rg   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   )r   )r"   rP   s     r   r$   z str_signature.<locals>.<genexpr>�  s   è ø€ Ò1 c�S—\•\Ñ1ùr\   )rk   )rQ   s    r   r)   r)   ‰  s   € ð �9‰9Ñ1¨SÔ1Ó1Ð1r   c                óø   — d| z  }|dz  }|D ]#  }|ddj                  d„ |D «       «      z   dz   z  }Œ% |dz  }|dj                  |D �cg c]  }d	t        t        |«      «      z   d
| z  z   ‘Œ! c}«      z  }|S c c}w )z! The text for ambiguity warnings z.
Ambiguities exist in dispatched function %s

z;The following signatures may result in ambiguous behavior:
ú	rg   c              3  ó>   K  — | ]  }d t        |«      z   dz   –— Œ y­w)ú[ú]N)r)   )r"   r–   s     r   r$   zwarning_text.<locals>.<genexpr>™  s   è ø€ ÒA°q�cœM¨!Ó,Ñ,¨sÕ2ÑAùs   ‚r�   z,

Consider making the following additions:

r‘   z
@dispatch(z)
def %s(...))rk   r)   r   )r   r5   ÚtextÚpairr–   s        r   r   r   “  s¹   € à>À$ÑG€DØÐJÑJ€DØò IˆØ�Ø�I‰IÑA¸DÔAÓAñBØDHñIñ 	I‰ðIð 	Ð>Ñ>€DØˆF�K‰KØ<?öAØ78ð &¬´oÀaÓ6HÓ(IÑIØ+¨dÑ2ó3ò Aó Bñ B€Dà€KùòAs   Á$A7
)Ú
__future__r   Úwarningsr   rL   Úconflictr   r   r   r	   Úutilsr
   Ú	itertoolsr«   r(   r   r   r   r4   r2   r7   Ú__annotations__r9   r:   r>   r@   rž   r©   r)   r   r   r   r   ú<module>rÂ      s‰   ðÞ "å Û ß NÓ NÝ  Û ô8Ð/ô 8òG÷"ñ ò
ñ8 ,/«5Ð ˜Ó 0Øˆ6€òð #1ó 6÷L#ñ L#ò^ô/�zô /ò62ó
r   