U
    »mœduK  ã                   @   s¢  d Z ddlZddlmZmZ ddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlZddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ eeeƒdƒZdZ dZ!e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!„ Z+d"d#„ Z,d$d%„ Z-d&d'„ Z.d(d)„ Z/d*d+„ Z0d,d-„ Z1d.d/„ Z2d0d1„ Z3d2d3„ Z4d4d5„ Z5d6d7„ Z6d8d9„ Z7d:d;„ Z8d<d=„ Z9d>d?„ Z:d@dA„ Z;dBdC„ Z<dDdE„ Z=dS )Fz Tests for netcdf é    N)ÚjoinÚdirname)ÚBytesIO)Úglob)Úcontextmanager)Úassert_Úassert_allcloseÚassert_equalÚbreak_cyclesÚsuppress_warningsÚIS_PYPY)Úraises)Únetcdf_file)Ú
in_tempdirÚdataé   Úbc                  o   s\   t | |Ž}d|_| dt¡ | dtd¡}t t¡|d d …< d|_| 	¡  |V  | 
¡  d S )NúCreated for a testÚtime©r   zdays since 2008-01-01)r   ÚhistoryÚcreateDimensionÚN_EG_ELSÚcreateVariableÚ
VARTYPE_EGÚnpZarangeÚunitsÚflushÚclose)ÚargsÚkwargsÚfr   © r"   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/io/tests/test_netcdf.pyÚmake_simple   s    
r$   c                 C   sF   t | jdƒ | jd }t |jdƒ t |jtfƒ t |d td ƒ dS )zExample fileobj tests ó   Created for a testr   s   days since 2008-01-01éÿÿÿÿé   N)r	   r   Ú	variablesr   Úshaper   )Z	ncfileobjr   r"   r"   r#   Úcheck_simple&   s
    
r*   c                 C   s   t j | ¡}t||ƒ dS )a°  
    Asserts that the mask of arr is effectively the same as expected_mask.

    In contrast to numpy.ma.testutils.assert_mask_equal, this function allows
    testing the 'mask' of a standard numpy array (the mask in this case is treated
    as all False).

    Parameters
    ----------
    arr : ndarray or MaskedArray
        Array to test.
    expected_mask : array_like of booleans
        A list giving the expected mask.
    N)r   ÚmaZgetmaskarrayr	   )ZarrZexpected_maskÚmaskr"   r"   r#   Úassert_mask_matches.   s    r-   c                  C   sh  t  ¡ } �z0t ¡ }t  |¡ t	ddƒ�}W 5 Q R X t
ddƒ�}t|ƒ d|jd< W 5 Q R X t
dƒ�,}t|jt ƒ t|ƒ t|jd dƒ W 5 Q R X t
ddƒ�*}t|j ƒ t|ƒ t|jd dƒ W 5 Q R X t
ddd��}t|j ƒ t|ƒ W 5 Q R X tddƒ�.}t
|ƒ�}t|j ƒ t|ƒ W 5 Q R X W 5 Q R X tƒ �X}t�rT| td	¡ tddƒ�0}t
|d
d��}t|jƒ t|ƒ W 5 Q R X W 5 Q R X W 5 Q R X tddƒ�V}t
|dƒ�@}t|j ƒ t|ƒ | dd¡ | ddd¡}d|d d …< W 5 Q R X W 5 Q R X t
dƒ�&}t|ƒ t|jd d d … dƒ W 5 Q R X W 5 t�rNtƒ  tƒ  t  | ¡ t |¡ X d S )Nz	simple.ncÚwÚar'   Z	appendRanF©ÚmmapÚrbz2Cannot close a netcdf_file opened with mmap=True.*Tzr+bÚapp_dimZapp_varÚi)r3   é*   )ÚosÚgetcwdr   r
   ÚchdirÚshutilÚrmtreeÚtempfileÚmkdtempr$   r   r*   Ú_attributesr	   Zuse_mmapr   Úopenr   ÚfilterÚRuntimeWarningr   r   r(   )ÚcwdZtmpdirr!   ZfobjÚsupÚvarr"   r"   r#   Útest_read_write_filesB   s`    



ÿ
& 
&
rD   c               	   C   sð   t ƒ } t| dƒ� |  ¡ }W 5 Q R X t |ƒ}t|ƒ�}t|ƒ W 5 Q R X t |ƒ}ttt|ddƒ t ƒ }t|ddd��}| ¡ }W 5 Q R X t |ƒ}t|ƒ�}t|ƒ t|jdƒ W 5 Q R X t |ƒ}t|dd��}t|ƒ t|jdƒ W 5 Q R X d S )Nr.   ÚrTé   )Úversion)	r   r$   Úgetvaluer   r*   Úassert_raisesÚ
ValueErrorr	   Zversion_byte)Zeg_sio1Zstr_valZeg_sio2Úf2Zeg_sio3Z	eg_sio_64Zf_64r"   r"   r#   Útest_read_write_sio�   s&    

rL   c                  C   sd   t ƒ } t| dd�}d|_| dd¡ | dtjd¡}d|d	< d
|_| ¡  |  	¡ }d}t
||ƒ d S )Nr.   ©Úmoder   Údimr'   rC   )rO   iñØÿÿr   Úds|   CDF       
      dim             a         b            var                 c         d            xØñ€)r   r   r/   r   r   r   Úint16ÚcÚsyncrH   r	   )Zraw_filer!   rC   ÚactualÚexpectedr"   r"   r#   Ú
test_bytes¬   s     rV   c               	   C   sn   t tƒ dd��V} |  dd¡ |  ddd¡}t| ¡ dƒ d	|_t| ¡ d	ƒ d
|_t| ¡ dƒ W 5 Q R X d S )Nr.   rM   Úxr'   rC   ZS1©rW   ó    ó   s     )r   r   r   r   r	   Z_get_encoded_fill_valueZ
_FillValue)r!   rC   r"   r"   r#   Útest_encoded_fill_valueÝ   s    r[   c               
   C   sH   t ttdƒƒD ]4} t| dƒ� W 5 Q R X t| ddd�� W 5 Q R X qd S )Nz*.ncrE   Fr0   )r   ÚpjoinÚTEST_DATA_PATHr   )Úfnamer"   r"   r#   Útest_read_example_dataè   s
    
r_   c               
   C   s^   t tdƒ} tƒ �6}| td¡ t| ddd��}|jd }W 5 Q R X W 5 Q R X tt|j	dƒ d S )Núexample_1.ncúsCannot close a netcdf_file opened with mmap=True, when netcdf_variables or arrays referring to its data still existrE   Tr0   r   r5   )
r\   r]   r   r?   r@   r   r(   rI   ÚRuntimeErrorZassignValue)ÚfilenamerB   r!   Ztime_varr"   r"   r#   Ú$test_itemset_no_segfault_on_readonlyñ   s    
ÿrd   c               	   C   sˆ   t ƒ } t| dd��>}| dd¡ | dtd¡ d|jd d< | ¡  |  ¡ }W 5 Q R X t |ƒ} t| dd��}d|jd d< W 5 Q R X d S )	Nr.   rM   rW   rF   rX   r'   .r/   )	r   r$   r   r   Úfloatr(   r   rH   r   )Ústreamr!   Úcontentsr"   r"   r#   Útest_appending_issue_gh_8625   s    rh   c               	   C   s€   ddg} t  d¡jdkr"|  d¡ t  d¡jdkr<|  d¡ ttƒ dƒ�.}| dt¡ | D ]}tt	|j
d|dƒ qZW 5 Q R X d S )	NZint64Zuint64Úinté   Zuintr.   r   r   )r   ÚdtypeÚitemsizeÚappendr   r   r   r   rI   rJ   r   )Zdtypesr!   Údtr"   r"   r#   Útest_write_invalid_dtype  s    

ro   c               	   C   s~   t ƒ } t| dd��V}| dd¡}| dddg¡}d|d d …< | ¡  t|  ¡ ƒ}| ¡  t|  ¡ ƒ}W 5 Q R X t||kƒ d S )Nr.   rM   rW   é   ÚvÚi2r'   )r   r$   r   r   r   ÚlenrH   r   )rf   r!   rW   rq   Z
len_singleZ
len_doubler"   r"   r#   Útest_flush_rewind  s    rt   c               	   C   sd   t tƒ dd��L} |  dd¡ |  dddg¡ |  dtjdg¡ |  dt tj¡dg¡ W 5 Q R X d S )	Nr.   rM   rW   rp   Zv1rr   Zv2Zv3)r$   r   r   r   r   rQ   rk   ©r!   r"   r"   r#   Útest_dtype_specifiers*  s
    rv   c               
   C   sØ   t ƒ } ddddddddd	d
g
}t| dƒ�H}d|_| dd¡ | ddd¡}||d d …< d|_| ¡  |  ¡ }W 5 Q R X t |ƒ} t| dƒ�F}t|jdƒ |j	d }t|jdƒ t|j
dƒ t|d d … |ƒ W 5 Q R X d S )Nr   gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g333333ã?gffffffæ?gš™™™™™é?gÍÌÌÌÌÌì?r.   r   Ú	float_varé
   r!   )rw   ZmetresrE   r%   s   metres)rx   )r   r   r   r   r   r   r   rH   r	   r(   r)   r   )ÚioÚitemsr!   rw   rg   r"   r"   r#   Útest_ticket_17205  s"    
r{   c               
      s”   t tdƒ‰ tsXt ¡ �< t d¡ tˆ dd��} | jd d d … }~W 5 Q R X W 5 Q R X ‡ fdd„}tƒ �}| 	t
d¡ |ƒ }W 5 Q R X | ¡  d S )	Nr`   ÚerrorTr0   Úlatc               
      s6   t ˆ dd�� } | jd d d … W  5 Q R £ S Q R X d S )NTr0   r}   )r   r(   ru   ©rc   r"   r#   ÚdoitW  s    z!test_mmaps_segfault.<locals>.doitra   )r\   r]   r   ÚwarningsÚcatch_warningsÚsimplefilterr   r(   r   r?   r@   Úsum)r!   rW   r   rB   r"   r~   r#   Útest_mmaps_segfaultL  s    


ÿr„   c               	   C   sJ   t ƒ } t| dƒ�0}| ddg ¡}|jdks4t|jƒ‚| ¡  W 5 Q R X d S )Nr.   Zzerodimrr   F)r   r$   r   ZisrecÚAssertionErrorr   )ry   r!   rq   r"   r"   r#   Útest_zero_dimensional_varc  s
    r†   c               	   C   sr   t ƒ �b d} t| dƒ}d|jd< d|jd< | ¡  t| dƒ}t|jd dƒ t|jd dƒ | ¡  W 5 Q R X d S )	Nzg_byte_atts.ncr.   s   grailZholyZfloatsZwitchrE   s   floats©r   r   r=   r   r	   ©rc   r!   r"   r"   r#   Útest_byte_gattsm  s    



r‰   c               	   C   s”   t ƒ �„ d} t| dƒ}d|jd< | ¡  t| dƒ}t|jd dƒ d|jd< | ¡  t| d	ƒ}t|jd dƒ t|jd dƒ | ¡  W 5 Q R X d S )
Nzappend_dat.ncr.   zwas hereZKilroyr/   s   was heres   ZootZnaughtyrE   r‡   rˆ   r"   r"   r#   Útest_open_append|  s    




rŠ   c                  C   s  d} t ƒ �� tddƒ�ž}| dd ¡ | ddd¡ | d| ¡ | ddd¡}t t| ƒ¡|d d …< | d	| ¡ | d	dd
¡}t t| ƒ¡|d d …< | ddd¡ | ¡  | ¡  W 5 Q R X tdƒD ]ø}tddƒ�R}t 	|j
d j|¡|j
d _t | | f|¡|j
d |d d …d d …f< | ¡  W 5 Q R X tdƒ�„}t|j
d d |ƒ t|j
d dd d …d d …f  ¡ t | | f|¡ƒ t|j
d jjd |d ƒ t|j
d jjd |d ƒ W 5 Q R X qÄtdƒ�@}ttƒ�}|j
d jd  W 5 Q R X |j}t|jd dƒ W 5 Q R X W 5 Q R X d S )Néd   zwithRecordDimension.ncr.   r   rP   r   rW   rX   Úy)rŒ   ZtestDatar4   )r   rW   rŒ   rF   r/   r&   r   r'   r   )r   r   r   r   r   ÚarrayÚranger   r   rm   r(   r   Úfullr	   Úcopyr)   rI   ÚKeyErrorr=   Úvaluer   )ZdataSizer!   rW   rŒ   r4   ÚarÚexr"   r"   r#   Útest_append_recordDimension‘  s:    
(
2(

r•   c            	   
   C   sŠ  t  ddd¡} d| d< t j | d¡}ttdƒ}t|dd	��f}|jd
 }t|j	dƒ t|j
dƒ t|jt  d¡ƒ |d d …  ¡ }~t  | ¡ d¡}t||ƒ W 5 Q R X tƒ �Ô d}t|ddd	�}| d
t|ƒ¡ | d
dd¡}d|_	d|_d|_
||d d …< | ¡  t|dd	��f}|jd
 }t|j	dƒ t|j
dƒ t|jt  d¡ƒ t  | ¡ d¡}|d d …  ¡ }~t||ƒ W 5 Q R X W 5 Q R X d S )Né   é   é   r‹   é   éc   zexample_2.ncT©ÚmaskandscaleÚTemperatureé'  g{®Gáz„?rF   zms.ncr.   r4   )r�   )r   Zlinspacer+   Zmasked_greaterr\   r]   r   r(   r	   Zmissing_valueZ
add_offsetZscale_factorZfloat32Ú
compressedÚroundr   r   r   rs   r   r   )	ÚtÚtmr^   r!   ZTempÚfoundrU   ZnewfnameÚtempr"   r"   r#   Útest_maskandscale¹  s@    


r¥   c               	   C   sH   t tdƒ} t| dd��(}|jd d d … }t|dddgƒ W 5 Q R X d S )Núexample_3_maskedvals.ncTr›   Zvar1_fillval0F©r\   r]   r   r(   r-   ©r^   r!   Úvardatar"   r"   r#   Ú!test_read_withValuesNearFillValueâ  s    
rª   c               	   C   sX   t tdƒ} t| dd��8}|jd d d … }t|dddgƒ t|dddgƒ W 5 Q R X d S )	Nr¦   Tr›   Zvar2_noFillvalFr'   rF   r™   ©r\   r]   r   r(   r-   r	   r¨   r"   r"   r#   Útest_read_withNoFillValueé  s
    
r¬   c               	   C   s\   d} t tdƒ}t|dd��8}|jd d d … }t|dddgƒ t|| ddgƒ W 5 Q R X d S )	Nrž   r¦   Tr›   Úvar3_fillvalAndMissingValueFrF   r™   r«   )ZIRRELEVANT_VALUEr^   r!   r©   r"   r"   r#   Ú&test_read_withFillValueAndMissingValueò  s    
r®   c               	   C   sH   t tdƒ} t| dd��(}|jd d d … }t|dddgƒ W 5 Q R X d S )Nr¦   Tr›   Zvar4_missingValueFr§   r¨   r"   r"   r#   Útest_read_withMissingValueü  s    
r¯   c               	   C   sH   t tdƒ} t| dd��(}|jd d d … }t|dddgƒ W 5 Q R X d S )Nr¦   Tr›   Zvar5_fillvalNaNFr§   r¨   r"   r"   r#   Útest_read_withFillValNaN  s    
r°   c               	   C   sH   t tdƒ} t| dd��(}|jd d d … }t|dddgƒ W 5 Q R X d S )Nr¦   Tr›   Z	var6_charFr§   r¨   r"   r"   r#   Útest_read_withChar
  s    
r±   c               	   C   sT   t tdƒ} t| dd��4}|jd d d … }t|ddgddgddggƒ W 5 Q R X d S )Nr¦   Tr›   Zvar7_2dFr§   r¨   r"   r"   r#   Útest_read_with2dVar  s    
r²   c               	   C   sZ   t tdƒ} t| ddd��8}|jd d d … }t|dddgƒ t|dddgƒ W 5 Q R X d S )Nr¦   F)rœ   r1   r­   r'   rF   r™   r«   r¨   r"   r"   r#   Útest_read_withMaskAndScaleFalse  s
    
r³   )>Ú__doc__r6   Úos.pathr   r\   r   r9   r;   r€   ry   r   r   Ú
contextlibr   Únumpyr   Znumpy.testingr   r   r	   r
   r   r   Zpytestr   rI   Zscipy.ior   Zscipy._lib._tmpdirsr   Ú__file__r]   r   r   r$   r*   r-   rD   rL   rV   r[   r_   rd   rh   ro   rt   rv   r{   r„   r†   r‰   rŠ   r•   r¥   rª   r¬   r®   r¯   r°   r±   r²   r³   r"   r"   r"   r#   Ú<module>   sZ    
N1	
()	
