o
    2g"                     @  s  d Z ddlmZ ddl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 ddlmZmZmZmZmZmZ dD ](Zeeedd eeeged	ed
 eeegeded
 eeeegeded
 qDedegededdZedegededd eefdkddZedded Z ed!d"ed Z!ed#d$ed Z"ed%d&ed Z#ed'd(ed Z$ed)d*ed Z%eefdld.d/Z&e&d0d1 e&d2d3 e&d4d5 e&d6d7 e&d8d9 e&d:d; e&d<d=ed> e&d?d@ed> e&dAdBed> e&dCdDed> e&dEdFeedG e&dHd1 e&dId3 e&dJd5 e&dKd7 e&dLd9 e&dMd; e&dNd=ed> e&dOd@ed> e&dPdBed> e&dQdDed> dmdSdTZ'e'd2dUZ(e'dVdWZ)eeegedXedYdZZ*eeeged[edYdZZ+eeeged\ed]Z,eeeged^ed]Z-eeeged_ed]Z.eeeged`ed]Z/eeegedaed]Z0eeegedbed]Z1eegedced]Z2eegedded]Z3eegedeed]Z4eegedfed]Z5eg edged]Z6eg edhed]Z7eg edied]Z8djS )na<  Arbitrary-precision integer primitive ops.

These mostly operate on (usually) unboxed integers that use a tagged pointer
representation (CPyTagged) and correspond to the Python 'int' type.

See also the documentation for mypyc.rtypes.int_rprimitive.

Use mypyc.ir.ops.IntOp for operations on fixed-width/C integers.
    )annotations)
ERR_ALWAYS	ERR_MAGICERR_MAGIC_OVERLAPPING	ERR_NEVERPrimitiveDescription)RTypebit_rprimitivebool_rprimitivec_pyssize_t_rprimitivefloat_rprimitiveint16_rprimitiveint32_rprimitiveint64_rprimitiveint_rprimitiveobject_rprimitivestr_rprimitive
void_rtype)CFunctionDescription	binary_op	custom_opfunction_opload_address_opunary_op)zbuiltins.intzmypy_extensions.i64zmypy_extensions.i32zmypy_extensions.i16zmypy_extensions.u8PyLong_Type)nametypesrcCPyTagged_FromFloatr   	arg_typesreturn_typec_function_name
error_kindCPyLong_FromStrCPyLong_FromStrWithBasezbuiltins.strCPyTagged_Str   )r   r    r!   r"   r#   priorityCPyBool_Str   opstrprimitive_namer!   r   r#   intreturnr   c                 C  s   t | ttg|||dS )N)r   r    r!   r-   r#   r   r   )r+   r-   r!   r#    r1   P/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/primitives/int_ops.pyint_binary_primitivel   s   r3   z==int_eq)r+   r-   r!   z!=int_ne<int_ltz<=int_le>int_gtz>=int_ger   r"   Nonec                 C  s   t | ttg|||d d S )Nr   r0   )r   r"   r!   r#   r1   r1   r2   int_binary_op   s   
r=   +CPyTagged_Add-CPyTagged_Subtract*CPyTagged_Multiply&CPyTagged_And|CPyTagged_Or^CPyTagged_Xorz//CPyTagged_FloorDivide)r#   %CPyTagged_Remainderz>>CPyTagged_Rshiftz<<CPyTagged_Lshift/CPyTagged_TrueDivide)r!   r#   z+=z-=z*=z&=z|=z^=z//=z%=z>>=z<<=r   c                 C  s   t | tt|tdS )N)r   arg_typer!   r"   r#   )r   r   r   )r   r"   r1   r1   r2   int_unary_op   s   rR   CPyTagged_Negate~CPyTagged_InvertCPyTagged_IsEq_T)r    r!   r"   r#   is_pureCPyTagged_IsLt_CPyInt64_Divide)r    r!   r"   r#   CPyInt64_RemainderCPyInt32_DivideCPyInt32_RemainderCPyInt16_DivideCPyInt16_RemainderCPyLong_AsInt64CPyTagged_FromSsize_tCPyTagged_FromInt64CPyLong_AsInt32CPyInt32_OverflowCPyInt16_OverflowCPyUInt8_OverflowN)
r+   r,   r-   r,   r!   r   r#   r.   r/   r   )
r   r,   r"   r,   r!   r   r#   r.   r/   r<   )r   r,   r"   r,   r/   r   )9__doc__
__future__r   mypyc.ir.opsr   r   r   r   r   mypyc.ir.rtypesr   r	   r
   r   r   r   r   r   r   r   r   r   mypyc.primitives.registryr   r   r   r   r   r   int_nameint_to_str_opr3   r4   r5   r7   r8   r:   r;   r=   rR   
int_neg_opint_invert_op
int_equal_int_less_than_int64_divide_opint64_mod_opint32_divide_opint32_mod_opint16_divide_opint16_mod_opint_to_int64_opssize_t_to_int_opint64_to_int_opint_to_int32_opint32_overflowint16_overflowuint8_overflowr1   r1   r1   r2   <module>   sZ   
8 			
















	
