
    inE                       U d Z ddlmZ ddlmZmZmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 erddl9m:Z: dFdZ;dGdZ<dHdZ=dIdZ>dJdZ?dZ@deAd <   dKd#ZBdLd%ZCdLd&ZDdMd(ZEdNd*ZFdOd,ZGd-d.dPd2ZHd-d.dPd3ZIdQd6ZJdQd7ZKdRd8ZLdSd:ZMdTd;ZNdUd=ZOdVd>ZPdUd?ZQdWdAZRdXdDZSdES )Yz)Generate IR for librt.vecs.vec operations    )annotations)TYPE_CHECKINGFinalcast)IS_32_BIT_PLATFORMPLATFORM_SIZE)	ERR_MAGIC	ERR_NEVERAssign
BasicBlockBranchCallCComparisonOpDecRef
GetElementGetElementPtrIntegerIntOpRaiseStandardErrorRegister
SetElementTupleGetTupleSetUnborrowUndefUnreachableValue)	RInstance
RPrimitiveRTupleRTypeRUnionRVecVecNestedBufItembool_rprimitivec_pyssize_t_rprimitivec_size_t_rprimitiveint32_rprimitiveint64_rprimitiveis_c_py_ssize_t_rprimitiveis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_short_int_rprimitiveobject_rprimitiveoptional_value_typepointer_rprimitivevec_api_by_item_typevec_item_type_tags)builtin_names)LowLevelIRBuilderbuilderr5   vr   lineintreturnc                   |j         }t          |          r|S t          |t                    rUt	          |          st          |          rt          |j        dz  t                    S t          |j        t                    S t          |t                    r8t          dk    rt          |          r|S t          dk    rt          |          r|S |                     |t          |          S )N         )typer*   
isinstancer   r.   r-   valuer&   r   r   r,   r+   coerce)r6   r7   r8   rtypes       P/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/irbuild/vec.pyas_platform_intrE   =   s    FE!%(( !W 8"5)) 	A->u-E-E 	A17a<)?@@@qw 6777%$$ A"5e"<"<HA"5e"<"<H>>!3T:::    vtyper#   lengthint | Valuec           
        t          |t                    rt          |t                    }t	          | ||          }|j        }t          j        |          }|5t          | d||g|ddt          |          }| 
                    |          S t          | ||          \  }}}	|t          |t                    r|}
nt          t                    }
| 
                    t          |
|                     |rG| 
                    t          t          |
t          dt                    t          j                            }
|	dk    r3t          d|||
g|ddt          |          }| 
                    |          S t          d|||
t          |	t"                    g|ddt          |          }| 
                    |          S J d|z              )	Nz.allocF)
error_kindr8      r   zVecTApi.alloczVecNestedApi.alloczunsupported: %s)r@   r9   r   r&   rE   	item_typer2   getr   r	   addvec_item_type_infor   r1   r   r   ORr(   )r6   rG   rH   r8   rM   api_namecalltypeobjoptionaldepthtypevals              rD   
vec_createrX   M   s   &# 9!788Wfd33FI#'	22HV 
 
 
 {{4   1'9dKKGXugw'' 
	GG 122GKKw00111 !++,gwqBT7U7UW\W_``  A::)$  D ;;t$$$$'%9I*J*JK$  D ;;t$$$+#e++++rF   initc                T   t          |t                    rt          |t                    }t	          | ||          }|j        }|                     |||          }t          | |||          }t          | |          }t          |          }| 
                    ||                     ||                    }	|                     ||	t          |t                    d          }
|                     |
j        ||           |
                                 |                     |g|           |S )z5Create vec with items initialized to the given value.Fsigned)r@   r9   r   r&   rE   rM   rB   rX   	vec_items	step_sizeint_addint_mul	begin_forset_memindexfinish
keep_alive)r6   rG   rH   rY   r8   rM   vecitems_startstep	items_endfor_loops              rD   vec_create_initializedrk      s    &# 9!788Wfd33FI>>$	400D
WeVT
2
2CGS))KYDW__VT-J-JKKI  Y.D E Ee !  H OOHNIt444OOud###JrF   valueslist[Value]c                "   t          | |t          |          |          }t          | |          }|j        }t	          |          }|D ]/}|                     |||           |                     ||          }0|                     |g|           |S N)rX   lenr]   rM   r^   rb   r_   re   )	r6   rG   rl   r8   rf   ptrrM   rh   rA   s	            rD   vec_create_from_valuesrr      s     WeS[[$
7
7C
GS
!
!CIYD ) )Y...ooc4((ud###JrF   rM   r!   c                    t          | t                    r| j        S t          | t                    r
t          dz  S t          S Nr<   )r@   r   sizer#   r   )rM   s    rD   r^   r^      s?    )Z(( ~	It	$	$ q  rF   r<   r   VEC_TYPE_INFO_I64typtuple[Value | None, bool, int]c                R   t          |t                    r5|j        r.t          |j                 \  }}|                     ||          ddfS t          |t                    r|                     |j                  ddfS |t          v r#t          t          |         t                    ddfS t          |t                    r0t          |          }|J t          | ||          \  }}}||ddfS n9t          |t                    r$t          | |j        |          \  }}}||||dz   fS dS )NFr   TrL   )NFr   )r@   r   is_refcountedr4   nameload_addressr   load_native_type_objectr3   r   r'   r"   r0   rP   r#   rM   )	r6   rw   r8   srcnon_optrW   _rU   rV   s	            rD   rP   rP      sH    #z"" 0s'8 0 *S##C--ua77	C	#	# 0..sx88%BB	"	"	")#.0CDDeQNN	C	 	  	0%c**"""*7GTBBAD!## 	C		 0#5gs}d#S#S 5Heai//>rF   valc                l    t          | |          }t          r|                     |t          d          S |S )zReturn len(<vec>) as i64.)vec_len_nativer   rB   r)   )r6   r   len_vals      rD   vec_lenr      s5    Wc**G =~~g'7<<<NrF   c                .    |                      |d          S )z;Return len(<vec>) as platform integer type (32-bit/64-bit).rp   )get_element)r6   r   s     rD   r   r      s    sE***rF   vecobjc                    t          t          |j                  }|                     |d          }|                     t          ||j        d                    S )zReturn pointer to first item in vec's buf.

    Safe to call even when buf is NULL (empty vec), since GetElementPtr
    uses offsetof-based arithmetic instead of &((T*)p)->field.
    bufitems)r   r#   r?   r   rO   r   buf_type)r6   r   rG   r   s       rD   r]   r]      sJ     v{##E


fe
,
,C;;}S%.'BBCCCrF   rc   c                \   t          | |          }t          |j        t                    sJ |j        j        }t          |t
                    r|j        }n,t          |t                    rdt          z  }nt          j        }| 	                    ||          }| 
                    ||          S rt   )r]   r@   r?   r#   rM   r   ru   r   r/   r`   r_   )r6   r   rc   
items_addrrM   	item_sizedeltas          rD   vec_item_ptrr      s    7F++Jfk4(((((%I)Z(( +N			It	$	$ +%		%*	OOE9--E??:u---rF   lenvc                V   t          t                    }|                     |t          |          }|                     |t          |          }t                      t                      t                      }}}t                      t                      }	}|                     ||t
          j        |          }
|                     |
||           |                     |           | 	                    ||          }|                     ||t
          j        |          }|                     |||	           |                     |	           | 
                    t          t          j        d |                     | 
                    t                                 |                     |           |                     ||           |                     |           |                     |           |                     ||           |                     |           |                     |           |S ro   )r   r)   rB   r   comparison_opr   ULTadd_bool_branchactivate_blockr_   rO   r   INDEX_ERRORr   assigngoto)r6   r   rc   r8   rokok2ok3failfail2is_lessxis_less2s                rD   vec_check_and_adjust_indexr      s    	!""ANN5"2D99E>>$ 0$77D<<z||SB,,
%D##E41A4HHGGS$///4   t$$A$$Ql.>EEHHb%0005!!!KK"#5#A4NNOOOKK2NN1aLL3NN1eLL3HrF   F
can_borrowbaser   boolc               n    t          | |          }t          | |||          }t          | ||||          S )zlGenerate inlined vec __getitem__ call.

    We inline this, since it's simple but performance-critical.
    r   )r   r   vec_get_item_unsafe)r6   r   rc   r8   r   r   s         rD   vec_get_itemr     s?     gt$$G&wEEEweTjQQQQrF   c                   t          |j        t                    sJ t          | ||          }|j        }t	          | ||          }|                     ||j        |          }| j                            |           |S )z?Get vec item, assuming index is non-negative and within bounds.borrow)	r@   r?   r#   rE   r   load_memrM   keep_alivesappend)r6   r   rc   r8   r   rG   	item_addrresults           rD   r   r   )  s}     di&&&&&GUD11EIEWdE22IiLLFt$$$MrF   itemNonec                   t          |j        t                    sJ |j        }t          | |          }t	          | |||          }|                     |t          |          }t          | ||          }|j        }|                     |||          }|j	        r:| 
                    ||d          }	|                     t          |	                     |                     |||           |                     |g|           d S )NTr   )r@   r?   r#   r   r   rB   r&   r   rM   rz   r   rO   r   rb   re   )
r6   r   rc   r   r8   rG   r   r   rM   old_items
             rD   vec_set_itemr   6  s     di&&&&&IEgt$$G&wEEENN5"8$??EWdE22II>>$	400D & ##Iy#FFF8$$%%%OOIy$///vt$$$$$rF   c                (   t          |j        t                    sJ t          | ||          }|j        }t	          | ||          }|j        }|                     |||          }|                     |||           |                     |g|           d S ro   )	r@   r?   r#   rE   r   rM   rB   rb   re   )r6   r   rc   r   r8   rG   r   rM   s           rD   vec_init_item_unsafer   J  s     di&&&&&GUD11EIEWdE22II>>$	400DOOIy$///vt$$$$$rF   c                B   |                      t          |d                    }|                      t          |d                    }|                      t          t          t                    d|                    }|                      t          |d|                    S )Nrp   r   )rO   r   r   r   r$   )r6   r   r   vec_buftemps        rD   convert_to_t_ext_itemr   W  s|    kk*T51122Gkk*T51122G;;z%(8"9"95'JJKKD;;z$w77888rF   vec_typec                    t          j        |j                  }|| d}nt          |j        t                    rd}nd}|                     t          ||g|dgdt          d                    S )	zIConvert a value of type VecNestedBufItem to the corresponding RVec value.Nz.convert_from_nestedz VecNestedApi.convert_from_nestedzVecTApi.convert_from_nestedTFr   stealsis_borrowedrK   r8   )r2   rN   rM   r@   r#   rO   r   r
   )r6   r   r   rR   r{   s        rD   convert_from_t_ext_itemr   ^  s    #'(:;;H000	H&	-	- -1,;;4&(D6uQZac	
 	
 	
  rF   c           
     f   t          | ||          \  }}}|J t          |t                    r|S t          t                    }|                     t          ||                     |rG|                     t          t          |t          dt                    t          j                            }|S )NrL   )	rP   r@   r   r   r1   rO   r   r   rQ   )r6   rM   r8   rT   rU   rV   rW   s          rD   vec_item_typer   o  s    1'9dKKGXu'7## 
 -..F7G,,--- 	kk('71>P3Q3QSXS[\\ G rF   rf   c                   |j         }t          |t                    sJ |j        }|                     |||          }g }t          j        |          }|| d}	n?|                                dk    rd}	t          | ||          g}nt          | |          }d}	| 
                    t          |	||g|z   |ddg|rdgng z   dt          |                    }
|                                dk    r|                     |g|           |
S )Nz.appendr   zVecTApi.appendzVecNestedApi.appendTFr   )r?   r@   r#   rM   rB   r2   rN   rV   r   r   rO   r   r	   re   )r6   rf   r   r8   r   rM   coerced_itemitem_type_argrR   r{   rS   s              rD   
vec_appendr     s7   xHh%%%%%"I>>$	488LM#'	22H###			Q		&w	4@@A,WlCC$;;,-/%=}$DUGG"E 	
 	
 	

 
D ~~!D64(((KrF   c                   t          |j        t                    sJ |j        }|j        }t	          | ||          }t          j        |          }|| d}n$|                                dk    rd}n	d}t          }| 	                    t          |||gt          ||g          ddgdt          |                    }|                                dk    r |}	| 	                    t          |dd                    }
| 	                    t          |
                    }
| 	                    t          |d	d                    }| 	                    t          |                    }t          |j        t                    sJ t          | ||j                  }| 	                    t!          |
|g|                    }|                     |	g|d
           |S )Nz.popr   zVecTApi.popzVecNestedApi.popTFr   r   rL   )steal)r@   r?   r#   rM   rE   r2   rN   rV   r$   rO   r   r    r	   r   r   r   r   re   )r6   r   rc   r8   r   rM   rR   r{   r   origr   yzs                rD   vec_popr     s   di&&&&&yH"IGUD11E#'	22H   			Q		!$	[[5MHi())%= 	
 	
 	

 
F ~~!KK488899KK$$KK488899KK$$(,d33333#GQ0BCCXq!fd3344D64t444MrF   c                   t          |j        t                    sJ |j        }|j        }|                     |||          }|t
          v rt
          |          d}n-|                                dk    rd}nt          | |          }d}|                     t          |||g|ddgdt          |                    }|                                dk    r|                     |g|           |S )Nz.remover   zVecTApi.removezVecNestedApi.removeTFr   )r@   r?   r#   rM   rB   r2   rV   r   rO   r   r	   re   )	r6   rf   r   r8   r   rM   r   r{   rS   s	            rD   
vec_remover     s   ch%%%%%xH"I>>$	488L(((&y1:::			Q		,WlCC$;;,%= 	
 	
 	

 
D ~~!D64(((KrF   targetc                x   t          |j        t                    sJ |j        }|j        }|                     |||          }t          |          }t          | |          }t          | |          }|                     || 	                    ||                    }	t                      t                      }}
|                     ||	t          |t                    d          }|                     |j        |d          }|                     ||d|          }t                      }|                     t%          ||
|t$          j                             |                     |           |                                 |                     |g|           t/          t0                    }|                     |t          dt0                               |                     |           |                     |
           |                     |t          dt0                               |                     |           |S )NFr[   Tr   z==r   rL   )r@   r?   r#   rM   rB   r^   r   r]   r_   r`   r   ra   r   r&   r   rc   	binary_oprO   r   BOOLr   rd   re   r   r%   r   r   goto_and_activate)r6   rf   r   r8   r   rM   rh   r   rg   ri   trueendrj   r   compfalseress                    rD   vec_containsr     s   ch%%%%%xH"I^^FIt44FYDWc**GGS))KW__Wd-K-KLLIjll#D  Y.D E Ee !  H HNIdCCDT6466DLLEKKtT5&+667775!!!OOud###
?
#
#CNN3?33444LL4   NN3?33444c"""JrF   beginr   c           	        t          |j        t                    sJ |j        }|j        }|                     |t
          |          }|                     |t
          |          }t          j        |          }|| d}n|                                dk    rd}nd}t          ||||g|g ddt          |          }	|                     |	          S )Nz.slicer   zVecTApi.slicezVecNestedApi.slice)FFFFr   )r@   r?   r#   rM   rB   r)   r2   rN   rV   r   r	   rO   )
r6   rf   r   r   r8   r   rM   rR   r{   rS   s
             rD   	vec_slicer     s     ch%%%%%xH"INN5"2D99E
...
5
5C#'	22H"""			Q		#	eS$$$  D ;;trF   N)r6   r5   r7   r   r8   r9   r:   r   )
r6   r5   rG   r#   rH   rI   r8   r9   r:   r   )r6   r5   rG   r#   rH   rI   rY   r   r8   r9   r:   r   )
r6   r5   rG   r#   rl   rm   r8   r9   r:   r   )rM   r!   r:   r9   )r6   r5   rw   r!   r8   r9   r:   rx   )r6   r5   r   r   r:   r   )r6   r5   r   r   r:   r   )r6   r5   r   r   rc   r   r:   r   )
r6   r5   r   r   rc   r   r8   r9   r:   r   )r6   r5   r   r   rc   r   r8   r9   r   r   r:   r   )r6   r5   r   r   rc   r   r   r   r8   r9   r:   r   )r6   r5   r   r   r:   r   )r6   r5   r   r   r   r#   r:   r   )r6   r5   rM   r!   r8   r9   r:   r   )
r6   r5   rf   r   r   r   r8   r9   r:   r   )
r6   r5   r   r   rc   r   r8   r9   r:   r   )
r6   r5   rf   r   r   r   r8   r9   r:   r   )r6   r5   rf   r   r   r   r   r   r8   r9   r:   r   )T__doc__
__future__r   typingr   r   r   mypyc.commonr   r   mypyc.ir.opsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   mypyc.ir.rtypesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   mypyc.primitives.registryr4   mypyc.irbuild.ll_builderr5   rE   rX   rk   rr   r^   rv   __annotations__rP   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rF   rD   <module>r      st   / / / " " " " " " - - - - - - - - - - : : : : : : : :                                             .                                               0 4 3 3 3 3 3 ;::::::; ; ; ; 8, 8, 8, 8,v   4               .   + + + +
D D D D. . . .   D ]bR R R R R R ]b
 
 
 
 
 
% % % %(
% 
% 
% 
%9 9 9 9   "   $   >$ $ $ $N   :   D     rF   