§
    Ÿ²Åj×  ã                   ó˜   — d dl mZmZ d dlmZmZ d dlmZmZ d dl	m
Z
  G d„ d¦  «        Z G d„ de¦  «        Zi Zd	„ Zd
„ Zefd„Zd„ ZdS )é   )ÚreifyÚunify)ÚfirstÚgroupby)Ú	_toposortÚfreeze©Úisvarc                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
Dispatcherc                 ó0   — || _         i | _        g | _        d S ©N)ÚnameÚfuncsÚordering)Úselfr   s     úXC:\Projects\Historical\venv\Lib\site-packages\torch/fx/experimental/unification/match.pyÚ__init__zDispatcher.__init__	   s   € ØˆŒ	ØˆŒ
ØˆŒˆˆó    c                 óf   — || j         t          |¦  «        <   t          | j         ¦  «        | _        d S r   )r   r   r   )r   Ú	signatureÚfuncs      r   ÚaddzDispatcher.add   s+   € Ø(,ˆŒ
•6˜)Ñ$Ô$Ñ%Ý  ¤Ñ,Ô,ˆŒˆˆr   c                 óB   — |                       |¦  «        \  }} ||i |¤ŽS r   )Úresolve)r   ÚargsÚkwargsr   Ú_s        r   Ú__call__zDispatcher.__call__   s,   € Ø—,’,˜tÑ$Ô$‰ˆˆaØˆt�TÐ$˜VÐ$Ð$Ð$r   c                 ó2  — t          |¦  «        }| j        D ]J}t          |¦  «        |k    rŒt          t          |¦  «        |¦  «        }|dur| j        |         }||fc S ŒKt          dt          | j        ¦  «        z   dz   t          |¦  «        z   ¦  «        ‚)NFz No match found. 
Known matches: z
Input: )Úlenr   r   r   r   ÚNotImplementedErrorÚstr)r   r   Únr   ÚsÚresults         r   r   zDispatcher.resolve   s²   € Ý�‰IŒIˆØœð 	!ð 	!ˆIÝ�9‰~Œ~ Ò"Ð"ØÝ•f˜T‘l”l IÑ.Ô.ˆAØ˜ˆ~ˆ~Øœ IÔ.�Ø˜q�yÐ Ð Ð ð õ "Ø/Ý�$”-Ñ Ô ñ!àñõ �$‰iŒiññ
ô 
ð 	
r   c                 ó   ‡ ‡— ˆ ˆfd„}|S )Nc                 ó4   •— ‰                      ‰| ¦  «         ‰S r   )r   )r   r   r   s    €€r   r   zDispatcher.register.<locals>._'   s   ø€ Ø�HŠH�Y Ñ%Ô%Ð%ØˆKr   © )r   r   r   s   `` r   ÚregisterzDispatcher.register&   s)   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð ˆr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r*   r)   r   r   r   r      s_   € € € € € ðð ð ð
-ð -ð -ð%ð %ð %ð
ð 
ð 
ð ð ð ð ð r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚVarDispatcheraX  A dispatcher that calls functions with variable names
    >>> # xdoctest: +SKIP
    >>> d = VarDispatcher("d")
    >>> x = var("x")
    >>> @d.register("inc", x)
    ... def f(x):
    ...     return x + 1
    >>> @d.register("double", x)
    ... def f(x):
    ...     return x * 2
    >>> d("inc", 10)
    11
    >>> d("double", 10)
    20
    c                 ó~   — |                       |¦  «        \  }}d„ |                     ¦   «         D ¦   «         } |di |¤ŽS )Nc                 ó$   — i | ]\  }}|j         |“ŒS r)   )Útoken©Ú.0ÚkÚvs      r   ú
<dictcomp>z*VarDispatcher.__call__.<locals>.<dictcomp>A   s    € Ð.Ð.Ð.™D˜A˜qˆQŒW�aÐ.Ð.Ð.r   r)   )r   Úitems)r   r   r   r   r%   Úds         r   r   zVarDispatcher.__call__?   sD   € Ø—,’,˜tÑ$Ô$‰ˆˆaØ.Ð. A§G¢G¡I¤IÐ.Ñ.Ô.ˆØˆtˆyˆy�aˆyˆyÐr   N)r+   r,   r-   Ú__doc__r   r)   r   r   r/   r/   .   s-   € € € € € ðð ð ð ð ð ð r   r/   c                  ó†   ‡ ‡‡— |                      dt          ¦  «        Š|                      dt          ¦  «        Šˆˆˆ fd„}|S )NÚ	namespacer   c                 óv   •— | j         }|‰vr ‰|¦  «        ‰|<   ‰|         }|                     ‰| ¦  «         |S r   )r+   r   )r   r   r9   Ú
dispatcherr<   r   s      €€€r   r   zmatch.<locals>._L   sJ   ø€ ØŒ}ˆà�yÐ Ð Ø(˜j¨Ñ.Ô.ˆI�d‰OØ�dŒOˆà	�Šˆi˜ÑÔÐàˆr   )ÚgetÚglobal_namespacer   )r   r   r   r>   r<   s   `  @@r   ÚmatchrA   H   sV   øøø€ Ø—
’
˜;Õ(8Ñ9Ô9€IØ—’˜L­*Ñ5Ô5€Jð	ð 	ð 	ð 	ð 	ð 	ð 	ð €Hr   c                 ó  — t          |¦  «        rt          | ¦  «        sdS t          | |¦  «        }|du rdS d„ |                     ¦   «         D ¦   «         }t          | |¦  «        | k    rdS t          ||¦  «        |k    rdS dS )z)``a`` is a more specific match than ``b``TFc                 óV   — i | ]&\  }}t          |¦  «        rt          |¦  «        °#||“Œ'S r)   r	   r3   s      r   r7   zsupercedes.<locals>.<dictcomp>a   s4   € ÐDÐDÐD‘$�!�Q­5°©8¬8ÐD½5À¹8¼8ÐDˆˆAÐDÐDÐDr   N)r
   r   r8   r   )ÚaÚbr%   s      r   Ú
supercedesrF   Z   s�   € åˆQ�x„xð �˜a™œð ØˆtÝˆa�‰Œ€AØˆE€z€zØˆuØDÐD˜!Ÿ'š'™)œ)ÐDÑDÔD€AÝˆQ��{„{�aÒÐØˆtÝˆQ��{„{�aÒÐØˆuð Ðr   c                 óz   — t          | |¦  «        r*t          || ¦  «        r || ¦  «         ||¦  «        k    S dS dS )zUA should be checked before B
    Tie broken by tie_breaker, defaults to ``hash``
    TF)rF   )rD   rE   Útie_breakers      r   ÚedgerI   i   sM   € õ �!�QÑÔð Ý�a˜ÑÔð 	Ø�;˜q‘>”> K K°¡N¤NÒ2Ð2à�4Øˆ5r   c                 ó  ‡ — t          t          t          ‰ ¦  «        ¦  «        Š ˆ fd„‰ D ¦   «         }t          t          |¦  «        }‰ D ]}||vrg ||<   Œd„ |                     ¦   «         D ¦   «         }t          |¦  «        S )z€A sane ordering of signatures to check, first to last
    Topological sort of edges as given by ``edge`` and ``supercedes``
    c                 óB   •— g | ]}‰D ]}t          ||¦  «        ¯||f‘ŒŒS r)   )rI   )r4   rD   rE   Ú
signaturess      €r   ú
<listcomp>zordering.<locals>.<listcomp>{   s7   ø€ ÐJÐJÐJ˜°ÐJÐJ¨A½tÀAÀq¹z¼zÐJˆa�ˆVÐJÐJÐJÐJr   c                 ó.   — i | ]\  }}|d „ |D ¦   «         “ŒS )c                 ó   — g | ]\  }}|‘ŒS r)   r)   )r4   rD   rE   s      r   rM   z'ordering.<locals>.<dictcomp>.<listcomp>€   s   € Ð!Ð!Ð!‘t�q˜!�Ð!Ð!Ð!r   r)   r3   s      r   r7   zordering.<locals>.<dictcomp>€   s-   € Ð<Ð<Ð<¡d a¨ˆQÐ!Ð!˜qÐ!Ñ!Ô!Ð<Ð<Ð<r   )ÚlistÚmapÚtupler   r   r8   r   )rL   Úedgesr%   s   `  r   r   r   v   s�   ø€ õ •c�% Ñ,Ô,Ñ-Ô-€JØJÐJÐJÐJ˜ZÐJÑJÔJ€EÝ•E˜5Ñ!Ô!€EØð ð ˆØ�Eˆ>ˆ>ØˆE�!‰HøØ<Ð<¨e¯kªk©m¬mÐ<Ñ<Ô<€EÝ�UÑÔÐr   N)Úcorer   r   Úunification_toolsr   r   Úutilsr   r   Úvariabler
   r   r/   r@   rA   rF   ÚhashrI   r   r)   r   r   ú<module>rY      s
  ðà Ð Ð Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ð#ð #ð #ð #ð #ñ #ô #ð #ðLð ð ð ð �Jñ ô ð ð. Ð ðð ð ð$ð ð ð  ð 	ð 	ð 	ð 	ðð ð ð ð r   