
    sh                     V    S SK Jr  S SKJrJr  S SKJr  \" SSS/5      r " S S5      rg	)
    )
namedtuple)typesir)	signature	BoundFuncfuncsigc                   j   \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	\S 5       r
0 4S jrSS	\R                  4S
 jjrSS	\R                  4S jjrSS	\R                  4S jjrS	\R                  4S jr0 4S	\R$                  4S jjrS	\R(                  4S jrS	\R$                  4S jrSrg)ParforLoweringBuilder
   z@Helper class for building Numba-IR and lowering for Parfor.
    c                 (    Xl         X l        X0l        g N)_lowerer_scope_loc)selflowererscopelocs       w/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/parfors/parfor_lowering_utils.py__init__ParforLoweringBuilder.__init__   s    	    c                 .    U R                   R                  $ r   )r   contextr   s    r   _contextParforLoweringBuilder._context   s    }}$$$r   c                 .    U R                   R                  $ r   )r   typing_contextr   s    r   
_typingctx ParforLoweringBuilder._typingctx   s    }}+++r   c                 B    U R                   R                  R                  $ r   )r   fndesctypemapr   s    r   _typemapParforLoweringBuilder._typemap   s    }}##+++r   c                 B    U R                   R                  R                  $ r   )r   r$   	calltypesr   s    r   
_calltypes ParforLoweringBuilder._calltypes   s    }}##---r   c                     U R                   nUR                   S3nUR                   nU R                  R                  X#U5      nU R	                  [
        R                  " XqUS9X&S9n	[        XS9$ )zBinds a global function to a variable.

Parameters
----------
fobj : object
    The function to be bound.
ftype : types.Type
args : Sequence[types.Type]
kws : Mapping[str, types.Type]

Returns
-------
callable: _CallableNode
_funcr   rhstypname)r   r	   )r   __name__r!   resolve_function_typeassignr   Global_CallableNode)
r   fobjftypeargskwsr   varnamegvnamefunc_sigfunc_vars
             r   bind_global_function*ParforLoweringBuilder.bind_global_function"   sn     ii]]O5)MM???88cJ;;		&C0e  
 (99r   returnc                 Z    U R                  [        R                  " XR                  S9X#S9$ )zMakes a constant variable

Parameters
----------
cval : object
    The constant value
typ : types.Type
    type of the value
name : str
    variable name to store to

Returns
-------
res : ir.Var
r.   r/   )r5   r   Constr   )r   cvalr1   r2   s       r   make_const_variable)ParforLoweringBuilder.make_const_variable;   s,      {{99-3  
 	
r   c                    U R                   nU Vs/ s H  o@R                  UR                     PM     nn[        R                  R                  U5      nU R                  [        R                  R                  X5      XbS9$ s  snf )zMakes a tuple variable

Parameters
----------
varlist : Sequence[ir.Var]
    Variables containing the values to be stored.
name : str
    variable name to store to

Returns
-------
res : ir.Var
r/   )
r   r&   r2   r   Tuple
from_typesr5   r   Exprbuild_tuple)r   varlistr2   r   xvartystuptys          r   make_tuple_variable)ParforLoweringBuilder.make_tuple_variableO   so     ii189A--'9&&v.{{##G1u  
 	
 :s   "Bc                     U R                   nU R                  R                  X45      nX R                  UR                  '   [
        R                  " XU5      nU R                  R                  U5        U$ )zAssign a value to a new variable

Parameters
----------
rhs : object
    The value
typ : types.Type
    type of the value
name : str
    variable name to store to

Returns
-------
res : ir.Var
)	r   r   redefiner&   r2   r   Assignr   
lower_instr   r0   r1   r2   r   varr5   s          r   r5   ParforLoweringBuilder.assignd   sX      iikk""4-"%chh3S)  (
r   c                    U R                   n[        R                  " U R                  X45      n[        R                  " XU5      nU R
                  R                  UR                  U5        U R                  R                  U5        U$ )zAssign a value to a new variable or inplace if it already exist

Parameters
----------
rhs : object
    The value
typ : types.Type
    type of the value
name : str
    variable name to store to

Returns
-------
res : ir.Var
)
r   r   Varr   rU   r&   
setdefaultr2   r   rV   rW   s          r   assign_inplace$ParforLoweringBuilder.assign_inplace{   s`      iiffT[[$,3S)  3/  (
r   c                     [         R                  R                  UR                  X#U R                  S9nUR
                  U R                  U'   U$ )zCall a bound callable

Parameters
----------
callable_node : _CallableNode
    The callee
args : Sequence[ir.Var]
kws : Mapping[str, ir.Var]

Returns
-------
res : ir.Expr
    The expression node for the return value of the call
r.   )r   rK   callr   r   r	   r*   )r   callable_noder:   r;   r`   s        r   r`   ParforLoweringBuilder.call   s?     ww||M..tyy|I - 1 1r   c                 X   U R                   nU R                  n[        R                  " XX4S9n[	        [
        R                  XQR                     XRR                     XSR                     5      U R                  R                  R                  U'   U R                  R                  U5        U$ )zMakes a setitem call

Parameters
----------
obj : ir.Var
    the object being indexed
index : ir.Var
    the index
val : ir.Var
    the value to be stored

Returns
-------
res : ir.SetItem
r.   )r   r&   r   SetItemr   r   noner2   r   r$   r)   rV   )r   objindexvalr   tmsetitems          r   rj   ParforLoweringBuilder.setitem   s}      ii]]**S62;JJ88bnbl3
&&w/ 	  )r   c                     U R                   n[        R                  R                  XU R                  S9n[        X4UR                     XBR                     5      U R                  R                  R                  U'   U$ )zMakes a getitem call

Parameters
----------
obj : ir.Var
    the object being indexed
index : ir.Var
    the index
val : ir.Var
    the ty

Returns
-------
res : ir.Expr
    the retrieved value
r.   )
r&   r   rK   getitemr   r   r2   r   r$   r)   )r   rf   rg   r1   ri   rm   s         r   rm   ParforLoweringBuilder.getitem   s`    " ]]''//#$))/<2;CHHr**~3
&&w/ r   )r   r   r   N)pf_const)pf_tuple)	pf_assign)r3   
__module____qualname____firstlineno____doc__r   propertyr   r!   r&   r*   r@   r   r[   rF   rQ   r5   r]   rK   r`   rd   rj   rm   __static_attributes__ r   r   r   r   
   s    
 % % , , , , . . ;= :2
 
(
rvv 
*BFF . . -/ 277 &"** 2"'' r   r   N)	collectionsr   
numba.corer   r   numba.core.typingr   r7   r   rx   r   r   <module>r|      s,    "   ' ;8J Jr   