
    \jO                    &   U d Z ddlmZ ddl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 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 erddl6m7Z7 dTdZ8dddUdZ9dddVdZ:dddWdZ;dXd Z<d!Z=d"e>d#<   dYd&Z?dZd(Z@dZd)ZAd[d+ZBd\d-ZCd.d/d]d3ZDd^d6ZEd_d8ZFd.d/d`d:ZGd.d/d`d;ZHdad<ZIdad=ZJdbd>ZKdcd@ZLdddAZMdedCZNdfdEZOdgdFZPdedGZQdhdIZRdidLZSdjdMZTdjdNZUdkdOZVdldSZWdS )mz)Generate IR for librt.vecs.vec operations    )annotations)TYPE_CHECKINGFinal)IS_32_BIT_PLATFORMPLATFORM_SIZE)	ERR_MAGICAssign
BasicBlockBranchCallCComparisonOpDecRef
GetElement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list_rprimitiveobject_rprimitiveoptional_value_typepointer_rprimitivetuple_rprimitivevec_api_by_item_typevec_item_type_tags)LowLevelIRBuilderbuilderr3   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)r4   r5   r6   rtypes       U/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypyc/irbuild/vec.pyas_platform_intrC   <   s    FE!%(( !W 8"5)) 	A->u-E-E 	A17a<)?@@@qw 6777%$$ A"5e"<"<HA"5e"<"<H>>!3T:::    Ncapacityvtyper    lengthint | ValuerF   Value | Nonec          
        t          |t                    rt          |t                    }t	          | ||          }|t	          | ||          }n|}|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_kindr6      r   zVecTApi.alloczVecNestedApi.alloczunsupported: %s)r>   r7   r   r#   rC   	item_typer1   getr   r   addvec_item_type_infor   r/   r	   r   ORr%   )r4   rG   rH   r6   rF   rN   api_namecalltypeobjoptionaldepthtypevals               rB   
vec_createrY   L   s    &# 9!788Wfd33F"7Hd;;I#'	22HX 
 
 
 {{4   1'9dKKGXugw'' 
	GG 122GKKw00111 !++,gwqBT7U7UW\W_``  A::7+$  D ;;t$$$$7GE;K,L,LM$  D ;;t$$$+#e++++rD   initc               N   t          |t                    rt          |t                    }t	          | ||          }|j        }|                     |||          }t          | ||||          }t          | |          }t          |          }	| 
                    ||                     ||	                    }
|                     ||
t          |	t                    d          }t          | |j        ||           |                                 |                     |g|           |S )z5Create vec with items initialized to the given value.rE   Fsigned)r>   r7   r   r#   rC   rN   r@   rY   	vec_items	step_sizeint_addint_mul	begin_forvec_set_mem_itemindexfinish
keep_alive)r4   rG   rH   rZ   r6   rF   rN   vecitems_startstep	items_endfor_loops               rB   vec_create_initializedrl      s    &# 9!788Wfd33FI>>$	400D
WeVTH
E
E
ECGS))KYDW__VT-J-JKKI  Y.D E Ee !  H Whni>>>OOud###JrD   valueslist[Value]c                  t          | |t          |          ||          }t          | |          }|j        }t	          |          }|D ]*}	t          | |||	           |                     ||          }+|                     |g|           |S )NrE   )rY   lenr^   rN   r_   rc   r`   rf   )
r4   rG   rm   r6   rF   rg   ptrrN   ri   r?   s
             rB   vec_create_from_valuesrr      s     WeS[[$
J
J
JC
GS
!
!CIYD ) )#y%888ooc4((ud###JrD   rN   r   c                    t          | t                    r| j        S t          | t                    r
t          dz  S t          S Nr:   )r>   r   sizer    r   )rN   s    rB   r_   r_      s?    )Z(( ~	It	$	$ q  rD   r:   r   VEC_TYPE_INFO_I64typtuple[Value | None, bool, int]c                2   t          |t                    r%|j        r|                     |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   TrM   )NFr   )r>   r   is_refcountedload_builtinnamer   load_native_type_objectr2   r   r$   r   r.   rQ   r    rN   )r4   rw   r6   non_optrX   _rV   rW   s           rB   rQ   rQ      s:    #z"" 0s'8 0##CHd33UA==	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//>rD   valc                l    t          | |          }t          r|                     |t          d          S |S )zReturn len(<vec>) as i64.)vec_len_nativer   r@   r&   )r4   r   len_vals      rB   vec_lenr      s5    Wc**G =~~g'7<<<NrD   c                .    |                      |d          S )z;Return len(<vec>) as platform integer type (32-bit/64-bit).rp   get_element)r4   r   s     rB   r   r      s    sE***rD   vecobjc                .    |                      |d          S )zrReturn pointer to first item in vec.

    The items field points directly to the first element in the buffer.
    itemsr   )r4   r   s     rB   r^   r^      s    
 vw///rD   rd   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    rN   r   ru   r   r-   ra   r`   )r4   r   rd   
items_addrrN   	item_sizedeltas          rB   vec_item_ptrr      s    7F++Jfk4(((((%I)Z(( +N			It	$	$ +%		%*	OOE9--E??:u---rD   F
can_borrowrq   r   boolc               2    |                      |||          S )zILoad a vec item from storage, converting nested vec slots to RVec values.borrow)load_mem)r4   rq   rN   r   s       rB   vec_load_mem_itemr     s     C:>>>rD   itemNonec                4    |                      |||           dS )zAStore a vec item, converting RVec values to nested storage items.N)set_mem)r4   rq   rN   r   s       rB   rc   rc     s      OOCD)))))rD   lenvc                V   t          t                    }|                     |t          |          }|                     |t          |          }t                      t                      t                      }}}t                      t                      }	}|                     ||t
          j        |          }
|                     |
||           |                     |           | 	                    ||          }|                     ||t
          j        |          }|                     |||	           |                     |	           | 
                    t          t          j        d |                     | 
                    t                                 |                     |           |                     ||           |                     |           |                     |           |                     ||           |                     |           |                     |           |S N)r   r&   r@   r
   comparison_opr   ULTadd_bool_branchactivate_blockr`   rP   r   INDEX_ERRORr   assigngoto)r4   r   rd   r6   rokok2ok3failfail2is_lessxis_less2s                rB   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HrD   basec               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)r4   r   rd   r6   r   r   s         rB   vec_get_itemr   :  s?     gt$$G&wEEEweTjQQQQrD   c                   t          |j        t                    sJ t          | ||          }|j        }t	          | ||          }t          | ||j        |          }| j                            |           |S )z?Get vec item, assuming index is non-negative and within bounds.r   )	r>   r=   r    rC   r   r   rN   keep_alivesappend)r4   r   rd   r6   r   rG   	item_addrresults           rB   r   r   H  sy     di&&&&&GUD11EIEWdE22Iw	5?zZZZFt$$$MrD   c                   t          |j        t                    sJ |j        }t          | |          }t	          | |||          }|                     |t          |          }t          | ||          }|j        }|                     |||          }|j	        r5t          | ||d          }	|                     t          |	                     t          | |||           |                     |g|           d S )NTr   )r>   r=   r    r   r   r@   r#   r   rN   rz   r   rP   r   rc   rf   )
r4   r   rd   r   r6   rG   r   r   rN   old_items
             rB   vec_set_itemr   U  s     di&&&&&IEgt$$G&wEEENN5"8$??EWdE22II>>$	400D & %WitTTTF8$$%%%WiD999vt$$$$$rD   c                   t          |j        t                    sJ t          | ||          }|j        }t	          | ||          }|j        }|                     |||          }t          | |||           |                     |g|           d S r   )	r>   r=   r    rC   r   rN   r@   rc   rf   )r4   r   rd   r   r6   rG   r   rN   s           rB   vec_init_item_unsafer   i  s     di&&&&&GUD11EIEWdE22II>>$	400DWiD999vt$$$$$rD   c                B   |                      t          |d                    }|                      t          |d                    }|                      t          t          t                    d|                    }|                      t          |d|                    S )Nrp   r   )rP   r   r   r   r!   )r4   r   r   r^   temps        rB   convert_to_t_ext_itemr   v  s|    kk*T51122GJtW5566I;;z%(8"9"95'JJKKD;;z$;;<<<rD   vec_typec                8   |                      t          |d                    }|                      t          |d                    }|                      t          t          |          d|                    }|                      t          |d|                    S )zBConvert an owned VecNestedBufItem to the corresponding RVec value.rp   r   )rP   r   r   r   )r4   r   r   r   r^   r   s         rB   convert_from_t_ext_itemr   }  sy    kk*T51122GJtW5566I;;z%//5'BBCCD;;z$;;<<<rD   c           
     f   t          | ||          \  }}}|J t          |t                    r|S t          t                    }|                     t          ||                     |rG|                     t          t          |t          dt                    t          j                            }|S )NrM   )	rQ   r>   r   r   r/   rP   r	   r   rR   )r4   rN   r6   rU   rV   rW   rX   s          rB   vec_item_typer     s    1'9dKKGXu'7## 
 -..F7G,,--- 	kk('71>P3Q3QSXS[\\ G rD   rg   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.appendTFstealsis_borrowedrL   r6   )r=   r>   r    rN   r@   r1   rO   rW   r   r   rP   r   r   rf   )r4   rg   r   r6   r   rN   coerced_itemitem_type_argrS   r|   rT   s              rB   
vec_appendr     s7   xHh%%%%%"I>>$	488LM#'	22H###			Q		&w	4@@A,WlCC$;;,-/%=}$DUGG"E 	
 	
 	

 
D ~~!D64(((KrD   iterablec                    |j         }t          |t                    sJ |j        }t          |j         t                    r|j         |k    rd}|}nd}|                     |t
          |          }g }t          j        |          }	|	|	 d| }
n5|                                dk    rd| }
t          | ||          g}nd| }
| 
                    t          |
||g|z   |ddg|rdgng z   dt          |	                    S )
N_vec z.extendr   zVecTApi.extendzVecNestedApi.extendTFr   )r=   r>   r    rN   r@   r-   r1   rO   rW   r   rP   r   r   )r4   rg   r   r6   r   rN   suffixsrcr   rS   r|   s              rB   
vec_extendr     s>   xHh%%%%%"I(-&& @8=H+D+DnnX'8$??!#M#'	22H++6++			Q		(((&w	4@@A-V--;;#J&%=}$DUGG"E 	
 	
 	

 
 
rD   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   rM   )steal)r>   r=   r    rN   rC   r1   rO   rW   r!   rP   r   r   r   r   r   r   r   rf   )r4   r   rd   r6   r   rN   rS   r|   r   origr   yzs                rB   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MrD   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    rN   r@   r1   rW   r   rP   r   r   rf   )	r4   rg   r   r6   r   rN   r   r|   rT   s	            rB   
vec_remover     s   ch%%%%%xH"I>>$	488L(((&y1:::			Q		,WlCC$;;,%= 	
 	
 	

 
D ~~!D64(((KrD   targetc                n   t          |j        t                    sJ |j        }|j        }|                     |||          }t          |          }t          | |          }t          | |          }|                     || 	                    ||                    }	t                      t                      }}
|                     ||	t          |t                    d          }t          | |j        |d          }|                     ||d|          }t                      }|                     t%          ||
|t$          j                             |                     |           |                                 |                     |g|           t/          t0                    }|                     |t          dt0                               |                     |           |                     |
           |                     |t          dt0                               |                     |           |S )NFr\   Tr   z==r   rM   )r>   r=   r    rN   r@   r_   r   r^   r`   ra   r
   rb   r   r#   r   rd   	binary_oprP   r   BOOLr   re   rf   r   r"   r   r   goto_and_activate)r4   rg   r   r6   r   rN   ri   r   rh   rj   trueendrk   r   compfalseress                    rB   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 WhniDQQQD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"""JrD   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    rN   r@   r&   r1   rO   rW   r   r   rP   )
r4   rg   r   r   r6   r   rN   rS   r|   rT   s
             rB   	vec_slicer   <  s     ch%%%%%xH"INN5"2D99E
...
5
5C#'	22H"""			Q		#	eS$$$  D ;;trD   c                2    t          | ||dt                    S )Nto_list)_vec_to_sequencer,   r4   rg   r6   s      rB   vec_to_listr   W  s    GS$	?KKKrD   c                2    t          | ||dt                    S )Nto_tuple)r   r0   r   s      rB   vec_to_tupler   [  s    GS$
<LMMMrD   c                h    t          j        | j                  d up|                                 dk    S )Nr   )r1   rO   rN   rW   )r   s    rB   supports_vec_to_sequencer   _  s0    #H$677tC\x~~GWGW[\G\\rD   methodstrresult_typec                   |j         }t          |t                    sJ |j        }t	          j        |          }|| d| }nt          |          rd| }nd S |                     t          ||g|dgdt          |                    S )N.zVecTApi.TFr   )
r=   r>   r    rN   r1   rO   r   rP   r   r   )	r4   rg   r6   r   r   r   rN   rS   r|   s	            rB   r   r   c  s     xHh%%%%%"I#'	22H%%V%%	!(	+	+ "&""t;;E6 	
 	
 	

 
 
rD   )r4   r3   r5   r   r6   r7   r8   r   )r4   r3   rG   r    rH   rI   r6   r7   rF   rJ   r8   r   )r4   r3   rG   r    rH   rI   rZ   r   r6   r7   rF   rJ   r8   r   )r4   r3   rG   r    rm   rn   r6   r7   rF   rJ   r8   r   )rN   r   r8   r7   )r4   r3   rw   r   r6   r7   r8   rx   )r4   r3   r   r   r8   r   )r4   r3   r   r   r8   r   )r4   r3   r   r   rd   r   r8   r   )
r4   r3   rq   r   rN   r   r   r   r8   r   )
r4   r3   rq   r   rN   r   r   r   r8   r   )
r4   r3   r   r   rd   r   r6   r7   r8   r   )r4   r3   r   r   rd   r   r6   r7   r   r   r8   r   )r4   r3   r   r   rd   r   r   r   r6   r7   r8   r   )r4   r3   r   r   r8   r   )r4   r3   r   r   r   r    r8   r   )r4   r3   rN   r   r6   r7   r8   r   )
r4   r3   rg   r   r   r   r6   r7   r8   r   )
r4   r3   rg   r   r   r   r6   r7   r8   r   )
r4   r3   r   r   rd   r   r6   r7   r8   r   )
r4   r3   rg   r   r   r   r6   r7   r8   r   )r4   r3   rg   r   r   r   r   r   r6   r7   r8   r   )r4   r3   rg   r   r6   r7   r8   rJ   )r   r    r8   r   )r4   r3   rg   r   r6   r7   r   r   r   r   r8   rJ   )X__doc__
__future__r   typingr   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   mypyc.ir.rtypesr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   mypyc.irbuild.ll_builderr3   rC   rY   rl   rr   r_   rv   __annotations__rQ   r   r   r^   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rD   rB   <module>r     s6   / / / " " " " " " ' ' ' ' ' ' ' ' : : : : : : : :                                         *                                                   6  ;::::::; ; ; ;, "C, C, C, C, C, C,Z "     L "     &            ,   + + + +
0 0 0 0. . . .  UZ? ? ? ? ? ?* * * *   D ]bR R R R R R ]b
 
 
 
 
 
% % % %(
% 
% 
% 
%= = = == = = =   $   >   @$ $ $ $N   :   D   6L L L LN N N N] ] ] ]     rD   