o
    ÒÙ¾i   ã                   @   sä   d Z ddlmZ ddlmZ ddlmZ ddlmZ dd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd)dd„Zd*dd„Zd*dd„Zd*d d!„Zd"edeef d#eeef fd$d%„Zd&edeef fd'd(„ZdS )+z&
Functions for manipulating IntTuples
é    )Úreduce)Úchain)ÚUnioné   )ÚIntegerc                 C   ó
   t | tƒS ©N)Ú
isinstancer   ©Úx© r   úc/home/ubuntu/.local/lib/python3.10/site-packages/flashinfer/data/cutlass/python/pycute/int_tuple.pyÚis_int+   ó   
r   c                 C   r   r   )r	   Útupler
   r   r   r   Úis_tuple/   r   r   c                 C   s0   t | ƒrt| ƒdkrdS tdd„ | D ƒƒS | fS )Nr   r   c                 s   s"    | ]}t |ƒD ]}|V  qqd S r   )Úflatten)Ú.0ÚaÚir   r   r   Ú	<genexpr>8   ó   €  zflatten.<locals>.<genexpr>)r   Úlenr   )Útr   r   r   r   3   s
   r   c                 C   s   t | dkƒt | dk ƒ S )Nr   )Úbool©r   r   r   r   Úsignum=   s   r   c                 C   s   t | ƒrtdd„ | dƒS | S )Nc                 S   s   | t |ƒ S r   )Úproduct)ÚvalÚelemr   r   r   Ú<lambda>C   s    zproduct.<locals>.<lambda>r   )r   r   r   r   r   r   r   A   s   r   c                 C   sH   t | ƒrt| ƒt|ƒksJ ‚tdd„ t| |ƒD ƒƒS t |ƒr J ‚| | S )Nc                 s   ó    | ]
\}}t ||ƒV  qd S r   )Úinner_product©r   r   Úyr   r   r   r   K   ó   € z inner_product.<locals>.<genexpr>)r   r   ÚsumÚzip©r   Úbr   r   r   r"   H   s
   r"   c                 C   s   t | ƒrtdd„ | D ƒƒS | S )Nc                 s   ó    | ]}t |ƒV  qd S r   )Ú	tuple_max)r   r   r   r   r   r   S   ó   € ztuple_max.<locals>.<genexpr>)r   Úmaxr   r   r   r   r+   Q   s   r+   c                 C   s^   t | ƒr t |ƒrt| ƒt|ƒksJ ‚tdd„ t| |ƒD ƒƒS J ‚t |ƒr+t| t|ƒƒS | | S )Nc                 s   r!   r   )Ú
elem_scaler#   r   r   r   r   \   r%   zelem_scale.<locals>.<genexpr>)r   r   r   r'   r.   r   r(   r   r   r   r.   X   s   r.   c                 C   s²   t | ƒr8t |ƒrt| ƒt|ƒksJ ‚tdd„ t| |ƒD ƒƒS g }| D ]}| t||ƒ¡ t|t|ƒƒ}q"t|ƒS t |ƒrCt| t|ƒƒS | | dksQ||  dksQJ ‚| | d | S )Nc                 s   r!   r   )Ú	shape_divr#   r   r   r   r   k   r%   zshape_div.<locals>.<genexpr>r   r   )r   r   r   r'   Úappendr/   r   )r   r)   ÚrÚvr   r   r   r/   g   s   r/   c                 C   s~   t | ƒr7t |ƒrt| ƒt|ƒksJ ‚tdd„ t| |ƒD ƒƒS g }| D ]}| t||ƒ¡ |t|ƒ }q"t|ƒS t |ƒr=J ‚|S )Nc                 s   r!   r   )Úprefix_product)r   r   r   r   r   r   r      r%   z!prefix_product.<locals>.<genexpr>)r   r   r   r'   r0   r3   r   )r   Úinitr1   r2   r   r   r   r3   {   s   r3   Nc                    s¦   |d u rt |ƒ}tˆ ƒr1t|ƒr/tˆ ƒt|ƒkr tˆ ƒt|ƒks"J ‚tdd„ tˆ ||ƒD ƒƒS J ‚t|ƒrMt|ƒt|ƒks?J ‚t‡ fdd„t||ƒD ƒƒS ˆ | | S )Nc                 s   ó"    | ]\}}}t |||ƒV  qd S r   ©Úidx2crd)r   r   ÚsÚdr   r   r   r   •   r   zidx2crd.<locals>.<genexpr>Fc                 3   s     | ]\}}t ˆ ||ƒV  qd S r   r6   )r   r8   r9   ©Úidxr   r   r   ›   s   € )r3   r   r   r   r'   )r;   ÚshapeÚstrider   r:   r   r7   Ž   s   $r7   c                 C   s  |d u rt |ƒ}t| ƒr9t|ƒr/t| ƒt|ƒkr t| ƒt|ƒks"J ‚tdd„ t| ||ƒD ƒƒS J d| › d|› ƒ‚| d u r?d} t|ƒr€t|ƒt|ƒksMJ ‚d}tt|ƒd ƒD ]}|t| t|| ƒ || || ƒ7 }| t|| ƒ } qW|t| |d |d ƒ S | | S )	Nc                 s   r5   r   )Úcrd2idx)r   Úcr8   r9   r   r   r   r   §   r   zcrd2idx.<locals>.<genexpr>Fzcrd=z, shape=r   r   éÿÿÿÿ)r3   r   r   r&   r'   Úranger>   r   )Úcrdr<   r=   Úresultr   r   r   r   r>       s"   $$r>   c                 C   st   t | ƒr)t |ƒrt| ƒt|ƒksJ ‚tdd„ t| |ƒD ƒƒS |d us$J ‚t| |ƒS t |ƒr2t| |ƒS | |k s8J ‚| S )Nc                 s   r!   r   )Úcrd2crdr#   r   r   r   r   ¾   r%   zcrd2crd.<locals>.<genexpr>)r   r   r   r'   r>   r7   )rB   Ú	dst_shapeÚ	src_shaper   r   r   rD   º   s   

rD   rB   Útrgc                 C   s`   t | ƒr't |ƒr%t| ƒt|ƒksJ ‚tttdd„ dd„ t| |ƒD ƒƒŽ ƒS J ‚| d u r.|fS dS )Nc                 S   s   | dkS )Nr   r   r
   r   r   r   r    Ò   s    zslice_.<locals>.<lambda>c                 S   s   g | ]	\}}t ||ƒ‘qS r   )Úslice_)r   r?   r8   r   r   r   Ú
<listcomp>Ò   s    zslice_.<locals>.<listcomp>Fr   )r   r   r   r   Úfilterr'   )rB   rG   r   r   r   rH   Ì   s   &rH   r   c                 C   s"   t | ƒrtdd„ | D ƒƒS | d u S )Nc                 s   r*   r   )Úhas_none)r   r2   r   r   r   r   ß   r,   zhas_none.<locals>.<genexpr>)r   Úanyr   r   r   r   rK   Ý   s   rK   )r   r   )Ú__doc__Ú	functoolsr   Ú	itertoolsr   Útypingr   r   r   r   r   r   r   r"   r+   r.   r/   r3   r7   r>   rD   r   ÚintrH   rK   r   r   r   r   Ú<module>   s,    
	





ÿ