
    %VjiW                         d dl Z d dlZd dlZd dlZd dlmZ dgZ G d dej        j        e j	                  Z
d Zd Zd Zd	 Zd
 Zd Z ed          ZdS )    N)
_addindentWeightedQuantizedModulec                   B    e Zd ZdZeej        d                         ZdS )r   zIWrapper for quantized modules than can be lowered from reference modules.c                     t           )N)NotImplementedError)cls
ref_moduleoutput_scaleoutput_zero_points       ]/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/ao/nn/quantized/modules/utils.pyfrom_referencez&WeightedQuantizedModule.from_reference   s
     "!    N)__name__
__module____qualname____doc__classmethodabcabstractmethodr    r   r   r   r      sA        SS" "  [" " "r   )	metaclassc                 4    t          | d          r| j        } | S )Nactivation_post_process)hasattrr   )observers    r   _get_weight_observerr      s"    x233 43Or   c                     t          |           } |t          j        t          j        t          j        fv r4t          j        |          }| j        |j        k    p| j        |j	        k     S dS )NF)
r   torchqint8quint8qint32iinfo	quant_minmin	quant_maxmax)r   dtypeinfos      r   _needs_weight_clampingr)       sZ    #H--HelEL999{5!!!DH,M0BTX0MM5r   c                 8   t          || j                  s| S t          |          }|j        |j        }}t          j        |                                                               |          }t          j        |                                                               |          }t          j	        t          j
        |                                 |          |          }|j        t
          j        t
          j        fv r;t          j        ||                                |                                          } n_|j        t
          j        t
          j        t
          j        fv rt          j        ||||j                  } nt+          d|j        z             | S )N)axisUnexpected qscheme )r)   r'   r   r#   r%   r   cloneint_reprfill_minimummaximumqschemeper_tensor_symmetricper_tensor_affine!_make_per_tensor_quantized_tensoritemper_channel_symmetricper_channel_affine per_channel_affine_float_qparams"_make_per_channel_quantized_tensorch_axis
ValueError)	qweightr   scalezpmin_max_
qw_int_max
qw_int_minqw_ints	            r   _clamp_weightsrE   (   sf   !(GM:: #H--H#X%7$D W--//0066t<<JW--//0066t<<J]5=)9)9););ZHH*UUFE68OPPP9EJJLL"''))
 
 
	# . 
 

 :E2H$4
 
 
 .1AABBBNr   c                 n   |                                 \  }}|j        t          j        t          j        fv rOt          j        | t          |          t          |          t          j                  }t          ||||          }n/|j        t          j
        t          j        fv rv|j        }t          j        | |                    t          j                  |                    t          j                  |t          j                  }t          ||||          }n|j        t          j        fv rot          j        | |                    t          j                  |                    t          j                  |j        |j                  }t          ||||          }nt'          d|j        z             |S )Nr,   )calculate_qparamsr2   r   r3   r4   quantize_per_tensorfloatintr   rE   r7   r8   r;   quantize_per_channeltodoubleint64r9   r'   r<   )float_wtr   wt_scalewt_zpr=   wt_axiss         r   _quantize_weightrS   E   sp   0022OHeE68OPPP+eHoos5zz5;
 
 !(HeDD		e95;ST	T	T",KK%%HHU[!!K
 
 !(HeDD		eDE	E	E,KK$$HHU[!!N
 
 !(HeDD.1AABBBNr   c                       fd}|S )zOConverts the argument to a tuple of size n
    with the first element repeated.c                     t          | t          j        j                  r;t	          |           k    rn'| d         } t          | t          j        j                  ;t          t          j        |                     S )Nr   )
isinstancecollectionsr   Sequencelentuple	itertoolsrepeat)xns    r   parsez!_ntuple_from_first.<locals>.parseh   sk    KO455 	1vv{{!A KO455 	 Y%a++,,,r   r   )r^   r_   s   ` r   _ntuple_from_firstr`   d   s#    - - - - - Lr   c                    g }|                                  }|r|                    d          }g }| j                                        D ]S\  }}t	          ||          rt          |          }t          |d          }|                    d|z   dz   |z              T||z   }|                                 dz   }	|r?t          |          dk    r|s|	|d         z  }	n|	dd
                    |          z   dz   z  }	|	dz  }	|	S )	N
   (z):    r   z
  ))
extra_reprsplit_modulesitemsrV   reprr   append	_get_namerY   join)
selfparamsextra_linesrg   child_lineskeymodulemod_strlinesmain_strs
             r   _hide_packed_params_reprrx   r   s)    K""J - &&t,,K}**,, 8 8Vff%% 	v,,Wa((39u,w67777+%E~~#%H ;{q   A&HHU!3!33d::HOHOr   rc   )r   rW   r[   r   torch.nn.modules.moduler   __all__nnModuleABCMetar   r   r)   rE   rS   r`   rx   _pair_from_firstr   r   r   <module>r      s    



          . . . . . . 
" " " " "eho " " " "      :  >    < &%a((   r   