Ë
    ÄÓ^j
  ã            
       óŠ   — d dl mZ d dlmZ d dlmZmZ deeef   dedeeef   fd„Z	ded	ed
ee
dz  ee
dz  egef   defd„Zy)é    )ÚCallable)ÚAny)ÚContextÚTreeSpecÚuser_kwargsÚspecÚreturnc                 óÞ  — |j                   t        urt        d|j                   › �«      ‚|j                  dk7  rt        d|j                  › �«      ‚|j	                  d«      }|j                   t
        urt        d|j                   › �«      ‚t        | «      t        |j                  «      k7  r$t        dt        | «      › d|j                  › �«      ‚i }|j                  D ]
  }| |   ||<   Œ |S )aX  Reorder user-provided kwargs to match the order in `spec`. `spec` is
    expected to be the in_spec of an exported program, i.e. the spec that
    results from flattening `(args, kwargs)`.

    We need this to provide consistent input ordering, such so that users can
    pass in foo(a=a, b=b) OR foo(b=b, a=a) and receive the same result.
    z(Expected spec type to be tuple, but got é   z*Expected spec to have 2 children, but got é   z.Expected kwargs_spec type to be dict, but got z>Ran into a kwarg keyword mismatch: Got the following keywords z but expected )
ÚtypeÚtupleÚAssertionErrorÚnum_childrenÚchildÚdictÚsetÚcontextÚ
ValueErrorÚlist)r   r   Úkwargs_specÚreordered_kwargsÚkws        úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/export/_tree_utils.pyÚreorder_kwargsr      s  € ð ‡y�yœÑÜÐGÈÏ	É	À{ÐSÓTÐTØ×Ñ˜AÒÜØ8¸×9JÑ9JÐ8KÐLó
ð 	
ð —*‘*˜Q“-€KØ×ÑœtÑ#ÜØ<¸[×=MÑ=MÐ<NÐOó
ð 	
ô ˆ;Óœ3˜{×2Ñ2Ó3Ò3Üð*Ü*.¨{Ó*;Ð)<¸NÈ;×K^ÑK^ÐJ_ðaó
ð 	
ð
 ÐØ×!Ñ!ò /ˆØ*¨2™Ð˜Òð/ð Ðó    Úspec1Úspec2Úequivalence_fnNc                 ó  —  || j                   | j                  |j                   |j                  «      sy| j                  |j                  k7  ryt        | j	                  «       |j	                  «       «      D ]  \  }}t        |||«      rŒ y y)a,  Customizable equivalence check for two TreeSpecs.

    Arguments:
        spec1: The first TreeSpec to compare
        spec2: The second TreeSpec to compare
        equivalence_fn: A function to determine the equivalence of two
            TreeSpecs by examining their types and contexts. It will be called like:

                equivalence_fn(spec1.type, spec1.context, spec2.type, spec2.context)

            This function will be applied recursively to all children.

    Returns:
        True if the two TreeSpecs are equivalent, False otherwise.
    FT)r   r   r   ÚzipÚchildrenÚis_equivalent)r   r   r   Úchild_spec1Úchild_spec2s        r   r#   r#   )   s{   € ñ( ˜%Ÿ*™* e§m¡m°U·Z±ZÀÇÁÔOØð ×Ñ˜U×/Ñ/Ò/Øä$'¨¯©Ó(8¸%¿.¹.Ó:JÓ$Kò Ñ ˆ�[Ü˜[¨+°~ÕFÙðð r   )Úcollections.abcr   Útypingr   Útorch.utils._pytreer   r   r   Ústrr   r   Úboolr#   © r   r   ú<module>r,      s}   ðÝ $Ý ç 1ð  S¨# X¡ð °hð À4ÈÈSÈÁ>ó ðDØðàðð ˜d T™k¨7°D¸4±KÀÐIÈ4ÐOÑPðð 
ô	r   