
    `i                     j   d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlmc mZ d dlmc mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ  G d d          Z G d d          Z ddde!e"df         de#e"e$e          f         de#e"ef         de#e"ef         ddfdZ%dS )    N)chain)AnyIteratorOptionalUnion)ndarray)Device)Event)Stream)get_current_stream)_modes)_index_arith)_data_transfer)_Communicatorc                       e Zd ZU eedf         ed<   eed<   deedf         deddfdZdeedf         dd fdZd	d
de	j
        defdZdS )_ArrayPlaceholder.shapedevicereturnNc                 "    || _         || _        d S N)r   r   )selfr   r   s      r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/distributed/array/_chunk.py__init__z_ArrayPlaceholder.__init__   s    
    	new_shapec                 ,    t          || j                  S r   )r   r   )r   r   s     r   reshapez_ArrayPlaceholder.reshape    s     DK888r   mode_modes.Modedtypec                    | j         5  |t          j        u rt          j        | j        |          }n0|                    |          }t          j        | j        ||          }t          j	        |          cd d d            S # 1 swxY w Y   d S r   )
r   r   REPLICA_creation_basicemptyr   identity_offull_manipulation_dims
atleast_1d)r   r   r!   datavalues        r   
to_ndarrayz_ArrayPlaceholder.to_ndarray#   s    [ 	7 	7v~%%&,TZ??((//&+DJuEE &066	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A-BB	B)__name__
__module____qualname__tupleint__annotations__r	   r   r   numpyr!   r   r,    r   r   r   r      s          c?NNNeCHo v $    9sCx 95H 9 9 9 9
7%
7.3k
7>E
7 
7 
7 
7 
7 
7r   r   c                   l   e Zd ZU eeef         ed<   eed<   ee	df         ed<   e
ej                 ed<   dZeed<   	 	 ddeeef         dedee	df         dee
ej                          ded	dfd
Ze	 ddeedf         deeef         dee	df         dee
ej                          d	d f
d            Zej        d	ee         fd            Zdej        dee	df         d	dfdZddZddZdd dddeedf         deeej        f         deeef         d	dfdZ dee	df         deedf         d	dfdZ!d dZ"dS )!_Chunkarrayready.indexupdatesN
prevent_gcr*   r   c                 T    || _         || _        || _        ||ng | _        || _        d S r   )r7   r8   r9   r:   r;   )r   r*   r8   r9   r:   r;   s         r   r   z_Chunk.__init__9   s4     


")"5ww2$r   r   r   c                     t          |t                    rt          |          }t          ||          }|5  t	                      }d d d            n# 1 swxY w Y   |g }t          ||||          S r   )
isinstancer1   r	   r   r
   r6   )clsr   r   r9   r:   r*   r8   s          r   create_placeholderz_Chunk.create_placeholderE   s     fc"" 	$F^^F // 	 	GGE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	?GdE5'222s   AAAc              #      K   | j         j        5  t                      }|                    | j                   |V  d d d            d S # 1 swxY w Y   d S r   )r7   r   r   
wait_eventr8   )r   streams     r   on_readyz_Chunk.on_readyV   s      Z 	 	'))Fdj)))LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   -A		AAupdateidxc                 >    | j                             ||f           d S r   )r:   append)r   rE   rF   s      r   
add_updatez_Chunk.add_update]   s$     	VSM*****r   c                 f   t          | j        t                    r| j        }| j        }nY|                                 5 }| j                                        }|                                }d d d            n# 1 swxY w Y   t          ||| j        t          | j
                  | j                  S )N)r;   )r>   r7   r   r8   rD   copyrecordr6   r9   listr:   r;   )r   r*   r8   rC   s       r   rK   z_Chunk.copyb   s    dj"344 	(:DJEE (Fz((( ( ( ( ( ( ( ( ( ( ( ( ( ( ( dE4:tDL/A/A!%2 2 2 	2s   .A88A<?A<r   r    c                    t          | j                  dk    rdS t          | j        t                    r=| j        d         d         j        j        }| j                            ||          | _        |                                 5 }| j        D ]k\  }}|                    |j	                   |t          j        u r|j        | j        |<   =|                    | j        |         |j                  | j        |<   l|                    | j	                   | j        | j        f| _        g | _        ddd           dS # 1 swxY w Y   dS )zApply all updates in-place.r   N)lenr:   r>   r7   r   r!   r,   rD   rB   r8   r   r#   funcrL   r;   )r   r   r!   rC   update_datarF   s         r   flushz_Chunk.flusho   so   t|!!Fdj"344 	<LOA&,2E..tU;;DJ]]__ 	$(L < < S!!+"34446>))&1&7DJsOO&*ii
3):'< '<DJsOO MM$*%%%#=DODL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B(D;;D?D?targetcommsstreamsc                    | }|}t          |j                  dk    sJ t          |j        t                    sJ |j        j        j        }|j        j        j        }	|j        }
|j        }t          j	        |
||          }|d S t          j
        |
||          }t          j
        |||          }t          j        |j        |         |j        |j                  }|t          j        ur|j        s|                                }t          j        ||         ||         |||	         ||	         |	          }|                    ||           |t          j        ury|j        st|j        j        }|                                5 }|                    |          |j        |<   |                    |j                   d d d            d S # 1 swxY w Y   d S d S d S )Nr   )rO   r:   r>   r7   r   r   idr9   r   _index_intersection_index_for_subindexr   
_AsyncDatar8   r;   r   r#   
idempotentrK   	_transferrI   r!   rD   r&   rL   )r   rS   r   r   rT   rU   	src_chunk	dst_chunksrc_devdst_devsrc_idxdst_idxintersectionsrc_new_idxdst_new_idxdata_to_transferrE   r!   rC   s                      r   apply_toz_Chunk.apply_to   s)    		9$%%****)/733333/(+/(+//#7We% %F"6\5* *"6\5* * *4OK()/ " " v~%%do%/4466)'NGG,.>'NGG,g7 7 	V[111v~%%do%O)E!**,, //3/?/?/F/F	,io.../ / / / / / / / / / / / / / / / / / &%%%s   8GG
G
c                 T   t          | j        t                    sJ t          j        | j        ||          }|d S t          j        | j        ||          }|                                 5 }|| j        |<   |                    | j	                   d d d            d S # 1 swxY w Y   d S r   )
r>   r7   r   r   rX   r9   rY   rD   rL   r8   )r   rF   r   identityrc   self_new_idxrC   s          r   set_identity_on_intersectionz#_Chunk.set_identity_on_intersection   s     $*g.....#7
COOF#7Je- -]]__ 	&'/DJ|$MM$*%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   +%BB!$B!c                     t          | j        t                    rd S |                                 5 }| j        D ]\  }}|| j        |<   |                    | j                   d d d            d S # 1 swxY w Y   d S r   )r>   r7   r   rD   r:   rL   r8   )r   ri   rC   _rF   s        r   #set_identity_on_overwritten_entriesz*_Chunk.set_identity_on_overwritten_entries   s    dj"344 	F]]__ 	&, + +3"*
3MM$*%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   2A00A47A4)NNr   )r   r6   )r   r    r   N)r   N)#r-   r.   r/   r   r   r   r2   r
   r0   slicerM   r   _PartialUpdater;   r   r   r   classmethodr1   r	   r@   
contextlibcontextmanagerr   r   rD   rZ   rI   rK   rR   dictr   rg   rk   rn   r4   r   r   r6   r6   0   s        ++,,,,LLL./0000J BF	
% 
%'#445
%>C
%UCZ 
% $~<=>
% 	
%
 

% 
% 
% 
%  BF3 3#s(O3-23;-?3UCZ 3 $~<=>3 
	3 3 3 [3  (6*    +$/+6;E3J6G+	+ + + +
2 2 2 2   ,././&3./S#X./ C556./ c6k"	./
 
./ ./ ./ ./`&$&-238_&	& & & && & & & & &r   r6   op_modez_modes._OpModer   .	chunk_maprT   rU   r   c           	      |   t          t          j        |                                                    }t	          t          |                    D ]c}||         }|                    |            t	          |dz   t          |                    D ]#}||         }	|                    |	| |||           $dt	          t          |          dz
  dd          D ]f}||         }|                    t          j	                   t	          |          D ]-}||         }	|                    |	t          j	        |||           .gd S )N   )
rM   r   from_iterablevaluesrangerO   rR   rg   r   r#   )
ru   r   rv   rT   rU   chunks_listir]   jr^   s
             r   _all_reduce_intersectionsr      sb   
 u*9+;+;+=+=>>??K3{##$$ J JN	   q1uc+..// 	J 	JA#AIy'5%IIII	J
 3{##a'R00 B BN	'''q 	B 	BA#AI6>5%B B B B	B	B Br   )&rr   	itertoolsr   typingr   r   r   r   r3   cupy._core.corer   cupy._creation.basic	_creationbasicr$   cupy._manipulation.dims_manipulationdimsr(   cupy.cuda.devicer	   cupy.cuda.streamr
   r   r   cupyx.distributed.arrayr   r   r   &cupyx.distributed.array._data_transferr   r   r6   r0   r1   rt   rM   r   r4   r   r   <module>r      s
             1 1 1 1 1 1 1 1 1 1 1 1  # # # # # # . . . . . . . . . 4 4 4 4 4 4 4 4 4 # # # # # # " " " " " " # # # # # # / / / / / / * * * * * * 0 0 0 0 0 0 2 2 2 2 2 2 @ @ @ @ @ @7 7 7 7 7 7 7 76Z& Z& Z& Z& Z& Z& Z& Z&zBB&+CHoBCf%&B ]"#B /33;.?B 
	B B B B B Br   