
    Eg                    R    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dS )    )annotations)TYPE_CHECKINGN)is_list_like)NumpyIndexTreturnlist[np.ndarray]c                D   d}t          |           st          |          | D ] }t          |          s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k    r|d         |z  nt          j
        |          f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              3  4   K   | ]}t          |          V  d S )N)len).0xs     M/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/reshape/util.py	<genexpr>z$cartesian_product.<locals>.<genexpr>.   s(      **1A******    )dtypez+Product space too large to allocate arrays!   c           	         g | ]F\  }}t          t          j        ||                   t          j        |                             GS  )tile_compatnprepeatprod)r   ir   abs      r   
<listcomp>z%cartesian_product.<locals>.<listcomp>?   s[       
 Aq	 	Ia1GAaDMM	
 	
  r   )r   	TypeErrorr   r   fromiterintpcumprodany
ValueErrorroll
zeros_like	enumerate)Xmsgr   lenXcumprodXr   r   s        @@r   cartesian_productr+      sE   . 4C?? nn ! !A 	!C.. 	! 1vv{{	;*****"':::Dz$H	vhl HFGGG
!AAaD|qRL8# M(##    
 aLL   r   arrr   numintc                    t          | t          j                  rt          j        | |          S t          j        t          j        t          |                     |          }|                     |          S )zf
    Index compat for np.tile.

    Notes
    -----
    Does not support multi-dimensional `num`.
    )
isinstancer   ndarraytilearanger   take)r,   r-   takers      r   r   r   H   s]     #rz"" !wsC    GBIc#hh''--E88E??r   )r   r   )r,   r   r-   r.   r   r   )
__future__r   typingr   numpyr   pandas.core.dtypes.commonr   pandas._typingr   r+   r   r   r   r   <module>r;      s    " " " " " "                 2 2 2 2 2 2 +******8 8 8 8v     r   