
    Owg                    P    d dl mZ d dlmZ d dlZd dlmZ erd dlm	Z	 ddZ
d	dZy)
    )annotations)TYPE_CHECKINGN)is_list_like)NumpyIndexTc                   d}t        |       st        |      | D ]  }t        |      rt        |       t        |       dk(  rg S t        j                  d | D        t        j
                        }t        j                  |      }t        j                  |dk        rt        d      t        j                  |d      }d|d<   |d   dk7  r	|d   |z  }nt        j                  |      }t        |       D cg c]>  \  }}t        t        j                  |||         t        j                  ||               @ c}}S c c}}w )a  
    Numpy version of itertools.product.
    Sometimes faster (for large inputs)...

    Parameters
    ----------
    X : list-like of list-likes

    Returns
    -------
    product : list of ndarrays

    Examples
    --------
    >>> cartesian_product([list('ABC'), [1, 2]])
    [array(['A', 'A', 'B', 'B', 'C', 'C'], dtype='<U1'), array([1, 2, 1, 2, 1, 2])]

    See Also
    --------
    itertools.product : Cartesian product of input iterables.  Equivalent to
        nested for-loops.
    z'Input must be a list-like of list-likesr   c              3  2   K   | ]  }t        |        y w)N)len).0xs     O/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/reshape/util.py	<genexpr>z$cartesian_product.<locals>.<genexpr>.   s     *1A*s   )dtypez+Product space too large to allocate arrays!   )r   	TypeErrorr	   npfromiterintpcumprodany
ValueErrorroll
zeros_like	enumeratetile_compatrepeatprod)Xmsgr   lenXcumprodXabis           r   cartesian_productr%      s%   . 4C?n !AC. ! 1v{	;;**"'':Dzz$H	vvhlFGG
!AAaD|qRL8# MM(# aL
 Aq	 	IIa1GGAaDM	
  s   9AE c                    t        | t        j                        rt        j                  | |      S t        j                  t        j                  t        |             |      }| j                  |      S )zf
    Index compat for np.tile.

    Notes
    -----
    Does not support multi-dimensional `num`.
    )
isinstancer   ndarraytilearanger	   take)arrnumtakers      r   r   r   H   sP     #rzz"wwsC   GGBIIc#h'-E88E?    )returnzlist[np.ndarray])r,   r   r-   intr0   r   )
__future__r   typingr   numpyr   pandas.core.dtypes.commonr   pandas._typingr   r%   r    r/   r   <module>r8      s"    "    2*8vr/   