
    bi9                    &   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ ej"                  j%                  dg d      d        Zd	 Zd
 Zd Zej"                  j%                  dg d      d        Zej"                  j%                  ddg      d        Zej"                  j%                  dg d      d        Zd Zd Zd Zd Zd Zej"                  j%                  dg d      d        Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'y)$    )annotationsN)
from_array)_smooth_chunkscontract_tupleexpand_tuplereshape_blockwisereshape_rechunk)	assert_eqz-inshape,outshape,prechunks,inchunks,outchunks))   r      r   r   r   )r   r   r   r      r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   )r   r   r   r   r   )r   r   )r   r   r   r   )@   r   r   r   )   r"   r"   r"   r"   r"   r"   r"   r!   )r   r   r   r   r   r   )r   r    )    r%   r$   )r   r   r   )r   r    )   0   r&   ))r      r   r   )r   r    ))   ,   ))r'   r'   r%   ))r   r   r   r   r   ))r   r   )r"   r"   r   )r'   r'   r'   r'   r   r,   )r   r   r   r   r"   r   c           	         t        | ||      \  }}}}||k(  sJ ||k(  sJ t        j                  t        t	        t
        |                  t        j                  t        t	        t
        |                  k(  sJ y )N)r	   npprodlistmaplen)inshapeoutshape	prechunksinchunks	outchunks	result_in
result_out_s           X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/array/tests/test_reshape.pytest_reshape_rechunkr>      sp    P #2'8Y"OIz1a   """774C+,-c#z>R9S1TTTT    c                     t        dd      dk(  sJ t        dd      dk(  sJ t        dd      dk(  sJ t        dd      d	k(  sJ y )
Nr   r   r   )r   r   r   r   r)   )r   r   r   r   r   r)   r   )r   r   r   r   )   r   )r   r   r)   r   r   r   )r    r?   r=   test_expand_tuplerE   @   sW    "l222"o555"l222"&8888r?   c                     t        dd      dk(  sJ t        dd      dk(  sJ t        dd      dk(  sJ t        dd      dk(  sJ y )	N)r   r   r   r)   r   r   r-   )r   r   r      r   )r   r   r   r   rA   r)      )r   rD   r?   r=   test_contract_tuplerJ   G   sV    /1-===/1-===&!$...&!$,,,r?   c                    t         j                  j                  d      } t        j                  | d      }| j	                  d      }|j	                  d      }|j
                  dk(  sJ t        ||       t        j                  t              5  | j	                  d       d d d        t        j                  t              5  |j	                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)N)
   rI   rI   )rG   r   r)   chunks)<   )rO   rI   )rO   rP   rP   )
r0   randomdar   reshapeshaper
   pytestraises
ValueError)aAa2A2s       r=   test_reshape_unknown_sizesr\   N   s    
		$A
a	*A	
8	B	
8	B88wb"	z	"  			, 	z	"  			,         s   CC)C&)C2z&inshape, inchunks, outshape, outchunks))r   r)   r   r   r   r   r   rI   r   )r   r   r   r   r   )r   r   r)   r   )r   r   r_   r   r`   ra   )r   r   r)   r   r   r   r_   r      r   )r   r   r   r   r   r   r   r   r   )rc   rd   r   r)   r   )r#   r_   r   )rc   )r   r   r_   r   rh   r   r_   r   )r]   )r   r   r   r   r      ))r   r   r   r   r   r   r   r   r   r   r   r   )r]   r   rj   r   )r   rf   )r   r    c                n   t        j                  t        j                  |             j                  |       }t	        j
                  ||      }t        |j                  ||      \  }}}}||k(  sJ ||k(  sJ |j                  |      }	|	j                  |k(  sJ t        |	|j                  |             y NrM   
r0   aranger1   rS   rR   r   r	   rT   rN   r
   )
r5   r8   r6   r9   baserX   	inchunks2
outchunks2r<   results
             r=   !test_reshape_all_chunked_no_mergerv   ^   s    D 99RWWW%&..w7D
d8,A #2!''8X"NIz1a   """ YYx F==I%%%fdll8,-r?   z9inshape, inchunks, expected_inchunks, outshape, outchunks)r]   r^   rm   rk   ))r   r   r   r   r   r   c                n   t        j                  t        j                  |             j                  |       }t	        j
                  ||      }t        |j                  ||      \  }}}	}	||k(  sJ ||k(  sJ |j                  |      }
|
j                  |k(  sJ t        |
|j                  |             y ro   rp   )r5   r8   expected_inchunksr6   r9   rr   rX   rs   rt   r<   ru   s              r=   "test_reshape_all_not_chunked_mergery      s    0 99RWWW%&..w7D
d8,A #2!''8X"NIz1a))))""" YYx F==I%%%fdll8,-r?   ))r]   )r   r_   r   r`   ra   )rb   )r   r   r_   r   r`   ra   )rc   )r   r   r_   r   re   rg   )rc   )r   r   r_   r   re   rg   )rc   )r   r   r_   r   re   rg   )rc   )r   r   r_   r   rh   ri   c                r   t        j                  t        j                  |             j                  |       }t	        j
                  ||      }|j                  |d      }|j                  |k(  sJ t        ||j                  |             |j                  |j                  |      j                  k7  sJ y )NrM   F)merge_chunks)r0   rq   r1   rS   rR   r   rN   r
   )r5   r8   r6   r9   rr   rX   ru   s          r=   test_reshape_merge_chunksr|      s    T 99RWWW%&..w7D
d8,A YYxeY4F==I%%%fdll8,-==AIIh/66666r?   c                 F    d} d}g d}t        || d|      }g d}||k(  sJ y )Nr   r   )N
r   r   r   r   r   r   r   r   r   r   )r*   )Nr~   )
r   r   r   r   r   r   r   r   r   r   r   iiileftresult_inchunksr:   expected_ins        r=   test_smooth_chunksr      s4    	
BECOub!_=IXK###r?   c                 F    d} d}g d}t        || d|      }g d}||k(  sJ y )Nr   r   )N$r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	   rI   )Nr   )r   rG   r   r   s        r=    test_smooth_chunks_not_divisibler      s4    	
BE-Oub!_=I+K###r?   c                 x    d} d}g d}t        || d|      }g d}||k(  sJ t        || d|      }g d}||k(  sJ y )Nr   r   ))r   r   r)   r   r   r)   rH   r)   r)   rf   ))r   r   r   r   r   r   r   r   rH   r   rI   )r~   rH   r   r   r   s        r=   "test_smooth_chunks_first_dimensionr      s[    	
BEO ub"o>I:K###ub!_=I@K###r?   c                 F    d} d}g d}t        || d|      }g d}||k(  sJ y )Nr)   r   )Nr   r   )  r   )Nr   r   )dr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s        r=   "test_smooth_chunks_large_dimensionr     s4    	
BE2Oub!_=I4K###r?   c                    t        j                  dd      j                  ddd      } t        j                  | d      }|j                  dd      }|j
                  d	k(  sJ t        j                  |j                        t        j                  |j                        k(  sJ t        || j                  dd             y )
Nr   ip     rL   r*   )r   r   r   rM      ))r   )dr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	r0   rq   rS   rR   r   rN   r1   rT   r
   )arrdarrru   s      r=   !test_reshape_not_squashing_chunksr     s    
))A|
$
,
,RR
8C==Z0D\\"c"F==////776<< BGGDJJ$7777fckk"c*+r?   zreshaper, chunks)))r   r   d   )r   r   )r*   r*   r*   r*   r*   ))r   r   )r   )
r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   ))rL   rL   r   )r~   rG   rG   r   ))r      r"   )r   )
r   r   r   r   r   r)   r)   r)   r)   r)   r.   c                   t        j                  dd      j                  dd      }t        j                  |d      } |j                  dg|  }|j
                  d|z   k(  sJ t        j                  |j                        t        j                  |j                        k(  sJ t        | |j                  dg|         y )Nr   i  rL   r   )rG   )r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   r*      r   rM   )r   r   )reshaperrN   r   r   ru   s        r=    test_reshape_to_higher_dimensionr   #  s     ))Au

%
%b#
.C==%>?DT\\"(x(F==I....776<< BGGDJJ$7777fkckk"0x01r?   c                 x    t        j                  dd      } | j                  dd      }|j                  dk(  sJ y )N)r*   r*   rG   )rL   rL   rG   rM   r   rG   ))r   r   r   r   )rG   rR   onesrS   rN   r   ru   s     r=   test_reshape_lower_dimensionr   7  s5    
''+k
2C[[a F==....r?   c                 ~    t        j                  dd      } | j                  ddddd      }|j                  d	k(  sJ y )
N)r     r   i  )r   r   r   S   )rT   rN   r   r   r   r   i  )r   )r   )r   r#   )P   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r=   test_reshape_split_out_chunksr   =  sE    
'',5G
HC[[D#q$/F==    r?   c                    t        j                  dd      j                  ddd      } t        | d      }|j                  dk(  sJ t        |d      }|j                  d	k(  sJ t        j                  | d dd d
d d
f   j                  dd
      | d dd d
d
d f   j                  dd      gd      t        j                  | d dd
d d d
f   j                  dd
      | d dd
d d
d f   j                  dd      gd      t        j                  | dd d d
d d
f   j                  dd
      | dd d d
d
d f   j                  dd      gd      t        j                  | dd d
d d d
f   j                  dd
      | dd d
d d
d f   j                  dd      gd      g}t        j                  |d      }t        ||       t        |d|j                        }t        ||       |j                  |j                  k(  sJ t        |d      }|j                  dk(  sJ t        j                  | d dd d
d d
f   j                  dd      | d dd d
d
d f   j                  dd
      | d dd
d d d
f   j                  dd
      | d dd
d d
d f   j                  dd      gd      t        j                  | dd d d
d d
f   j                  dd      | dd d d
d
d f   j                  dd
      | dd d
d d d
f   j                  dd
      | dd d
d d
d f   j                  dd      gd      g}t        j                  |d      }t        ||       t        |d|j                        }t        ||       |j                  |j                  k(  sJ t        j                  t        d      5  t        |dd       d d d        y # 1 sw Y   y xY w)Nr   6   rI   r)   r)   r   r   r   rM   )r   r   r      r)   ))rI   r)   rI   r)   r   r   r   )axisrI   r)   r)   )rI   r   )r   )r   r   r   r   r   z1Chunk sizes do not match for the following chunksmatch)rB   r)   r   r   )r0   rq   rS   r   rN   r   concatenater
   rU   rV   rW   )xr   ru   expectedresult2s        r=   test_reshape_blockwiser   J  s   
		!R  Aq)A
Q~
.C::1111sG,F==2222
rr2A2rrz]""1a(!BQBABJ-*?*?1*EFQ	
 	rr12rrz]""1a(!BQBABJ-*?*?1*EFQ	
 	qr2A2rrz]""1a(!ABABJ-*?*?1*EFQ	
 	qr12rrz]""1a(!ABABJ-*?*?1*EFQ	
H ~~hQ/Hfh	#**EGc7>>SZZ'''sF+F==2222
"1"bqb"1"*%%a+"1"bqb!"*%%a+"1"ab"1"*%%a+"1"ab!"*%%a+	 	
 	!"bqb"1"*%%a+!"bqb!"*%%a+!"ab"1"*%%a+!"ab!"*%%a+	 	
H< ~~hQ/Hfh	#**EGc7>>SZZ'''	M
 N 	&)4LMN N Ns   7OOc                 `   t        j                  dd      j                  ddd      } t        | d      }d}t	        j
                  t        |      5  t        |d	       d d d        t	        j
                  t        d
      5  t        |d       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nr   r   rI   r)   r   rM   z/Need to specify chunks if expanding dimensions.r   )r   r)   r)   r)   z:reshape_blockwise not implemented for expanding dimensions)r)   r   r   )	r0   rq   rS   r   rU   rV   	TypeErrorr   NotImplementedError)r   r   msgs      r=   +test_reshape_blockwise_raises_for_expansionr     s    
		!R  Aq)A
Q~
.C
;C	y	, -#|,- 
J
 * 	#y)	* *- -* *s   BB$B!$B-c                     t        j                  dd      j                  ddd      } t        | d      }t	        j
                  t        d      5  t        |d	|j                         d d d        y # 1 sw Y   y xY w)
Nr   r   rI   r)   r   rM   z"Setting chunks is not allowed whenr   r   )	r0   rq   rS   r   rU   rV   rW   r   rN   r   r   s     r=   5test_reshape_blockwise_dimension_reduction_and_chunksr     sa    
		!R  Aq)A
Q~
.C	z)M	N 4#w

34 4 4s   A11A:c                    t        j                  dd      j                  ddd      } t        | d      }t	        |d      }t        |j                        t        |j                        k(  sJ t        ||        t	        |d|j                        }t        |j                        t        |j                        k(  sJ t        ||        y )Nr   r   rI   r)   r   rM   r   )	r0   rq   rS   r   r   r4   daskr
   rN   )r   r   ru   s      r=   test_reshape_blockwise_identityr     s    
		!R  Aq)A
Q~
.CsI.Fsxx=C,,,,fasIcjjAFsxx=C,,,,far?   c                     t         j                  j                  dd      dk  } t        j                  |       }|j                  t        j
                  fdz  dfk(  sJ y )N)  r   r   )r   r   r   rM   r   }   rj   )rR   rQ   argwhererN   r0   nanr   s     r=   ,test_argwhere_reshaping_not_concating_chunksr     sO    
))

??

Ca
GC[[F==bffY_i8888r?   c                    t        j                  dd      j                  dd      } t        | d      }t	        j
                  t        d      5  t        |d	       d d d        t        | d      }||d d df   dkD     }t	        j
                  t        d
      5  t        |d       d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   r*   rL   r   )rG   r   rM   z)total size of new array must be unchangedr   )rL   rI   z$Array chunk size or shape is unknown)rG   r   r   )r0   rq   rS   r   rU   rV   rW   r   r   s     r=   $test_blockwise_reshape_sanity_checksr     s    
		!R  Q'A
Qv
&C	z)T	U (#w'( Qv
&C
c!Q$i!m
C	z)O	P *#y)* *( (
* *s   B1B=1B:=C)(
__future__r   numpyr0   rU   
dask.arrayarrayrR   r   dask.array.reshaper   r   r   r   r	   dask.array.utilsr
   markparametrizer>   rE   rJ   r\   rv   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r?   r=   <module>r      sZ   "    !  ' 3#&NUO&NU9-   ,:.;:.& ?	
*.+*." ,"%L7M%L7$$$&$, 22/
CNL*4	9	*r?   