
    qi                         d dl Z d dlmZ d dlZd dlmZ d dlmZ g dZ G d de      Z	 G d d	e      Z
d
edefdZdej                  j                  ez  dedefdZ G d de
      Zd
edefdZd Z G d de      Zy)    N)Any)GraphModule)Graph)FusedGraphModuleObservedGraphModuleObservedStandaloneGraphModuleQuantizedGraphModulec                   p     e Zd Zdej                  j
                  eeef   z  de	de
e   f fdZd Z xZS )r   rootgraphpreserved_attr_namesc                     || _         | j                   D ci c]  }t        ||      r|t        ||       }}t        |   ||       |D ]  }t        | |||           y c c}w N)r   hasattrgetattrsuper__init__setattrselfr   r   r   attrpreserved_attrs	__class__s         k/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/ao/quantization/fx/graph_module.pyr   zFusedGraphModule.__init__   s~     %9! 11
tT" '$%%
 

 	u%# 	7DD$ 56	7
s    A!c                    t         j                  j                         }t        j                  | j
                        |_        t        |t        j                  | j                        t        j                  | j                              S r   )	torchnnModulecopydeepcopy__dict__r   r   r   r   memofake_mods      r   __deepcopy__zFusedGraphModule.__deepcopy__&   sY    88??$ MM$--8MM$**%MM$334
 	
    __name__
__module____qualname__r   r   r   dictstrr   r   setr   r%   __classcell__r   s   @r   r   r      sB    7hhooS#X.7 7 "#h	7&
r&   r   c                   p     e Zd Zdej                  j
                  eeef   z  de	de
e   f fdZd Z xZS )r   r   r   r   c                     h dj                  |      | _        | j                  D ci c]  }t        ||      r|t        ||       }}t        |   ||       |D ]  }t        | |||           y c c}w )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   zObservedGraphModule.__init__1   s    %
 %$
% 	! 11
tT" '$%%
 

 	u%# 	7DD$ 56	7
s    A2c                    t         j                  j                         }t        j                  | j
                        |_        t        |t        j                  | j                        t        j                  | j                              S r   )	r   r   r   r   r    r!   r   r   r   r"   s      r   r%   z ObservedGraphModule.__deepcopy__O   sY    88??$ MM$--8"MM$**%MM$334
 	
r&   r'   r/   s   @r   r   r   0   sB    7hhooS#X.7 7 "#h	7<
r&   r   modulereturnc                 :    t        | d      xr d| j                  v S Nmeta_observed_graph_module_attrs)r   rB   r>   s    r   _is_observed_modulerE   Y   s    66"T'E'TTr&   model	attr_namec                 j    t        | d      r'd| j                  v rt        | j                  d   |      S y rA   )r   rB   r   )rF   rG   s     r   _get_observed_graph_module_attrrI   ]   s4     uf"@EJJ"Nuzz"@A9MMr&   c                   p     e Zd Zdej                  j
                  eeef   z  de	de
e   f fdZd Z xZS )r   r   r   r   c                 N    |j                  ddh      }t        | 	  |||       y )N'_standalone_module_input_quantized_idxs(_standalone_module_output_quantized_idxs)r<   r   r   )r   r   r   r   r   s       r   r   z&ObservedStandaloneGraphModule.__init__f   s5      4999: 
 	u&:;r&   c                    t         j                  j                         }t        j                  | j
                        |_        t        |t        j                  | j                        t        j                  | j                              S r   )	r   r   r   r   r    r!   r   r   r   r"   s      r   r%   z*ObservedStandaloneGraphModule.__deepcopy__t   sY    88??$ MM$--8,MM$**%MM$334
 	
r&   r'   r/   s   @r   r   r   e   sB    <hhooS#X.< < "#h	<
r&   r   c                 N    t        |       xr | j                  d   j                  S )NrC   )rE   rB   is_observed_standalone_modulerD   s    r   _is_observed_standalone_modulerQ   ~   s(    F# 	VKK67UUr&   c                     t        |       D ]J  }d|v st        t        | |      t        j                  j
                        s7t        | |      }||||z   <   L y N_packed_weight)dir
isinstancer   r   _CScriptObject)r   destinationprefix	keep_varsrG   packed_weights         r   _save_packed_weightr]      sW    Y <	y(ZD)$ehh&;&;.
 $D)4M.;K*+<r&   c                   ~     e Zd ZdZdej
                  j                  eee	f   z  de
dee   f fdZ fdZd Z xZS )r	   a  This 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                     || _         | j                   D ci c]  }t        ||      r|t        ||       }}t        |   ||       |D ]  }t        | |||           | j                  t               y c c}w r   )r   r   r   r   r   r   _register_state_dict_hookr]   r   s         r   r   zQuantizedGraphModule.__init__   s     %9! 11
tT" '$%%
 

 	u%# 	7DD$ 56	7&&':;
s    A6c           	      (   g }|D ]]  }	|	j                  d      st        ||	   t        j                  j                        s=t        | |	||	          |j                  |	       _ |D ]  }	|j                  |	        t        
| %  |||||||       y rS   )

startswithrV   r   rW   rX   r   appendpopr   _load_from_state_dict)r   
state_dictrZ   local_metadatastrictmissing_keysunexpected_keys
error_msgsattrs_to_poprG   r   s             r   re   z*QuantizedGraphModule._load_from_state_dict   s     # 	/I##$45*9%uxx'<'<; iI)>?##I.	/ & 	&INN9%	& 	%	
r&   c                    t         j                  j                         }t        j                  | j
                        |_        t        |t        j                  | j                        t        j                  | j                              S r   )	r   r   r   r   r    r!   r	   r   r   r"   s      r   r%   z!QuantizedGraphModule.__deepcopy__   sY    88??$ MM$--8#MM$**%MM$334
 	
r&   )r(   r)   r*   __doc__r   r   r   r+   r,   r   r   r-   r   re   r%   r.   r/   s   @r   r	   r	      sM    <hhooS#X.< < "#h	<"
@
r&   r	   )r   typingr   r   torch.fxr   torch.fx.graphr   __all__r   r   boolrE   r   r   r,   rI   r   rQ   r]   r	    r&   r   <module>ru      s          
{ 
<&
+ &
RU U U88??[(58
$7 
23 4 <?
; ?
r&   