o
    ŀgH                  	   @   s   d dl mZmZ d dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ G dd dZejdedd	d	ed	ed
ed	dgdd ZdS )    )OrderedDictdefaultdict)datetimeN)	NA	DataFrameIndexInterval
MultiIndexPeriodSeries	Timedelta	Timestampc                   @   sT  e Zd Zdd Zdd Zdd Zejdg dd	d
 Z	ejde
eeegdd Zejdeeg gdd Zdd Zejdejddddgddgdfddddddddfgdd Zejdddd  fd!d"d  fdd#d  fd$d%d  fd&d'd  fgd(d) Zd*d+ Zejd,e
d-d.d/dd0d/dd1d/d2feed3d-d.d/fd-dd0d/fddd1d/fgfee
ee
d-d.d/dd0d/dd1d/d2fgd4d5 Zd6d7 Zd8d9 Zejd:g d;efed<d-d-ed=dded>ddgegg d?egg d@egg dAegfdBdC ZejdDe dege!dEege"dFege#dGege$dHegfdIdJ Z%dKdL Z&ejd&dMe'dNdOge'dNdOgdPdQe()dRdSge(j)dRdSgdTdUgdVgejdWdXdYge'dXdYge'dXdYgdZdQe()d[d\ge(j)d[d\gd]d^gdVgd_d` Z*ejdg daejdbe!d-d-e!dge"d.d0e"d1ge"d.de!dge"d.dce!dge"d.dcge!dge"d.dde!dgdeeeegeeegeeegeeegeeegee+egdefg d@g dfdReeegeeegdRfg dgg dhdReeegeeegdRffdidj Z,ejdg dkdldm Z-ejdnd$dodpgd-dgddqggdrfdsdodpgd-dgddqggdMgdtfgdudv Z.ejdnddcd-dMdifddcd-dMgifd$d3d-gdcgd-gdMggdwfdsd3d-gdcgd-gdMggdMgdMgdxfd!dcd-idcdMigfd&dcd-idcdMidfgdydz Z/d{d| Z0d}d~ Z1dMS )TestDataFrameToDictc           
      C   s\  t d}t||g||gd}t||gddgd}||d||dg}|dd|ddg}|jdd|ks8J |jdd|ksBJ t||gddt||gd	dd}t||gddtddgd	dd}t|jd
d| t|jd
d| ddg||g||ggdd	gd}ddg|dg|dggdd	gd}	t|jdd| t|jdd|	 d S )N20130101AB      recordsorientr   namer   seriesr   )indexdatacolumnssplit)r   r   to_dictr   tmassert_dict_equal)
selftsmp	test_datatest_data_mixedexpected_recordsexpected_records_mixedexpected_seriesexpected_series_mixedexpected_splitexpected_split_mixed r,   [/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/frame/methods/test_to_dict.pytest_to_dict_timestamp   s:   z*TestDataFrameToDict.test_to_dict_timestampc                 C   sb   t ddgddgdddgd}d}tjt|d	 |jd
d W d    d S 1 s*w   Y  d S )Nr   r   g      ?g      ?abr   r   z1DataFrame index must be unique for orient='index'matchr   r   r   pytestraises
ValueErrorr   r"   dfmsgr,   r,   r-   /test_to_dict_index_not_unique_with_index_orientG   s
   "zCTestDataFrameToDict.test_to_dict_index_not_unique_with_index_orientc                 C   sT   t dddgi}d}tjt|d |jdd W d    d S 1 s#w   Y  d S )Nr   r   r   z orient 'xinvalid' not understoodr3   xinvalidr   r5   r9   r,   r,   r-   test_to_dict_invalid_orientO   s
   "z/TestDataFrameToDict.test_to_dict_invalid_orientr   )dlrspsic                 C   sP   t dddgi}tjtdd |j|d W d    d S 1 s!w   Y  d S )Nr   r   r   znot understoodr3   r   r5   )r"   r   r:   r,   r,   r-    test_to_dict_short_orient_raisesU   s   "z4TestDataFrameToDict.test_to_dict_short_orient_raisesmappingc                 C   sv  dddddddd}t |j|d	}| D ]\}}| D ]\}}||| | ks.J q qt |jd
|d	}| D ]\}}| D ]\}}||| t|d  ksWJ qEq=t |jd|d	}| D ]\}}| D ]\}}||| | ks|J qnqft |jd|d	}ddgg dddgddgtjdggd}t|| t |jd|d	}ddddddtjddg}	t|t	sJ t
|dksJ t||	D ]
\}
}t|
| qt |d}| D ]\}}| D ]\}}||| | ksJ qqt |}||jd  |d< |d}| }||jd  |d< | D ]\}}| D ]\}}||| | ks5J q&qd S )Nr   r   )12rG   rH   3)rG   rH   rI   r   intolistr   r   r   r         ?       @)r   r   r   r      r   r   duped)r   r   itemsintnpnanr    r!   
isinstancerL   lenzipr   copy)r"   rF   r$   recons_datakvk2v2r*   r&   leftrightr:   	comp_datar,   r,   r-   test_to_dict\   s\   

z TestDataFrameToDict.test_to_dictc                 C   sd   t tjdd}dddg}tjt|d |j	|d W d    d S 1 s+w   Y  d S )Nr   )rO   rO   |z unsupported type: <class 'list'>z1to_dict\(\) only accepts initialized defaultdictsr3   rJ   )
r   rS   randomdefault_rngstandard_normaljoinr6   r7   	TypeErrorr   )r"   rF   r:   r;   r,   r,   r-   test_to_dict_errors   s   "z'TestDataFrameToDict.test_to_dict_errorsc                 C   sN   t g dgg dd}tt |  W d    d S 1 s w   Y  d S )Nr   r   rO   )r0   r0   r1   r   )r   r    assert_produces_warningUserWarningr   )r"   r:   r,   r,   r-   test_to_dict_not_unique_warning   s   
"z3TestDataFrameToDict.test_to_dict_not_unique_warningzignore::UserWarningzorient,expectedrL   r      rO      r   dict)r   r   c                 C   s6   t g dg dgg dd}||}||ksJ d S )Nri   )   rn   ro   )r   r   r   rj   r   r   r"   r   expectedr:   resultr,   r,   r-   test_to_dict_not_unique   s   
z+TestDataFrameToDict.test_to_dict_not_uniquezorient,item_getterc                 C      | | | S Nr,   r?   colidxr,   r,   r-   <lambda>       zTestDataFrameToDict.<lambda>r   c                 C      | | | S rx   r,   ry   r,   r,   r-   r|      r}   c                 C   rw   rx   r,   ry   r,   r,   r-   r|      r}   r   c                 C   s   | d | | d  | S )Nr   r   r2   ry   r,   r,   r-   r|          r   c                 C   r~   rx   r,   ry   r,   r,   r-   r|      r}   c                 C   sR   t ddgddgd}|j|d}t||ddtsJ t||d	dts'J d S )
Nr   r   g?g?r/   r   r0   r   r1   )r   r   rU   rR   float)r"   r   item_getterr:   ru   r,   r,   r-   test_to_dict_box_scalars   s   z,TestDataFrameToDict.test_to_dict_box_scalarsc                 C   s   t dddddddtjdft dddd	d
ddtjdfg}tt|dgd}|jdd}dtdtjdidtdtjdig}t|d |d  t|d |d  d S )Ni           5   r   iYX )tzinfo   ro      ir  r?   rj   r   r   z2017-11-18 21:53:00.219225+0000)tzz2017-11-18 22:06:30.061810+0000r   )	r   pytzutcr   rL   r   r   r    r!   )r"   r   r:   ru   rt   r,   r,   r-   test_to_dict_tz   s   z#TestDataFrameToDict.test_to_dict_tzzinto, expectedr   rM   int_col	float_colrN         @)r   r   r   r   c                 C   s`   t g dg dd}|jd|d}ddg}t j|dd| }t j|dd| }t|| d S )	Nri   rM   rN   r   r   r   )r   rK   r   r   r   )r   r   	from_dictr    assert_frame_equal)r"   rK   rt   r:   ru   colsr,   r,   r-   test_to_dict_index_dtypes   s   'z-TestDataFrameToDict.test_to_dict_index_dtypesc                 C   sF   t dd tdD }t|dd  }t|j}||ks!J d S )Nc                 S   s   i | ]}t ||gqS r,   )str.0rD   r,   r,   r-   
<dictcomp>  s    zBTestDataFrameToDict.test_to_dict_numeric_names.<locals>.<dictcomp>rn   r   r   )r   rangesetr   keysr   r"   r:   ru   rt   r,   r,   r-   test_to_dict_numeric_names  s   
z.TestDataFrameToDict.test_to_dict_numeric_namesc                 C   sF   t dd tdD }|dd }dd tdD }||ks!J d S )Nc                 S   s   i | ]
}d |d|gqS A_r?   r,   r   r,   r,   r-   r     s    z9TestDataFrameToDict.test_to_dict_wide.<locals>.<dictcomp>   r   r   c                 S   s   i | ]	}d |d|qS r   r,   r   r,   r,   r-   r     r   )r   r   r   r   r,   r,   r-   test_to_dict_wide  s   z%TestDataFrameToDict.test_to_dict_widez
data,dtype)TTFi  i    r   ri   )XYZc                    s6   t d|i}|jdd}t fdd|D sJ d S )Nr0   r   r   c                 3   s     | ]}t |d   u V  qdS )r0   N)type)r   recorddtyper,   r-   	<genexpr>4  s    z@TestDataFrameToDict.test_to_dict_orient_dtype.<locals>.<genexpr>)r   r   all)r"   r   r   r:   r?   r,   r   r-   test_to_dict_orient_dtype  s   z-TestDataFrameToDict.test_to_dict_orient_dtypezdata,expected_dtypei皙?Tz
2005-02-25c                 C   s>   t d|idgd}|jdd}t|d d }||u sJ d S )Nr0   r   r2   r   r   )r   r   r   )r"   r   expected_dtyper:   r?   ru   r,   r,   r-   ,test_to_dict_scalar_constructor_orient_dtype6  s   z@TestDataFrameToDict.test_to_dict_scalar_constructor_orient_dtypec                 C   s>   t dgdgd}| d}ddddg}||ksJ d S )NrM   g      "@r/   r   r   )r   r0   r1   )r   reset_indexr   r   r,   r,   r-    test_to_dict_mixed_numeric_frameH  s   z4TestDataFrameToDict.test_to_dict_mixed_numeric_frameNaabbccr   r/   )r0   cn1n2)namesr   xyz)r   r   )r   r   z1z2c                 C   sB   t jddgddgg||d}t j|jdddd}t|| d S )Nr   rO   r   rq   )r   r   tightr   )r   from_recordsr   r   r    r   )r"   r   r   r:   	roundtripr,   r,   r-   test_to_dict_orient_tightO  s   z-TestDataFrameToDict.test_to_dict_orient_tight)rp   rL   r   r   r   r   zdata,expected_typesr0   )r0   )r0   r1   r   r?   ef)r   g@ffffff
@)r   hellorO   )r   worldr   c           	         s   t |}|| |dkrdd   D }n9|dkr%dd   D }n+|dv r5 fdd d D }n|d	krCd
d t D }n|dkrPdd   D }|D ]\}}}||| | ksaJ t||| | u smJ qRd S )Nrp   c                 s   s0    | ]\}}|  D ]
\}}|||fV  q
qd S rx   rQ   )r   keyindex_value_maprD   valuer,   r,   r-   r         zHTestDataFrameToDict.test_to_dict_returns_native_types.<locals>.<genexpr>rL   c                 s   s0    | ]\}}t |D ]
\}}|||fV  q
qd S rx   	enumerate)r   r   valuesrD   r   r,   r,   r-   r     r   >   r   r   c                 3   s<    | ]}t  d  D ]\}}|| d | | fV  q
qdS )r   r   Nr   )r   rD   jr   ru   r,   r-   r     s    
r   r   c                 s   0    | ]\}}|  D ]
\}}|||fV  q
qd S rx   r   r   rD   r   r   r   r,   r,   r-   r     r   c                 s   r   rx   r   r   r,   r,   r-   r     r   )r   r   rQ   r   r   )	r"   r   r   expected_typesr:   assertion_iteratorrD   r   r   r,   r   r-   !test_to_dict_returns_native_typesm  s4   2

z5TestDataFrameToDict.test_to_dict_returns_native_types)rp   rL   r   r   r   c                 C   sd   t ddgddgdddgd}d	}tjt|d
 |j|dd W d    d S 1 s+w   Y  d S )Nr   r   rO   rq   col1col2row1row2r2   z?'index=False' is only valid when 'orient' is 'split' or 'tight'r3   Fr   r   r5   )r"   r   r:   r;   r,   r,   r-   test_to_dict_index_false_error  s
   "z2TestDataFrameToDict.test_to_dict_index_false_errorzorient, expectedr   r   rq   )r   r   r   )r   r   column_namesc                 C   s<   t ddgddgdddgd}|j|d	d
}t|| d S )Nr   r   rO   rq   r   r   r   r2   Fr   )r   r   r    r!   rs   r,   r,   r-   test_to_dict_index_false  s   z,TestDataFrameToDict.test_to_dict_index_false)r   r   r   )r   r   r   index_namesr   c                 C   s0   t ddtgidd}|j|d}||ksJ d S )Nr0   r   Int64r   r   )r   r   r   rs   r,   r,   r-   test_to_dict_na_to_none  s   z+TestDataFrameToDict.test_to_dict_na_to_nonec                 C   s|   t tddgdddd}|jdd}t|d d	 tsJ t tdtgdddd}|jdd}t|d d	 ts<J d S )
Nr   r   r   r   )r0   r   r   r   r   r0   )r   r   r   rU   rR   r   )r"   r:   ru   r,   r,   r-   !test_to_dict_masked_native_python  s   z5TestDataFrameToDict.test_to_dict_masked_native_pythonc                 C   sT   t dg di}d}tjt|d |di  W d    d S 1 s#w   Y  d S )Nr0   ri   zpStarting with pandas version 3.0 all arguments of to_dict except for the argument 'orient' will be keyword-only.r3   r   )r   r    rk   FutureWarningr   r9   r,   r,   r-   !test_to_dict_pos_args_deprecation  s   "z5TestDataFrameToDict.test_to_dict_pos_args_deprecation)2__name__
__module____qualname__r.   r<   r>   r6   markparametrizerE   rp   r   rL   r   ra   rh   rm   filterwarningsrv   r   r   r   r   r   boolr   r   r   rR   r   r   rS   uint64int64float64bool_
datetime64r   r   r   r	   from_tuplesr   tupler   r   r   r   r   r   r,   r,   r,   r-   r      sb   -

;









	
"














	+(





r   valr   r   2020r   c                 C   s4   t d| gi}|jdd}d| gi}||ksJ d S )Nr0   rL   r   rr   )r   r:   ru   rt   r,   r,   r-   test_to_dict_list_pd_scalars  s   
r   )collectionsr   r   r   numpyrS   r6   r   pandasr   r   r   r   r	   r
   r   r   r   pandas._testing_testingr    r   r   r   r   r,   r,   r,   r-   <module>   s    ,   y"