
    zj                         d dl Zd dlZddlmZmZ dZdZd Zd Z	d Z
d	 Zd
 Zd Zd Z	 ddZd Zd Zd Zd Zd Zd Zd ZdS )    N   )coreunique_nameii   c                    ddl m t          |          }fd|D             }|                    t                    }|dk    r|S |dk    rt          d          |                    t                    }|t          |          dz
  k    r
|d d         S t          d           gt          | j	                  t          |          z
  |                    d           z   dz   z  |||dz   <   |S )Nr   Variablec                 p    g | ]2}t          |t          j        j        t          j        f          s|0|3S N)
isinstancepaddlepirValuenpndarray).0eler   s     j/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/base/variable_index.py
<listcomp>z$replace_ellipsis.<locals>.<listcomp>'   sJ       #&**:BJGHH O 	 OO    r   z0An index can only have a single ellipsis ('...'))
	frameworkr   listcountEllipsis
IndexErrorindexlensliceshape)varitemitem_remove_var	ell_countell_idxr   s        @r   replace_ellipsisr%      s   ###### ::D     O  %%h//IA~~	QKLLLjj""G#d))a-CRCy',T{{m	NNSYY&D)9)99A='
Ww{"# Kr   c                 2   g }| D ]}t          |t          j                  r(|                    t	          j        |                     Dt          |t                    r#|                    t          |                     ||                    |           |S r
   )r   r   r   appendr   assignranger   )r!   new_item
slice_items      r   replace_ndarray_and_ranger,   ?   s    H ( (
j"*-- 	(OOFM*556666
E** 	(OOD,,----OOJ''''Or   c                     g }g }t          |           D ]2\  }}||                    |           |                    |           3||fS r
   )	enumerater'   )r!   r*   	none_axesir+   s        r   replace_noner1   K   sb    HI"4 ( (:QOOJ''''Yr   c                 B   ddl m} t          | |          r0t          | j                  dk    r| j        t          j        k    rdS nXt          | t          j        j	                  r9t          | j                  dk    r!| j        t          j
        j        j        k    rdS dS )Nr   r   r   TF)r   r   r   r   r   dtyper   boolr   r   base	libpaddleBOOL)r   r   s     r   is_scalar_tensorr8   V   s    #######x   sy>>Q39#;#;4	C)	*	* sy>>Q390E0J#J#J45r   c                    ddl m} t          j                            |          rt          j                            |d          ||<   t          |          D ]b\  }}t          ||t          j        j	        f          r!| |         
                    d           d||<   G| |         
                    |           cd S || |<   d S )Nr   r   int64r3   r   )r   r   r   utils_contain_var_convert_to_tensor_listr.   r   r   r   r'   )	attrsattr	attr_nametensor_attr_nameinputsinfer_flagsr   r0   dims	            r   
deal_attrsrF   b   s    ######|  &&  #)<#G#G $H $
 $
   oo 	- 	-FAs#&**:;<< -i ''+++!#Ai '',,,,	- 	-  ir   c           	         t          |j                  t          | j                  k    r:t          dt          | j                   dt          |j                   d          d}|j        }|t          |j                  k     rq||         }|dk    rF| j        |         dk    r5|| j        |         k    r$t          d| d| j        |          d| d          |dz  }|t          |j                  k     qt          |j                  t          | j                  k    rt          j        | |          S t          j        |          }t          j        | |          S )	NzkThe dims of bool index doesn't match indexed array, the dims of bool index except to be equal or less than z, but received .r   r   zHThe dimension of bool index doesn't match indexed array along dimension z, the target dimension is r   )r   r   r   r   masked_selectnonzero	gather_nd)r    r!   r0   
item_shapedim_len
bool_2_idxs         r   get_value_for_bool_tensorrO   s   s   
4:SY''F	NNF F36tz??F F F
 
 	

 	
AJ
c$*oo

Q-b==SYq\R//Gsy|4K4Kbb b:=)A,b bW^b b b   	
Q c$*oo

 4:#ci..((#C...%%JC,,,r   c                 \   ddl m} t          j                    r
J d            t	          ||t          j        j        t          f          rDddlm	} ddl
m} t          j         ||          d          } ||          } |||| 	          S t          d
t          |                     )a  branches for tensor array setitem operation.
    A item can be a:
    (1) int/Variable, which is a simple number/variable such as [1], [-2]
    (2) Slice, which is represented by bounds such as [2:-1]
    (3) Tuple, which includes the above two cases such as [2:-1, 1]
    If item is case (1), we perform paddle.tensor.array_write,
    in other cases, we raise a NotImplementedError.
    r   r   z=setitem for tensor_array must be called in static graph mode.r   )to_static_variable)array_writer:   r;   )xr0   arrayzCOnly support __setitem__ by Int/Variable in tensor_array, but gets )r   r   r   in_dynamic_moder   r   r   int&paddle.jit.dy2static.convert_operatorsrQ   paddle.tensorrR   castNotImplementedErrortype)r    r!   valuer   rQ   rR   s         r   _setitem_for_tensor_arrayr]      s     $#####%''  G ' $6:#3S9:: 

MMMMMM------{--d337CCC""5)){Ud#6666!^RVW[R\R\^^
 
 	
r   Tc                    g }g }t           }d}t          |          D ]\  }	}
|
|	dk    rd}|	dk    r%t          |          dk    r|d         |	dz
  k    rd}nt          ||	          }t	          ||
d         j                  }|                    |	           |                    |
d                    t          | j                  D ]}	||	         |                    |	            |r&t          j	        |          
                                ng }d}|t          t          | j                            k    r| }|r|}nBd}|                     |          }|r)|j        dk    r|dk    r|                    |          }n|}|||||||fS )at  
    Transpose origin Tensor and advanced indices to the front.

    Returns:
        transed_tensor (Tensor): transposed tensor, corresponding with advanced indices
        transed_index (List): advanced indices transposed to the front
        trans_back_dim (List): order of axes to transpose back to original order. Only used in __setitem__.
        pos_of_new_dim (int):  axis of new dim in the result. Only used in __getitem__.
        rank_of_new_dim (int): rank of new dim in the result. Only used in __getitem__.
        transed_value_tensor (Tensor): value tensor transposed to the front. Only used in __setitem__.
    r   Nr   r   T)MAX_INTEGERr.   r   minmaxndimr'   r)   r   argsorttolistr   	transpose)
ori_tensorindicesis_for_setitemvaluesout_is_viewtransed_dimtransed_indexpos_of_new_dimrank_of_new_dimr0   indicetrans_back_dimtransed_value_tensortransed_tensors                 r   deal_advanced_indexrs      s    KM !NOw'' , ,	6Avv!"1uu[))A--+b/QU2J2J!"!$^Q!7!7!/6!9>BBOq!!!  +++:?## " "1:q!!!9GORZ,,33555RNd5112222# 	*#) #--k:: 	.{Q>Q#6#6 (.'7'7'D'D$$'-$ 	 r   c                 l   | ||dS t          | t          j        j        t          j        j        f          rdS t          |t          j        j        t          j        j        f          rdS t          |t          j        j        t          j        j        f          rdS | dk    o|t          k    o|dk    S )NTFr   r   )r   r   r5   r   r   r   r_   )startendsteps      r   slice_is_same_to_originalrx      s    }t %&+.
0@ABB u#,fj.>?@@ u$-vz/?@AA uA::#,::r   c                     ddl m}  |            r|                                 S t          | d          o0| j                                        t          j        j        j	        k    S )Nr   )in_pir_modedesc)
r   rz   is_dense_tensor_array_typehasattrr{   r[   r   VarDescVarTypeDENSE_TENSOR_ARRAY)r\   rz   s     r   is_tensor_array_typer      sj    &&&&&&{}} 
//111 E6"" M
!!T\%9%LL	
r   c                    t          |           }|rg nd gdz  t          | j                  z  }g }g }g }g }g }d}	d}
t          |t                    s|f}t          |          }t          | |          }t          |          \  }}d}d}t          |          D ]:\  }}d\  }}}t          |          t          u r|sU| j        |         H| j        |         dk    r7|| j        |         k    r&t          d| d| d| d| j        |                    |                    |           |}d	}|d
k    r|d	z   nt          }|d	z  }nt          |          r%|                    |           |}d	}|d	z   }|d	z  }nt          |t                    r8|                    |           |t!          j        |g          f||<   d}
|d	z  }nlt          |t$                    r|j        }|j        }|j        }||||d	z  }|d	z  }h|d	n|}||dk    rdnt          }||dk    rt          nt,          }|st          |t           j        j        t           j        j        f          slt          |t           j        j        t           j        j        f          s<| j        |         d
k    r+|| j        |         k    r|dk    rt          n| j        |         }|d	z  }|d	z  }nYt          |t6          t          f          r|t!          j        |          f||<   ||         d	         j        t           j        k    rNt          |          | j        |         k    r0t          dt          |           d| j        |          d|           d}
|d	z  }|d	z  }nt          |t           j        j                  r|j        t           j        k    s|j        t           j        j        j        k    rk|j        dk    r|                    |           nJ|j        d         | j        |         k    r.t          d|j        d          d| j        |          d|           ||f||<   d}
|d	z  }|d	z  }nt          |t           j        j                  r|j        t           j        j         j!        j        k    rk|j        dk    r|                    |           nJ|j        d         | j        |         k    r.t          d|j        d          d| j        |          d|           ||f||<   d}
|d	z  }|d	z  }nt          d| d          tE          |||          s|                    |           |                    |           |                    |           |                    |d	z
             t          |t           j        j        t           j        j        f          s|d	k    rdn|	}	<||||||||
|	f	S )N   Fr   )NNNzslice_item z at dim z should be >= 0 and < x.shape[z]: r   r   TzThe shape of boolean index z did not match indexed tensor z along axis zaValid index accept int / bool / slice / ellipsis / list / Tuple / Ndarray / Tensor, but received rH   )#r   r   r   r   tupler,   r%   r1   r.   r[   rV   r   r'   r_   r8   r4   r   	to_tensorr   ru   stoprw   MIN_INTEGERr5   r   r   r   r   r3   r6   r7   rb   r   DataTyperx   )rS   rg   is_tensor_arrayadvanced_indexdecrease_axesaxesstartsendsstepsuse_strided_slicehas_advanced_indexr/   estimated_dimrE   r0   r+   ru   rv   rw   s                      r   parse_indexr     s#   *1--O <D6A:AG#<  MDFDEgu%% *'00Gq'**G%g..GYM
C"7++ D D:+sD
s""#GCL,GCLA%%!'#,.. !o*oocooY\ooabahilamoo     %%%ED$."$4$4*q..+C1HCCj)) _	  %%%EDq.C1HCC
D)) X	S!!! *..-N=) "&QMM
E** O	$E/C?D}"q11$D}!AXX;{%)AXXkk;  DcFK$8&*:J#KLLD dV[%96:;K$LMMD
 73<2%%#*=*=)-++qws|CQM1HCC
T5M22 5	 ,,-N=) }-a06&+EE
OOqws|33  A#j//  A  Aabahilam  A  A{~  A  A   "&QM1HCC
FK$899 $	  FK//#v{'<'AAA?a''$$S))))%a(AGCL88$ Ij6Fq6I  I  Iijipqtiu  I  I  DG  I  I   .;J,GN=)!%QM1HCC
FJ$455 	6:?#;#@@@?a''$$S))))%a(AGCL88$ Ij6Fq6I  I  Iijipqtiu  I  I  DG  I  I   .;J,GN=)!%QM1HCC Bt~  B  B  B   )T:: 	MM%   KKLLKKa    tfk&:FJ<L%MNN' qyy 
 '  	
 
r   c                 r   ddl m} ddlm}m} t          |           }|rt          | ||          S t          | |          \	  }}}	}
}}}}}d| i}|
|||	||d}d}d}d}d}d}t          j	        
                    |          r't          j	                            |          }||d<   |d= t          j	        
                    |          r't          j	                            |          }||d	<   |d
= t          j	        
                    |	          r't          j	                            |	          }||d<   |d= |s| j        }||d<   ddlm} t          |t           t"          t$          t&          f          r1t)          j        |g                               ||                    }t          |t(          j                  rEt1          |j                  }|                                                                }||d<   ||d<   n]t          ||t          j        j        f          r|                    |          }||d<   |}nt=          dt?          |                      |            r |            rt          |t0          t@          f          r>t          j	        
                    |          rt          j	        !                    |          }t          |t0          t@          f          r>t          j	        
                    |          rt          j	        !                    |          }t          |	t0          t@          f          r>t          j	        
                    |	          rt          j	        !                    |	          }	|(t          j"        #                    | |||	|
||||	  	        }n&t          j"        $                    | ||||	|
||          } |            r9ddl%m&} |'                    t          j(        )                                | |           |S t          j*        j+        j,        	 di t[                      }|j.        j/        dk    r|0                    | j                  }n|1                    | j                  }t          j(        )                                2                                }|3                    d|d|i|ddi           t          j4        j5        j6        7                                j8        '                    |j9        | j:        ;                                |           |S t          ||t          j        j        f          s,t          j<        |                              | j                  }t{          | |
|||	|||          \  }}t}          ||d||          \  }} }!}"}"}}|j        |j        k    r|                    |j                  }t          j?                    rt          |           dk    r| d         j        t          j        t          j*        jA        jB        fv rt          | d         j        t          |j                  k              rh|j        |j        k    r|C                    |j                  }t          j"        D                    t          jE        | d                   ||          }|s| S n1|F                    | |          }|s| S n|G                    | |          }|H                    |!          }#|#|d<    |            rz |            rt          |t0          t@          f          r>t          j	        
                    |          rt          j	        !                    |          }t          |t0          t@          f          r>t          j	        
                    |          rt          j	        !                    |          }t          |	t0          t@          f          r>t          j	        
                    |	          rt          j	        !                    |	          }t          j"        $                    | |#|||	|
||          }ddl%m&} |'                    t          j(        )                                | |           nt          j*        j+        j,        	 di t[                      }|j.        j/        dk    r|0                    | j                  }n|1                    | j                  }t          j(        )                                2                                }|3                    d|d|i|ddi           t          j4        j5        j6        7                                j8        '                    |j9        | j:        ;                                |           |S )a  
    In dynamic mode, this function will modify the value at input tensor, returning same Tensor as input.
    But it will return a new Tensor with assigned value in static mode.

    Args:
        x(Tensor): Tensor to be set value.
        indices(int|slice|None|Tensor|List|Tuple...): Indices, used to indicate the position of the element to be fetched.
        values(Tensor|Number|Ndarray): values to be assigned to the x.
    r   )in_dynamic_or_pir_mode)r   rz   Input)r   r   r   r   r   r/   NStartsTensorListr   EndsTensorListr   StepsTensorListr   r3   )convert_dtyperi   r   ValueTensorzjOnly support to assign an integer, float, numpy.ndarray or paddle.Tensor to a paddle.Tensor, but received r   )_global_inplace_map	set_valuer;   Out)r[   rC   outputsr?   inplace_mapT)r   )I r   r   r   rz   r   r]   r   r   r<   r=   r>   r3   data_feederr   r   r4   rV   floatcomplexr   rT   astyper   r   r   ravelrd   r   r   	TypeErrorr[   r   get_int_tensor_list_C_ops
set_value_set_value_with_tensor_'paddle.jit.dy2static.parameter_recorderr   addstaticdefault_main_programr5   layer_helperLayerHelperlocalsmain_programcurrent_block_idx*_create_global_variable_for_type_inference"create_variable_for_type_inferencecurrent_block	append_opjitapiProgramTranslatorget_instance_inplace_mapprogramr{   idr(   get_tensor_with_basic_indexingrs   rU   r   r6   r7   expandwhere_logical_not
index_put_	index_putre   )$rS   rg   ri   r   r   rz   r   r   r   r   r   r/   r   r   r   r   rC   r?   value_tensorr   r   r   r   r3   r   outputr   helper	cur_block
sub_tensoris_viewtransed_sub_tensoradjusted_advanced_indextransback_dim_transback_sub_tensors$                                       r   _setitem_staticr     sK
    )(((((00000000*1--O =(GV<<< 	Aw
 q\F& E LNOE|  (( !<??GG%5!"(O|  && ==dCC#1 &M|  ''  ,>>uEE$3 !'N _g......ftS%9:: 	EXvh''..}}U/C/CDDFfbj)) 	&&E\\^^**,,F$E(O"E'NN6:+; <== 		]]5))F$*F=!!LL QBFv,,Q Q   "!## G	{}} 	HftUm44 J|0088 J!'!A!A&!I!IdT5M22 F|0066 F%|??EEedE]33 H|0077 H & @ @ G G#11!
 
  == !	 	 {}}       $''M6688!V   M[-9 %xx F "499JJ' K    BB' C   ::<<JJLLI $e,      JN,99;;HLL!1699;;   M &8VZ-=">?? 	;]6**11!'::F<	
 	

G$  fg
 
	
#
 <-333]]#5#;<<F!## 	+,,11+A.4K!6!;<= =+A.4-3445 = <#5#;;;#]]+=+CDDF%+]%9%9&'>q'ABB&& &"
  H &8%B%B+V& &"  H "4!=!='" "  2;;MJJ 4}!!## 5	{}} 	GftUm44 J|0088 J!'!A!A&!I!IdT5M22 F|0066 F%|??EEedE]33 G|0077 G%|??FF]99$	 	F       ##2244a    [-9 %xx F "499JJ' K    BB' C   ::<<JJLLI $e,      JN,99;;HLL!1699;;   r   c           	      4
   ddl m} d}	 |            rt          | d          rd| _        t	          |          dk    r| }
nNd}	|rdnd}d	| gi}|g g |d
}|rg |d<   dgt	          |          z  }t          ||dd||           t          ||dd||           t          ||dd||           ||d<   ddlm}m}  |            rEd|	                                v r	|d         }n|d         }d|	                                v r	|d         }n|d         }d|	                                v r	|d         }n|d         }|rq |            rt          |t          t          f          r>t          j                            |          rt          j                            |          }t          |t          t          f          r>t          j                            |          rt          j                            |          }t          |t          t          f          r>t          j                            |          rt          j                            |          }t          j                            | ||||          }
t	          |          dk    r t          j                            |
|          }
n |            r t          |t          t          f          r>t          j                            |          rt          j                            |          }t          |t          t          f          r>t          j                            |          rt          j                            |          }|                                 rXt	          |          dk    r"t          j                            | |          dfS t          j                            | ||          dfS t          j                            | ||||d         |d                   }
nt          j                                                                        }|                    t;          j        | j        dz   |z             | j                   }|!                    ||d|gi|           |}
t	          |          dk    rRd}	tE          |          D ]*\  }t	          fd|D                       }|z
  }|||<   +t          j#        |
|          }
 |            rt          |
d          rd|
_        |
|	fS )Nr   )in_to_static_modeFis_view_varTr   strided_slicer   r   )r   r   r   decrease_axisstridesr   r   r   r   StridesTensorListrD   )r   rz   r   r   )namer3   r   )r[   rC   r   r?   c                      g | ]
}|k     |S  r   )r   r0   axiss     r   r   z2get_tensor_with_basic_indexing.<locals>.<listcomp>?  s    :::1TQr   r   )$dygraph.baser   r}   r   r   rF   r   r   rz   keysr   r   r   r   r<   r=   r   r   r   squeezer|   _pir_opsslice_array_denseslice_arrayr   r   r   r   
create_varr   generate_with_ignorable_keyr   r3   r   r.   	unsqueeze)rS   r   r   r   r   r   r/   r   r   rj   outop_typerC   r?   rD   r   rz   strv   stridetarget_blockslice_out_varidxlnew_axisr   s                            @r   r   r     sz    0/////K wq-88 
4yyA~~%6C//GA3*	
 
  	"!E)cCIIo68%7	
 	
 	
 	5$(8&+NNN5)%8&+	
 	
 	
  +m99999999!!## F	 !V[[]]22./8_6;;==00-.Fm"fkkmm33 34y)  );== 	N!"tUm44 F!<44R88 F!'!A!A"!E!EB!#e}55 H!<44S99 H"(,"B"B3"G"GC!&4-88 N!<44V<< N%+\%E%Ef%M%MFm11!T2sFKK}%%)) -//]CCC;== !"tUm44 F!<44R88 F!'!A!A"!E!EB!#e}55 H!<44S99 H"(,"B"B3"G"GC3355 
}--11 & A A!R H H %$  !' ; ;Ar3 G G %$  m))-(/*  "===??MMOOL(33 <FSL7*  g	 4  M ""0	 #     C
9~~
 #9-- 	& 	&IC:::::::;;AaxH%IcNNs333 wsM:: r   c           
      (   t          | |          \	  }}}}}}}}	}
t          | |||||||
          \  }}|	r[t          ||dd          \  }}}}}}}t          |          dk    rF|d         j        t
          j        t
          j        j        j	        fv rt          ||d                   }nit          |          }t          |          dk    rt          j        |d          }n|d                             d          }t          j        ||          }|dk    ryt          t!          |||z                       t          t!          d|                    z   t          t!          ||z   |j                            z   }|                    |          }|S )z
    Args:
        x(Tensor): Tensor to be indexing.
        indices(int|slice|None|Tensor|List|Tuple...): Indices, used to indicate the position of the element to be fetched.
    FNr   r   r   r   )r   r   rs   r   r3   r   r4   r5   r6   r7   rO    parse_bool_and_broadcast_indicesstackr   rK   r   r)   rb   re   )rS   rg   r   r   r   r   r/   r   r   r   r   r   r   rr   r   rm   rn   advanced_index_tensorperms                      r   _getitem_staticr   J  s   " 	Aw
 ,		 	FC  (&  ^UDAA	
# &''1,,1H2

FK!6!;<2= 2= , 7 : CC 'G'' '# *++a//(.+") ) )%%
 )@(B(L(LR(P(P%">3HIICQU?N_,LMMNNuQ00112u^o=sxHHIIJ 
 --%%CJr   c                 (   t          |           D ]Z\  }}|j        t          j        k    s|j        t          j        j        j        k    r!t          j        |          d d df         | |<   [t          |           dk    rt          j	        |           } | S )Nr   r   )
r.   r3   r   r4   r5   r6   r7   rJ   r   broadcast_tensors)rg   r0   ro   s      r   r   r     s     w'' 6 6	6LFK''|v{4999//15GAJ
7||a*733Nr   )T)numpyr   r   r   r   r   r_   r   r%   r,   r1   r8   rF   rO   r]   rs   rx   r   r   r   r   r   r   r   r   r   <module>r      sJ                " " "J	 	 	  	 	 	     "- - -.
 
 
: >BA A A AH; ; ;	
 	
 	
g g gT\ \ \~z z zzJ J JZ    r   