o
    i8                     @   s  d dl Z d dl mZmZ dededeeef fddZded	ed
ededeeeef  f
ddZdedededee fddZdedededefddZ	deedf deedf deedf deeedf  fddZ
deedf deedf deedf deedf fddZdeedf deedf deedf fdd Zdeedf dedeedf fd!d"Zdeedf d#eeef deeeeedf  f fd$d%ZdS )&    N)AnyOptionalabreturnc                 C   sN   | |}}d\}}|r#|| }||||  }}||||  }}|s||fS )N)   r    )r   r   cdxurr   r   a/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/cupyx/distributed/array/_index_arith.py_extgcd   s   
r   a1n1a2n2c                 C   sz   t ||\}}||  | dkrd S |||  }| ||  | | ||  |  }||k r9||| d | d | 7 }||fS )Nr   r   )r   )r   r   r   r   gm1nr   r   r   r   _crt   s    r   lengthc                 C   sd   |  |\}}}| |\}}}t||||}	|	d u rd S |	\}
}t||}|
|kr,d S t|
||S N)indicesr   minslice)r   r   r   a_starta_stopa_stepb_startb_stopb_step
crt_resultc_startc_stepc_stopr   r   r   _slice_intersection1   s   
r'   subc                 C   sT   |  |\}}}| |\}}}|| | }	|| d | d }
|| }t|	|
|S Nr   )r   r   )r   r(   r   r   r   r   	sub_startsub_stopsub_stepr$   r&   r%   r   r   r   _index_for_subsliceB   s   r-   a_idx.b_idxshapec                 C   sN   t | t |ks
J tdd t| ||D }d |v rd S tttdf |S )Nc                 s   "    | ]\}}}t |||V  qd S r   )r'   ).0r   r   r   r   r   r   	<genexpr>V       z&_index_intersection.<locals>.<genexpr>.)lentupleziptypingcastr   )r.   r/   r0   resultr   r   r   _index_intersectionP   s   
r;   sub_idxc                 C   s.   t | t |ks
J tdd t| ||D S )Nc                 s   r1   r   )r-   )r2   r   r(   r   r   r   r   r3   e   r4   z&_index_for_subindex.<locals>.<genexpr>)r5   r6   r7   )r.   r<   r0   r   r   r   _index_for_subindex_   s   
r=   outer_shapeidxc                 C   sR   t | }tt|D ]}|| || \}}}|| d | d ||< q
t|S r)   )listranger5   r   r6   )r>   r?   r0   istartstopstepr   r   r   _shape_after_indexingi   s
   rF   c              	   C   s>  t |ts|f}t| }t||krtd| dt| d|td f|t|   }g }t|D ]h}t || trd|| | | krTtd||  d| d| |  |t|| || d d q2t || tr|| | | \}}}|dkrt	d	||krt	d
| |t||| q2t	d| t|S )Nz%too many indices for array: array is z-dimensional, but z were indexedzIndex z is out of bounds for axis z with size r   r   zSlice step must be positive.zThe index is empty on axis zInvalid index on axis )

isinstancer6   r5   
IndexErrorr   rA   intappendr   
ValueError)r0   r?   ndimnew_idxrB   rC   rD   rE   r   r   r   _normalize_indext   sB   
 rN   	index_mapc                    sL   i }|  D ]\}}t|ts|g} fdd|D }|  |||< q|S )Nc                    s   g | ]}t  |qS r   )rN   )r2   r?   r0   r   r   
<listcomp>   s    z(_normalize_index_map.<locals>.<listcomp>)itemsrG   r@   sort)r0   rO   new_index_mapdevidxsr   rP   r   _normalize_index_map   s   

rW   )r8   r   r   rI   r6   r   r   r   r'   r-   r;   r=   rF   rN   dictr@   rW   r   r   r   r   <module>   sN    *













&"

