
    1;ji                     d    d dl mZ d dlmZmZ d dlmZ  edddg          Z G d d          Zd	S )
    )
namedtuple)typesir)	signature	BoundFuncfuncsigc                      e Zd ZdZd Zed             Zed             Zed             Zed             Z	ddZ
dd
ej        fdZdd
ej        fdZdd
ej        fdZd
ej        fdZdd
ej        fdZd
ej        fdZd
ej        fdZdS )ParforLoweringBuilderz@Helper class for building Numba-IR and lowering for Parfor.
    c                 0    || _         || _        || _        d S N)_lowerer_scope_loc)selflowererscopelocs       ]/root/voice-cloning/.venv/lib/python3.11/site-packages/numba/parfors/parfor_lowering_utils.py__init__zParforLoweringBuilder.__init__   s    			    c                     | j         j        S r   )r   contextr   s    r   _contextzParforLoweringBuilder._context   s    }$$r   c                     | j         j        S r   )r   typing_contextr   s    r   
_typingctxz ParforLoweringBuilder._typingctx   s    }++r   c                 $    | j         j        j        S r   )r   fndesctypemapr   s    r   _typemapzParforLoweringBuilder._typemap   s    }#++r   c                 $    | j         j        j        S r   )r   r    	calltypesr   s    r   
_calltypesz ParforLoweringBuilder._calltypes   s    }#--r   Nc                     |i }| j         }|j         d}|j         }| j                            |||          }|                     t          j        |||          ||          }	t          |	|          S )a9  Binds 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
        N_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_functionz*ParforLoweringBuilder.bind_global_function"   s     ;Ci])))M#?88cJJ;;	&$C000e'  
 
 (9999r   pf_constreturnc                 d    |                      t          j        || j                  ||          S )a$  Makes 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)   )r/   r   Constr   )r   cvalr+   r,   s       r   make_const_variablez)ParforLoweringBuilder.make_const_variable=   s7      {{49---3T  
 
 	
r   pf_tuplec                       j         } fd|D             }t          j                            |          }                     t
          j                            ||          ||          S )a  Makes 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
        c                 4    g | ]}j         |j                 S  )r"   r,   ).0xr   s     r   
<listcomp>z=ParforLoweringBuilder.make_tuple_variable.<locals>.<listcomp>`   s"    999A$-'999r   r)   )r   r   Tuple
from_typesr/   r   Exprbuild_tuple)r   varlistr,   r   vartystuptys   `     r   make_tuple_variablez)ParforLoweringBuilder.make_tuple_variableQ   sn     i9999999&&v..{{##GS11u4  
 
 	
r   	pf_assignc                     | j         }| j                            ||          }|| j        |j        <   t          j        |||          }| j                            |           |S )a!  Assign 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"   r,   r   Assignr   
lower_instr   r*   r+   r,   r   varr/   s          r   r/   zParforLoweringBuilder.assignf   s^      ik""4--"%ch3S))  (((
r   c                     | j         }t          j        | j        ||          }t          j        |||          }| j                            |j        |           | j        	                    |           |S )a@  Assign 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   rS   r"   
setdefaultr,   r   rT   rU   s          r   assign_inplacez$ParforLoweringBuilder.assign_inplace}   sh      ifT[$,,3S))  3///  (((
r   c                     |i }t           j                            |j        ||| j                  }|j        | j        |<   |S )a=  Call 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
        Nr(   )r   rJ   callr   r   r	   r%   )r   callable_noder4   r5   r\   s        r   r\   zParforLoweringBuilder.call   sB     ;Cw||M.cty|II - 1r   c                 $   | j         }| j        }t          j        ||||          }t	          t
          j        ||j                 ||j                 ||j                           | j        j	        j
        |<   | j                            |           |S )a  Makes 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   noner,   r   r    r$   rT   )r   objindexvalr   tmsetitems          r   re   zParforLoweringBuilder.setitem   s      i]*S%#6662;J38bnbl3
 3
&w/ 	  )))r   c                     | j         }t          j                            ||| j                  }t          |||j                 ||j                           | j        j        j	        |<   |S )a*  Makes 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   rJ   getitemr   r   r,   r   r    r$   )r   ra   rb   r+   rd   rg   s         r   rg   zParforLoweringBuilder.getitem   s\    " ]'//#u$)/<<2;CHr%*~3
 3
&w/ r   r   )r;   )rA   )rP   )r-   
__module____qualname____doc__r   propertyr   r   r"   r%   r:   r   rX   r@   rO   r/   rZ   rJ   r\   r_   re   rg   rD   r   r   r   r   
   s          
 % % X% , , X, , , X, . . X.: : : :6
 
 
 
 
 
(
 
rv 
 
 
 
* BF    .    . RW    *"*    2"'      r   r   N)	collectionsr   
numba.corer   r   numba.core.typingr   r1   r   rD   r   r   <module>ro      s    " " " " " "                 ' ' ' ' ' ' 
;88N N N N N N N N N Nr   