
    ȅi1                     ,   S SK Jr  S SKrS SKJs  Js  Jr  S SKJs  Js  Js  J	r
  S SKJs  Js  Js  Jr  S SKJs  Js  J	r  S SKJs  Js  Jr  S SKJs  Js  Js  Jr  S SKJr  S SKJs  Jr  S SKJr  S SKJr  SSKJrJr  SSK J!r!J"r"J#r#  \RH                  R                  r%S\RL                  S	\RN                  4S
 jr(S\RL                  S	\RN                  4S jr)S\RL                  S	\RN                  4S jr*S\RL                  S	\+\RN                     4S jr,S\RL                  S	\+\RN                     4S jr-S\RL                  S	\RN                  4S jr.S\RL                  S	\RN                  4S jr/S\RL                  S	\+\RN                     4S jr0S\S\S	\RN                  4S jr1S\S\S	\RN                  4S jr2S\S\S	\RN                  4S jr3S\S\S	\RN                  4S jr4S	\5\6\5\\4   4   4S jr7 SS\S\S\5\6\5\\4   4   S-  S	\S-  4S jjr8g)    )CallableN)GraphModule)Node   )NSSingleResultTypeNSSingleResultValuesType)get_target_type_strgetattr_from_fqnreturn_first_non_observer_nodemodreturnc                 6    U R                   R                  5       $ Nweightdetachr   s    U/home/james-whalen/.local/lib/python3.13/site-packages/torch/ao/ns/fx/weight_utils.pymod_weight_detachr      s    ::    c                 <    U S   R                   R                  5       $ Nr   r   r   s    r   mod_0_weight_detachr      s    q6==!!r   c                 (    U R                  5       S   $ r   )_weight_biasr   s    r   mod_weight_bias_0r      s    a  r   c                     / n[        U R                  5       HA  u  p#SU;   d  SU;   d  M  U R                  U   R                  5       nUR	                  U5        MC     U$ )Nweight_ih_lweight_hh_l)	enumerate_flat_weights_names_flat_weightsr   append)r   residx
param_nameparam_values        r   get_lstm_weightr(   "   sY    
C$S%<%<=J&-:*E++C0779KJJ{# > Jr   c                 H   / nU R                    H  nUR                  UR                  R                  5       S   S   S   R                  5       S   S   5        UR                  UR                  R                  5       S   S   S   R                  5       S   S   5        M     U$ )Nr      r   )_all_weight_valuesr#   param__getstate__)r   r$   weight_values      r   get_qlstm_weightr/   +   s    
C..

<%%224Q7:1=JJLQOPQRS

<%%224Q7:1=JJLQOPQRS / Jr   c                    [        U [        R                  [        R                  [        R                  45      (       a  U R
                  R                  5       $ [        U [        R                  [        R                  [        R                  45      (       a  U S   R
                  R                  5       $ U R                  5       S   $ r   )
isinstancennConv1dConv2dConv3dr   r   nni
ConvReLU1d
ConvReLU2d
ConvReLU3dr   r   s    r   get_conv_mod_weightr:   3   s    #		299bii899zz  ""	C#..#..#..I	J	J1v}}##%%!!$$r   c                    [        U [        R                  5      (       a  U R                  R	                  5       $ [        U [
        R                  5      (       a  U S   R                  R	                  5       $ U R                  5       S   $ r   )r1   r2   Linearr   r   r6   
LinearReLUr   r   s    r   get_linear_mod_weightr>   <   sb    #ryy!!zz  ""	C	(	(1v}}##%%!!$$r   c                    [        U [        R                  5      (       a^  / n[        U R                  5       HA  u  p#SU;   d  SU;   d  M  U R
                  U   R                  5       nUR                  U5        MC     U$ [        U [        R                  5      (       d  [        S[        U 5       S35      e/ nU R                   H  nUR                  UR                  R                  5       S   S   S   R                  5       S   S   5        UR                  UR                  R                  5       S   S   S   R                  5       S   S   5        M     U$ )Nr   r   ztype z not handled yetr   r*   r   )r1   r2   LSTMr    r!   r"   r   r#   nnqdAssertionErrortyper+   r,   r-   )r   r$   r%   r&   r'   r.   s         r   get_lstm_mod_weightsrD   E   s3   #rww()@)@AOC
*mz.I!//4;;=

;'  B 
#tyy)) 5c3C!DEE22LJJ""//1!4Q7:GGI!LQO JJ""//1!4Q7:GGI!LQO	 3 
r   nodegmc                    U R                   S   n[        U[        5      (       d  [        S[	        U5       35      e[        X!5      n[        U[        5      (       d  [        S[	        U5       35      eUR                  S:w  a  [        SUR                   35      e[        XR                  5      nUR                  5       $ Nr   Expected Node, got get_attrExpected get_attr, got )
argsr1   r   rB   rC   r   opr
   targetr   )rE   rF   weight_arg_nodeweight_noder   s        r   get_conv_fun_weightrQ   \   s    iilOot,,243H2IJKK0EKk4((243D2EFGG~~#6{~~6FGHHb"4"45F==?r   c                    U R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR
                  S:w  a  [        SUR
                   35      e[        XR                  5      nUR                  5       $ rH   )	rL   r1   r   rB   rC   rM   r
   rN   r   )rE   rF   qconv_state_nodeqconv_state_objs       r   get_qconv_fun_weightrU   j   s    yy|&--248H3I2JKLLj(67G7J7J6KLMM&r+B+BCO!!##r   c                 b   U R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR
                  S:X  a  U R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR
                  S:w  a  [        SUR
                   35      e[        XR                  5      nUR                  5       $ UR
                  S:X  GaD  UR
                  S:w  a  [        SUR
                   35      eU R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR                   S   nUR                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR
                  S:w  a  [        SUR
                   35      e[        XR                  5      nUR                  5       R                  U5      $ UR
                  S:w  a  [        SUR
                   35      e[        XR                  5      nUR                  5       $ )	Nr   rI   call_moduler   rJ   rK   call_methodzExpected call_method, got )
rL   r1   r   rB   rC   rM   r
   rN   r   to)	rE   rF   linear_second_argrO   rP   r   dequant_nodeto_fp16_nodetarget_dtypes	            r   get_linear_fun_weightr^   u   sg   
 		!'..248I3J2KLMM},))A,/400 #6tO7L6M!NOO%**1-+t,, #6tK7H6I!JKK>>Z' #:;>>:J!KLL!"&8&89}}				.=0 #=>O>R>R=S!TUUyy|,-- #6tL7I6J!KLL#((+,-- #6tL7I6J!KLL#((+"''*+t,, #6tK7H6I!JKK>>Z' #:;>>:J!KLL!"&8&89}}!!,//:- #:;L;O;O:P!QRR!"&>&>?}}r   c                     U R                   S   n[        U[        5      (       d  [        S[	        U5       35      eUR
                  S:w  a  [        SUR
                   35      e[        XR                  5      nUR                  5       u  u  pEnU$ rH   )	rL   r1   r   rB   rC   rM   r
   rN   r-   )rE   rF   packed_weight_nodepacked_weightr   _bias_names          r   get_qlinear_fun_weightrd      s    1($//248J3K2LMNN
*67I7L7L6MNOO$R)B)BCM*779OVUMr   c                     0 [         R                  [        _[        R                  [
        _[        R                  [        _[        R                  [        _[        R                  [        _[        R                  [        _[        R                  [        _[        R                  [        _[         R                  [        _[        R                  [
        _[        R                  [        _[        R                  [        _[        R                  [        _[        R                   [        _[        R                  [        _[        R                  [        _[         R"                  [        _0 [        R$                  [
        _[        R"                  [        _[        R"                  [        _[        R&                  [        _[        R(                  [        _[        R$                  [        _[        R$                  [        _[         R*                  [        _[        R*                  [        _[        R,                  [
        _[        R,                  [        _[        R*                  [        _[.        R*                  [        _[        R,                  [        _[        R0                  [        _[         R2                  R4                  R6                  [        _[         R8                  [:        _E[.        R8                  [<        0E[>        R@                  [B        [>        RD                  [B        [>        RF                  [B        [H        R@                  [J        [H        RD                  [J        [H        RF                  [J        [H        RL                  [J        [H        RN                  [J        [H        RP                  [J        [>        R4                  [R        [H        R4                  [T        [H        RV                  [T        0S.n U $ )N)rW   call_function),r2   r3   r   r6   r7   r   nnqr   nnqatnniqatConvBn1dConvBnReLU1dnniqr4   r8   ConvBn2dConvBnReLU2dr5   r9   ConvBn3dConvBnReLU3dr<   r=   rA   
LinearBn1dmoduleslinearNonDynamicallyQuantizableLinearr@   r(   r/   Fconv1drQ   conv2dconv3dtoqrU   conv1d_reluconv2d_reluconv3d_relur^   rd   linear_relu)"op_to_type_to_weight_extraction_fns    r   &get_op_to_type_to_weight_extraction_fnr      s   )
II()
 NN/)
 JJ)	)

 LL+)
 OO.)
 !2)
 0)
 OO.)
 II()
 NN/)
 JJ))
 LL+)
 OO.)
  !2!)
" 0#)
$ OO.%)
( II())
* NN/+)
, JJ)-)
. LL+/)
0 OO.1)
2 !23)
4 05)
6 OO.7)
: II(;)
< JJ)=)
> NN/?)
@ OO.A)
B LL+C)
D KK*E)
F 0G)
H 0I)
J JJ==?PK)
N GG_O)
P II'Q)
X HH)HH)HH)JJ,JJ,JJ,OO1OO1OO1HH+JJ.OO3
W;O&z .-r   r~   c                    [         R                  R                  nS n[        US5      (       a  UR                  U R
                     S   nUc
  [        5       n[        X5      nUnU R                  S:X  aZ  US   nUR                  5        H@  u  pU R                  U:X  d  M  U	" X5      n
UU
/U R
                  UU R
                  USSUS.	s  $    g U R                  S:X  a  [        U R                  [        5      (       d!  [        S[        U R                  5       35      e[        XR                  5      nUS   nUR                  5        H>  u  p[        U5      UL d  M  U	" U5      n
UU
/U R
                  UU R
                  USSUS.	s  $    g )N_node_name_to_scoper   rf   )	rC   valuesprev_node_nameprev_node_target_typeref_node_nameref_node_target_typeindex_within_argindex_of_argfqnrW   zExpected str, got )r   WEIGHTvaluehasattrr   namer   r	   rM   itemsrN   r1   strrB   rC   r
   )rE   rF   r~   res_typer   ref_node_typeprev_node_typefunction_mappingtarget_fn_typeweight_extraction_fnr   r   module_mappingtarget_mod_types                 r   extract_weight_from_noder      s    (..44H Cr())$$TYY/2)1-S-U*'1M"Nww/!=oN4D4J4J4L0N{{n,-d7$%h&*ii-;%)YY,9()$%
 
 5MH + 
M	!$++s++ #5d4;;6G5H!IJJr;;/;MJ5C5I5I5K1OCyO+-c2$%h&*ii-;%)YY,9()$%
 
 6L r   r   )9collections.abcr   torchtorch.ao.nn.intrinsicaor2   	intrinsicr6   torch.ao.nn.intrinsic.qatqatri   torch.ao.nn.intrinsic.quantized	quantizedrl   torch.ao.nn.qatrh   torch.ao.nn.quantizedrg   torch.ao.nn.quantized.dynamicdynamicrA   torch.nntorch.nn.functional
functionalru   torch.fxr   torch.fx.graphr   ns_typesr   r   utilsr	   r
   r   opsry   ModuleTensorr   r   r   listr(   r/   r:   r>   rD   rQ   rU   r^   rd   dictr   r   r    r   r   <module>r      s(   $  # # * * . .   # # , ,       B X X ii299  "RYY "5<< "!299 ! ! tELL'9 ")) U\\(: %RYY %5<< %%ryy %U\\ %bii D,> .d   $t $ $ $- -+ -%,, -`
 
; 
5<< 
>.S$x?Q:R5R0S >.J 	;
;; )-S$x7I2J-J(K
);
 $;r   