U
    Cvf`                     @  s  d dl mZ d dlZd dlmZ d dlZd dlZd dl	Z	d dl
mZ d dlZd dlmZ d dlmZmZ G dd dZd	d
ddZd	d
ddZd	d
ddZd	d
ddZed	d
ddZe	jdddddgd	d
ddZd	d
ddZd%dd	d d!d"Zd	d
d#d$ZdS )&    )annotationsN)dedent)defchararray)
formatting)requires_daskrequires_netCDF4c                   @  s.  e Zd ZddddZddddZddddZddd	d
ZddddZddddZddddZ	ddddZ
ddddZddddZddddZddddZdd ZddddZejdddd d!Zddd"d#Zddd$d%Zddd&d'Zddd(d)Zeddd*d+Zd,S )-TestFormattingNonereturnc                 C  s  dt dft dd ffddt dfdt dd ffddt dfdt dd ffdt d	t d ft d
d t d ffddt d	t d fdt d
d t d ffddt d	t d fdt d
d t d ffddt dt d fdt dd t d ffdt d	t d t d ft d
d t d t d ffddt dt d fdt dd t d ffdt d	t d t d ft d
d t d t d ffg
}|D ]H\}}}tj|ddd}||ksttj|ddd}||kshtqhd S )N)   
   i)   r   r   )   r   )r      r   )   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r      )r   r   r   F)Zfrom_endT)slicer   Z_get_indexer_at_least_n_itemsAssertionError)selfcasesshapeZstart_expectedZend_expectedactual r   @/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_formatting.py!test_get_indexer_at_least_n_items   s2    "&&&z0TestFormatting.test_get_indexer_at_least_n_itemsc              	   C  sr   t dddd}dD ].}t||}|jd | }||k stqtj	t
dd t|d W 5 Q R X d S 	Nd   r   r   r   )r   r      r       zat least one item)matchr   )nparangereshaper   first_n_itemsflatallr   pytestraises
ValueErrorr   arraynr   expectedr   r   r   test_first_n_items0   s    z!TestFormatting.test_first_n_itemsc              	   C  st   t dddd}dD ]0}t||}|j| d  }||k stqtj	t
dd t|d W 5 Q R X d S r   )r$   r%   r&   r   Zlast_n_itemsr(   r)   r   r*   r+   r,   r'   r-   r   r   r   test_last_n_items:   s    z TestFormatting.test_last_n_itemsc                 C  sD   t d}d}t dg}|D ] }t||}||kstqd S )Nr    ))r   r   )r   r    )r   r   r   r   c   )r$   r%   r.   r   Z	last_itemr&   r   )r   r.   r&   r0   rresultr   r   r   test_last_itemD   s    
zTestFormatting.test_last_itemc                 C  s   t ddft ddft ddft ddft ddft d	d
ft ddfddddtddftddftddfg}|D ]\}}t|}||kst	qd S )Nz2000-01-01T12z2000-01-01T12:00:00z
2000-01-01NaTz10 days 1 hourz10 days 01:00:00z-3 daysz-3 days +00:00:00z3 hoursz0 days 03:00:00)fooz'foo')s   foozb'foo')r   1)g      ?z1.0g8EGr?z1.123g1Ղ-?z1.011gs~86@z22.22)
pdZ	TimestampZ	Timedeltar$   Zfloat16Zfloat32Zfloat64r   Zformat_itemr   r   r   itemr0   r   r   r   r   test_format_itemN   s$    
zTestFormatting.test_format_itemc              	   C  s   t dt dd dft dt dd dft dt dd	 d
ftddddgdftdddgdfdddgdfg}|D ]$\}}dt|}||kstqd S )Nr   r   Dz0 days 1 days 2 days 3 daysr   hz#00:00:00 03:00:00 06:00:00 09:00:00  msz100:00:00 00:00:00.500000 00:00:01 00:00:01.500000r7   Z0sZ1szNaT 00:00:00 00:00:01 NaTz1 day 1 hourz1 dayz0 hoursz/1 days 01:00:00 1 days 00:00:00 0 days 00:00:00r   z1 2 3 )	r$   r%   Ztimedelta64r:   Zto_timedeltajoinr   Zformat_itemsr   r;   r   r   r   test_format_itemsc   s     z TestFormatting.test_format_itemsc                 C  s.  t tdd}d}||ks"tt tdd}d}||ksDtt tdd}d}||ksftt tdd}d	}||kstt tdd
}d}||kstt tdd}d}||kstt tdd}d}||kstt tdd}d}||kstt tdd}d}||ks6tt tdd}d}||ksZtt tdd}d}||ks~tt tdd}d}||kstt tdd}d}||kstt tdd}d}||kstdd d! tdD g}t t|gd"}d#}||ks*td S )$Nr    r   ...	   z0 ... 99r   z
0 1 ... 99r!   z0 1 ... 98 99   z0 1 2 ... 98 99g      Y@   z0.0 ... ...   z0.0 ... 99.0r   r   z0 1 2g      @z0.0 ... 3.0r    r   0z0 1r      z0 1 2 3z0 ... 4rB   c                 S  s   g | ]}d qS )zhello worldr   ).0_r   r   r   
<listcomp>   s     z9TestFormatting.test_format_array_flat.<locals>.<listcomp>   z'hello world hello...)r   Zformat_array_flatr$   r%   r   rC   rangeZasarray)r   r   r0   Zlong_strr   r   r   test_format_array_flaty   s\    z%TestFormatting.test_format_array_flatc                 C  s,   t dddkstt dddks(td S )NZ
abcdefghij   zabcde...   ßr   )r   pretty_printr   r   r   r   r   test_pretty_print   s    z TestFormatting.test_pretty_printc                 C  s   t dddkstd S )NrT   r   )r   Zmaybe_truncater   rV   r   r   r   test_maybe_truncate   s    z"TestFormatting.test_maybe_truncatec              	   C  s(   d}t t t| W 5 Q R X d S )Nz2021-12-06 17:00:00 00)r*   r+   r,   r   format_timestamp)r   r0   r   r   r   +test_format_timestamp_invalid_pandas_format   s    z:TestFormatting.test_format_timestamp_invalid_pandas_formatc                 C  s\   ddl m } |ddd}d}t|}||ks2t|ddd}d}t|}||ksXtd S )	Nr   )datetimei  rI   r   z
1300-12-01i  z
2300-12-01)r[   r   rY   r   )r   r[   dater0   r5   r   r   r   #test_format_timestamp_out_of_bounds   s    

z2TestFormatting.test_format_timestamp_out_of_boundsc                 C  sv   t dd}t dd}t dd}t dd}|dks<tt|dksLt|dsZtd	|ksftd
|ksrtd S )NkeyzShort stringa  Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string Very long string z


z			z    key: Short stringP   rE   
	)r   Zsummarize_attrr   lenendswith)r   shortlongnewlinestabsr   r   r   test_attribute_repr   s    z"TestFormatting.test_attribute_reprc                 C  s   ddl m} G dd d|}ddg}||}d}tj||dd}||ksLtd|ksXtd	d
 |_tj||dd}||ks~t|jdd|kstd S )Nr   )Indexc                   @  s   e Zd Zdd Zdd ZdS )z3TestFormatting.test_index_repr.<locals>.CustomIndexc                 S  s
   || _ d S Nnames)r   rl   r   r   r   __init__   s    z<TestFormatting.test_index_repr.<locals>.CustomIndex.__init__c                 S  s   d| j  dS )NzCustomIndex(coords=)rk   rV   r   r   r   __repr__   s    z<TestFormatting.test_index_repr.<locals>.CustomIndex.__repr__N)__name__
__module____qualname__rm   ro   r   r   r   r   CustomIndex   s   rs   xyr   )	col_widthc                 S  s   dd | j dS )NzCustomIndex[z, ])rC   rl   )r   	max_widthr   r   r   <lambda>       z0TestFormatting.test_index_repr.<locals>.<lambda>(   rx   )Zxarray.core.indexesri   r   Zsummarize_indexr   _repr_inline_)r   ri   rs   Zcoord_namesindexnamenormalinliner   r   r   test_index_repr   s    zTestFormatting.test_index_reprc              	   C  s  t jtjdddgdddggddd	tjd
dgddtjdddgddd	dddd}t jtjddgdddtjd
dgdddtjddgddfdddid}tjdkrdnd}td||f }t||d}z||kst	W n, t	k
r   ||
ddkst	Y nX t dtjdddgddddi}t d	tjdddgdddggdd}td}t||d }z||ks|t	W n, t	k
r   ||
ddkst	Y nX d S )!Nr   r   r   r   r      int64dtypert   ru   abU1mdescunitsdescription)dimscoordsattrsrt   crt   labelr   kglittle<>a          Left and right DataArray objects are not identical
        Differing dimensions:
            (x: 2, y: 3) != (x: 2)
        Differing values:
        L
            array([[1, 2, 3],
                   [4, 5, 6]], dtype=int64)
        R
            array([1, 2], dtype=int64)
        Differing coordinates:
        L * x        (x) %cU1 'a' 'b'
        R * x        (x) %cU1 'a' 'c'
        Coordinates only on the left object:
          * y        (y) int64 1 2 3
        Coordinates only on the right object:
            label    (x) int64 1 2
        Differing attributes:
        L   units: m
        R   units: kg
        Attributes only on the left object:
            description: desc	identicalz, dtype=int64rJ   titleztest Variablea          Left and right Variable objects are not equal
        Differing dimensions:
            (x: 3) != (x: 2, y: 3)
        Differing values:
        L
            array([1, 2, 3], dtype=int64)
        R
            array([[1, 2, 3],
                   [4, 5, 6]], dtype=int64)equals)xr	DataArrayr$   r.   sys	byteorderr   r   Zdiff_array_reprr   replaceVariable)r   Zda_aZda_br   r0   r   vaZvbr   r   r   test_diff_array_repr   sR    

  &z#TestFormatting.test_diff_array_reprerrorc                 C  s   dt ddgi}ddi}td }t||d}||ks@tdt ddgi}td }t||d}||ksxtdt ddd	gi}td
 }t||d}||kstd S )Nattrr   r   zb            Differing attributes:
            L   attr: [0 1]
            R   attr: 1
            r   r   zh            Differing attributes:
            L   attr: [0 1]
            R   attr: [-3  5]
            r   zh            Differing attributes:
            L   attr: [0 1]
            R   attr: [0 1 2]
            )r$   r.   r   stripr   Zdiff_attrs_reprr   )r   Zattrs_aZattrs_br0   r   Zattrs_cr   r   r   test_diff_attrs_repr_with_arrayE  s&    z.TestFormatting.test_diff_attrs_repr_with_arrayc                 C  s  t jdtjdddgdddggdd	fd
tjddgdd	fdtjddgdd	tjdddgdd	ddddd}t jdd
tjddgdd	fid
tjddgdd	ddifd
tjddgdd	fdddid}tjdkrdnd}td||f }t||d}||kst	d S )Nr   r   r   r   r   r   r   r   r   rt   )var1Zvar2r   r   r   r   r   r   )	data_varsr   r   r   r   sourcer   r   r   r   r   r   r   a          Left and right Dataset objects are not identical
        Differing dimensions:
            (x: 2, y: 3) != (x: 2)
        Differing coordinates:
        L * x        (x) %cU1 'a' 'b'
        R * x        (x) %cU1 'a' 'c'
            source: 0
        Coordinates only on the left object:
          * y        (y) int64 1 2 3
        Coordinates only on the right object:
            label    (x) int64 1 2
        Differing data variables:
        L   var1     (x, y) int64 1 2 3 4 5 6
        R   var1     (x) int64 1 2
        Data variables only on the left object:
            var2     (x) int64 3 4
        Differing attributes:
        L   units: m
        R   units: kg
        Attributes only on the left object:
            description: descr   )
r   Datasetr$   r.   r   r   r   r   Zdiff_dataset_reprr   )r   Zds_aZds_br   r0   r   r   r   r   test_diff_dataset_reprk  s0     	z%TestFormatting.test_diff_dataset_reprc              	   C  s   t jdddgdddgdd}t jdgdd|d	< |d	 }t|}td
}||ksXtt||kshtt||ksxt| }||kstt j	dd( t|d	 }td}||kstW 5 Q R X d S )Nr   r   r   )r8   bar)r   r   testr   )r   r   zk        <xarray.DataArray (1, 2) (test: 1)>
        array([0])
        Dimensions without coordinates: testFZdisplay_expand_datazn            <xarray.DataArray (1, 2) (test: 1)>
            0
            Dimensions without coordinates: test)
r   r   r   r   
array_reprr   r   reprstrset_options)r   dsZds_12r   r0   r   r   r   test_array_repr  s$    
zTestFormatting.test_array_reprc              	   C  s@   t dddg}t| t jdd t| W 5 Q R X d S )Nrt   r   r   Fr   )r   r   r   r   r   )r   varr   r   r   test_array_repr_variable  s    
z'TestFormatting.test_array_repr_variablec                 C  sx   t dddg}||jd< t| t jddgdgd}||jd< t| ||jd< ||jd< t| t| d S )Nrt   r   r   r   )r   r   r   r   r   r   )r   r   dar   r   r   test_array_repr_recursive  s    






z(TestFormatting.test_array_repr_recursivec              	   C  s   t td}t|dt|ks&tt|ddks8tt|ddksJtdd lm} t |d}t|dt|ks|tt	t
}t|d W 5 Q R X dt|jkstt dd	g}t	t}t|d W 5 Q R X d
t|jkstd S )Nr   rJ   drK   z.2fz0.00z#unsupported format string passed tog?g?z#Using format_spec is only supported)r   r   r$   r.   formatr   r   Z
dask.arrayr*   r+   	TypeErrorr   valueNotImplementedError)r   r   r   excinfor   r   r   test_array_scalar_format  s    z'TestFormatting.test_array_scalar_formatN)rp   rq   rr   r   r1   r2   r6   r=   rD   rR   rW   rX   rZ   r]   rh   r   r   r*   markfilterwarningsr   r   r   r   r   r   r   r   r   r   r   r      s,   


@O
%4#r   r	   r
   c                  C  sV   G dd d} | t ddgd}td|}d}tj|dd}|||ksRtd S )	Nc                   @  sN   e Zd Zdd Zdd Zdd Zeddd	d
Zedd Zedd Z	dS )z@test_inline_variable_array_repr_custom_repr.<locals>.CustomArrayc                 S  s   || _ || _d S rj   )r   r   )r   r   r   r   r   r   rm     s    zItest_inline_variable_array_repr_custom_repr.<locals>.CustomArray.__init__c                 S  s2   d| j  d| j }t||kr.d| j  d}|S )N(z) z) ...)r   r   rb   )r   width	formattedr   r   r   r}     s    zNtest_inline_variable_array_repr_custom_repr.<locals>.CustomArray._repr_inline_c                 _  s   t S rj   )NotImplemented)r   argskwargsr   r   r   __array_function__  s    zStest_inline_variable_array_repr_custom_repr.<locals>.CustomArray.__array_function__ztuple[int, ...]r
   c                 S  s   | j jS rj   )r   r   rV   r   r   r   r     s    zFtest_inline_variable_array_repr_custom_repr.<locals>.CustomArray.shapec                 S  s   | j jS rj   )r   r   rV   r   r   r   r     s    zFtest_inline_variable_array_repr_custom_repr.<locals>.CustomArray.dtypec                 S  s   | j jS rj   )r   ndimrV   r   r   r   r     s    zEtest_inline_variable_array_repr_custom_repr.<locals>.CustomArray.ndimN)
rp   rq   rr   rm   r}   r   propertyr   r   r   r   r   r   r   CustomArray  s   
r   r   r{   r   rt   r   r|   )r$   r.   r   r   r   Zinline_variable_array_reprr}   r   )r   r   variablerx   r   r   r   r   +test_inline_variable_array_repr_custom_repr  s    r   c               	   C  sN   t  } tjdd  ttt ddk s0tW 5 Q R X t  | ksJtd S )Nr   )	thresholdr@   r"   )r$   Zget_printoptionsr   Zset_numpy_optionsrb   r   r%   r   )Zoriginal_optionsr   r   r   test_set_numpy_options  s    $r   c               	   C  s   t jdt jddt jdddt jddddt jdddg} | D ]$}t|d	d }|d
k sJtqJt d}dt|ksttj	dd dt|kstW 5 Q R X d S )Nr@   r   r   r   rG   r   r    r   r`      rE   )Zdisplay_values_threshold)
r$   randomrandnr   Zshort_numpy_reprcountr   r%   r   r   )r   r.   Z	num_linesZarray2r   r   r   test_short_numpy_repr!  s    


r   c                  C  s6   t tjddd} t|  }t|dk s2td S )Nr    r   r   2   )	r   r   r$   r   r   r   
splitlinesrb   r   )r   r5   r   r   r   test_large_array_repr_length7  s    r   c              
   C  s   t jtjdtjddd}|j| d dd t | d ^}t jdd	F t|}t	d
}||ksft
| }| }t	d}||kst
W 5 Q R X W 5 Q R X d S )Ni,  r   r   r   ztest.ncZnetcdf4)ZengineFr   zy        <xarray.DataArray (test: 300)>
        [300 values with dtype=int64]
        Dimensions without coordinates: testz        <xarray.DataArray (test: 300)>
        0 1 2 3 4 5 6 7 8 9 10 11 12 ... 288 289 290 291 292 293 294 295 296 297 298 299
        Dimensions without coordinates: test)r   r   r$   r%   r   Z	to_netcdfZopen_dataarrayr   r   r   r   Zcomputero   )Ztmp_pathZarr_to_storearrr   r0   Z
arr_loadedr   r   r   test_repr_file_collapsed?  s     r   z display_max_rows, n_vars, n_attr)r   r{   r   )#   r{   r   )rH   r{   r   )r   r{   r   c                   s$  d t  td|t}t dtd|t}t dtd|t}dd |D }dd |D }t }t|| D ]4\}	}
t	j
|	tdd	g|
d gt|
gd
||	< qt	|}||_t	j| d t|d} fdd|D }t|}t| |}||kstt|jd} fdd|D }t|}||ksRtt|jd}dd |D }t|}||kstW 5 Q R X t	j| ddddv t|}t|j}td|}tj||d | d}d| d| d| d| d| d}t|}||kstW 5 Q R X d S )N	long_namer   Zattr_coordc                 S  s   i | ]
}|d qS )r   r   rM   kr   r   r   
<dictcomp>f  s      z&test__mapping_repr.<locals>.<dictcomp>c                 S  s   i | ]}|t d dgqS )r   r   )r$   r.   )rM   _cr   r   r   r   g  s      r   r   )r   datar   r   )display_max_rowsr`   c                   s   g | ]} |kr|qS r   r   rM   vr   r   r   rO   w  s      z&test__mapping_repr.<locals>.<listcomp>c                   s   g | ]} |kr|qS r   r   r   r   r   r   rO   ~  s      c                 S  s   g | ]}d |kr|qS )r   r   r   r   r   r   rO     s      F)r   Zdisplay_expand_coordsZdisplay_expand_data_varsZdisplay_expand_attrszDimensions:r   rv   Zmax_rowsz<xarray.Dataset>
r   z)
Coordinates: (z)
Data variables: (z)
Attributes: (rn   )r   addr$   r%   Zastyper   dictzipitemsr   r   r.   r   r   r   r   dataset_reprsplitrb   minr   Zdata_vars_reprr   Zcoords_reprr   Z_calculate_col_width	variablesrU   Zdim_summary_limitedr   )r   Zn_varsZn_attrr   r   r   r   r   r   r   r   r   summaryZlen_summaryZdata_vars_print_sizer   rv   Z
dims_startZdims_valuesr0   r   r   r   test__mapping_repr]  sr    


  r   c                  C  sf   t dddddgfi} | | jd< t|  t dddddgfi}|| jd< | |jd< t| d S )	Nr   rt   r   r   r   r   r   ru   )r   r   r   r   r   )r   Zds2r   r   r   test__mapping_repr_recursive  s    



r   r    int)
n_elementsr   c                 C  sb   d}t |}d}dd dd t| D  D }tjjj|t|dd}|| }||ks^t	d S )	Na      Dimensions without coordinates: dim_0: 3, dim_1: 3, dim_2: 3, dim_3: 3,
                                    dim_4: 3, dim_5: 3, dim_6: 3, dim_7: 3,
                                    dim_8: 3, dim_9: 3, dim_10: 3, dim_11: 3,
                                    dim_12: 3, dim_13: 3, dim_14: 3, dim_15: 3,
                                    dim_16: 3, dim_17: 3, dim_18: 3, dim_19: 3,
                                    dim_20: 3, dim_21: 3, dim_22: 3, dim_23: 3,
                                    ...
                                    dim_76: 3, dim_77: 3, dim_78: 3, dim_79: 3,
                                    dim_80: 3, dim_81: 3, dim_82: 3, dim_83: 3,
                                    dim_84: 3, dim_85: 3, dim_86: 3, dim_87: 3,
                                    dim_88: 3, dim_89: 3, dim_90: 3, dim_91: 3,
                                    dim_92: 3, dim_93: 3, dim_94: 3, dim_95: 3,
                                    dim_96: 3, dim_97: 3, dim_98: 3, dim_99: 3z Dimensions without coordinates: c                 S  s   g | ]\}}| d | qS )z: r   )rM   r   r   r   r   r   rO     s    z+test__element_formatter.<locals>.<listcomp>c                 S  s   i | ]}d | dqS )Zdim_r   r   r   r   r   r   r     s      z+test__element_formatter.<locals>.<dictcomp>rI   r   )
r   r$   r%   r   r   corer   Z_element_formatterrb   r   )r   r0   Zintroelementsvaluesr   r   r   r   test__element_formatter  s      r   c                  C  sL   ddl m}  G dd d| }|tddg}t|}|  |  d S )Nr   )LazilyIndexedArrayc                   @  s   e Zd ZdddZdS )zEtest_lazy_array_wont_compute.<locals>.LazilyIndexedArrayNotComputableNc                 S  s   t dd S )Nz%Computing this array is not possible.)r   )r   r   r   r   r   	__array__  s    zOtest_lazy_array_wont_compute.<locals>.LazilyIndexedArrayNotComputable.__array__)N)rp   rq   rr   r   r   r   r   r   LazilyIndexedArrayNotComputable  s   r   r   r   )Zxarray.core.indexingr   r$   r.   r   r   ro   Z_repr_html_)r   r   r   r   r   r   r   test_lazy_array_wont_compute  s    
r   )r    )
__future__r   r   textwrapr   Znumpyr$   Zpandasr:   r*   Z
numpy.corer   Zxarrayr   Zxarray.corer   Zxarray.testsr   r   r   r   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   <module>   s6      g%
>