a
    ==ic                     @   s0   d dl mZmZ d dlmZ G dd deZdS )    )coreschema)
ModelLayerc                       s*   e Zd ZdZd fdd	Zdd Z  ZS )ReservoirSamplingz
    Collect samples from input record w/ reservoir sampling. If you have complex
    data, use PackRecords to pack it before using this layer.

    This layer is not thread safe.
    reservoir_samplingc                    sR  t t| j|||fi | |dks(J || _| jddgd|jd| _| jdg ddtjj	df|jd| _
| jdg d	|jd| _g | _g | _d
|v r| jdd dtjj	tjjdf|jd}| jddgddtjj	df|jd}| j|  | j||g | j||g tdt|j| jgfdtj| j
dfdtj| jdf| _d S )Nr   	reservoir)ConstantFill)
param_nameshapeZinitializerZ	optimizerZnum_visitedr   )valueZdtypemutex)ZCreateMutex	object_idobject_to_posZ	CreateMap)Z	key_dtypeZvalued_dtypepos_to_object)Zblob)superr   __init__num_to_collectZcreate_paramZNoOptimr   r   ZDataTypeZINT64num_visited_blobr   extra_input_blobsextra_output_blobsZINT32appendr   extendr   StructZfrom_blob_listdataZScalarZoutput_schema)selfmodelinput_recordr   namekwargsr   r   	__class__ x/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/python/layers/reservoir_sampling.pyr      sv    
	
		zReservoirSampling.__init__c                 C   s>   |j | j| j| j | jg| j | j| jg| j | jd d S )N)r   )	r   r   r   r   r   r   r   r   r   )r   netr!   r!   r"   add_opsS   s    zReservoirSampling.add_ops)r   )__name__
__module____qualname____doc__r   r$   __classcell__r!   r!   r   r"   r      s    ?r   N)Zcaffe2.pythonr   r   Zcaffe2.python.layers.layersr   r   r!   r!   r!   r"   <module>   s   