a
    ߙfbE                     @   sR   d dl Zd dlZd dlmZmZmZ G dd dZG dd dZG dd dZ	dS )	    N)reshape_as_blocksblock_reduceblock_replicatec                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestReshapeAsBlocksc                 C   sV   t d}t|d}|jdks"J t|d}|jdks:J t|d}|jdksRJ d S )N      )   r      r	   r	   r   )r   r   )nparanger   shapeselfdataZreshaped r   ?lib/python3.9/site-packages/astropy/nddata/tests/test_blocks.pytest_1d
   s    



zTestReshapeAsBlocks.test_1dc                 C   sp   t ddd}t|d}|jdks*J t ddd}t|d}|jdksTJ t|d}|jd	kslJ d S )
Nr   r	   r   r   )r   r   r   r   @   r   )r	   r	   r   r   r
   )r   r   r	   r	   r   r   reshaper   r   r   r   r   r   test_2d   s    


zTestReshapeAsBlocks.test_2dc                 C   s\   t dddd}t|d}|jdks,J t dddd}t|d}|jd	ksXJ d S )
Nr   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_3d   s    

zTestReshapeAsBlocks.test_3dc                 C   s8   t ddd}t|d}d|d< |d dks4J d S )Nr   r	   r   d   )r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   	test_view'   s    
zTestReshapeAsBlocks.test_viewc                 C   sT   t dddd}d}tjt|d t|d W d    n1 sF0    Y  d S )Nr   r	   zTblock_size must be a scalar or have the same length as the number of data dimensionsmatchr   r   r   r   pytestraises
ValueErrorr   r   r   r!   r   r   r   test_invalid_block_dim-   s    z*TestReshapeAsBlocks.test_invalid_block_dimc                 C   sR   t ddd}d}tjt|d t|d W d    n1 sD0    Y  d S )Nr   r	   zXEach dimension of block_size must divide evenly into the corresponding dimension of datar    )r   r   r"   r&   r   r   r   test_invalid_block_size4   s    z+TestReshapeAsBlocks.test_invalid_block_sizec                 C   s   t ddd}d}tjt|d t|d W d    n1 sD0    Y  d}tjt|d t|d W d    n1 s0    Y  d S )Nr   r	   z$block_size elements must be integersr    )g @r   z-block_size elements must be strictly positive)r   r"   r&   r   r   r   test_invalid_block_value;   s    (z,TestReshapeAsBlocks.test_invalid_block_valueN)
__name__
__module____qualname__r   r   r   r   r'   r(   r*   r   r   r   r   r   	   s   		r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestBlockReducec                 C   s8   t d}t ddg}t|d}t ||ks4J dS )Test 1D array.r	   r      r   N)r   r   arrayr   allr   r   expectedresultr   r   r   r   G   s    

zTestBlockReduce.test_1dc                 C   sH   t d}d}t||t jd| }t||t jd}t ||ksDJ dS )z Test 1D array with func=np.mean.r	          @funcN)r   r   r   summeanr2   )r   r   
block_sizer4   Zresult_meanr   r   r   test_1d_meanN   s
    
zTestBlockReduce.test_1d_meanc                 C   s@   t ddd}t dgg}t|d}t ||ks<J dS )Test 2D array.r	   r      N)r   r   r   r1   r   r2   r3   r   r   r   r   V   s    
zTestBlockReduce.test_2dc                 C   sT   t ddd}d}t||t jd|d  }t||t jd}t ||ksPJ dS )z Test 2D array with func=np.mean.r	   r   r6   r7   N)r   r   r   r   r9   r:   r2   r   r   r;   r4   r5   r   r   r   test_2d_mean]   s    zTestBlockReduce.test_2d_meanc                 C   sP   t ddd}t|d}|ddddf }t|d}t ||ksLJ dS )zg
        Test trimming of 2D array when size is not perfectly divisible
        by block_size.
           r0   r   r   r   r	   Nr   r   r   r   r2   )r   Zdata1result1Zdata2result2r   r   r   test_2d_trimf   s
    

zTestBlockReduce.test_2d_trimc                 C   s<   t ddd}t|d}t|d}t ||ks8J dS )$Test scalar block_size broadcasting.r   r	   r   r   NrB   r   r   rC   rD   r   r   r   test_block_size_broadcastingr   s    

z,TestBlockReduce.test_block_size_broadcastingc                 C   sB   t d}tt t|d W d   n1 s40    Y  dS )Test block_size length.r   r   N)r   Zonesr#   r$   r%   r   r   r   r   r   r   test_block_size_leny   s    
z#TestBlockReduce.test_block_size_lenN)
r+   r,   r-   r   r<   r   r@   rE   rH   rK   r   r   r   r   r.   F   s   	r.   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestBlockReplicatec                 C   s8   t d}t g d}t|d}t ||ks4J dS )r/   r   )r   r         ?rM   N)r   r   r1   r   r2   r3   r   r   r   r      s    

zTestBlockReplicate.test_1dc                 C   s@   t d}d}t||| }t||dd}t ||ks<J dS )z&Test 1D array with conserve_sum=False.r   r6   FZconserve_sumN)r   r   r   r2   r?   r   r   r   test_1d_conserve_sum   s
    
z'TestBlockReplicate.test_1d_conserve_sumc                 C   sT   t ddd}t ddgddgddgddgg}t|d}t ||ksPJ dS )r=   r   r   r   g      ?N)r   r   r   r1   r   r2   r3   r   r   r   r      s    "
zTestBlockReplicate.test_2dc                 C   sL   t ddd}d}t|||d  }t||dd}t ||ksHJ dS )z&Test 2D array with conserve_sum=False.r>   r   r   r6   FrN   Nr   r   r   r   r2   r?   r   r   r   test_2d_conserve_sum   s
    z'TestBlockReplicate.test_2d_conserve_sumc                 C   s<   t ddd}t|d}t|d}t ||ks8J dS )rF   r	   r   r   NrP   rG   r   r   r   rH      s    

z/TestBlockReplicate.test_block_size_broadcastingc                 C   sB   t d}tt t|d W d   n1 s40    Y  dS )rI   r0   r   N)r   r   r#   r$   r%   r   rJ   r   r   r   rK      s    
z&TestBlockReplicate.test_block_size_lenN)	r+   r,   r-   r   rO   r   rQ   rH   rK   r   r   r   r   rL      s   rL   )
Znumpyr   r#   Zastropy.nddatar   r   r   r   r.   rL   r   r   r   r   <module>   s
   =: