U
    <cl4                     @   s  d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 ddddd	d
dddddddddddddddgZdd ZG dd	 d	ZG dd deZdddd d!d"d#d$d%d&d'gZd(d)d*d+gZG d,d deZG d-d deZG d.d deZG d/d dZG d0d deZG d1d deZG d2d deZG d3d deZG d4d deZG d5d deZG d6d deZG d7d deZG d8d deZd9d ZG d:d deZ G d;d
 d
e Z!G d<d de!Z"ed=G d>d de"eZ#d?S )@    )AnyDictList)functional_datapipe)DFIterDataPipeIterDataPipe)DataChunkDFCaptureCaptureA
CaptureAddCaptureCallCaptureControlCaptureDataFrameCaptureDataFrameWithDataPipeOpsCaptureFCaptureGetAttrCaptureGetItemCaptureInitialCaptureLikeMock
CaptureMulCaptureSetItem
CaptureSubCaptureVariableCaptureVariableAssignDataFrameTracerDataFrameTracedOpsdisable_captureget_valc                   C   s
   dt _d S )NT)r   disabled r   r   S/tmp/pip-unpacked-wheel-gikjz4vx/torch/utils/data/datapipes/dataframe/dataframes.pyr   #   s    c                   @   s   e Zd ZdZdS )r   FN)__name__
__module____qualname__r   r   r   r   r    r   '   s   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   || _ || _d S N)source_datapipe
output_var)selfr%   r&   r   r   r    __init__,   s    zDataFrameTracedOps.__init__c                 c   s   | j D ]}| j|V  qd S r$   )r%   r&   	apply_ops)r'   itemr   r   r    __iter__0   s    
zDataFrameTracedOps.__iter__N)r!   r"   r#   r(   r+   r   r   r   r    r   +   s   _dataframes_as_tuplesgroupby_dataframes_filtermapZto_datapipeshuffleconcatbatch_dataframes_per_row_dataframes_concat_dataframes_shuffle__deepcopy____setstate__is_shardableZapply_shardingc                   @   s   e Zd Zd ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zedd Zdd ZdS )!r	   Nc                 C   s   g g |d| _ d S )N
operations	variables	schema_dfctx)r'   r<   r   r   r    r(   ?   s    zCapture.__init__c                 C   s   |   S r$   )_ops_strr'   r   r   r    __str__B   s    zCapture.__str__c                 C   s8   d}| j d D ]$}t|dkr&|d7 }|t|7 }q|S )N r:   r   
)r>   lenstr)r'   resopr   r   r    r?   E   s    zCapture._ops_strc                 C   sB   d | j d< | j d D ]
}d |_qi }| jD ]}t| |||< q*|S )Nr<   r;   )r>   calculated_value__dict__getattr)r'   varstater*   r   r   r    __getstate__M   s    

zCapture.__getstate__c                 C   s"   |  D ]\}}t| || qd S r$   )itemssetattr)r'   rL   kvr   r   r    r7   W   s    zCapture.__setstate__c                 C   s:   |dks|dkrt d|dkr&t t| || jd}|S )Nkwargkwargsz
no kwargs!)r6   r=   )	ExceptionAttributeErrorr   r>   )r'   attrnameresultr   r   r    __getattr__[   s    zCapture.__getattr__c                 C   s   t | || jdS )Nr=   )r   r>   )r'   keyr   r   r    __getitem__c   s    zCapture.__getitem__c                 C   s"   | j d t| ||| j d d S )Nr:   r=   )r>   appendr   )r'   rY   valuer   r   r    __setitem__f   s    
zCapture.__setitem__c                 C   s>   t | || jd}t|| jd}| jd t||| jd |S Nr=   r:   variabler\   r>   )r   r>   r   r[   r   r'   add_valrF   rK   r   r   r    __add__j   s    
zCapture.__add__c                 C   s>   t | || jd}t|| jd}| jd t||| jd |S r^   )r   r>   r   r[   r   ra   r   r   r    __sub__q   s    
zCapture.__sub__c                 C   sB   t | || jd}t|| jd}t||| jd}| jd | |S )Nr=   r_   r:   )r   r>   r   r   r[   )r'   rb   rF   rK   tr   r   r    __mul__x   s
    zCapture.__mul__c                 C   s$   t | jd dko"t | jd dkS )Nr:   r   r;   )rD   r>   r@   r   r   r    _is_context_empty   s    zCapture._is_context_emptyc                 C   s,   || j d d _| j d D ]}|  qd S Nr;   r   r:   r>   rH   executer'   Z	dataframerG   r   r   r    apply_ops_2   s    zCapture.apply_ops_2c                 C   s   |  | jd  |  }|jS )Nr<   )rl   r>   rj   columnsr'   r\   r   r   r    rm      s    zCapture.columnsc           	      O   s   |   r|D ]"}t|tr|  s|j| _ q0q|   r| D ]D\}}t|trf|  sf|j| _ qt|tr@|  s@|j| _ qq@t| | j||d}td | jd}t| j||d}| jd | |S )N)r>   argsrS   r=   )r>   r`   r\   r:   )	rg   
isinstancer	   r>   rN   r   r   r   r[   )	r'   ro   rS   argrP   rQ   rF   rK   re   r   r   r    __call__   s$    zCapture.__call__)N)r!   r"   r#   r(   rA   r?   rM   r7   rX   rZ   r]   rc   rd   rf   rg   rl   propertyrm   rr   r   r   r   r    r	   <   s    


c                   @   s   e Zd ZdddZdS )r   Nc                 K   s&   |d krg g d| _ n|| _ || _d S N)r:   r;   )r>   rS   )r'   r>   rS   r   r   r    r(      s    zCaptureF.__init__)N)r!   r"   r#   r(   r   r   r   r    r      s   c                   @   s   e Zd Zdd Zdd ZdS )r
   c                 C   s   dj | jd dS )Nz{name}nameru   )formatrS   r@   r   r   r    rA      s    zCaptureA.__str__c                 C   s   | j d }|S )Nreal_attribute)rS   rn   r   r   r    rj      s    
zCaptureA.executeNr!   r"   r#   rA   rj   r   r   r   r    r
      s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s0   dd l m} ||\}}|| _|| _|| _d S )Nr   )Zunittest.mockmockZ_get_target
get_target	attributeru   )r'   ru   rz   r{   r|   r   r   r    r(      s
    zCaptureLikeMock.__init__c                 C   s8   t |  | j| _t| j| jd}t|  | j| d S )N)ru   rx   )rJ   r{   r|   saver
   ru   rO   )r'   Zcaptr   r   r    	__enter__   s    zCaptureLikeMock.__enter__c                 G   s   t |  | j| j d S r$   )rO   r{   r|   r}   )r'   exc_infor   r   r    __exit__   s    zCaptureLikeMock.__exit__N)r!   r"   r#   r(   r~   r   r   r   r   r    r      s   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	r   Nc                 K   s,   |d krg g d| _ n|| _ || _|| _d S rt   )r>   rS   callable)r'   r   r>   rS   r   r   r    r(      s
    zCaptureCall.__init__c                 C   s   dj f d| ji| jS )Nz{callable}({args},{kwargs})r   )rw   r   rS   r@   r   r   r    rA      s    zCaptureCall.__str__c                 C   sR   g }| j d D ](}t|tr,||  q|| qt| j}||| j d S )Nro   rS   )rS   rp   r	   r[   rj   r   r   )r'   Zexecuted_argsrq   leftr   r   r    rj      s    

zCaptureCall.execute)Nr!   r"   r#   r(   rA   rj   r   r   r   r    r      s   
c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s"   | j d }| j d }dj||dS )Nr`   r\   z{variable} = {value})r`   r\   )rS   rw   )r'   r`   r\   r   r   r    rA      s    

zCaptureVariableAssign.__str__c                 C   s   | j d  | j d _d S )Nr\   r`   )rS   rj   rH   r@   r   r   r    rj      s    zCaptureVariableAssign.executeNry   r   r   r   r    r      s   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )r   r   c                 C   sH   t jrtd|| _|| _dtj | _t jd7  _| jd |  d S )Nz6Attempting to create capture variable with capture offzvar_%s   r;   )	r   r   rT   r>   r\   r   	names_idxru   r[   )r'   r\   r>   r   r   r    r(      s    zCaptureVariable.__init__c                 C   s   | j S r$   rv   r@   r   r   r    rA      s    zCaptureVariable.__str__c                 C   s   | j S r$   )rH   r@   r   r   r    rj     s    zCaptureVariable.executec                 C   s.   || j d d _| j d D ]}|  q| jS rh   ri   rk   r   r   r    r)     s    
zCaptureVariable.apply_opsN)r!   r"   r#   r   r(   rA   rj   r)   r   r   r   r    r      s
   	c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _d S r$   )r>   r   rY   )r'   r   rY   r>   r   r   r    r(     s    zCaptureGetItem.__init__c                 C   s   d| j t| jf S )Nz%s[%s])r   r   rY   r@   r   r   r    rA     s    zCaptureGetItem.__str__c                 C   s   | j  }|| j S r$   )r   rj   rY   )r'   r   r   r   r    rj     s    
zCaptureGetItem.executeNr   r   r   r   r    r     s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _|| _d S r$   )r>   r   rY   r\   )r'   r   rY   r\   r>   r   r   r    r(     s    zCaptureSetItem.__init__c                 C   s   d| j t| j| jf S )Nz%s[%s] = %s)r   r   rY   r\   r@   r   r   r    rA   !  s    zCaptureSetItem.__str__c                 C   s"   | j  }| j }||| j< d S r$   )r   rj   r\   rY   )r'   r   r\   r   r   r    rj   $  s    

zCaptureSetItem.executeNr   r   r   r   r    r     s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _d S r$   r>   r   rightr'   r   r   r>   r   r   r    r(   +  s    zCaptureAdd.__init__c                 C   s   d| j | jf S )Nz%s + %sr   r   r@   r   r   r    rA   0  s    zCaptureAdd.__str__c                 C   s   t | jt | j S r$   r   r   r   r@   r   r   r    rj   3  s    zCaptureAdd.executeNr   r   r   r   r    r   *  s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _d S r$   r   r   r   r   r    r(   8  s    zCaptureMul.__init__c                 C   s   d| j | jf S )Nz%s * %sr   r@   r   r   r    rA   =  s    zCaptureMul.__str__c                 C   s   t | jt | j S r$   r   r@   r   r   r    rj   @  s    zCaptureMul.executeNr   r   r   r   r    r   7  s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _d S r$   r   r   r   r   r    r(   E  s    zCaptureSub.__init__c                 C   s   d| j | jf S )Nz%s - %sr   r@   r   r   r    rA   J  s    zCaptureSub.__str__c                 C   s   t | jt | j S r$   r   r@   r   r   r    rj   M  s    zCaptureSub.executeNr   r   r   r   r    r   D  s   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _|| _d S r$   )r>   srcru   )r'   r   ru   r>   r   r   r    r(   R  s    zCaptureGetAttr.__init__c                 C   s   d| j | jf S )Nz%s.%s)r   ru   r@   r   r   r    rA   W  s    zCaptureGetAttr.__str__c                 C   s   t | j}t|| jS r$   )r   r   rJ   ru   )r'   valr   r   r    rj   Z  s    
zCaptureGetAttr.executeNr   r   r   r   r    r   Q  s   c                 C   s,   t | tr|  S t | tr$d|  S | S d S )Nz"%s")rp   r	   rj   rE   )capturer   r   r    r   _  s
    

c                       s   e Zd Zd fdd	Z  ZS )r   Nc                    s*   g g |d}t  d | d| j | _d S )Nr9   zinput_%s)superr(   ru   )r'   r<   Znew_ctx	__class__r   r    r(   i  s    zCaptureInitial.__init__)N)r!   r"   r#   r(   __classcell__r   r   r   r    r   h  s   c                   @   s   e Zd ZdS )r   N)r!   r"   r#   r   r   r   r    r   o  s   c                       sv   e Zd Zdd Zdd Zdd Zddefed	d
dZdddddddZ	dd Z
dd Zdd Z fddZ  ZS )r   c                 C   s   t | jd d j| S )Nr;   r   )r   r>   r%   r@   r   r   r    as_datapipet  s     z+CaptureDataFrameWithDataPipeOps.as_datapipec                 C   s   |    S r$   )r   r+   r@   r   r   r    raw_iteratorx  s    z,CaptureDataFrameWithDataPipeOps.raw_iteratorc                 C   s   t |  S r$   )iterr,   r@   r   r   r    r+   {  s    z(CaptureDataFrameWithDataPipeOps.__iter__
   F)	drop_lastc                 C   s,   |   |}| jd||d}d|_|S )Nr   )r   wrapper_classT)r3   r4   r   r2   Z_dp_contains_dataframe)r'   Z
batch_sizer   r   dpr   r   r    r2   ~  s    z%CaptureDataFrameWithDataPipeOps.batchi'  Nbuffer_size
group_sizeguaranteed_group_sizedrop_remainingc                C   s$   |   }| j|||||d}|S )Nr   )r3   r   r-   )r'   Zgroup_key_fnr   r   r   r   r   r   r   r    r-     s     z'CaptureDataFrameWithDataPipeOps.groupbyc                 O   s   | j ||S r$   )r5   r'   ro   rS   r   r   r    r0     s    z'CaptureDataFrameWithDataPipeOps.shufflec                 O   s   | j ||S r$   )r.   r   r   r   r    filter  s    z&CaptureDataFrameWithDataPipeOps.filterc                 O   s   t dd S )Nz)Can't collate unbatched DataFrames stream)rT   r   r   r   r    collate  s    z'CaptureDataFrameWithDataPipeOps.collatec                    s4   |t krtd||tkr(|  |S t |S )NzAttemping to get )UNIMPLEMENTED_ATTRrU   DATAPIPES_OPSr   rX   r   )r'   rV   r   r   r    rX     s
    
z+CaptureDataFrameWithDataPipeOps.__getattr__)r!   r"   r#   r   r   r+   r   boolr2   r-   r0   r   r   rX   r   r   r   r   r    r   s  s   	Ztrace_as_dataframec                       s2   e Zd ZdZdd Zdd Zd fdd	Z  ZS )	r   Nc                 O   s   d S r$   r   r   r   r   r    set_shuffle_settings  s    z$DataFrameTracer.set_shuffle_settingsc                 C   s   dS )NFr   r@   r   r   r    r8     s    zDataFrameTracer.is_shardablec                    s.   || _ |d krtt| j }t j|d d S )N)r<   )r%   nextr   r   r(   )r'   r%   r<   r   r   r    r(     s    zDataFrameTracer.__init__)N)r!   r"   r#   r%   r   r8   r(   r   r   r   r   r    r     s   N)$typingr   r   r   Z%torch.utils.data.datapipes._decoratorr   Z#torch.utils.data.datapipes.datapiper   r   Z/torch.utils.data.datapipes.dataframe.structuresr   __all__r   r   r   r   r   objectr	   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   sp   
     m		
	.