a
    ==ic                     @   s^   d dl mZ d dlmZ d dlmZ dddZdd	 Zd
d ZdddZ	dddZ
dd ZdS )    )core)initializers)ParameterTagsNFc                 K   s   t ||di f}t |	|di f}	| js:t  }t  }	|pF| j }tjg}d|v rd|tj	 | j
|d ||g|tjd}| j
|d |g|	|d}|
rd|d< |rd	|d
< ||||g|fi |S )N
XavierFillConstantFillZfreeze_bias_w)
param_nameshapeinitializertags_bZ
TENSORCOREZengineTfloat16_compute)r   update_initializerinit_paramsZExternalInitializernetNextNamer   ZBIASappendZCOMPUTED_PARAMcreate_paramZWEIGHT)modelZop_callblob_inblob_outdim_indim_outweight_init	bias_initWeightInitializerBiasInitializerZenable_tensor_corer   kwargsZ	bias_tagsweightbias r    i/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/helpers/fc.py_FC_or_packed_FC   s<    

r"   c                 O   s   t | | jjg|R i |S N)r"   r   FCr   argsr   r    r    r!   fc9   s    r'   c                 O   s   t | | jjg|R i |S r#   )r"   r   ZPackedFCr%   r    r    r!   	packed_fc=   s    r(      c
                 K   s   t ||di f}t |	|di f}	|p0| j }| j|d ||g|d}| j|d ||g|d}| j|d |g|	d}| jj||||g|fi |
S )z[FC_Decomp version
    Here we assume that the rank of original input is bigger than 5.
    r   r   Z_u)r   r	   r
   _vr   )r   r   r   r   r   Z	FC_Decomp)r   r   r   r   r   Zrank_approxr   r   r   r   r   uvr   r    r    r!   	fc_decompA   s.    

r-   h㈵>皙?c              	   K   sB  |r|ndi f}|r|ndi f}|r(|ndi f}|p<| j  }|d }| jrV| jjg |d dg|
d}| j|d g |d fd	||gi|d }| jjg |d
 ||gdd}| j|d g |d fd	||gi|d }| j|d g |d fd	|gi|d }| j|d g |d fd	||gi|d }| jjg |d dg|d}n~t|d | j}t|d | j}t|d | j}t|d
 | j}t|d | j}t|d | j}t|d | j}| | | | |	r| j j	||||||||g||gfi |S | j j	||||||||g|fi |S dS )z3FC_Prune version
    Runnable so far. Great!:)
    r   r   Z_compress_rateZ_lb   )r	   valuer   r   r	   _mg      ?Z_ag_dwr   Z	_mask_seqZ_thresN)
r   r   r   Zparam_init_netr   __getattr__r   ZScopedBlobReferenceAddParameterZFC_Prune)r   r   r   r   r   r   r   Z	mask_init	thresholdZneed_compress_rateZcomp_lbr   Zcompress_rateZcompress_lbr   maskZag_dwr   Zmask_seqZthresr    r    r!   fc_pruneb   s    









r7   c                 K   s`   |r|r|r|st d | | | | | | | | | jj|||||g|fi |S )z*FC_Sparse: Only takes in allocated weightsz
Warning...)printr4   r   Z	FC_Sparse)r   r   r   Zw_csriwZjwr   r   r    r    r!   	fc_sparse   s    



r:   )NNNNFF)r)   NNNN)NNNr.   Fr/   )Zcaffe2.pythonr   Zcaffe2.python.modelingr   Z%caffe2.python.modeling.parameter_infor   r"   r'   r(   r-   r7   r:   r    r    r    r!   <module>   s       
,  
#   
W