a
    dD                     @   s   d dl Z d dlZd dlmZ d dlm  mZ ejjZ	d dl
m  m  mZ d dlm  m  m  mZ d dlm  m  m  mZ d dlm  m  m  m  mZ d dlm  m  m  mZ d dlm  m  mZ d dlm  m  mZ d dlm  m  m  mZ d dlmZ d dl m  m!  m"  m#Z# d dl$m  m!  m%Z% ddl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. e*e/e-e' f dddZ0e*e/e-e' f e'e,e/ d	d
dZ1e*e/e-e' f e'e,e' ddddZ2e*e/e-e' f dddZ3e*e/e-e' f dddZ4dS )    N)get_native_backend_config   )NSNodeTargetType)CallableDictListOptionalSetTuple)returnc               G   C   sp  t jht jht jhtjhtjhtjht jhtj	ht j
tjht jtjjjht jtjjjht jtjht jtjht jtjht jhtjtjhtjhtjtjhtjt jddtjht j tj!ht j"tj#ht j$tj%htj&ddt j'tj&ht j(ht j)ht j*ht j+ht j,ht j-ht j.ht j/ht j0ht j1ht j2ht j3ht j4ht j5ht j6ht j7tj8htj9htj:htj;htj<htj=htj>ht j?tj@ht jAtjBht jCtjDtjDddhddtjEt jFht jGtjHtjIhtjJhtjKhtjLhtjMhtjNhtjOhtjPhtjQhtjRhtjShtjThtjUhtjVhtj jWjXht jYhtjZhtj[ht j\ht j]t^j]htj_t`j_hgF} ta }t jt jbj	jcfg}|jde D ]~\}}|}tf|tgthfrr|d	 }qV|jid ur|j||jif |jkd ur|j||jkf |jld urJ|j||jlf qJtmjntmjotmjptmjqfD ](}|e D ]\}}|j||f qqtmjrtmjstmjtfD ]:}	|	e D ]*\}\}
}|j||
f |j||f q$qtmjue D ]*\}\}
}|j||
f |j||f q^tmjvtmjwtxjyfD ](}|e D ]\}}|j||f qqtxjzfD ](}|e D ]\}}|j||f qؐq|D ]D\}}| D ]4}||v s||v r|| ||  qqqi }d
}| D ]}t{|}|d7 }|||< qL|S )Nrelurelu_sigmoidsigmoid_tanh_tanhhardsigmoid_hardsigmoidr   r   )|nnConv1dConv2dConv3dFconv1dconv2dconv3dLinearlinear	AvgPool1dtorch
avg_pool1d	AvgPool2d_C_nn
avg_pool2d	AvgPool3d
avg_pool3dAdaptiveAvgPool1dadaptive_avg_pool1dAdaptiveAvgPool2dadaptive_avg_pool2dAdaptiveAvgPool3dadaptive_avg_pool3dLSTMaddoperatorcatmulr   ReLU	MaxPool1d
max_pool1d	MaxPool2d
max_pool2d	MaxPool3d
max_pool3dr   SigmoidBatchNorm2dBatchNorm3dConvTranspose1dConvTranspose2dConvTranspose3dELU	EmbeddingEmbeddingBag	GroupNorm	HardswishInstanceNorm1dInstanceNorm2dInstanceNorm3d	LayerNorm	LeakyReLUReLU6relu6elu	hardswishZ
group_norminstance_norm
layer_norm
leaky_reluSiLUsiluMishmishTanhr   r   HardsigmoidHardtanhhardtanh	hardtanh_floordiv	unsqueezestacksqueezesortrepeat_interleaveminmeanmax	transposeflattenclampchunk
functionalinterpolateDropoutdropoutmatmulSoftmaxPReLUnnqprelutoqr   modulesNonDynamicallyQuantizableLinearZ!_pattern_complex_format_to_configitems
isinstancelisttupleZfused_moduleappendZ
qat_moduleZreference_quantized_module_lower_to_native_backendZSTATIC_LOWER_MODULE_MAPZDYNAMIC_LOWER_MODULE_MAPZWEIGHT_ONLY_LOWER_MODULE_MAPZ SPECIAL_PATTERN_LOWER_MODULE_MAPZSTATIC_LOWER_FUSED_MODULE_MAPZ(STATIC_LOWER_FUSED_MODULE_TWO_INPUTS_MAPZDYNAMIC_LOWER_FUSED_MODULE_MAPZSTATIC_LOWER_FUNCTIONAL_MAPZQBIN_OP_MAPPINGZQBIN_RELU_OP_MAPPINGquantization_mappingsZ,DEFAULT_FLOAT_TO_QUANTIZED_OPERATOR_MAPPINGSZ%DEFAULT_DYNAMIC_QUANT_MODULE_MAPPINGSstr)Zsets_of_related_opsZbackend_configZnew_connectionspatternconfigZfirst_elementZsource_to_targetsourcetargetZsource_to_double_targetZtarget1Ztarget2Zitem1Zitem2set_of_related_ops base_name_to_sets_of_related_opscounter	base_name r   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/ao/ns/fx/mappings.py$get_base_name_to_sets_of_related_ops   s   			    1

r   )r   opr   c                 C   s&   |   D ]\}}||v r|  S qd S )N)rs   )r   r   r   r   r   r   r   get_base_name_for_op  s    
r   )r   r   
related_opr   c                 C   sn   |d urB|   D ] \}}||v r||  d S qt| dn(d}t|| v r\|d7 }qF|h| t|< d S )Nz was not foundr   r   )rs   r/   AssertionErrorrz   )r   r   r   r   r   r   r   r   r   add_op_to_sets_of_related_ops  s    

r   c               <   C   s  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h} t }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h}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*j+j,tj*j+j-tjtj.tj/tj0tj1tj2tj3tj4tj5tj6tj7tj8tj9tjh#}t:j;t<j;t=j;t>j;tj:j?jj@t:jAt:jBt:jCt<jAt<jBt<jCt<jDt<jEt:jFt>jFt:jGt:jHt:jIt:jJt:jKt:jLt:jMt:jNt:jOt:jPt:jQt:jRt:jSt:jTt:jUt:jVt:jWt:jXt:jYtZj[tZj\tZj]tZj^tZj_tZj`tZjatZjbtZjctZjdtejbtejctejdtejftejgtejhtej]tej^tej_tej`tejatij`tZjjtZjktZjltZjmh<}tnj;tnjAtnjBtnjCtnjGtnjHtnjItnjJtnjKtnjMtnjOtnjPtnjQtnjRtnjStnjTtnjDtnjEtnjItnjXtnjYtoj[toj\toj]toj^toj_toj`tojjtojktojltojmh}t:jpt:jqt:jrt:jst:jtt:jut:jvt:jwt:jxt:jyt:jIt:jzt:j{t:j|t:j}t:j~t:jUh}h d}| |||||||dS )N>   r   r   r   r   r   r   r   r   )Zfuns_io_type_fp32Zfuns_io_type_fp16Zfuns_io_type_int8Zfuns_io_type_fp32_or_int8Zmods_io_type_fp32Zmods_io_type_int8Zmods_io_type_fp32_or_int8Zmeths_io_type_fp32_or_int8)r   r   r   r   r   r    r1   rL   rM   rN   rO   rP   rj   rR   rT   r0   r/   r2   sumro   setrp   Zlinear_reluZconv1d_reluZconv2d_reluZconv3d_relur   r   r   r   rZ   r)   r+   r-   rX   rY   rh   r5   r7   r9   rK   r!   r#   r$   r%   r'   rf   re   rd   rc   rb   ra   r`   r_   r^   r]   r\   r[   r   r   nnqatnnqatdnnqdrq   rr   r   r   r   rA   rB   r.   r;   r<   ri   r=   r>   r?   r@   rC   rE   rF   rG   rH   rD   rI   rJ   rQ   rS   rl   rm   nniZBNReLU2dZBNReLU3dZ
ConvReLU1dZ
ConvReLU2dZ
ConvReLU3dZ
LinearReLUZ
LinearBn1dZConvBn1dZConvBn2dZConvBn3dnniqatZConvBnReLU1dZConvBnReLU2dZConvBnReLU3dnniqdZLinearLeakyReLUZ
LinearTanhZ	ConvAdd2dZConvAddReLU2drn   nniqr3   rU   r:   rV   r(   r*   r,   r   r"   r&   rW   Identityr4   r6   r8   )ZFUNS_IO_TYPE_FP32ZFUNS_IO_TYPE_FP16ZFUNS_IO_TYPE_INT8ZFUNS_IO_TYPE_FP32_OR_INT8ZMODS_IO_TYPE_FP32ZMODS_IO_TYPE_INT8ZMODS_IO_TYPE_FP32_OR_INT8ZMETHS_IO_TYPE_FP32_OR_INT8r   r   r   get_node_type_to_io_type_map  s   '
B#r   c                  C   s(   t jtjh} tjh}h d}| ||dS )N>   rc   detachr_   r]   Z
dequantizeZpermuterepeatZ
unsqueeze_toZreshapera   re   r[   sizeshapeZresize_Zsqueeze_ZnumelviewZdetach_
contiguousrf   )Zfuns_unmatchableZmods_unmatchableZmeths_unmatchable)r    Zquantize_per_tensorr0   getitemr   r   )ZFUNS_UNMATCHABLEZMODS_UNMATCHABLEZMETHS_UNMATCHABLEr   r   r   get_unmatchable_types_map  s    r   )5r0   r    Ztorch.nnr   Ztorch.nn.functionalrg   r   opsZ	quantizedrp   Ztorch.ao.nn.quantizedZaorn   Ztorch.ao.nn.quantized.dynamicZdynamicr   Ztorch.ao.nn.intrinsic.quantizedZ	intrinsicr   Z'torch.ao.nn.intrinsic.quantized.dynamicr   Ztorch.ao.nn.intrinsic.qatZqatr   Ztorch.ao.nn.intrinsicr   Ztorch.ao.nn.qatr   Ztorch.ao.nn.qat.dynamicr   Z$torch.ao.quantization.backend_configr   Z1torch.ao.quantization.fx._lower_to_native_backendZquantizationZfxrx   Z+torch.ao.quantization.quantization_mappingsry   Zns_typesr   typingr   r   r   r   r	   r
   rz   r   r   r   r   r   r   r   r   r   <module>   sB   $     e