o
    pi/                     @   sD   d dl Z ddlmZ G dd dZG dd deZG dd	 d	ZdS )
    N   )common_functionsc                       s&   e Zd Zd fdd	Zdd Z  ZS )WeightMixinNc                    s4   t  jdi | || _| jd u r|  | _d S d S )N )super__init__weight_init_funcget_default_weight_init_func)selfr   kwargs	__class__r   Y/home/ubuntu/.local/lib/python3.10/site-packages/pytorch_metric_learning/losses/mixins.pyr      s
   
zWeightMixin.__init__c                 C   s   t tjjjS N)c_fTorchInitWrappertorchnninitnormal_r
   r   r   r   r	      s   z(WeightMixin.get_default_weight_init_funcr   )__name__
__module____qualname__r   r	   __classcell__r   r   r   r   r      s    r   c                       6   e Zd Zd fdd	Zdd Zdd Zd	d
 Z  ZS )WeightRegularizerMixinN   c                    J   |d u| _ t jdi | || _ || _| j d ur#| jdgdd d S d S )Nweight_reg_weightFlist_of_namesis_statr   )weight_regularizerr   r   r   add_to_recordable_attributes)r
   r#   r   r   r   r   r   r         

zWeightRegularizerMixin.__init__c                 C   ,   | j d u rd}n|  || j }|d ddS Nr   already_reduced)lossesindicesreduction_type)r#   r   )r
   weightslossr   r   r   weight_regularization_loss      
z1WeightRegularizerMixin.weight_regularization_lossc                 C       | j d ur| ||d< d S d S Nweight_reg_loss)r#   r.   )r
   	loss_dictr,   r   r   r   &add_weight_regularization_to_loss_dict%   s   
z=WeightRegularizerMixin.add_weight_regularization_to_loss_dictc                 C      dgS r1   r   r   r   r   r   regularization_loss_names)      z0WeightRegularizerMixin.regularization_loss_namesNr   )r   r   r   r   r.   r4   r6   r   r   r   r   r   r      s
    r   c                       r   )EmbeddingRegularizerMixinNr   c                    r   )Nembedding_reg_weightFr    r   )embedding_regularizerr   r   r:   r$   )r
   r;   r:   r   r   r   r   r   .   r%   z"EmbeddingRegularizerMixin.__init__c                 C   r&   r'   )r;   r:   )r
   
embeddingsr-   r   r   r   embedding_regularization_loss:   r/   z7EmbeddingRegularizerMixin.embedding_regularization_lossc                 C   r0   Nembedding_reg_loss)r;   r=   )r
   r3   r<   r   r   r   )add_embedding_regularization_to_loss_dictA   s
   
zCEmbeddingRegularizerMixin.add_embedding_regularization_to_loss_dictc                 C   r5   r>   r   r   r   r   r   r6   G   r7   z3EmbeddingRegularizerMixin.regularization_loss_namesr8   )r   r   r   r   r=   r@   r6   r   r   r   r   r   r9   -   s
    r9   )r   utilsr   r   r   r   r9   r   r   r   r   <module>   s
    