
    uki                         d dl Z d dlmZ d dlmZ ddl ddlmZmZ ddl	m
Z
mZ dd	lmZmZmZmZmZ d
 Zd Zd ZeZdddddededededee   f
dZy)    N)
accumulate)Optional   )*)_dispatch_mixed_valuesMixedValues)
ConstantOp_is_integer_like_type   )Value
MemRefTypeStridedLayoutAttr
ShapedType	Operationc                     t        | t              xrW t        | j                  t              xr; t        | j                  j                  t
              xr t        | j                        S N)
isinstancer   ownerr   opviewr	   r
   typeis    V/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jaxlib/mlir/dialects/memref.py_is_constant_int_liker      sN    1e 	*qww	*	*qww~~z2	* "!&&)	    c                 l    t        | t              xr t        j                  |        xs t	        |       S r   )r   intr   is_dynamic_sizer   r   s    r   _is_static_int_liker      s1    1c@:#=#=a#@@"	q	!"r   c           	      *   | j                         \  }}t        t        ||||f      \  }}}}t        d |||fD              st	        d      |||fD ]D  }t        |      D ]4  \  }}t        |      s|j                  j                  j                  ||<   6 F t        d ||gz   D              rt        j                         }	n|}	t        ||      D ]  \  }
}|	|
|z  z  }	 g }t        ||      D ]  \  }}|j                  ||z          t        t        |dd  d d d   t         j"                              d d d   dgz   }||k(  r|	dk(  rd }nt%        j&                  |	|      }|||t)        j&                  || j*                  || j,                        fS )Nc              3   @   K   | ]  }t        d  |D                yw)c              3   2   K   | ]  }t        |        y wr   r   .0r   s     r   	<genexpr>z>_infer_memref_subview_result_type.<locals>.<genexpr>.<genexpr>'        .q".   Nallr%   ss     r   r&   z4_infer_memref_subview_result_type.<locals>.<genexpr>&   s#       	.A..   zAOnly inferring from python or mlir integer constant is supported.c              3   4   K   | ]  }t        |         y wr   r#   r$   s     r   r&   z4_infer_memref_subview_result_type.<locals>.<genexpr>7   s     
I!"1%%
Is   r   r   )get_strides_and_offsetmaplistr*   
ValueError	enumerater   r   r   literal_valueanyr   get_dynamic_sizezipappendr   operatormulr   getr   element_typememory_space)source_memref_typeoffsetsstatic_sizesstatic_stridessource_stridessource_offsetr,   idxr   target_offsetoffsettarget_stridetarget_stridessource_stridestatic_stridedefault_strideslayouts                    r   !_infer_memref_subview_result_typerN      s    %7$M$M$O!NM<?wnnE=9G\>>   
  O
 	
 |^4 6l 	6FC$Q'55#	66
 
Iw-/H
II"335%%(.%A 	4!FMVm33M	4 N(+NN(K =$}mm;<= :l12&6tt&<hllKLTrTRVWUXXO(]a-?"&&}nE++++		
	
 
r   )result_typelocipsourcer@   sizesstridesrO   c                \   |g }|g }|g }| j                   j                         \  }}|3t        d |||fD              rt        | j                   |||      \  }}}}n|t	        d      t        |      \  }}	}
t        |      \  }}}t        |      \  }}}t        || ||||
||||
      S )Nc              3   @   K   | ]  }t        d  |D                yw)c              3   2   K   | ]  }t        |        y wr   r#   r$   s     r   r&   z$subview.<locals>.<genexpr>.<genexpr>j   r'   r(   Nr)   r+   s     r   r&   zsubview.<locals>.<genexpr>i   s       #34.A..#r-   zHmixed static/dynamic offset/sizes/strides requires explicit result type.)rP   rQ   )r   r0   r*   rN   r3   r   _generated_subview)rR   r@   rS   rT   rO   rP   rQ   rC   rD   _packed_offsetsstatic_offsets_packed_sizesrA   _packed_stridesrB   s                  r   subviewr]   X   s     }$*KK$F$F$H!NMs #9>8X#   .fkk7E7S	
		V
 	
 0Fg/N,G_n)?)F&E=,/Eg/N,G_n r   )r:   	itertoolsr   typingr   _memref_ops_gen_ods_commonr   r   arithr	   r
   irr   r   r   r   r   r   r   rN   r]   rX    r   r   <module>re      sz         < 4 L L"5p   )-000 0 	0 *%0r   