
    ȅi                        S SK r S SKJr  S SKrS SKJr  S SKJr  / SQr " S S\5      r	 " S S	\5      r
S
\S\4S jrS\R                  R                  \-  S\S\4S jr " S S\
5      rS
\S\4S jrS r " S S\5      rg)    N)Any)GraphModule)Graph)FusedGraphModuleObservedGraphModuleObservedStandaloneGraphModuleQuantizedGraphModulec                   |   ^  \ rS rSrS\R
                  R                  \\\	4   -  S\
S\\   4U 4S jjrS rSrU =r$ )r      rootgraphpreserved_attr_namesc                    > X0l         U R                    Vs0 s H!  n[        X5      (       d  M  U[        X5      _M#     nn[        TU ]  X5        U H  n[        XXT   5        M     g s  snf N)r   hasattrgetattrsuper__init__setattrselfr   r   r   attrpreserved_attrs	__class__s         _/home/james-whalen/.local/lib/python3.13/site-packages/torch/ao/quantization/fx/graph_module.pyr   FusedGraphModule.__init__   sr     %9! 11
1t" &D'$%%1 	 

 	%#DD 56 $
s
   A'A'c                    [         R                  R                  5       n[        R                  " U R
                  5      Ul        [        U[        R                  " U R                  5      [        R                  " U R                  5      5      $ r   )	torchnnModulecopydeepcopy__dict__r   r   r   r   memofake_mods      r   __deepcopy__FusedGraphModule.__deepcopy__&   sY    88??$ MM$--8MM$**%MM$334
 	
    r   __name__
__module____qualname____firstlineno__r   r   r    dictstrr   r   setr   r'   __static_attributes____classcell__r   s   @r   r   r      sG    7hhooS#X.7 7 "#h	7&
 
r)   r   c                   |   ^  \ rS rSrS\R
                  R                  \\\	4   -  S\
S\\   4U 4S jjrS rSrU =r$ )r   0   r   r   r   c                    > 1 SkR                  U5      U l        U R                   Vs0 s H!  n[        X5      (       d  M  U[        X5      _M#     nn[        TU ]  X5        U H  n[        XXT   5        M     g s  snf )N>
   _is_qat	_patterns_qconfig_mapping_node_name_to_scope_observed_node_names_node_name_to_qconfig_prepare_custom_config_activation_post_process_map _activation_post_process_indexes"_equalization_node_name_to_qconfig)unionr   r   r   r   r   r   r   s         r   r   ObservedGraphModule.__init__1   s    %
 %$
% 	! 11
1t" &D'$%%1 	 

 	%#DD 56 $
s   A9 A9c                    [         R                  R                  5       n[        R                  " U R
                  5      Ul        [        U[        R                  " U R                  5      [        R                  " U R                  5      5      $ r   )	r   r   r    r!   r"   r#   r   r   r   r$   s      r   r'    ObservedGraphModule.__deepcopy__O   sY    88??$ MM$--8"MM$**%MM$334
 	
r)   r*   r+   r5   s   @r   r   r   0   sG    7hhooS#X.7 7 "#h	7<
 
r)   r   modulereturnc                 F    [        U S5      =(       a    SU R                  ;   $ Nmeta_observed_graph_module_attrs)r   rK   rG   s    r   _is_observed_modulerN   Y   s    66"T'E'TTr)   model	attr_namec                 x    [        U S5      (       a)  SU R                  ;   a  [        U R                  S   U5      $ g rJ   )r   rK   r   )rO   rP   s     r   _get_observed_graph_module_attrrR   ]   s7     uf"@EJJ"Nuzz"@A9MMr)   c                   |   ^  \ rS rSrS\R
                  R                  \\\	4   -  S\
S\\   4U 4S jjrS rSrU =r$ )r   e   r   r   r   c                 L   > UR                  SS15      n[        TU ]	  XU5        g )N'_standalone_module_input_quantized_idxs(_standalone_module_output_quantized_idxs)rC   r   r   )r   r   r   r   r   s       r   r   &ObservedStandaloneGraphModule.__init__f   s3      4999: 
 	&:;r)   c                    [         R                  R                  5       n[        R                  " U R
                  5      Ul        [        U[        R                  " U R                  5      [        R                  " U R                  5      5      $ r   )	r   r   r    r!   r"   r#   r   r   r   r$   s      r   r'   *ObservedStandaloneGraphModule.__deepcopy__t   sY    88??$ MM$--8,MM$**%MM$334
 	
r)    r+   r5   s   @r   r   r   e   sG    <hhooS#X.< < "#h	<
 
r)   r   c                 X    [        U 5      =(       a    U R                  S   R                  $ )NrL   )rN   rK   is_observed_standalone_modulerM   s    r   _is_observed_standalone_moduler^   ~   s(    F# 	VKK67UUr)   c                     [        U 5       HP  nSU;   d  M  [        [        X5      [        R                  R
                  5      (       d  M?  [        X5      nXQX$-   '   MR     g N_packed_weight)dir
isinstancer   r   _CScriptObject)r   destinationprefix	keep_varsrP   packed_weights         r   _save_packed_weightrj      sO    Y	y(ZD$ehh&;&;.
 .
 $D4M.;*+ r)   c                      ^  \ rS rSrSrS\R                  R                  \\	\
4   -  S\S\\	   4U 4S jjrU 4S jrS rS	rU =r$ )
r	      zThis class is created to make sure PackedParams
(e.g. LinearPackedParams, Conv2dPackedParams) to appear in state_dict
so that we can serialize and deserialize quantized graph module with
torch.save(m.state_dict()) and m.load_state_dict(state_dict)
r   r   r   c                   > X0l         U R                    Vs0 s H!  n[        X5      (       d  M  U[        X5      _M#     nn[        TU ]  X5        U H  n[        XXT   5        M     U R                  [        5        g s  snf r   )r   r   r   r   r   r   _register_state_dict_hookrj   r   s         r   r   QuantizedGraphModule.__init__   s     %9! 11
1t" &D'$%%1 	 

 	%#DD 56 $&&':;
s
   A<A<c           	      B  > / nU Hg  n	U	R                  S5      (       d  M  [        X   [        R                  R                  5      (       d  MH  [        X	X   5        UR                  U	5        Mi     U H  n	UR                  U	5        M     [        T
U ]%  UUUUUUU5        g r`   )

startswithrc   r   rd   re   r   appendpopr   _load_from_state_dict)r   
state_dictrg   local_metadatastrictmissing_keysunexpected_keys
error_msgsattrs_to_poprP   r   s             r   rt   *QuantizedGraphModule._load_from_state_dict   s     #I##$455*%uxx'<'<; ; )>?##I. $ &INN9% & 	%	
r)   c                    [         R                  R                  5       n[        R                  " U R
                  5      Ul        [        U[        R                  " U R                  5      [        R                  " U R                  5      5      $ r   )	r   r   r    r!   r"   r#   r	   r   r   r$   s      r   r'   !QuantizedGraphModule.__deepcopy__   sY    88??$ MM$--8#MM$**%MM$334
 	
r)   r*   )r,   r-   r.   r/   __doc__r   r   r    r0   r1   r   r   r2   r   rt   r'   r3   r4   r5   s   @r   r	   r	      sR    <hhooS#X.< < "#h	<"
@
 
r)   r	   )r!   typingr   r   torch.fxr   torch.fx.graphr   __all__r   r   boolrN   r   r    r1   rR   r   r^   rj   r	   r[   r)   r   <module>r      s          
{ 
<&
+ &
RU U U88??[(58
$7 
23 4 <?
; ?
r)   