§
    ŠŠtjn  ã                  óä   — 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d!S )&é    )Úannotations)ÚTYPE_CHECKINGé   )ÚreifyÚunify)ÚCallableÚIterable)ÚVar)ÚfirstÚgroupby)Ú	_toposortÚfreeze©Úisvarc                  ó6   — e Zd Zdd„Zdd
„Zdd„Zdd„Zdd„ZdS )Ú
DispatcherÚnameÚstrÚreturnÚNonec                ó0   — || _         i | _        g | _        d S ©N)r   ÚfuncsÚordering)Úselfr   s     úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/experimental/unification/match.pyÚ__init__zDispatcher.__init__   s   € ØˆŒ	Ø:<ˆŒ
Ø&(ˆŒˆˆó    Ú	signatureútuple[object, ...]ÚfuncúCallable[..., object]c                óf   — || j         t          |¦  «        <   t          | j         ¦  «        | _        d S r   )r   r   r   )r   r   r!   s      r   ÚaddzDispatcher.add   s+   € Ø(,ˆŒ
•6˜)Ñ$Ô$Ñ%Ý  ¤Ñ,Ô,ˆŒˆˆr   ÚargsÚobjectÚkwargsc                óB   — |                       |¦  «        \  }} ||i |¤ŽS r   )Úresolve)r   r%   r'   r!   Ú_s        r   Ú__call__zDispatcher.__call__   s,   € Ø—,’,˜tÑ$Ô$‰ˆˆaØˆt�TÐ$˜VÐ$Ð$Ð$r   ú/tuple[Callable[..., object], dict[Var, object]]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   ÚNotImplementedErrorr   )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                ó   ‡ ‡— dˆ ˆfd„}|S )Nr!   r"   r   r   c                ó4   •— ‰                      ‰| ¦  «         ‰S r   )r$   )r!   r   r   s    €€r   r*   zDispatcher.register.<locals>._3   s   ø€ Ø�HŠH�Y Ñ%Ô%Ð%ØˆKr   ©r!   r"   r   r   © )r   r   r*   s   `` r   ÚregisterzDispatcher.register2   s.   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð ˆr   N)r   r   r   r   )r   r    r!   r"   r   r   ©r%   r&   r'   r&   r   r&   )r%   r    r   r,   )r   r&   r   r"   )Ú__name__Ú
__module__Ú__qualname__r   r$   r+   r)   r7   r6   r   r   r   r      sx   € € € € € ð)ð )ð )ð )ð
-ð -ð -ð -ð%ð %ð %ð %ð
ð 
ð 
ð 
ð$ð ð ð ð ð r   r   c                  ó   — e Zd ZdZd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
    r%   r&   r'   r   c                ó~   — |                       |¦  «        \  }}d„ |                     ¦   «         D ¦   «         } |di |¤ŽS )Nc                ó$   — i | ]\  }}|j         |“ŒS r6   )Útoken©Ú.0ÚkÚvs      r   ú
<dictcomp>z*VarDispatcher.__call__.<locals>.<dictcomp>M   s    € Ð.Ð.Ð.™D˜A˜qˆQŒW�aÐ.Ð.Ð.r   r6   )r)   Úitems)r   r%   r'   r!   r1   Úds         r   r+   zVarDispatcher.__call__K   sD   € Ø—,’,˜tÑ$Ô$‰ˆˆaØ.Ð. A§G¢G¡I¤IÐ.Ñ.Ô.ˆØˆtˆyˆy�aˆyˆyÐr   Nr8   )r9   r:   r;   Ú__doc__r+   r6   r   r   r=   r=   :   s2   € € € € € ðð ð ð ð ð ð ð r   r=   zdict[str, Dispatcher]Úglobal_namespacer   r&   r'   r   r"   c                 óˆ   ‡ ‡‡— |                      dt          ¦  «        Š|                      dt          ¦  «        Šdˆˆˆ fd„}|S )NÚ	namespacer   r!   r"   r   c                óv   •— | j         }|‰vr ‰|¦  «        ‰|<   ‰|         }|                     ‰| ¦  «         |S r   )r9   r$   )r!   r   rG   Údispatcher_clsrK   r   s      €€€r   r*   zmatch.<locals>._\   sJ   ø€ ØŒ}ˆà�yÐ Ð Ø,˜n¨TÑ2Ô2ˆI�d‰OØ�dŒOˆà	�Šˆi˜ÑÔÐàˆr   r5   )ÚgetrI   r   )r   r'   r*   rM   rK   s   `  @@r   ÚmatchrO   T   sg   øøø€ Ø'-§z¢zØÕ%ñ(ô (€Ið (.§z¢zØ•jñ(ô (€Nð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð €Hr   ÚaÚbÚboolc                ó  — 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 r6   r   rA   s      r   rE   zsupercedes.<locals>.<dictcomp>q   sJ   € ð 	ð 	ð 	áˆAˆqÝ�Q‰xŒxð	õ  % Q™xœxð	Ø	ˆ1ð	ð 	ð 	r   )r   r   rF   r   )rP   rQ   r1   s      r   Ú
supercedesrU   j   sš   € åˆQ�x„xð �˜a™œð ØˆtÝˆa�‰Œ€AØˆE€z€zØˆuð	ð 	à—G’G‘I”Ið	ñ 	ô 	€Aõ
 ˆQ��{„{�aÒÐØˆtÝˆQ��{„{�aÒÐØˆuØˆ5r   Útie_breakerúCallable[[object], int]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)rU   )rP   rQ   rV   s      r   ÚedgerY   ~   sM   € õ �!�QÑÔð Ý�a˜ÑÔð 	Ø�;˜q‘>”> K K°¡N¤NÒ2Ð2à�4Øˆ5r   Ú
signaturesúIterable[object]úlist[object]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 r6   )rY   )rB   rP   rQ   rZ   s      €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 r6   r6   )rB   rP   rQ   s      r   r_   z'ordering.<locals>.<dictcomp>.<listcomp>•   s   € Ð!Ð!Ð!‘t�q˜!�Ð!Ð!Ð!r   r6   rA   s      r   rE   zordering.<locals>.<dictcomp>•   s-   € Ð<Ð<Ð<¡d a¨ˆQÐ!Ð!˜qÐ!Ñ!Ô!Ð<Ð<Ð<r   )ÚlistÚmapÚtupler   r   rF   r   )rZ   Úedgesr1   s   `  r   r   r   ‹   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)r   r&   r'   r&   r   r"   )rP   r&   rQ   r&   r   rR   )rP   r&   rQ   r&   rV   rW   r   rR   )rZ   r[   r   r\   )Ú
__future__r   Útypingr   Úcorer   r   Úcollections.abcr   r	   Úvariabler
   Úunification_toolsr   r   Úutilsr   r   r   r   r=   rI   Ú__annotations__rO   rU   ÚhashrY   r   r6   r   r   ú<module>ro      s‡  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ð Ð ð ð Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2àÐÐÐÐÐà -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ð%ð %ð %ð %ð %ñ %ô %ð %ðPð ð ð ð �Jñ ô ð ð. +-Ð Ð ,Ð ,Ð ,Ñ ,ðð ð ð ð,ð ð ð ð( GKð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð r   