U
    ‰dÛ  ã                   @   s@   d dl mZ d dlmZ d dlmZ d dlZG dd„ deƒZdS )é    )Úschema)Ú
ModelLayer)ÚTagsNc                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚBPRLossÚbpr_lossc              	      sn   t t| ƒj|||f|Ž t t dt ¡ fdt tj	¡f¡|¡sDt
‚| j tjg¡ t tj	|  d¡¡| _d S )NÚpos_predictionÚneg_predictionÚoutput)Úsuperr   Ú__init__r   Zis_schema_subsetÚStructZScalarÚListÚnpZfloat32ÚAssertionErrorÚtagsÚupdater   ZEXCLUDE_FROM_PREDICTIONZget_next_blob_referenceÚoutput_schema)ÚselfÚmodelÚinput_recordÚnameÚkwargs©Ú	__class__© úA/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/layers/bpr_loss.pyr      s    
þûþzBPRLoss.__init__c                 C   s`   | j jd ƒ }| | j  ¡ | j jd ƒ g| d¡¡}| | ||g¡g¡}| || j 	¡ ¡ d S )NÚvaluesÚlengthsZpos_score_repeated)
r   r   ZLengthsTiler   ZNextScopedBlobZSoftplusZSubZReduceFrontSumr   Zfield_blobs)r   ÚnetZ	neg_scoreZ	pos_scoreZsoftplusr   r   r   Úadd_ops#   s    þûzBPRLoss.add_ops)r   )Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      s   r   )	Zcaffe2.pythonr   Zcaffe2.python.layers.layersr   Zcaffe2.python.layers.tagsr   Znumpyr   r   r   r   r   r   Ú<module>   s   