
    9jY                        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 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mZmZmZmZmZmZ d dlmZ erd d	lmZ  G d
 de      ZdedefdZ de	jB                  jD                  ddfdZ#de	jB                  jD                  ddfdZ$de	jB                  jD                  ddfdZ% G d de&      Z'dede(defdZ) G d de'      Z* G d de*      Z+d!dZ,d!dZ-de(de&e*   fd Z.y)"    N)Iterable)AnyfinalTYPE_CHECKING)is_opaque_type)HigherOrderOperator
OpOverload)
FakeTensor)CustomObjArgument	InputKindSymBoolArgumentSymFloatArgumentSymIntArgumentTensorArgumentTokenArgument)GraphModule)ExportedProgramc                       e Zd Zy)SpecViolationErrorN)__name__
__module____qualname__     V/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_export/verifier.pyr   r      s    r   r   opreturnc                 0    | j                   j                   S N)_schema
is_mutabler   s    r   is_functionalr#       s    zz$$$$r   nodec                     t        |       S r   )
_check_val)r$   s    r   _check_has_fake_tensorr'   $   s    dr   c                 ,   ddl mmm fdd }d| j                  vr;| j
                  dk(  r || j                        ry t        d| j                   d      | j                  d   } |      st        d| j                   d	|       y )
Nr   )SymBoolSymFloatSymIntc                    | yt        | t        t        t        t        f      ryt        | t
        j                  t
        j                  t
        j                  t
        j                  f      ryt        | t        t
        j                  f      ryt        | f      ryt        | t              ryt        | t              rt        fd| D              S t        t!        |             ryy)NTc              3   .   K   | ]  } |        y wr   r   ).0x_check_correct_vals     r   	<genexpr>z9_check_val.<locals>._check_correct_val.<locals>.<genexpr>>   s     :)!,:s   F)
isinstanceintboolstrfloattorchmemory_formatdtypedevicelayoutr
   Tensorr   r   allr   type)valr)   r*   r+   r0   s    r   r0   z&_check_val.<locals>._check_correct_val,   s    ;c4e45%%%u{{ELL%,,O
 *ell+
 fh89./X&:c:::DI&r   c                 h    t        | t              syt        | j                  j                        dk(  S )NFr   )r2   r	   lenr    returnsr"   s    r   _no_returnsz_check_val.<locals>._no_returnsC   s)    "j)2::%%&!++r   r?   call_function
Node.meta z is missing val field.z has invalid val field )	%torch.fx.experimental.symbolic_shapesr)   r*   r+   metar   targetr   name)r$   rC   r?   r)   r*   r+   r0   s      @@@@r   r&   r&   )   s    OO.,
 DII77o%+dkk*B :dii[8N!OPP
))E
Cc" :dii[8OPSu!UVV #r   c                    | j                   j                  d      }|t        d| j                         t	        |t
              sCt	        |d   t              r/t	        |d   t              rt        d| j                   d|       y y y )Ntorch_fnz*Unable to find torch_fn metadata for node r      rE   z has invalid torch_fn field )rG   getr   rI   r2   tupler5   )r$   rK   s     r   _check_torch_fnrO   R   s    yy}}Z(H 8D
 	
 x'x{C(x{C( #?zJ
 	
 ) ) (r   c                   2    e Zd ZU i Zeeed   f   ed<   d Zy)_VerifierMetaVerifier	_registryc                    |r<d|v sd|v rt        d      d|vs|d   dk(  rTt        d|j                  d             d|vrt        d      d|vrt        d      |d   dk7  rt        d	|d          t        |d   t              st        d
t        |d                t
        j                  | |||      }|| j                  |d   <   |S )Ncheck_check_graph_modulez'Overriding method check is not allowed.dialectATENz,subclass must define dialect != 'ATEN', got z%base class must define 'check' methodz3base class must define '_check_graph_module' methodz'base class dialect must be 'ATEN', got zdialect must be str, got )SyntaxErrorAssertionErrorrM   r2   r5   r>   __new__rS   )metaclsrI   basesattrsrets        r   r[   z_VerifierMeta.__new__e   s   %#8E#A!"KLL%y)9V)C$B599YCWBXY  e#$%LMM$E1$I  Y6)$=eI>N=OP  %	*C0 #<T%	BR=S<T!UVVll7D%7.1%	*+
r   N)	r   r   r   rS   dictr5   r>   __annotations__r[   r   r   r   rQ   rQ   b   s     -/ItCj))*/r   rQ   objrH   c           	          |j                  d      }| }t        |      D ]=  \  }}t        ||      s t        ddj	                  |d |              t        ||      }? |S )N.z#Node referenced nonexistent target )split	enumeratehasattrRuntimeErrorjoingetattr)rb   rH   target_atomsattr_itriatoms         r   getattr_recursivero      st    <<$LH\* +4x&5chh|BQ?O6P5QR  8T*+ Or   c                       e Zd ZdZdefdZdeee   df   fdZ	deee   df   fdZ
deee   df   fdZd Zd	edd
fdZedd       Zed	ej$                  j                  dd
fd       Zy
)rR   rX   r   c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  t         j(                  t         j*                  t,        j.                  t,        j0                  t,        j2                  t4        gS r   )operatorgetitemaddmulsubtruedivgelegtlteqnefloordivmodand_or_not_pownegabslshiftrshiftmathceilfloortruncroundselfs    r   allowed_builtin_opszVerifier.allowed_builtin_ops   s    LLLLLLKKKKKKKKKKKKLLMMLLMMLLLLLLOOOOIIJJJJ3
 	
r   .c                     t         t        fS r   )r	   r   r   s    r   allowed_op_typeszVerifier.allowed_op_types   s    /00r   c                 ~    t         j                  j                  t         j                  j                  j
                  fS r   )r7   fxr   utils_pytreeTreeSpecr   s    r   allowed_getattr_typeszVerifier.allowed_getattr_types   s'    $$ekk&9&9&B&BCCr   c                     t         j                  j                  t         j                  j                  j
                  t         j                  t         j                  j                  j                  fS r   )
r7   r   r   nn	parameter	Parameterr<   r   r   r   r   s    r   allowed_getattr_types_for_subgmz(Verifier.allowed_getattr_types_for_subgm   sH     HH  HH((LLKK((	
 	
r   c                      y r   r   )r   r   s     r   check_valid_opzVerifier.check_valid_op   s    r   gmNc                      y)zG
        Additional checks that are specific to some dialects.
        Nr   )r   r   s     r   check_additionalzVerifier.check_additional   s    r   c                 f    | j                  |j                         t        |       t        |       y r   )rV   graph_module*_verify_exported_program_module_call_graph"_verify_exported_program_signature)r   eps     r   rU   zVerifier.check   s$      1226*2.r   c                     dt         t        t           df   f fd}d fd}|j                         D ]  }||u }t	        |t
        j                  j                        s-|j                  j                          |j                  j                  D ]Y  }|j                  dv rt        d|j                   d      |j                  dk(  rt        |        ||j                         X|j                  d	k(  rt	        |j                  t              s!t        d
t        |j                               t!        ||j                        t	        t
        j"                  j$                        rfd}t              j&                  dk(  r |dt              r*t)        d      rt)        d      rt+        dd       dk(  r2 |dt              r( |dt,              r |dt.              rt)        d      rgt+        dd       }t+        dd       }	t+        dd       }
t        dt               dt        |       dt        |	       dt        |
             t              j&                  dk(  rt              j&                  dk(  rt	         ||            rt        dt               d|j                   d ||             |j                  dk(  sOt        |       \   j1                  |       y )Nr   .c                     | rj                         }nj                         }t        d |D              rt        d      |S )Nc              3   ,   K   | ]  }|t         u   y wr   objectr.   ts     r   r1   zOVerifier._check_graph_module.<locals>._allowed_getattr_types.<locals>.<genexpr>   s     ,11;,   z/allowed_getattr_types must not contain 'object')r   r   anyrZ   )is_toplevel_gmr_   r   s     r   _allowed_getattr_typesz<Verifier._check_graph_module.<locals>._allowed_getattr_types   sA    002::<,,,$%VWWJr   c                 ^   dt         ffd}dt        t        t           df   ffd}t        j
                  j                  j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   j"                  j$                  t        j&                  j(                  t        j*                  j,                  j.                  t        j*                  j,                  j0                  t        j2                  j4                  j6                  j8                  t        j:                  j<                  j>                  t        j:                  j<                  j@                  t        j:                  j<                  jB                  t        j:                  j<                  jD                  t        j:                  j<                  jF                  f}tI        |  |             s.|  |       vr%| |vr!tK        d|  d |        d |        d|       tI        | tL              r)jN                  d	k7  rtQ        |       stK        d
|  d      jS                  |        y )Nr   c                  b    j                         } t        d | D              st        d      | S )Nc              3   F   K   | ]  }t        j                  |        y wr   )inspect	isbuiltin)r.   r   s     r   r1   zfVerifier._check_graph_module.<locals>._check_valid_op.<locals>._allowed_builtin_ops.<locals>.<genexpr>   s     ?R7,,R0?s   !z(allowed_builtin_ops must all be builtins)r   r=   rZ   r_   r   s    r   _allowed_builtin_opszSVerifier._check_graph_module.<locals>._check_valid_op.<locals>._allowed_builtin_ops   s0    ..0?3??()STT
r   .c                  b    j                         } t        d | D              rt        d      | S )Nc              3   ,   K   | ]  }|t         u   y wr   r   r   s     r   r1   zcVerifier._check_graph_module.<locals>._check_valid_op.<locals>._allowed_op_types.<locals>.<genexpr>   s     0qqF{0r   z*allowed_op_types must not contain 'object')r   r   rZ   r   s    r   _allowed_op_typeszPVerifier._check_graph_module.<locals>._check_valid_op.<locals>._allowed_op_types   s0    ++-0C00()UVV
r   z
Operator 'z#' is not an allowed operator type: z
Valid builtin ops: zValid torch functions: TRAININGz
operator 'z' is not functional)*listrN   r>   r   r7   autograd	grad_modeset_grad_enabledsym_int	sym_floatsym_itesym_maxsym_minsym_notsym_sqrtsym_sumexport
custom_ops._call_custom_autograd_function_in_pre_dispatch_C_set_grad_enabledampautocast_mode_enter_autocast_exit_autocastr   experimentalsymbolic_shapes cast_symbool_to_symint_guardless
_functorchpredispatch_add_batch_dim_remove_batch_dim_vmap_increment_nesting_vmap_decrement_nestinglazy_load_decompositionsr2   r   r	   rW   r#   r   )r   r   r   _allowed_torch_functionsr   s       r   _check_valid_opz5Verifier._check_graph_module.<locals>._check_valid_op   s   $ uT#Y^'<  ((99''VV **		''77		''66%%55VV  ,,;;  ,,>>  ,,DD  ,,DD  ,,EE-($2 b"3"56244"::,$RD(KL]L_K` a..B.D-E12J1KM  "j) <<:-mB6G,z"=P-QRR#r   >   call_methodcall_modulez'call_module is not valid: got a class 'z' rD   get_attrz/Expected get_attr target to be string, but got c                 2    t        t        | d       |      S r   )r2   rj   )rI   tyattrs     r   _is_typez.Verifier._check_graph_module.<locals>._is_type)  s    #-gdD$.G#LLr   LoweredBackendModule
backend_idoriginal_modulemodule_nameaotiprocessed_bytescompile_specszInvalid get_attr type z2. 
LoweredBackendModule fields: backend_id(str) : z, processed_bytes(bytes) : z, compile_specs(list) : AOTInductorEPModuleAOTInductorRunnerWrapperz on target z. 
Valid get_attr types: placeholderr   N)rN   r>   r   modulesr2   r7   r   r   graphlintnodesr   r   rH   r&   r5   ro   r   Moduler   rg   rj   bytesr   r   )r   r   r   r   r   r   r$   r   r   r   r   r   s   `          @r   rV   zVerifier._check_graph_module   s   	eDIsN6K 	7	$r ::< F	%C BYNc588#7#78IINN		 ?%77<<,A$++bQ  WW/t$#DKK0WW
*%dkk370MdSWS^S^N_M`a  -S$++>D!$8M  :..2HH (s ;$+D2C$D$+D-$@$+D,$E$O ( (s ;$,->$F$,_d$C$+D2C$D (-4T<-N
29$@QSW2X07ot0T&8&<T$ZL I99=j9I8J K@@D_@U?V W==A-=P<Q	%S'" !" "$Z004II$!$Z004NN$%d,B>,RS04T$ZLDKK= Y55KN5[4\^ 
 WW-t$?%F	%V 	b!r   )r   r   r   N)r   r   r   rW   r   r   rN   r>   r   r   r   r   r   r   r   r   rU   r7   r   rV   r   r   r   rR   rR      s    G
T 
:1%S	3"7 1DuT#Y^'< D
tCy#~1F 
; 4 
 / /
 N"ehh&:&: N"t N" N"r   rR   )	metaclassc                       e Zd ZdZy)TrainingIRVerifierr   N)r   r   r   rW   r   r   r   r   r   [  s    Gr   r   c                    | j                   }| j                  j                  D ch c]  }|j                   }}|D ]  }|j                  |j                  j
                  D ]6  }|j                  s|j                  |vst        d|j                   d       |j                  j                  D ]6  }|j                  s|j                  |vst        d|j                   d        y c c}w )NzInput z does not exist in the graph.zOutput )module_call_graphr   r   rI   	signatureinputsr   outputs)exported_programr   r$   r   entryargs         r   r   r   _  s    (::#3#9#9#?#?@4TYY@E@" ??&-- 88 5, 
*GH 
 .. 88 5,!#((+HI  As   C-c           
         | j                   }| j                  j                  D cg c]  }|j                  dk(  s|j                    }}t        |      t        |j                        k7  r|j                  D cg c]/  }t        |j                  d      s|j                  j                  1 }}t        |      t        |      z
  }t        |      t        |      z
  }t        dt        |       dt        |j                         d| d|       t        |j                  |      D ]L  \  }}t        |j                  t        t        t        t         f      r>|j                  j                  |k7  r%t        d|j                  j                   d|       |j"                  t$        j&                  k(  r|j"                  t$        j(                  k(  rt        |j                  t              s&t        d	|j                   d
|j                   d      |j*                  t        d|j                   d      |j*                  }	|	| j,                  vrt        d	|	 d      t        | j,                  |	   t.        j0                  j2                        rkt        d|	 d      |j"                  t$        j4                  k(  rt        |j                  t              s&t        d|j                   d
|j                   d      |j*                  t        d|j                   d      |j*                  }
|j6                  t        d|
 d      |j6                  du r|
| j,                  vrt        d|
 d      |j6                  du s^|
| j,                  v snt        d|
 d      |j"                  t$        j8                  k(  rt        |j                  t              s&t        d|j                   d
|j                   d      |j*                  t        d|j                   d      |j*                  }|| j:                  vst        d| d      |j"                  t$        j<                  k(  rt        |j                  t>              s&t        d|j                   d|j                   d      |j*                  t        d|j                   d      |j*                  }|| j:                  vst        d| d      |j"                  t$        j@                  k(  rBt        |j                  tB              rt        d|j                   d
|j                   d      t        d|j"                   d       tE        | j                  j                        d   }|j                  dk7  rtG        d|j                         |jH                  d    D cg c]4  }t        |t.        jJ                  jL                        r|j                  n|6 }}t        |      t        |jN                        k7  r|jN                  D cg c]C  }t        |j                  d      r|j                  j                  ntQ        |j                        E }}t        |      t        |      z
  }t        |      t        |      z
  }t        d!t        |       d"t        |jN                         d#| d$|       t        |jR                        }t        |jT                        t        |jV                        z   t        |jX                        z   |z   }||| }|||t        |jZ                        z    }|D ]"  }||jT                  v rE|jT                  |   |j\                  vs.t        d%| d&|jT                   d'|j\                   d(      ||jV                  v rE|jV                  |   |j^                  vst        d)| d*|jV                   d+|j^                   d(      ||jX                  v rE|jX                  |   |j`                  vst        d,| d-|jX                   d.|j`                   d(      t        d/| d0|jT                   d1|jX                          t        ||jZ                        D ]&  \  }}||k7  st        d2| d3|jZ                   d4       y c c}w c c}w c c}w c c}w )5Nr   rI   zNumber of graph inputs (z:) does not match number of inputs in the graph signature (z$)
Placeholders missing input_specs: z#
Input_specs missing placeholders: zInput spec name z does not match node name z
Parameter z! is not a tensor argument. Found z	 instead.zInputSpec for z has no target.z is not in the state dict.zState dict entry for parameter z* is not an instance of torch.nn.Parameter.zBuffer z is missing a persistence flagTFzNon-persistent buffer z( is in the state dict, it should not be.zConstant tensor z$ is not in the constants dictionary.zCustom object z( is not a custom object argument. Found zUnknown InputKind rd   outputzlast node must be output, got r   zNumber of output nodes zK is different Than the number of outputs specified by the graph signature: z
Nodes missing output_specs: z
Output_specs missing nodes: zBuffer output zV does not point to a buffer that exists. 
Dict of buffers that are mutated, in order: z 
Buffer nodes available: z 
zParameter output z\ does not point to a parameter that exists. 
Dict of parameters that are mutated, in order: z 
Parameter nodes available: zUser input output z^ does not point to a user input that exists. 
Dict of user inputs that are mutated, in order: z 
User input nodes available: zMutation node z: is neither a buffer nor a user input. Buffers to mutate: z, User inputs to mutate: zUser output zY is not in the correct order or is not found in the exported program's user_output list: z. )1graph_signaturer   r   r   rI   rA   input_specsrg   r   setr   zipr2   r   r   r   r   kindr   
USER_INPUT	PARAMETERrH   
state_dictr7   r   r   BUFFER
persistentCONSTANT_TENSOR	constants
CUSTOM_OBJr   TOKENr   r   rZ   argsr   Nodeoutput_specsr5   output_tokensbuffers_to_mutateparameters_to_mutateuser_inputs_to_mutateuser_outputsbuffers
parametersuser_inputs)r   gsr$   input_node_namesspecinput_spec_namesmissing_in_specsmissing_in_graph
input_specparambuffertensor_const
custom_objoutput_noder   output_nodesoutput_spec_namesmissing_out_specsmissing_out_graph
num_tokensendmutate_nodesuser_output_nodesmutation_nodeuser_output_nodeuser_output_names                             r   r   r   p  s:	   		)	)B /44::dgg>V		  BNN 33&(nn
"&8QDHHMM
 
 /037G3HH/037G3HH &s+;'<&= >GGJ2>>GZF[ \11A0B C11A0BD
 	
  0@A ^N
DNN^-=O
 ~~""d*(&z~~':':&;;UVZU[\  ??i222__	 3 33jnnn=(  11RS]SaSaRbbkl    (($Z__$5_E  %%E,777(:eW<V)WXX.99%@%((BTBTU(5eW<fg  __	 0 00jnnn=(joo..OPZP^P^O__hi    (($Z__$5_E   &&F$$,(fX%CD 
 %%-"2"="==(76(:T)UVV$$-&<L<W<W2W(,VH4\]  __	 9 99jnnn=(&z&77XYcYgYgXhhqr    (($Z__$5_E  &,,L#3#=#==(&|n4XY  __	 4 44jnn.?@($Z__$55]^h^l^l]mmvw    (($Z__$5_E  $**J!1!;!;;($ZL0TU  __	/jnnm<(&z&77XYcYgYgXhhqr  %'9*//9J!%LMM}^NB '--334R8K~~!=knn=MNOO ##A& sEHHMM2;L 
 <C00 
 %TXXv6DHHMMCMI
 
  -4E0FF 12S5FF %c,&7%8 9LLOPRP_P_L`Ka b++<*= >++<*=?
 	
 R%%&JB  !
b%%
&	'
b&&
'	( 	  +:c:L$S3R__1E+EF% B000##M2"**D($]O 4CCECWCWBX Y//1zzl#? 
 b555&&}5R]]J(' 7FFHF]F]E^ _224--E 
 b666''6bnnL(( 8GGIG_G_F` a335>>2B#G  %  0&&(&:&:%;;TUWUmUmTnp /8 /22CR__.U **//$/0 188:7HL ]

`
s#   cc9cc9c:AcrW   c                     | dk(  s| dk(  r$t         j                  j                  | t              S t         j                  |    S )NrX    )rQ   rS   rM   rR   )rW   s    r   load_verifierr6  ,  s:    &GrM&&**7H==""7++r   r   )/r   r   rr   collections.abcr   typingr   r   r   r7   torch._library.opaque_objectr   
torch._opsr   r	   torch._subclasses.fake_tensorr
   torch.export.graph_signaturer   r   r   r   r   r   r   torch.fxr   torch.export.exported_programr   	Exceptionr   r4   r#   r   r  r'   r&   rO   r>   rQ   r5   ro   rR   r   r   r   r6  r   r   r   <module>r@     s      $ , ,  7 6 4   ! =	 	%j %T % 4 
&WUXX]] &Wt &WR
%((-- 
D 
 D <	3 	 	 	L" L"^ "yx,3 ,4> ,r   