a
    ‡ù»jîM  ã                   @   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 | i |¤Ž}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"   ú@E:\soccer\ml_env\Lib\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   s¦  t  ¡ } �znt ¡ }t  |¡ tddƒ�}W d   ƒ n1 s>0    Y  tddƒ�"}t|ƒ d|jd< W d   ƒ n1 sz0    Y  tdƒ�6}t	|j
t ƒ t|ƒ t	|jd dƒ W d   ƒ n1 sÈ0    Y  tddƒ�4}t|j
 ƒ t|ƒ t	|jd dƒ W d   ƒ n1 �s0    Y  tddd��$}t|j
 ƒ t|ƒ W d   ƒ n1 �sZ0    Y  tddƒ�N}t|ƒ�$}t|j
 ƒ t|ƒ W d   ƒ n1 �s¤0    Y  W d   ƒ n1 �sÄ0    Y  tƒ �Ž}t�rè| td	¡ tddƒ�P}t|d
d��"}t|j
ƒ t|ƒ W d   ƒ n1 �s*0    Y  W d   ƒ n1 �sJ0    Y  W d   ƒ n1 �sj0    Y  tddƒ�v}t|dƒ�J}t|j
 ƒ t|ƒ | dd¡ | ddd¡}d|d d …< W d   ƒ n1 �sÜ0    Y  W d   ƒ n1 �sü0    Y  tdƒ�0}t|ƒ t	|jd d d … dƒ W d   ƒ n1 �sF0    Y  W t�rdtƒ  tƒ  t  | ¡ t |¡ n(t�rŒtƒ  tƒ  t  | ¡ t |¡ 0 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ÚgetcwdÚtempfileÚmkdtempÚchdirr$   r   r*   Ú_attributesr	   Zuse_mmapr   r   Úopenr   ÚfilterÚRuntimeWarningr   r   r(   r
   ÚshutilÚrmtree)ÚcwdZtmpdirr!   ÚfobjÚsupÚvarr"   r"   r#   Útest_read_write_filesB   sj    
(
.0(
Hÿ
hL
:
ú
rE   c                  C   sV  t ƒ } t| dƒ� |  ¡ }W d   ƒ n1 s.0    Y  t |ƒ}t|ƒ�}t|ƒ W d   ƒ n1 sf0    Y  t |ƒ}ttt|ddƒ t ƒ }t|ddd��}| ¡ }W d   ƒ n1 sº0    Y  t |ƒ}t|ƒ�$}t|ƒ t|jdƒ W d   ƒ n1 sþ0    Y  t |ƒ}t|dd��$}t|ƒ t|jdƒ W d   ƒ n1 �sH0    Y  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&    &
&&
*rM   c                  C   sd   t ƒ } t| dd�}d|_| dd¡ | dtjd¡}d|d	< d
|_| ¡  |  	¡ }d}t
||ƒ d S )Nr.   ©Úmoder   Údimr'   rD   )rP   iñØÿÿr   Úds|   CDF       
      dim             a         b            var                 c         d            xØñ€)r   r   r/   r   r   r   Úint16ÚcZsyncrI   r	   )Zraw_filer!   rD   ÚactualÚexpectedr"   r"   r#   Ú
test_bytes¬   s     rV   c                  C   s‚   t tƒ dd��`} |  dd¡ |  ddd¡}t| ¡ dƒ d	|_t| ¡ d	ƒ d
|_t| ¡ dƒ W d   ƒ n1 st0    Y  d S )Nr.   rN   Úxr'   rD   ZS1©rW   ó    ó   s     )r   r   r   r   r	   Z_get_encoded_fill_valueZ
_FillValue)r!   rD   r"   r"   r#   Útest_encoded_fill_valueÝ   s    r[   c               	   C   sp   t ttdƒƒD ]\} t| dƒ� W d   ƒ n1 s20    Y  t| ddd�� W d   ƒ q1 s`0    Y  qd S )Nz*.ncrF   Fr0   )r   ÚpjoinÚTEST_DATA_PATHr   )Úfnamer"   r"   r#   Útest_read_example_dataè   s
    r_   c               	   C   sŠ   t tdƒ} tƒ �X}d}| t|¡ t| ddd��}|jd }W d   ƒ n1 sP0    Y  W d   ƒ n1 sn0    Y  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 existrF   Tr0   r   r5   )
r\   r]   r   r=   r>   r   r(   rJ   ÚRuntimeErrorZassignValue)ÚfilenamerC   Úmessager!   Ztime_varr"   r"   r#   Ú$test_itemset_no_segfault_on_readonlyñ   s    
Fre   c                  C   s°   t ƒ } t| dd��H}| dd¡ | dtd¡ d|jd d< | ¡  |  ¡ }W d   ƒ n1 s`0    Y  t |ƒ} t| dd��}d|jd d< W d   ƒ n1 s¢0    Y  d S )	Nr.   rN   rW   rG   rX   r'   .r/   )	r   r$   r   r   Úfloatr(   r   rI   r   )Ústreamr!   Úcontentsr"   r"   r#   Útest_appending_issue_gh_8625  s    &ri   c                  C   s”   ddg} t  d¡jdkr"|  d¡ t  d¡jdkr<|  d¡ ttƒ dƒ�8}| dt¡ | D ]}tt	|j
d|dƒ qZW d   ƒ n1 s†0    Y  d S )	NZint64Zuint64Úinté   Zuintr.   r   r   )r   ÚdtypeÚitemsizeÚappendr   r   r   r   rJ   rK   r   )Zdtypesr!   Údtr"   r"   r#   Útest_write_invalid_dtype  s    

rp   c                  C   s’   t ƒ } t| dd��`}| dd¡ | dddg¡}d|d d …< | ¡  t|  ¡ ƒ}| ¡  t|  ¡ ƒ}W d   ƒ n1 sx0    Y  t||kƒ d S )Nr.   rN   rW   é   ÚvÚi2r'   )r   r$   r   r   r   ÚlenrI   r   )rg   r!   rr   Z
len_singleZ
len_doubler"   r"   r#   Útest_flush_rewind  s    *ru   c                  C   sx   t tƒ dd��V} |  dd¡ |  dddg¡ |  dtjdg¡ |  dt tj¡dg¡ W d   ƒ n1 sj0    Y  d S )	Nr.   rN   rW   rq   Zv1rs   Zv2Zv3)r$   r   r   r   r   rR   rl   ©r!   r"   r"   r#   Útest_dtype_specifiers+  s
    rw   c                  C   sð   t ƒ } g d¢}t| dƒ�R}d|_| dd¡ | ddd¡}||d d …< d|_| ¡  |  ¡ }W d   ƒ n1 sp0    Y  t |ƒ} t| d	ƒ�P}t|jd
ƒ |j	d }t|jdƒ t|j
dƒ t|d d … |ƒ W d   ƒ n1 sâ0    Y  d S )N)
r   gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g333333ã?gffffffæ?gš™™™™™é?gÍÌÌÌÌÌì?r.   r   Ú	float_varé
   r!   )rx   ZmetresrF   r%   s   metres)ry   )r   r   r   r   r   r   r   rI   r	   r(   r)   r   )ÚioÚitemsr!   rx   rh   r"   r"   r#   Útest_ticket_17206  s"    &
r|   c               	      sÔ   t tdƒ‰ ts€t ¡ �Z t d¡ tˆ dd��$} | jd d d … }~W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  ‡ fdd„}tƒ �&}d}| 	t
|¡ |ƒ }W d   ƒ n1 s¾0    Y  | ¡  d S )	Nr`   ÚerrorTr0   Úlatc                     sB   t ˆ dd��"} | jd d d … W  d   ƒ S 1 s40    Y  d S )NTr0   r~   )r   r(   rv   ©rc   r"   r#   ÚdoitX  s    z!test_mmaps_segfault.<locals>.doitra   )r\   r]   r   ÚwarningsÚcatch_warningsÚsimplefilterr   r(   r   r=   r>   Úsum)r!   rW   r€   rC   rd   r"   r   r#   Útest_mmaps_segfaultM  s    


>$r…   c                  C   s^   t ƒ } t| dƒ�:}| ddg ¡}|jdu s4J |jƒ‚| ¡  W d   ƒ n1 sP0    Y  d S )Nr.   Zzerodimrs   F)r   r$   r   Zisrecr   )rz   r!   rr   r"   r"   r#   Útest_zero_dimensional_vare  s
    r†   c                  C   s†   t ƒ �l d} t| dƒ}d|jd< d|jd< | ¡  t| dƒ}t|jd dƒ t|jd dƒ | ¡  W d   ƒ n1 sx0    Y  d S )	Nzg_byte_atts.ncr.   s   grailZholyZfloatsZwitchrF   s   floats©r   r   r;   r   r	   ©rc   r!   r"   r"   r#   Útest_byte_gattso  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 d   ƒ n1 sš0    Y  d S )
Nzappend_dat.ncr.   zwas hereZKilroyr/   s   was heres   ZootZnaughtyrF   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 d   ƒ n1 sÆ0    Y  tdƒD �]$}tddƒ�\}t 	|j
d j|¡|j
d _t | | f|¡|j
d |d d …d d …f< | ¡  W d   ƒ n1 �sL0    Y  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 d   ƒ qØ1 �sô0    Y  qØtdƒ�`}ttƒ� }|j
d jd  W d   ƒ n1 �s:0    Y  |j}t|jd dƒ W d   ƒ n1 �sp0    Y  W d   ƒ n1 �s�0    Y  d S )Néd   zwithRecordDimension.ncr.   r   rQ   r   rW   rX   Úy)rŒ   ZtestDatar4   )r   rW   rŒ   rG   r/   r&   r   r'   r   )r   r   r   r   r   ÚarrayÚranger   r   rn   r(   r   Úfullr	   Úcopyr)   rJ   ÚKeyErrorr;   Úvaluer   )ZdataSizer!   rW   rŒ   r4   ÚarÚexr"   r"   r#   Útest_append_recordDimension“  s>    
&((
 ÿ>

0r•   c            	   	   C   sÊ  t  ddd¡} d| d< t j | d¡}ttdƒ}t|dd	��p}|jd
 }t|j	dƒ t|j
dƒ t|jt  d¡ƒ |d d …  ¡ }~t  | ¡ d¡}t||ƒ W d   ƒ n1 s°0    Y  tƒ �ô d}t|ddd	�}| d
t|ƒ¡ | d
dd¡}d|_	d|_d|_
||d d …< | ¡  t|dd	��p}|jd
 }t|j	dƒ t|j
dƒ t|jt  d¡ƒ t  | ¡ d¡}|d d …  ¡ }~t||ƒ W d   ƒ n1 �sœ0    Y  W d   ƒ n1 �s¼0    Y  d S )Né   é   é   r‹   é   éc   zexample_2.ncT©ÚmaskandscaleÚTemperatureé'  g{®Gáz„?rG   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   rt   r   r   )	ÚtÚtmr^   r!   ÚTempÚfoundrU   ZnewfnameÚtempr"   r"   r#   Útest_maskandscale¼  s@    

(
r¦   c                  C   sZ   t tdƒ} t| dd��0}|jd d d … }t|g d¢ƒ W d   ƒ n1 sL0    Y  d S )Núexample_3_maskedvals.ncTr›   Zvar1_fillval0©FTF©r\   r]   r   r(   r-   ©r^   r!   Úvardatar"   r"   r#   Ú!test_read_withValuesNearFillValueå  s    
r¬   c                  C   sh   t tdƒ} t| dd��>}|jd d d … }t|g d¢ƒ t|g d¢ƒ W d   ƒ n1 sZ0    Y  d S )Nr§   Tr›   Zvar2_noFillval©FFF©r'   rG   r™   ©r\   r]   r   r(   r-   r	   rª   r"   r"   r#   Útest_read_withNoFillValueì  s
    
r°   c                  C   sn   d} t tdƒ}t|dd��@}|jd d d … }t|g d¢ƒ t|| ddgƒ W d   ƒ n1 s`0    Y  d S )	Nrž   r§   Tr›   Úvar3_fillvalAndMissingValue)TFFrG   r™   r¯   )ZIRRELEVANT_VALUEr^   r!   r«   r"   r"   r#   Ú&test_read_withFillValueAndMissingValueõ  s    
r²   c                  C   sZ   t tdƒ} t| dd��0}|jd d d … }t|g d¢ƒ W d   ƒ n1 sL0    Y  d S )Nr§   Tr›   Zvar4_missingValuer¨   r©   rª   r"   r"   r#   Útest_read_withMissingValueÿ  s    
r³   c                  C   sZ   t tdƒ} t| dd��0}|jd d d … }t|g d¢ƒ W d   ƒ n1 sL0    Y  d S )Nr§   Tr›   Zvar5_fillvalNaNr¨   r©   rª   r"   r"   r#   Útest_read_withFillValNaN  s    
r´   c                  C   sZ   t tdƒ} t| dd��0}|jd d d … }t|g d¢ƒ W d   ƒ n1 sL0    Y  d S )Nr§   Tr›   Z	var6_charr¨   r©   rª   r"   r"   r#   Útest_read_withChar  s    
rµ   c                  C   sh   t tdƒ} t| dd��>}|jd d d … }t|ddgddgddggƒ W d   ƒ n1 sZ0    Y  d S )Nr§   Tr›   Zvar7_2dFr©   rª   r"   r"   r#   Útest_read_with2dVar  s    
r¶   c                  C   sj   t tdƒ} t| ddd��>}|jd d d … }t|g d¢ƒ t|g d¢ƒ W d   ƒ n1 s\0    Y  d S )Nr§   F)rœ   r1   r±   r­   r®   r¯   rª   r"   r"   r#   Útest_read_withMaskAndScaleFalse  s
    
r·   )>Ú__doc__r6   Úos.pathr   r\   r   r?   r8   r�   rz   r   r   Ú
contextlibr   Únumpyr   Znumpy.testingr   r   r	   r
   r   r   Zpytestr   rJ   Zscipy.ior   Zscipy._lib._tmpdirsr   Ú__file__r]   r   r   r$   r*   r-   rE   rM   rV   r[   r_   re   ri   rp   ru   rw   r|   r…   r†   r‰   rŠ   r•   r¦   r¬   r°   r²   r³   r´   rµ   r¶   r·   r"   r"   r"   r#   Ú<module>   sZ    
N1	
))	
