a
    ==ic3	                     @   sZ   d dl Z d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 e eZG dd deZdS )    N)coreschema)get_categorical_limit
ModelLayer)Tagsc                       s.   e Zd Zd fdd	Zdd Zd	d
 Z  ZS )BucketWeightedr   NTbucket_weightedc              	      s   t t| ||| t|tjs(J d|| _|| _|d urLt|d | _	n|dkr\|| _	n
t
|| _	| jd| j	gdddif|d| _td	ttj| j	f| d
f| _| jtjh d S )NzIncorrect input type   r   bucket_wZConstantFillvalueg      ?)
param_nameshapeZinitializerZ	optimizerbucket_weightsZbucket_w_gather)superr   __init__
isinstancer   Listbucket_boundarieshash_bucketslenr   r   Zcreate_paramr
   StructZScalarnpfloat32Zget_next_blob_referenceoutput_schematagsupdater   ZHANDLE_AS_SPARSE_LAYER)selfmodelinput_recordZ	max_scorer   r   Zweight_optimname	__class__ u/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/layers/bucket_weighted.pyr      s,    

zBucketWeighted.__init__c                 C   s   | j S )N)r   )r   r"   r"   r#   get_memory_usage2   s    zBucketWeighted.get_memory_usagec                 C   sz   | j d ur$|j| j d| j d}n| j }|j|dtjjd}| jr\|j	|dd| j
d}|| j|g| jj  d S )Nbuckets_int)Z
boundaries)toZhashed_buckets_intr   )seedZmodulo)r   Z	Bucketizer   valuesZCastr   ZDataTypeZINT32r   Z	IndexHashr   ZGatherr
   r   r   Zfield_blobs)r   netr%   Zbucketsr"   r"   r#   add_ops5   s(    



zBucketWeighted.add_ops)r   NTNr   )__name__
__module____qualname__r   r$   r*   __classcell__r"   r"   r    r#   r      s
     r   )loggingnumpyr   Zcaffe2.pythonr   r   Zcaffe2.python.layers.layersr   r   Zcaffe2.python.layers.tagsr   	getLoggerr+   loggerr   r"   r"   r"   r#   <module>   s   
