Ë
    ÄÓ^jn  ã                  óÖ   — U d dl mZ d dlmZ ddlmZmZ erd dlmZm	Z	 ddl
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ed<   dd„Zdd„Zefdd„Zdd„Zy)é    )Úannotations)ÚTYPE_CHECKINGé   )ÚreifyÚunify)ÚCallableÚIterable)ÚVar)ÚfirstÚgroupby)Ú	_toposortÚfreeze)Úisvarc                  ó<   — e Zd Zdd„Zdd„Zd	d„Z	 	 	 	 d
d„Zdd„Zy)Ú
Dispatcherc                ó.   — || _         i | _        g | _        y ©N)ÚnameÚfuncsÚordering)Úselfr   s     úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/fx/experimental/unification/match.pyÚ__init__zDispatcher.__init__   s   € ØˆŒ	Ø:<ˆŒ
Ø&(ˆ�ó    c                óh   — || j                   t        |«      <   t        | j                   «      | _        y r   )r   r   r   )r   Ú	signatureÚfuncs      r   ÚaddzDispatcher.add   s%   € Ø(,ˆ�
‰
”6˜)Ó$Ñ%Ü  §¡Ó,ˆ�r   c                ó:   — | j                  |«      \  }} ||i |¤ŽS r   )Úresolve)r   ÚargsÚkwargsr   Ú_s        r   Ú__call__zDispatcher.__call__   s$   € Ø—,‘,˜tÓ$‰ˆˆaÙ�TÐ$˜VÑ$Ð$r   c                ó  — t        |«      }| j                  D ]?  }t        |«      |k7  rŒt        t        |«      |«      }|dusŒ,| j                  |   }||fc S  t        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Ü�9‹~ Ò"ØÜ”f˜T“l IÓ.ˆAØ˜Š~ØŸ™ IÑ.�Ø˜q�yÒ ð	!ô "Ø/Ü�$—-‘-Ó ñ!àñô �$‹iñó
ð 	
r   c                ó   ‡ ‡— dˆ ˆfd„}|S )Nc                ó,   •— ‰j                  ‰| «       ‰S r   )r   )r   r   r   s    €€r   r#   zDispatcher.register.<locals>._3   s   ø€ Ø�H‰H�Y Ô%ØˆKr   ©r   úCallable[..., object]Úreturnr   © )r   r   r#   s   `` r   ÚregisterzDispatcher.register2   s   ù€ ö	ð ˆr   N)r   r(   r0   ÚNone)r   útuple[object, ...]r   r/   r0   r3   ©r!   Úobjectr"   r6   r0   r6   )r!   r4   r0   z/tuple[Callable[..., object], dict[Var, object]])r   r6   r0   r/   )Ú__name__Ú
__module__Ú__qualname__r   r   r$   r    r2   r1   r   r   r   r      s+   „ ó)ó
-ó%ð
Ø&ð
à	8ó
ô$r   r   c                  ó   — e Zd ZdZdd„Zy)Ú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                ó    — | j                  |«      \  }}|j                  «       D ��ci c]  \  }}|j                  |“Œ }}} |di |¤ŽS c c}}w )Nr1   )r    ÚitemsÚtoken)r   r!   r"   r   r*   ÚkÚvÚds           r   r$   zVarDispatcher.__call__K   sJ   € Ø—,‘,˜tÓ$‰ˆˆaØ$%§G¡G£I×.™D˜A˜qˆQ�W‰W�a‰ZÐ.ˆÑ.Ù‰y�a‰yÐùó /s   ¨A
Nr5   )r7   r8   r9   Ú__doc__r$   r1   r   r   r;   r;   :   s   „ ñô r   r;   zdict[str, Dispatcher]Úglobal_namespacec                 ót   ‡ ‡‡— |j                  dt        «      Š|j                  dt        «      Šdˆˆˆ fd„}|S )NÚ	namespacer   c                ól   •— | j                   }|‰vr ‰|«      ‰|<   ‰|   }|j                  ‰| «       |S r   )r7   r   )r   r   rA   Údispatcher_clsrE   r   s      €€€r   r#   zmatch.<locals>._\   s>   ø€ Ø�}‰}ˆà�yÑ Ù,¨TÓ2ˆI�d‰OØ�d‰Oˆà	�‰ˆi˜Ôàˆr   r.   )ÚgetrC   r   )r   r"   r#   rG   rE   s   `  @@r   ÚmatchrI   T   s8   ú€ Ø'-§z¡zØÔ%ó(€Ið (.§z¡zØ”jó(€N÷	ð €Hr   c                ó  — t        |«      rt        | «      syt        | |«      }|du ry|j                  «       D ��ci c]  \  }}t        |«      rt        |«      s||“Œ  }}}t        | |«      | k(  ryt        ||«      |k(  ryyc c}}w )z)``a`` is a more specific match than ``b``TF)r   r   r=   r   )ÚaÚbr*   r?   r@   s        r   Ú
supercedesrM   j   s�   € äˆQ„xœ˜aœØÜˆa�‹€AØˆE�zØð —G‘G“I÷	áˆAˆqÜ�QŒxœu Qœxð 	
ˆ1‰ð	€Añ 	ô
 ˆQ�ƒ{�aÒØÜˆQ�ƒ{�aÒØØùó	s   ¼#Bc                óX   — t        | |«      rt        || «      r || «       ||«      kD  S yy)zUA should be checked before B
    Tie broken by tie_breaker, defaults to ``hash``
    TF)rM   )rK   rL   Útie_breakers      r   ÚedgerP   ~   s1   € ô �!�QÔÜ�a˜ÔÙ˜q“>¡K°£NÑ2Ð2àØr   c                óv  — t        t        t        | «      «      } | D ��cg c]  }| D ]  }t        ||«      sŒ||f‘Œ Œ }}}t	        t
        |«      }| D ]  }||vsŒg ||<   Œ |j                  «       D ����ci c]  \  }}||D ��cg c]  \  }}|‘Œ	 c}}“Œ }}}}}t        |«      S c c}}w c c}}w c c}}}}w )z€A sane ordering of signatures to check, first to last
    Topological sort of edges as given by ``edge`` and ``supercedes``
    )ÚlistÚmapÚtuplerP   r   r   r=   r   )Ú
signaturesrK   rL   Úedgesr*   r?   r@   s          r   r   r   ‹   sº   € ô ”cœ% Ó,Ó-€JØ'×J˜°ÒJ¨A¼tÀAÀq½zˆa�ŠVÐJˆVÐJ€EÑJÜ”E˜5Ó!€EØò ˆØ�EŠ>ØˆE�!ŠHðð /4¯k©k«m×<Ñ<¡d a¨ˆQ˜q×!‘t�q˜!’Ó!Ñ!Ð<€EÓ<Ü�UÓÐùó Kùó
 "ùÕ<s"   ŸB'¶B'Á7B3
ÂB-ÂB3
Â-B3
N)r   r6   r"   r6   r0   r/   )rK   r6   rL   r6   r0   Úbool)rK   r6   rL   r6   rO   zCallable[[object], int]r0   rW   )rU   zIterable[object]r0   zlist[object])Ú
__future__r   Útypingr   Úcorer   r   Úcollections.abcr   r	   Úvariabler
   Úunification_toolsr   r   Úutilsr   r   r   r   r;   rC   Ú__annotations__rI   rM   ÚhashrP   r   r1   r   r   ú<module>ra      sb   ðÞ "å  ç ñ ß2åç -ß $Ý ÷%ñ %ôP�Jô ð. +-Ð Ð'Ó ,óó,ð( GKô 	ôr   