
    9j]                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZ d dlZd dlmZ d dlmZmZ d dlmZ ddlmZ erdd	lmZ g d
Z ed       G d de             Zi Zeedef   eej>                     f   e d<   deej>                     fdZ! e!       eejD                  <    G d d      Z#ejH                  ejJ                  ejL                  ejN                  ejP                  jR                  e jT                  ejV                   e#        e,d      ejZ                   ej\                  d      edZ/ e0e      D ]  Z1 e2ee1      e/e1<    dddefdZ3dejh                  jj                  dej>                  fdZ6i Z7ee8e9e9f   ej>                  f   e d<   dejh                  jj                  dej>                  fdZ: ed      dedef   de8d    d!ee9d"f   ddfd#       Z;ed$edef   d%e
d&   de8eej>                     dz  eejh                  jj                     dz  f   fd'       Z<e	 d8d$edef   d%e
d   deej>                     dz  fd(       Z< ed      	 d9d$edef   d%e=deej>                     e8eej>                     dz  eejh                  jj                     dz  f   z  dz  fd)       Z< ed      d*e>de>fd+       Z? ed      d,ed-ede=fd.       Z@ ed      	 	 	 	 d:dedef   de8edf   d!ee9ef   dz  d/e8e   dz  d0ee9ef   dz  d1e=defd2       ZA ed      	 	 	 	 d:dedef   de8edf   d!ee9ef   dz  d/e8e   dz  d0ee9ef   dz  d1e=dedz  fd3       ZB ed      	 	 d;d4ej                  j                  de9de8e   d!ee9ef   dz  d1e=dedz  fd5       ZEd6ej>                  de8edf   d!ee9ef   d1e=dedz  f
d7ZFy)<    N)Callable)AnycastLiteral
NamedTupleoverloadTYPE_CHECKING)boolean_dispatched)
OpOverloadOpOverloadPacket)
_fast_bind   )compatibility)Argument)ArgsKwargsPaircheck_for_mutable_operationget_signature_for_torch_opcreate_type_hinttype_matchesnormalize_functionnormalize_moduleF)is_backward_compatiblec                   :    e Zd ZU dZeedf   ed<   eeef   ed<   y)r   z<
    Simple named tuple for wrapping args/kwargs pairs.
    .argskwargsN)	__name__
__module____qualname____doc__tupler   __annotations__dictstr     Y/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/fx/operator_schemas.pyr   r       s%     S/cNr%   r   ._manual_overridesreturnc                      g } dt         j                  dd fd}| j                  t        j                  |             dt         j                  dt
        dd fd}| j                  t        j                  |             | S )Nselfr(   c                      y Nr$   )r*   s    r&   nonzeroz!_nonzero_schemas.<locals>.nonzero0       r%   as_tuplec                     y r,   r$   )r*   r/   s     r&   r-   z!_nonzero_schemas.<locals>.nonzero5   r.   r%   )torchTensorappendinspect	signaturebool)
signaturesr-   s     r&   _nonzero_schemasr8   -   sx    Jell t  g''01ell  $  g''01r%   c                   0    e Zd Zdedej
                  fdZy)_FakeGlobalNamespacenamer(   c                 .    |dk(  rt         S t        d      )Nr1   z!Expected a torch namespace lookup)r1   RuntimeError)r*   r;   s     r&   __getattr__z _FakeGlobalNamespace.__getattr__A   s    7?L>??r%   N)r   r   r   r#   types
ModuleTyper>   r$   r%   r&   r:   r:   @   s    @ @(8(8 @r%   r:   t)r2   DeviceLayoutnumberFutureAnyEnumTypeQScheme	__torch__NoneTypeStoragerA   PyObjectts_typeztorch._C.JitTypec                 6    t        | j                  t              S )z
    Convert a TorchScript type to a Python type (including subtypes) via
    eval'ing the annotation_str. _type_eval_globals sets up expressions
    like "List" and "Future" to map to actual types (typing.List and jit.Future)
    )evalannotation_str_type_eval_globals)rL   s    r&    _torchscript_type_to_python_typerQ   Y   s     &&(:;;r%   	ts_schemac           	         ddl m} g }| j                  D ]R  }t        |j                        }|j                         r|j                  n|j                  }|j                  dk7  r|j                  nd}|j                  r|j                  n|j                  }|dk(  r||j                  k7  rt        d|       |j                  }t        |      D ]z  \  }}	|	j                  |j                  k7  r%t        d|	j                   d|	j                          ||	j                  |j                  |	j                   |	j"                  	      ||<   | |j%                   |||||	             U | j&                  D 
cg c]  }
t        |
j                         }}
t)        |      dk(  rd }nt)        |      d
k(  r|d   }nt+        |      }t        j,                  ||      S c c}
w )Nr   )	Parameterr*   inputfromz$Expected POSITIONAL_OR_KEYWORD, got z)Expected POSITIONAL_OR_KEYWORD for param z, got )r;   kinddefault
annotationr   )return_annotation)r4   rT   	argumentsrQ   typehas_default_valuedefault_valueemptyr;   
kwarg_onlyKEYWORD_ONLYPOSITIONAL_OR_KEYWORDAssertionErrorPOSITIONAL_ONLY	enumeraterW   rX   rY   r3   returnslenr    	Signature)rR   rT   
parametersargarg_typerX   r;   rW   idxpretreturn_typesreturn_types                r&   %_torchscript_schema_to_signature_implrq   b   s    ""$J"" %
3CHH='*'<'<'>###IOO 88v-sxx7 ~~ ""00 	 6>y666$'KD6%RSS ,,D $J/ 
Q66Y<<<(CAFF86RSRXRXQYZ  #,"22II ||	#
3
 	4dGQ	
G%
N ?H>O>O7:(2L  <A	\	a	"1oL)Z;GGs   9G_SCHEMA_TO_SIGNATURE_CACHEc                     | j                   | j                  f}t        j                  |      }||S t	        |       }|t        |<   |S r,   )r;   overload_namerr   getrq   )rR   	cache_key	cache_valress       r&    _torchscript_schema_to_signaturery      sN     	 7 77I*..y9I
/	
:C,/y)Jr%   targetr   )r   .r   r   c                 \   t        | d      \  }}|r|rg }t        ||      D ](  \  }}	 t        |g|i | |j                  ||f       * dt
        j                  j                  dd fd}t        |      dk(  ry t        |      dk(  r|d   \  }	}
 ||
       y y y y # t        $ r Y w xY w)NT)return_schemasschemar(   c                 :    | j                   rt        d|  d      y )Nz!Tried to trace mutable operation z|. FX only supports functional code, so operations that mutate operands in-place (e.g. via `out` arguments) are not supported)
is_mutabler=   )r}   s    r&   throw_if_mutablez5check_for_mutable_operation.<locals>.throw_if_mutable   s/      "7x @( )  !r%   r   r   )	r   zipr   r3   	TypeErrorr1   _CFunctionSchemarg   )rz   r   r   r7   schemasmatched_schemascandidate_signaturer}   r   _schema_to_checks              r&   r   r      s     5VDQJgSU
 ,/z7+C 	'.@@@&&(;V'DE		UXX%<%< 	 	 1$!Q&!0!3A_- ? z  s   "B	B+*B+opr|   Tc                      y r,   r$   r   r|   s     r&   r   r      s	     SVr%   c                      y r,   r$   r   s     r&   r   r      s     &)r%   c                    t        | t              r| j                  g}nt        | t              r2| j	                         D cg c]  }t        | |      j                   }}not        j                  |       }|r|r|dfS dS t        j                  j                  j                  |       }||rdS dS t        j                  j                  |      }|D cg c]  }t        |       }}|r||fS |S c c}w c c}w )a  
    Given an operator on the `torch` namespace, return a list of `inspect.Signature`
    objects corresponding to the overloads of that op.. May return `None` if a signature
    could not be retrieved.

    Args:
        op (Callable): An operator on the `torch` namespace to look up a signature for

    Returns:
        Optional[List[inspect.Signature]]: A list of signatures for the overloads of this
            operator, or None if the operator signatures could not be retrieved. If
            return_schemas=True, returns a tuple containing the optional Python signatures
            and the optional TorchScript Function signature
    N)NN)
isinstancer   _schemar   	overloadsgetattrr'   ru   r1   jit	_builtins_find_builtinr   _jit_get_schemas_for_operatorry   )r   r|   r   r   overrideaten_fnr}   r7   s           r&   r   r      s    , "j!::,	B(	)ACPX72x(00PP$((,'5Hd#?4?))%%33B7?#1<;t;((88AIPQv26:QJQ$2J B
B Q Rs   C0C5xc                    	 t        | t        t        f      rt        | t              rdt        dt        fd}ndt        dt        fd}t	        |       dk(  r |t              S | d   }| D ]+  }t        ||      rt        ||      r|} |t              c S   ||      S 	 | S # t        $ r t        j                  d|         Y | S w xY w)a  
    Produces a type hint for the given argument.

    The :func:`create_type_hint` looks for a type hint compatible with the input argument `x`.

    If `x` is a `list` or `tuple`, it looks for an object in the list whose type is a superclass
    of the rest, and uses that as `base_type` for the `List` or `Tuple` to be returned.
    If no such object is found, it defaults to `List[Any]`.

    If `x` is neither a `list` nor a `tuple`, it returns `x`.
    r   r(   c                     t         |    S r,   )listr   s    r&   ret_typez"create_type_hint.<locals>.ret_type  s    7Nr%   c                     t         | df   S )N.)r    r   s    r&   r   z"create_type_hint.<locals>.ret_type"  s     C=(r%   r   z@We were not able to successfully create type hint from the type )	r   r   r    r   rg   
issubclass	Exceptionwarningswarn)r   r   	base_typerA   s       r&   r   r     s    
a$'!T"# # #
) ) ) 1v{}$!I )a+	1- !I#C=() I&&- (8 H  
NqcR	
 H
s   A B# #3B# B# #!CCsignature_typeargument_typec                    t        | d|       }| u ry|t        j                  u r%| k7  r | j                  }t	        fd|D              S t        | dd       t
        u r| j                  d   t        u r	t        u ryt        j                        st        j                  d|  d       yt        dd       t
        u rt        j                  d         S dt        d	t        ffd
} |      S | t        u rt        j                  u ry| t         j"                  u rt        t$        hv ryt        j                        r!t        j                  |       rt        |       S y)N
__origin__Tc              3   6   K   | ]  }t        |        y wr,   )r   ).0cr   s     r&   	<genexpr>ztype_matches.<locals>.<genexpr>C  s     Ia<=1Is   r   z.Does not support nested parametric types, got z. Please file a bug.FrA   r(   c                     t        j                  |       t        uryt        j                  |       }|dk(  ryt	        fd|D              S )NF)r$   Tc              3   J   K   | ]  }|t         u xs t        |        y wr,   )Ellipsisr   )r   r   sig_el_types     r&   r   z=type_matches.<locals>.is_homogeneous_tuple.<locals>.<genexpr>Z  s$     XXD*Q*DDXs    #)typing
get_originr    get_argsall)rA   	containedr   s     r&   is_homogeneous_tuplez*type_matches.<locals>.is_homogeneous_tupleT  sC      #50*IE!XiXXXr%   )r   r   Union__args__anyr   intr4   isclassr   r   r   objectr6   r1   dtypenumbersNumberfloat)r   r   sig_origin_typesig_containedr   r   s    `   @r&   r   r   8  sR   nlNKO& &,,&>]+J&//I=III~|T2d:$--a0 CK3$6{+MM@@PPde =,5=m44Q7EE	YF 	Yt 	Y $M22 %++!='Mc5\,I}%'//.*I-88r%   	arg_typeskwarg_typesnormalize_to_only_use_kwargsc                 R    t        | |||||      }|t        d|  d| d|       |S )zb
    Wrapper around normalize_function that never returns None, but
    loudly errors instead
    zFailed to normalize function z with args z and kwargs )r   r=   )rz   r   r   r   r   r   rx   s          r&   _normalize_function_or_errorr   k  sO     fi6RC {+F8;tfLQWPXY
 	
 
r%   c                    |i }d}t        | t        j                        s.t        | t        t        f      st        | d      r| j                  } t        | t        j                        st        | t        t        f      s| }| t        v rpt        | t              rt        d      t        |    }|d   |d   }
}	t        j                  |	      j                  t        j                  |
      j                  k7  ry|	}t        |      st        dt        |             t        j                  t        j                  |            }t!        ||||      }|S t        |       st        dt        |              t#        |       }g }|r5|D ]#  }	 t%        |g|i | |j'                  |       % t+        |      dk(  r	 |S t+        |      d	k(  rt!        |d   |||      }|S |||r|nt-        t.        t0           d
      }|r|ni }|D ]s  }d}	 t%        |g|i |}|j2                  j5                         D ].  \  }}|j                  |   }|xr t7        |j8                  |      }0 	 |sdt!        ||||      } |S  |S dj;                  d |D              }t=        dt?        j@                  |        d|       |S # t(        $ r Y Aw xY w# t(        $ r d}Y rw xY w)a  
    Returns normalized arguments to PyTorch functions. This means that
    `args/kwargs` will be matched up to the functional's
    signature and return exclusively kwargs in positional order if
    `normalize_to_only_use_kwargs` is True.
    Also populates default values. Does not support positional-only
    parameters or varargs parameters (*args, **kwargs). Does not support modules.

    May require `arg_types` and `kwarg_types` in order to disambiguate overloads.

    Args:
        target (Callable): Function that we are normalizing
        args (Tuple[Any]): Tuple of args to the function
        kwargs (Optional[Dict[str, Any]]): Dict of kwargs to the function
        arg_types (Optional[Tuple[Any]]): Tuple of arg types for the args
        kwarg_types (Optional[Dict[str, Any]]): Dict of arg types for the kwargs
        normalize_to_only_use_kwargs (bool): Whether to normalize to only use kwargs.

    Returns:

        Returns normalized_args_and_kwargs, or `None` if not successful.
    N_opz"target should not be a string hereif_trueif_falsez*target_for_analysis must be callable, got ztarget must be callable, got r   r   r$   TF
c              3   2   K   | ]  }t        |        y wr,   )r#   )r   r}   s     r&   r   z%normalize_function.<locals>.<genexpr>  s      1(.F1s   z Tried to normalize arguments to zy but the schema match was ambiguous! Please provide argument types to the normalize_arguments() call. Available schemas:
)!r   r?   BuiltinFunctionTyper   r   hasattrr   r
   r#   rc   r4   r5   ri   callabler\   unwrap&_args_kwargs_to_normalized_args_kwargsr   r   r3   r   rg   r   r    r   r[   itemsr   rY   joinr=   r1   typename)rz   r   r   r   r   r   new_args_and_kwargstarget_for_analysis
dispatchedr   r   sigtorch_op_schemasr   r   sig_matchesbound_typesarg_namerk   paramschema_printoutss                        r&   r   r     sp   > ~vu889F%5z$BCFE"  fe7786,j9:$''
 &#&$%IJJ+F3J *9 5z*7MXG!!'*55$$X.99: ")+, <TBU=V<WX  /B CDDv;
D }  #@f!OPP5f=35 (8 #2DTDVD#**+>? ?#q(Z Y _%*&L#A&f6R'#T M (K,C-6	DsR<PI1<+"K/? "+&*
0*4 3+6?+CN+K 7B6K6K6Q6Q6S " 2((;(F(Fx(P.9 /"l$)$4$4h?"" ' F$7$($*$@	!" 0 " G"F  (,yy 12A1 ($ ':5>>&;Q:R SOO_N`b  e ! 4  ) 0*/K0s%    J<AK<	K	K	KKrootc                    	 | j                  |      }t        |j                  d      r|j                  j
                  }t        t        j                  |d      |j                  k(  rFt        j                  t        j                  |j                              }|i }t        ||||      }	|	S y# t        $ r}t        d| d      |d}~ww xY w)a(  
    Returns normalized arguments to PyTorch modules. This means that
    `args/kwargs` will be matched up to the functional's
    signature and return exclusively kwargs in positional order if
    `normalize_to_only_use_kwargs` is True.
    Also populates default values. Does not support positional-only
    parameters or varargs parameters (*args, **kwargs).

    Args:
        root (nn.Module): root module upon which we query modules
        target (Callable): Function that we are normalizing
        args (Tuple[Any]): Tuple of args to the function
        kwargs (Optional[Dict[str, Any]]): Dict of kwargs to the function
        normalize_to_only_use_kwargs (bool): Whether to normalize to only use kwargs.

    Returns:

        Returns normalized_args_and_kwargs, or `None` if not successful.
    z$Tried to normalize node with target z# but root did not have that target!Nr   )get_submoduleAttributeErrorr=   r   	__class__r   r   r1   nnr4   r5   r   forwardr   )
r   rz   r   r   r   submode	classnamer   r   s
             r&   r   r     s    6##F+ v,$$--	588Y-1A1AA##GNN6>>$BCC~"HT6#?# '&  26( ;  !
 	s   B. .	C7CCr   c                 B  	 t         j                  j                  t         j                  j                  h	t	        	fd| j
                  j                         D              r)t        | j
                  j                               g dk7  ryt        | g|i |}|j                          i }g }t        | j
                        D ]F  \  }}|s-|t        |      k  r|j                  |j                  |          5|j                  |   ||<   H t        t!        |      |      S )a  
    Given a call target, args, and kwargs, return the arguments normalized into
    an ArgsKwargsPair, or None if the type signature is not supported by
    this normalization.

    Args:

        sig (inspect.Signature): Signature object for the target
        args (Tuple): Arguments that appear at the callsite for `target`
        kwargs (Dict): Keyword arguments that appear at the callsite for `target`
        normalize_to_only_use_kwargs (bool): Whether to normalize to only use kwargs.

    Returns:

        Optional[ArgsKwargsPair]: Normalized args and kwargs for `target`, or `None` if
            this target is not supported.
    c              3   :   K   | ]  }|j                   v  y wr,   )rW   )r   rm   supported_parameter_typess     r&   r   z9_args_kwargs_to_normalized_args_kwargs.<locals>.<genexpr>\  s     
Tq16622
Ts   )rU   rV   to	generatorN)r4   rT   rb   ra   r   ri   valuesr   keysr   apply_defaultsre   rg   r3   r[   r   r    )
r   r   r   r   
bound_args
new_kwargsnew_argsir   r   s
            @r&   r   r   >  s    6 	//&&! 
TCNN<Q<Q<S
TT
 ##%&*NNC1$1&1J!#JHcnn- <5+CIOOJ0078 * 4 4U ;Ju	< %/:66r%   ).)F)NNNF)NF)Genumr4   r   r?   r   r   collections.abcr   r   r   r   r   r   r	   r1   torch._jit_internalr
   
torch._opsr   r   torch.utils._inspectr   _compatibilityr   noder   __all__r   r'   r"   r   rh   r!   r8   r-   r:   r2   devicelayoutr   r   rE   Enumqschemer\   UntypedStorageTypeVarrP   dirkr   rQ   r   r   rq   rr   r    r#   ry   r   r   r6   r   r   r   r   r   r   Moduler   r   r$   r%   r&   <module>r     s         $ J J  2 3 + )  e,Z  - HJ 4c*D1B1B,CCD I$w001   $4#5 %--  @ @ llllllnnii99}}%'T
##		  
V /A#FA.q/<.@ <S <6Hxx&&6H6Hr HJ DsCx'2C2C!CD Ixx&& e,&S#X&

 & j!& 
	& -&R 
VcV,3DMV
4!!"T)40G0G+H4+OOPV 
V
 
=@)c),3EN)	'

t#) 
)
 e,38%Cc%C,0%C 			D""#d*D1H1H,ID,PPQR
%C -%CP e,) )6 ) -)X e,/ /S /T / -/d e, %)#')-).S#X
S/ cNT! SzD 	
 c3h$& #'  -. e, %)#')-).HS#XH
S/H cNT!H SzD 	H
 c3h$&H #'H dH -HV e,
 %)).+
((//++ *+ cNT!	+
 #'+ d+ -+\17			17
S/17 cN17 #'	17
 d17r%   