o
    ŀg                     @  sT   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d	Z
dddZdS )    )annotations)TYPE_CHECKINGN)is_list_like)NumpyIndexTreturnlist[np.ndarray]c                   s   d}t | s
t|| D ]
}t |st|qt| dkrg S tjdd | D tjd}t|}t|dk r<tdt	|d d d< |d dkrS|d | nt
| fd	d
t| D S )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                 s  s    | ]}t |V  qd S )N)len).0x r   L/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/reshape/util.py	<genexpr>.   s    z$cartesian_product.<locals>.<genexpr>)dtypez+Product space too large to allocate arrays!   c                   s0   g | ]\}}t t|| t | qS r   )tile_compatnprepeatprod)r	   ir
   abr   r   
<listcomp>?   s    z%cartesian_product.<locals>.<listcomp>)r   	TypeErrorr   r   fromiterintpcumprodany
ValueErrorroll
zeros_like	enumerate)Xmsgr
   lenXcumprodXr   r   r   cartesian_product   s*   

r'   arrr   numintc                 C  s8   t | tjrt| |S ttt| |}| |S )zf
    Index compat for np.tile.

    Notes
    -----
    Does not support multi-dimensional `num`.
    )
isinstancer   ndarraytilearanger   take)r(   r)   takerr   r   r   r   H   s   
r   )r   r   )r(   r   r)   r*   r   r   )
__future__r   typingr   numpyr   pandas.core.dtypes.commonr   pandas._typingr   r'   r   r   r   r   r   <module>   s    
;