o
    ?HhL                     @   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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j"j#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% Z0d&d' Z1d(d) Z2d*d+ Z3d,d- Z4d.d/ Z5d0d1 Z6d2d3 Z7d4d5 Z8d6d7 Z9d8d9 Z:d:d; Z;d<d= Z<d>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   sb    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nparangeunitsflushclose)argskwargsfr    r#   Z/home/air/sanwanet/gpt-api/venv/lib/python3.10/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   )	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   magetmaskarrayr	   )arrexpected_maskmaskr#   r#   r$   assert_mask_matches2   s   r2   c               
   C   s  t  } zt }t | tdd}W d    n1 sw   Y  tdd}t| d|jd< W d    n1 s=w   Y  td}t	|j
t  t| t	|jd d W d    n1 sdw   Y  tdd}t|j
  t| t	|jd d W d    n1 sw   Y  tddd}t|j
  t| W d    n1 sw   Y  tdd&}t|}t|j
  t| W d    n1 sw   Y  W d    n1 sw   Y  t F}tr|td	 tdd(}t|d
d}t|j
 t| W d    n	1 sw   Y  W d    n	1 s w   Y  W d    n	1 s0w   Y  tdd;}t|d%}t|j
  t| |dd |ddd}d|d d < W d    n	1 siw   Y  W d    n	1 syw   Y  td}t| t	|jd d d  d W d    n	1 sw   Y  W trt  t  t |  t| d S trt  t  t |  t| w )Nz	simple.ncwar(   	appendRanFmmaprbz2Cannot close a netcdf_file opened with mmap=True.*Tzr+bapp_dimapp_vari)r9   *   )osgetcwdtempfilemkdtempchdirr%   r   r,   _attributesr	   use_mmapr   r   openr   filterRuntimeWarningr   r   r)   r
   shutilrmtree)cwdtmpdirr"   fobjsupvarr#   r#   r$   test_read_write_filesF   s   









	

rN   c                  C   sV  t  } t| d |  }W d    n1 sw   Y  t |}t|}t| W d    n1 s3w   Y  t |}ttt|dd t  }t|ddd}| }W d    n1 s]w   Y  t |}t|}t| t|jd W d    n1 sw   Y  t |}t|dd}t| t|jd W d    d S 1 sw   Y  d S )Nr3   rT   )version)	r   r%   getvaluer   r,   assert_raises
ValueErrorr	   version_byte)eg_sio1str_valeg_sio2f2eg_sio3	eg_sio_64f_64r#   r#   r$   test_read_write_sio   s0   




"r]   c                  C   sd   t  } t| dd}d|_|dd |dtjd}d|d	< d
|_|  | 	 }d}t
|| d S )Nr3   moder   dimr(   rM   )r`   ir   ds|   CDF       
      dim             a         b            var                 c         d            x)r   r   r4   r   r   r   int16csyncrR   r	   )raw_filer"   rM   actualexpectedr#   r#   r$   
test_bytes   s    rh   c                  C   s   t t dd1} | dd | ddd}t| d d	|_t| d	 d
|_t| d W d    d S 1 s;w   Y  d S )Nr3   r^   xr(   rM   S1ri          s     )r   r   r   r   r	   _get_encoded_fill_value
_FillValue)r"   rM   r#   r#   r$   test_encoded_fill_value   s   "rp   c               	   C   sp   t ttdD ].} t| d W d    n1 sw   Y  t| ddd W d    n1 s0w   Y  qd S )Nz*.ncrO   Fr6   )r   pjoinTEST_DATA_PATHr   )fnamer#   r#   r$   test_read_example_data   s   rt   c               	   C   s   t td} t ,}d}|t| t| ddd}|jd }W d    n1 s(w   Y  W d    n1 s7w   Y  tt|j	d d S )Nexample_1.ncsCannot close a netcdf_file opened with mmap=True, when netcdf_variables or arrays referring to its data still existrO   Tr6   r   r<   )
rq   rr   r   rE   rF   r   r)   rS   RuntimeErrorassignValue)filenamerL   messager"   time_varr#   r#   r$   $test_itemset_no_segfault_on_readonly   s   
r|   c                  C   s   t  } t| dd$}|dd |dtd d|jd d< |  |  }W d    n1 s0w   Y  t |} t| dd}d|jd d< W d    d S 1 sRw   Y  d S )	Nr3   r^   ri   rP   rk   r(   .r4   )	r   r%   r   r   floatr)   r   rR   r   )streamr"   contentsr#   r#   r$   test_appending_issue_gh_8625  s   
"r   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 q-W d    d S 1 sDw   Y  d S )	Nint64uint64int   uintr3   r   r   )r   dtypeitemsizeappendr   r   r   r   rS   rT   r   )dtypesr"   dtr#   r#   r$   test_write_invalid_dtype  s   

"r   c                  C   s   t  } t| dd0}|dd |dddg}d|d d < |  t|  }|  t|  }W d    n1 s<w   Y  t||k d S )Nr3   r^   ri      vi2r(   )r   r%   r   r   r   lenrR   r   )r~   r"   r   
len_single
len_doubler#   r#   r$   test_flush_rewind!  s   	r   c                  C   sz   t t dd,} | dd | dddg | dtjdg | dttjdg W d    d S 1 s6w   Y  d S )	Nr3   r^   ri   r   v1r   v2v3)r%   r   r   r   r   rb   r   r"   r#   r#   r$   test_dtype_specifiers/  s   "r   c                  C   s   t  } g d}t| d)}d|_|dd |ddd}||d d < d|_|  |  }W d    n1 s8w   Y  t |} t| d	)}t|jd
 |j	d }t|jd t|j
d t|d d  | W d    d S 1 srw   Y  d S )N)
r   g?g?g333333?g?g      ?g333333?gffffff?g?g?r3   r   	float_var
   r"   )r   metresrO   r&   s   metres)r   )r   r   r   r   r   r   r   rR   r	   r)   r*   r   )ioitemsr"   r   r   r#   r#   r$   test_ticket_1720:  s&   
	
"r   c               	      s   t td ts@t - td t dd} | jd d d  }~W d    n1 s,w   Y  W d    n1 s;w   Y   fdd}t }d}|	t
| | }W d    n1 s_w   Y  |  d S )	Nru   errorTr6   latc                     sB   t  dd} | jd d d  W  d    S 1 sw   Y  d S )NTr6   r   )r   r)   r   ry   r#   r$   doit\  s   $z!test_mmaps_segfault.<locals>.doitrv   )rq   rr   r   warningscatch_warningssimplefilterr   r)   r   rE   rF   sum)r"   ri   r   rL   rz   r#   r   r$   test_mmaps_segfaultQ  s"   


r   c                  C   s`   t  } t| d}|ddg }|jdu sJ |j|  W d    d S 1 s)w   Y  d S )Nr3   zerodimr   F)r   r%   r   isrecr   )r   r"   r   r#   r#   r$   test_zero_dimensional_vari  s   
"r   c                  C   s   t  7 d} t| d}d|jd< d|jd< |  t| d}t|jd d t|jd d |  W d    d S 1 s=w   Y  d S )	Nzg_byte_atts.ncr3   s   grailholyfloatswitchrO   s   floatsr   r   rB   r   r	   ry   r"   r#   r#   r$   test_byte_gattss  s   




"r   c                  C   s   t  H 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    d S 1 sNw   Y  d S )
Nzappend_dat.ncr3   zwas hereKilroyr4   s   was heres   ZootnaughtyrO   r   r   r#   r#   r$   test_open_append  s   





"r   c               
   C   s  d} t  D tddT}|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 scw   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 sw   Y  tdG}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    n1 sw   Y  qltd0}tt}|j
d jd  W d    n	1 sw   Y  |j}t|jd d W d    n1 s5w   Y  W d    d S W d    d S 1 sNw   Y  d S )Nd   zwithRecordDimension.ncr3   r   ra   r   ri   rk   y)r   testDatar;   )r   ri   r   rP   r4   r'   r   r(   r   )r   r   r   r   r   arrayranger   r   r   r)   r   fullr	   copyr*   rS   KeyErrorrB   valuer    )dataSizer"   ri   r   r;   arexr#   r#   r$   test_append_recordDimension  sP   

(

 
	
  $r   c            	   	   C   s  t ddd} d| d< t j| d}ttd}t|dd	8}|jd
 }t|j	d t|j
d t|jt d |d d   }~t | d}t|| W d    n1 sXw   Y  t  d}t|ddd	}|d
t| |d
dd}d|_	d|_d|_
||d d < |  t|dd	8}|jd
 }t|j	d t|j
d t|jt d t | d}|d d   }~t|| W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N         r      c   zexample_2.ncTmaskandscaleTemperature'  g{Gz?rP   zms.ncr3   r;   )r   )r   linspacer-   masked_greaterrq   rr   r   r)   r	   missing_value
add_offsetscale_factorfloat32
compressedroundr   r   r   r   r   r   )	ttmrs   r"   Tempfoundrg   newfnametempr#   r#   r$   test_maskandscale  sJ   



"r   c                  C   \   t td} t| dd}|jd d d  }t|g d W d    d S 1 s'w   Y  d S )Nexample_3_maskedvals.ncTr   var1_fillval0FTFrq   rr   r   r)   r2   rs   r"   vardatar#   r#   r$   !test_read_withValuesNearFillValue  s
   
"r   c                  C   sj   t td} t| dd }|jd d d  }t|g d t|g d W d    d S 1 s.w   Y  d S )Nr   Tr   var2_noFillvalFFFr(   rP   r   rq   rr   r   r)   r2   r	   r   r#   r#   r$   test_read_withNoFillValue  s   
"r   c                  C   sp   d} t td}t|dd!}|jd d d  }t|g d t|| ddg W d    d S 1 s1w   Y  d S )	Nr   r   Tr   var3_fillvalAndMissingValue)TFFrP   r   r   )IRRELEVANT_VALUErs   r"   r   r#   r#   r$   &test_read_withFillValueAndMissingValue  s   
"r   c                  C   r   )Nr   Tr   var4_missingValuer   r   r   r#   r#   r$   test_read_withMissingValue  s
   
"r   c                  C   r   )Nr   Tr   var5_fillvalNaNr   r   r   r#   r#   r$   test_read_withFillValNaN  
   
"r   c                  C   r   )Nr   Tr   	var6_charr   r   r   r#   r#   r$   test_read_withChar  r   r   c                  C   sj   t td} t| dd }|jd d d  }t|ddgddgddgg W d    d S 1 s.w   Y  d S )Nr   Tr   var7_2dFr   r   r#   r#   r$   test_read_with2dVar  s
   
"r   c                  C   sl   t td} t| ddd }|jd d d  }t|g d t|g d W d    d S 1 s/w   Y  d S )Nr   F)r   r7   r   r   r   r   r   r#   r#   r$   test_read_withMaskAndScaleFalse  s   
"r   )A__doc__r=   os.pathr   rq   r   rG   r?   r   r   r   r   
contextlibr   numpyr   numpy.testingr   r   r	   r
   r   r   pytestr   rS   scipy.ior   scipy._lib._tmpdirsr   __file__rr   r   r   markthread_unsafe
pytestmarkr%   r,   r2   rN   r]   rh   rp   rt   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   s`     
N1	
))	
