o
    Ehe                     @  s  d Z ddlmZ ddlmZ ddlmZmZmZmZm	Z	 ddl
mZ ddlZddlZddlmZmZ ddlmZmZ ddlZdd	lmZ ddlZddlZdd
lmZmZ ddlmZ ddlm   m!Z" ddl#m$Z$m%Z% ddl&Z'ddl&m(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= erddl>m?Z?m@Z@ zddlAZBW n eCy   dZDY nw [BdZDddlEZEzeEFd W n eEjGy   dZEY nw dddZHdddZIdd d!ZJejKjLgZMe=ejNe=d"kreMOejKjP ejQjRd#deSeMd$ ejQTd# d%U D ]ZVeWe'jXjYeVZZe[eZej\eZe]d&d'e^ d( qd)U D ]"ZVeWe'jXjYeVZZe[eZej\eZe]d*d+e^ ej]d,d-d.d/ q:d0U D ]"ZVeWe'jXjYeVZZe[eZej\eZe]d1d2e^ ej]d,d-d.d3 qaej_dd4dd5d6Z`ej_dd4dd7d8Zaej_g d9d:d; d<d=d> ZbebZcej_d,d?gd@d; d<dAdB Zdej_g dCdDdEdF Zeej_g dCdDdGdH Zfej_ddgdDdIdJ Zgej_g dKdDdLdM Zhej_g dNdDdOdP Ziej_g dQdDdRdS Zjej_g dQdDdTdU Zkej_ddVdWdXdYdZejld[e"md\d]gdDd^d_ Znej_dVdWdXdYdZejld[e"md\d]gdDd`da Zoej_ddgdDdbdc Zpej_g dddDdedf Zqej_dgdhgdDdidj Zrej_e6jsdkd; d<dldm ZtetZuej_dejve'jwgdDdndo ZxexZyej_e6jzdpd; d<dqdr Z{e{Z|ej_e)e.gdDdsdt Z}ej_e:e.gdudvgd<dwdx Z~e~Zej_e:e.e'jgg dyd<dzd{ Zej_e:e.e)e'jgd|d; d<d}d~ ZeZej_dddZej_dddZej_dd Zej_dddZej_dddZdd Zdd Zi de:dd edD edde:dd edD ddde1dddde1ddddde2ddddde3ddddde-dde:edddde:edddde:edddde:edddde:edddde:edddde:edddde:edddde:edddde:edddi de:ddgd+ edde:ddgd+ edde:ejddddejddd  de:ejddddejddd  de(edd de+ejddddde:g de;eg dg dde de de:g dde:edddde:edddde:edddde:ededdde:e'jdd edD ddZeDrxe:e'jdd edD ddZeed< ej_e dDddu ZeZej_dd e D dDddӄ ZeZej_dd e D dDddք Zej_dddلZej_dddۄZej_ddd݄Zdd߄ Zdd e D Zej_dddZdd e6jD Zi eeeZej_e dDdd Zdd e6jD Zi eeeeZej_e dDdd Zej_dddZej_dddZej_dddZej_e*dd+de%ddfe*ddde%ddfe,ddddfe,ddddfe0ddde$dddfe/dd dfgdDdd Zej_e6jdDdd Zej_eje8jeje8jeje8jeje8jeje8jeje8jeje8jejejejejejejeje8jeje8jeje8jgdDdd Zej_eje8jeje8jeje8jeje8jeje8jeje8jeje8jgdDdd	 Zg d
Zej_edDdd ZϐddgZej_edDdd Zee Zej_edDdd Zej_ejejejejejejgdDdd Zej_g ddDdd Zej_g ddDdd Zg dZej_edDdd Zej_dd Zej_dϐd!d"Zdddd#d$d%d&d'd(d)e e ed*eded+e	je	ed,d,e	ed-d,d.d/gZeEdure۠eEFdeEFdg d0d eD Ze"ee݃ej_eed<d1d2 Ze"eed,d ej_ed,d ed,d d<d3d4 ZeZd5d6ee e	jgZeEdureOeEFd ej_edDd7d8 ZeZej_g d9dDd:d; ZeZej_e6jdDd<d= Zej_d>e'jfejld?e'jfe"md?d]ejld?ejvfe"md?d]d>ejvfgg d@d<dAdB Zej_dejlde"md?d]gdDdCdD Zej_ejld?ejvfe"md?d]ejld?e'jfe"md?d]gdDdEdF Zej_d>ejld?e"md?d]gdDdGdH Zej_d>e'jfejld?e'jfe"md?d]ejld?ejvfe"md?d]d>ejvfgg d@d<dIdJ Zej_dKejld?e"md?d]gdDdLdM ZeZeZej_e6jdDdNdO Zej_e6jdDdPdQ Zej_edd>e'jfejld?e'jfe"md?d]ejld?ejvfe"md?d]d>ejvfgg dRd<dSdT Zej_e6jdDdUdV Zej_e6jdDdWdX Zej_dАdZd[Zej_e6jdDd\d] Zej_e6j dDd^d_ Zej_e6jdDd`da Zej_e6jdDdbdc Zej_e6jdDddde Zej_e6jdDdfdg Z	ej_e6j
dDdhdi Zej_e6jdDdjdk Zej_e6jdDdldm Zej_e6jdDdndo Zej_e6je6j  dDdpdq Zej_e6je6j  e6j e6j dDdrds Zej_e6jdDdtdu Zej_e6jdDdvdw Zej_e6jdDdxdy Zej_e6jdDdzd{ Zej_e6jdDd|d} Zej_e6j dDd~d Z!ddejvdgfdde'jdgfdde'jwdgfddejvdgfdejvejvejvgfdg fddejvdgfddejvdgfddejvdgfdd,ejvdgfdd,ejvdgfded,ejvedgfddejvdgfdde'jdgfde"dejve"dgfde0dejve0dgfdedd,d,ejvedd,d,gfddejvdgfded,ejvedgfded,ejvedgfde,de'jwe,dgfde*dd,ejve*ddgfgZ#ee# \Z$Z%ej_e#e$d<dd Z&ej_dd Z'ej_g ddDdd Z(ej_dd e'jYj)D dDdd Z*ej_ddd; gdDdd Z+ej_dddejvejvejvfejve'jwdfejve'jdfe'je'je'jfgdDdѐddZ,ej_e6j-e6j.e6j/gdDdd Z0ej_e6j.e6j/gdDdd Z1ej_e6j-e6j/gdDdd Z2ej_e6j-e6j.gdDdd Z3ej_e6j4e6j.gdDdd Z5ej_e6j6e6j/gdDdd Z7ej_dҐddZ8ej_dҐddZ9ej_dҐddZ:ej_dҐddZ;ddgZ<eEdure<OeEFd¡ ej_e<dDdӐdĐdńZ=e_ dƐdǄ Z>dS (  a  
This file is very long and growing, but it was decided to not split it yet, as
it's still manageable (2020-03-17, ~1.1k LoC). See gh-31989

Instead of splitting it was decided to define sections here:
- Configuration / Settings
- Autouse fixtures
- Common arguments
- Missing values & co.
- Classes
- Indices
- Series'
- DataFrames
- Operators & Operations
- Data sets/files
- Time zones
- Dtypes
- Misc
    )annotations)abc)datedatetimetime	timedeltatimezone)DecimalN)TYPE_CHECKINGCallable)tzlocaltzutc)
strategies)FixedOffsetutc_get_option)DatetimeTZDtypeIntervalDtype)CategoricalIndex	DataFrameIntervalIntervalIndexPeriod
RangeIndexSeries	Timedelta	Timestamp
date_rangeperiod_rangetimedelta_range)ops)Index
MultiIndex)Version)HashableIteratorFTZUTCreturnNonec                 C  s   | j dddd d S )N--no-strict-data-filesstore_falsez6Don't fail if a test is skipped for missing data file.)actionhelp)Z	addoption)parser r.   /lib/python3.10/site-packages/pandas/conftest.pypytest_addoptiono   s
   
r0   itempytest.Itempathstrmessagec                 C  s,   | j |r| tjd|  dS dS )a  Ignore doctest warning.

    Parameters
    ----------
    item : pytest.Item
        pytest test item.
    path : str
        Module path to Python object, e.g. "pandas.core.frame.DataFrame.append". A
        warning will be filtered when item.name ends with in given path. So it is
        sufficient to specify e.g. "DataFrame.append".
    message : str
        Message to be filtered.
    zignore:N)nameendswithZ
add_markerpytestZmarkfilterwarnings)r1   r3   r5   r.   r.   r/   ignore_doctest_warningw   s   r:   c                 C  sP   | dp|j ddd}g d}|r$| D ]}|D ]
\}}t||| qqd S d S )Nz--doctest-modulesz--doctest-cythonF)default))Zis_int64_dtypezis_int64_dtype is deprecated)Zis_interval_dtypezis_interval_dtype is deprecated)Zis_period_dtypezis_period_dtype is deprecated)Zis_datetime64tz_dtypez#is_datetime64tz_dtype is deprecated)Zis_categorical_dtypez"is_categorical_dtype is deprecated)Z	is_sparsezis_sparse is deprecated)DataFrameGroupBy.fillnaz%DataFrameGroupBy.fillna is deprecated)NDFrame.replacezThe 'method' keyword)r=   zSeries.replace without 'value')zNDFrame.clipz4Downcasting behavior in Series and DataFrame methods)zSeries.idxminThe behavior of Series.idxmin)zSeries.idxmaxThe behavior of Series.idxmax)zSeriesGroupBy.fillnaz"SeriesGroupBy.fillna is deprecated)zSeriesGroupBy.idxminr>   )zSeriesGroupBy.idxmaxr?   )zmissing.mask_zero_div_zerozdivide by zero encountered)Zto_pydatetimez>The behavior of DatetimeProperties.to_pydatetime is deprecated)z pandas.core.generic.NDFrame.boolzY(Series|DataFrame).bool is now deprecated and will be removed in future version of pandas)z!pandas.core.generic.NDFrame.firstzqfirst is deprecated and will be removed in a future version. Please create a mask and filter using `.loc` instead)zResampler.fillnaz+DatetimeIndexResampler.fillna is deprecated)r<   z3DataFrameGroupBy.fillna with 'method' is deprecated)r<   z,DataFrame.fillna with 'method' is deprecated)Zread_parquetz1Passing a BlockManager to DataFrame is deprecated)	getoptionr:   )itemsconfigZ
is_doctestZignored_doctest_warningsr1   r3   r5   r.   r.   r/   pytest_collection_modifyitems   s   /rC   z6.83.2Zci)ZdeadlineZsuppress_health_checkz)MonthBegin MonthEnd BMonthBegin BMonthEndic   )n	normalizez%YearBegin YearEnd BYearBegin BYearEnd         )Z	min_valueZ	max_value)rE   rF   monthz1QuarterBegin QuarterEnd BQuarterBegin BQuarterEndi   )rE   rF   ZstartingMonth)Zautousec                 C  s   t | d< t| d< dS )z:
    Make `np` and `pd` names available for doctests.
    nppdN)rM   rN   )Zdoctest_namespacer.   r.   r/   add_doctest_imports   s   rO   c                   C  s   t dd dS )z<
    Configure settings for all tests and test modules.
    Zchained_assignmentraiseN)rN   Z
set_optionr.   r.   r.   r/   configure_tests	     rQ   )r   rI   indexcolumnsc                 C     dt |  S Nzaxis=reprxr.   r.   r/   <lambda>      r[   )paramsidsc                 C     | j S )z@
    Fixture for returning the axis numbers of a DataFrame.
    paramrequestr.   r.   r/   axis     rd   rT   c                 C  rU   rV   rW   rY   r.   r.   r/   r[     r\   c                 C  r_   )zA
    Fixture for returning aliases of axis 1 of a DataFrame.
    r`   rb   r.   r.   r/   axis_1  re   rf   )TFN)r]   c                 C  r_   )a  
    Pass in the observed keyword to groupby for [True, False]
    This indicates whether categoricals should return values for
    values which are not in the grouper [False / None], or only values which
    appear in the grouper [True]. [None] is supported for future compatibility
    if we decide to change the default (and would need to warn if this
    parameter is not passed).
    r`   rb   r.   r.   r/   observed'     
rg   c                 C  r_   )z6
    Boolean 'ordered' parameter for Categorical.
    r`   rb   r.   r.   r/   ordered4  re   ri   c                 C  r_   )z%
    Boolean 'skipna' parameter.
    r`   rb   r.   r.   r/   skipna<  re   rj   )firstZlastFc                 C  r_   )z[
    Valid values for the 'keep' parameter used in
    .duplicated or .drop_duplicates
    r`   rb   r.   r.   r/   keepD     rl   )bothneitherleftrightc                 C  r_   )zA
    Fixture for trying all interval 'inclusive' parameters.
    r`   rb   r.   r.   r/   inclusive_endpoints_fixtureM  re   rr   )rp   rq   rn   ro   c                 C  r_   )z<
    Fixture for trying all interval closed parameters.
    r`   rb   r.   r.   r/   closedU  re   rs   c                 C  r_   )zS
    Secondary closed fixture to allow parametrizing over all pairs of closed.
    r`   rb   r.   r.   r/   other_closed]  re   rt   gzipbz2zipxztarZzstdZ	zstandard)Zmarksc                 C  r_   )zK
    Fixture for trying common compression types in compression tests.
    r`   rb   r.   r.   r/   compressione     rz   c                 C  r_   )zk
    Fixture for trying common compression types in compression tests excluding
    uncompressed case.
    r`   rb   r.   r.   r/   compression_onlyw  r{   r|   c                 C  r_   )z,
    Fixture that an array is writable.
    r`   rb   r.   r.   r/   writable  re   r}   )innerZouterrp   rq   c                 C  r_   )z:
    Fixture for trying all types of join operations.
    r`   rb   r.   r.   r/   	join_type  re   r   nlargestZ	nsmallestc                 C  r_   )z1
    Fixture for trying all nselect methods.
    r`   rb   r.   r.   r/   nselect_method  re   r   c                 C  
   t | jS Ntype__name__rY   r.   r.   r/   r[        
 c                 C  r_   )z/
    Fixture for each null type in pandas.
    r`   rb   r.   r.   r/   nulls_fixture  re   r   c                 C  r_   )zL
    Fixture for each null type in pandas, each null type exactly once.
    r`   rb   r.   r.   r/   unique_nulls_fixture  re   r   c                 C  r   r   r   rY   r.   r.   r/   r[     r   c                 C  r_   )z-
    Fixture for each NaT type in numpy.
    r`   rb   r.   r.   r/   np_nat_fixture  re   r   c                 C  r_   )z;
    Fixture to parametrize over DataFrame and Series.
    r`   rb   r.   r.   r/   frame_or_series  re   r   rS   seriesc                 C  r_   )z
    Fixture to parametrize over Index and Series, made necessary by a mypy
    bug, giving an error:

    List item 0 has incompatible type "Type[Series]"; expected "Type[PandasObject]"

    See GH#29725
    r`   rb   r.   r.   r/   index_or_series  rh   r   )rS   r   arrayc                 C  r_   )zG
    Fixture to parametrize over Index, Series, and ExtensionArray
    r`   rb   r.   r.   r/   index_or_series_or_array  re   r   c                 C  r_   r   )r   rY   r.   r.   r/   r[         c                 C  r_   )z]
    Fixture to test behavior for Index, Series, DataFrame, and pandas Array
    classes
    r`   rb   r.   r.   r/   box_with_array  rm   r   
type[dict]c                  C  s   G dd dt } | S )z,
    Fixture for a dictionary subclass.
    c                   @  s   e Zd ZdddZdS )z"dict_subclass.<locals>.TestSubDictr'   r(   c                 _  s   t j| g|R i | d S r   )dict__init__)selfargskwargsr.   r.   r/   r      s   z+dict_subclass.<locals>.TestSubDict.__init__Nr'   r(   )r   
__module____qualname__r   r.   r.   r.   r/   TestSubDict  s    r   )r   )r   r.   r.   r/   dict_subclass  s   r   type[abc.Mapping]c                  C  s   G dd dt j} | S )z8
    Fixture for a non-mapping dictionary subclass.
    c                   @  s2   e Zd ZdddZdd Zddd	ZdddZdS )z5non_dict_mapping_subclass.<locals>.TestNonDictMappingr'   r(   c                 S  s
   || _ d S r   )_data)r   Zunderlying_dictr.   r.   r/   r        
z>non_dict_mapping_subclass.<locals>.TestNonDictMapping.__init__c                 S  s   | j |S r   )r   __getitem__)r   keyr.   r.   r/   r     s   zAnon_dict_mapping_subclass.<locals>.TestNonDictMapping.__getitem__r&   c                 S  
   | j  S r   )r   __iter__r   r.   r.   r/   r     r   z>non_dict_mapping_subclass.<locals>.TestNonDictMapping.__iter__intc                 S  r   r   )r   __len__r   r.   r.   r/   r     r   z=non_dict_mapping_subclass.<locals>.TestNonDictMapping.__len__Nr   )r'   r&   )r'   r   )r   r   r   r   r   r   r   r.   r.   r.   r/   TestNonDictMapping  s
    

r   )r   Mapping)r   r.   r.   r/   non_dict_mapping_subclass  s   r   c                  C  s   t tjddttdtddddd} | d	d
 dd
 dd
 g	 }|j
dd |j
jD |_
|j
jg ddd |S )z
    DataFrame with 3 level MultiIndex (year, month, day) covering
    first 100 business days from 2000-01-01 with random data
       )d      ABCD
2000-01-01r   Bperiodsfreq)rT   rS   c                 S  r_   r   )yearrY   r.   r.   r/   r[   *  r   zAmultiindex_year_month_day_dataframe_random_data.<locals>.<lambda>c                 S  r_   r   )rK   rY   r.   r.   r/   r[   *  r   c                 S  r_   r   )dayrY   r.   r.   r/   r[   *  r   c                 S  s   g | ]}| d qS )Zi8)astype).0Zlevr.   r.   r/   
<listcomp>,      zCmultiindex_year_month_day_dataframe_random_data.<locals>.<listcomp>)r   rK   r   T)Zinplace)r   rM   randomdefault_rngstandard_normalr"   listr   groupbysumrS   Z
set_levelslevelsZ	set_names)ZtdfZymdr.   r.   r/   /multiindex_year_month_day_dataframe_random_data  s   
 r   r#   c                   C  s*   t g dg dgg dg dgddgdS )z;
    2-level MultiIndex, lexsorted, with string names.
    foobarbazZquxonetwoZthree)
r   r   r   rI   rI   r   r      r   r   )
r   rI   r   r   rI   rI   r   r   rI   r   rk   second)r   codesnames)r#   r.   r.   r.   r/   %lexsorted_two_level_string_multiindex1  s
   r   r   c                 C  s,   | }t tjdd|tg ddddS )z2DataFrame with 2 level MultiIndex with random datar   )
   r   )Ar   CZexpr6   rS   rT   )r   rM   r   r   r   r"   )r   rS   r.   r.   r/    multiindex_dataframe_random_data=  s   r   c                  C  sT   t g d} t ddg}tg d}tg d}ddg}t| |g||g|dd	S )
zJ
    MultiIndex used to test the general functionality of this object
    r   r   r   )r   r   rI   r   r   r   )r   rI   r   rI   r   rI   rk   r   F)r   r   r   Zverify_integrity)r"   rM   r   r#   )Z
major_axisZ
minor_axisZmajor_codesZminor_codesZindex_namesr.   r.   r/   _create_multiindexJ  s   r   c                   C  s*   t jddgddgtddddgg d	d
S )zB
    MultiIndex with a level that is a tzaware DatetimeIndex.
    rI   r   ab20130101r   
US/Easternr   tzr   )r   )r#   Zfrom_productr   r.   r.   r.   r/   _create_mi_with_dt64tz_level^  s   r   objectc                 C     g | ]}d | qS Zpandas_r.   r   ir.   r.   r/   r   j  r   r   r   dtypestringc                 C  r   r   r.   r   r.   r.   r/   r   k  r   r   z
2020-01-01)r   zdatetime-tzz
US/Pacificr   ZperiodDr   r   z1 day)startr   r   rangeZint8Zint16Zint32int64Zuint8Zuint16Zuint32Zuint64Zfloat32float64zbool-object
bool-dtypeZ	complex64y              ?Z
complex128ZcategoricalZabcd   intervale   )Znumemptytuples)r   r   r   )rI   r   r   mi-with-dt64tz-levelmultirepeats)r   r   rI   rI   r   r   Znullable_intZInt64Znullable_uintZUInt16Znullable_floatZFloat32Znullable_boolZbooleanzstring-pythonc                 C  r   r   r.   r   r.   r.   r/   r     r   zstring[python]c                 C  r   r   r.   r   r.   r.   r/   r     r   zstring[pyarrow]zstring-pyarrowc                 C  s   t | j  S )z
    Fixture for many "simple" kinds of indices.

    These indices are unlikely to cover corner cases, e.g.
        - no names
        - no NaTs/NaNs
        - no values near implementation bounds
        - ...
    )indices_dictra   copyrb   r.   r.   r/   rS     s   c                 C  s   g | ]\}}t |ts|qS r.   )
isinstancer#   r   r   valuer.   r.   r/   r     s
    c                 C  s   | j }t|  S )z8
    index fixture, but excluding MultiIndex cases.
    )ra   r   r   )rc   r   r.   r.   r/   
index_flat  s   	r   c                 C  s0   g | ]\}}| d s|dv st|ts|qS ))r   Zuintfloat)r   r   r   r   )
startswithr   r#   r   r.   r.   r/   r     s    c                 C  s   t | j jdd}|j }| jdv r4| }d|d dd  |d< d|d dd  |d< t|S d|d< d|d< t||S )	z
    Fixture for indices with missing values.

    Integer-dtype and empty cases are excluded because they cannot hold missing
    values.

    MultiIndex is excluded because isna() is not defined for MultiIndex.
    TZdeep)r   r   r   r   r   rI   N)r   ra   r   valuestolistr#   from_tuplesr   )rc   ZindZvalsr.   r.   r/   index_with_missing  s   


r   r   c                   C  s0   t tjdtjdd tdd tdD ddS )zC
    Fixture for Series of floats with Index of unique strings
       r   g?c                 S  r   )Zi_r.   r   r.   r.   r/   r     r   z!string_series.<locals>.<listcomp>r   rS   r6   )r   rM   aranger   r"   r   r.   r.   r.   r/   string_series  s
   r  c                  C  s8   dd t dD } tdd t dD }t| |dtdS )zI
    Fixture for Series of dtype object with Index of unique strings
    c                 S  r   Zfoo_r.   r   r.   r.   r/   r     r   z!object_series.<locals>.<listcomp>r   c                 S  r   )Zbar_r.   r   r.   r.   r/   r     r   ZobjectsrS   r6   r   )r   r"   r   r   )datarS   r.   r.   r/   object_series  s   r  c                   C  s&   t tjddtddddddS )z9
    Fixture for Series of floats with DatetimeIndex
    r   r   r   r   r   tsr   )r   rM   r   r   r   r   r.   r.   r.   r/   datetime_series  s
   r  c                 C  s*   t | }tjd|}t|| dddS )zHelper for the _series dictr   r   F)rS   r6   r   )lenrM   r   r   r   r   )rS   sizer  r.   r.   r/   _create_series  s   r  c                 C  s"   i | ]\}}d | dt |qS )zseries-with-z-indexr  )r   Zindex_idrS   r.   r.   r/   
<dictcomp>  s    r  c                 C  s   t | S )zE
    Fixture for tests on series with changing types of indices.
    r  rS   r.   r.   r/   series_with_simple_index  s   r  c              	   C  s8   i | ]}|j  d ttddd tdD d|dqS )-seriesr   c                 S  r   )zi-r.   r   r.   r.   r/   r     r   z<dictcomp>.<listcomp>r   r  )r   r   r   r   r   r.   r.   r/   r    s    c                 C     t | j jddS )z|
    Fixture for tests on indexes, series and series with a narrow dtype
    copy to avoid mutation, e.g. setting .name
    Tr   )_index_or_series_objsra   r   rb   r.   r.   r/   index_or_series_obj%  s   r  c                 C  s   i | ]}|j  d t|qS )r  )r   r   r  r.   r.   r/   r  .  s    c                 C  r  )z
    Fixture for tests on indexes, series, series with a narrow dtype and
    series with empty objects type
    copy to avoid mutation, e.g. setting .name
    Tr   )_index_or_series_memory_objsra   r   rb   r.   r.   r/   index_or_series_memory_obj;  s   r  c                   C  s4   t tjdtjdtdd tdD ttddS )zj
    Fixture for DataFrame of ints with index of unique strings

    Columns are ['A', 'B', 'C', 'D']
    r   r   r   c                 S  r   r  r.   r   r.   r.   r/   r   Q  r   zint_frame.<locals>.<listcomp>r   r   r   )r   rM   Zonesr   r"   r   r   r.   r.   r.   r/   	int_frameH  s
   
r  c                   C  s6   t tjddtdd tdD ttddS )zm
    Fixture for DataFrame of floats with index of unique strings

    Columns are ['A', 'B', 'C', 'D'].
    r   r  c                 S  r   r  r.   r   r.   r.   r/   r   _  r   zfloat_frame.<locals>.<listcomp>r   r   r   )r   rM   r   r   r   r"   r   r   r.   r.   r.   r/   float_frameV  s
   
r  c                  C  s   t dddt dddt dddt dddt dddt dddt dddt dddt dddt dddg
} ttjdt| | dS )zF
    Fixture for Series with a DatetimeIndex that has duplicates.
    i  rI   r   r   r   rH   r  )r   r   rM   r   r   r   r	  )Zdatesr.   r.   r/   (rand_series_with_duplicate_datetimeindexd  s   









r  )rp   rq   rq   g?g      ?z2012-01M)r   z	period[M]z
2012-02-01z	period[D]z
2011-01-01r   )r   s)unitr   i  )Zsecondsztimedelta64[ns]c                 C  r_   r   r`   rb   r.   r.   r/   ea_scalar_and_dtype|     r  c                 C  r_   )zD
    Fixture for dunder names for common arithmetic operations.
    r`   rb   r.   r.   r/   all_arithmetic_operators  re   r   c                 C  r_   )zU
    Fixture for operator and roperator arithmetic, comparison, and logical ops.
    r`   rb   r.   r.   r/   all_binary_operators     "r!  c                 C  r_   )z
    Fixture for operator and roperator arithmetic functions.

    Notes
    -----
    This includes divmod and rdivmod, whereas all_arithmetic_operators
    does not.
    r`   rb   r.   r.   r/   all_arithmetic_functions  s   r#  )countr   maxminZmeanZprodZstdvarZmedianZkurtZskewZsemc                 C  r_   )z.
    Fixture for numeric reduction names.
    r`   rb   r.   r.   r/   all_numeric_reductions  re   r(  allanyc                 C  r_   )z.
    Fixture for boolean reduction names.
    r`   rb   r.   r.   r/   all_boolean_reductions  re   r+  c                 C  r_   )z>
    Fixture for all (boolean + numeric) reduction names.
    r`   rb   r.   r.   r/   all_reductions  re   r,  c                 C  r_   )z;
    Fixture for operator module comparison functions.
    r`   rb   r.   r.   r/   comparison_op  r  r-  )__le____lt____ge____gt__c                 C  r_   )zm
    Fixture for dunder names for compare operations except == and !=

    * >=
    * >
    * <
    * <=
    r`   rb   r.   r.   r/   compare_operators_no_eq_ne  rh   r2  )__and____rand____or____ror____xor____rxor__c                 C  r_   )zY
    Fixture for dunder names for common logical operations

    * |
    * &
    * ^
    r`   rb   r.   r.   r/   all_logical_operators)     r9  )ZcumsumZcumprodZcumminZcummaxc                 C  r_   )z0
    Fixture for numeric accumulation names
    r`   rb   r.   r.   r/   all_numeric_accumulations:  re   r;  c                 C  s
   |  dS )zR
    Returns the configuration for the test setting `--no-strict-data-files`.
    r)   )r@   )Zpytestconfigr.   r.   r/   strict_data_filesE  s   
r<  Callable[..., str]c                   s(   t jt jtd  fdd}|S )aD  
    Get the path to a data file.

    Parameters
    ----------
    path : str
        Path to the file, relative to ``pandas/tests/``

    Returns
    -------
    path including ``pandas/tests``.

    Raises
    ------
    ValueError
        If the path doesn't exist and the --no-strict-data-files option is not set.
    Ztestsc                    sJ   t jj g| R  }t j|s#rtd| dtd| d |S )NzCould not find file z' and --no-strict-data-files is not set.zCould not find .)osr3   joinexists
ValueErrorr8   skip)r   r3   Z	BASE_PATHr<  r.   r/   decob  s   
zdatapath.<locals>.deco)r?  r3   r@  dirname__file__)r<  rE  r.   rD  r/   datapathM  s   
rH  z
Asia/Tokyozdateutil/US/Pacificzdateutil/Asia/Singaporez+01:15z-02:15z	UTC+01:15z	UTC-02:15i,  i)Zhoursr   r   r   c                 C  s   g | ]}t |qS r.   rW   r   r.   r.   r/   r     s    c                 C  r_   )zD
    Fixture for trying timezones including default (None): {0}
    r`   rb   r.   r.   r/   tz_naive_fixture  rm   rI  c                 C  r_   )z4
    Fixture for trying explicit timezones: {0}
    r`   rb   r.   r.   r/   tz_aware_fixture  rm   rJ  r   zdateutil/UTCc                 C  r_   )zQ
    Fixture to provide variants of UTC timezone strings and tzinfo objects.
    r`   rb   r.   r.   r/   utc_fixture  re   rK  )r  msusnsc                 C  r_   )z&
    datetime64 units we support.
    r`   rb   r.   r.   r/   r    re   r  c                 C  r_   )zR
    Parametrized fixture for string dtypes.

    * str
    * 'str'
    * 'U'
    r`   rb   r.   r.   r/   string_dtype     	rO  Zpythonpyarrow)string=string[python]string=string[pyarrow]string=str[pyarrow]string=str[python]c                 C  s   | j \}}t||S )z
    Parametrized fixture for string dtypes.
    * 'string[python]' (NA variant)
    * 'string[pyarrow]' (NA variant)
    * 'str' (NaN variant, with pyarrow)
    * 'str' (NaN variant, without pyarrow)
    )ra   rN   StringDtyperc   ZstorageZna_valuer.   r.   r/   string_dtype_no_object  s   
rX  c                 C  r_   )za
    Parametrized fixture for string dtypes.

    * 'string[python]'
    * 'string[pyarrow]'
    r`   rb   r.   r.   r/   nullable_string_dtype     rY  c                 C  s   t j| j S )zq
    Parametrized fixture for string dtypes backed by Pyarrow.

    * 'str[pyarrow]'
    * 'string[pyarrow]'
    )rN   rV  ra   rb   r.   r.   r/   pyarrow_string_dtype  s   r[  c                 C  r_   zb
    Parametrized fixture for pd.options.mode.string_storage.

    * 'python'
    * 'pyarrow'
    r`   rb   r.   r.   r/   string_storage  rZ  r]  c                 C  r_   )z
    Parametrized fixture for StringDtype storage and na_value.

    * 'python' + pd.NA
    * 'pyarrow' + pd.NA
    * 'pyarrow' + np.nan
    r`   rb   r.   r.   r/   string_dtype_arguments  s   r^  Znumpy_nullablec                 C  r_   r\  r`   rb   r.   r.   r/   dtype_backend5  rZ  r_  c                 C  r_   )zK
    Parametrized fixture for bytes dtypes.

    * bytes
    * 'bytes'
    r`   rb   r.   r.   r/   bytes_dtypeJ     r`  c                 C  r_   )zN
    Parametrized fixture for object dtypes.

    * object
    * 'object'
    r`   rb   r.   r.   r/   object_dtypeU  ra  rb  )zstring=objectrR  rS  rT  rU  c                 C  s*   t | jtjr
| jS | j\}}t||S )z
    Parametrized fixture for string dtypes.
    * 'object'
    * 'string[python]' (NA variant)
    * 'string[pyarrow]' (NA variant)
    * 'str' (NaN variant, with pyarrow)
    * 'str' (NaN variant, without pyarrow)
    )r   ra   rM   r   rN   rV  rW  r.   r.   r/   any_string_dtype`  s   
rc  c                 C  r_   )z\
    Parametrized fixture for datetime64 dtypes.

    * 'datetime64[ns]'
    * 'M8[ns]'
    r`   rb   r.   r.   r/   datetime64_dtype  ra  rd  c                 C  r_   )z^
    Parametrized fixture for timedelta64 dtypes.

    * 'timedelta64[ns]'
    * 'm8[ns]'
    r`   rb   r.   r.   r/   timedelta64_dtype  ra  re  r   c                	   C  s   t ddddddddS )z-
    Fixture emits fixed Timestamp.now()
    i  rI   rJ   r         )r   rK   r   ZhourZminuter   Zmicrosecond)r   r.   r.   r.   r/   fixed_now_ts  s   rh  c                 C  r_   )z^
    Parameterized fixture for float dtypes.

    * float
    * 'float32'
    * 'float64'
    r`   rb   r.   r.   r/   float_numpy_dtype  rP  ri  c                 C  r_   )zR
    Parameterized fixture for float dtypes.

    * 'Float32'
    * 'Float64'
    r`   rb   r.   r.   r/   float_ea_dtype  ra  rj  c                 C  r_   )z~
    Parameterized fixture for float dtypes.

    * float
    * 'float32'
    * 'float64'
    * 'Float32'
    * 'Float64'
    r`   rb   r.   r.   r/   any_float_dtype  r:  rk  c                 C  r_   )zg
    Parameterized fixture for complex dtypes.

    * complex
    * 'complex64'
    * 'complex128'
    r`   rb   r.   r.   r/   complex_dtype  rP  rl  c                 C  r_   )z
    Parameterized fixture for complex and numpy float dtypes.

    * complex
    * 'complex64'
    * 'complex128'
    * float
    * 'float32'
    * 'float64'
    r`   rb   r.   r.   r/   complex_or_float_dtype  s   rm  c                 C  r_   )z|
    Parameterized fixture for signed integer dtypes.

    * int
    * 'int8'
    * 'int16'
    * 'int32'
    * 'int64'
    r`   rb   r.   r.   r/   any_signed_int_numpy_dtype  r:  rn  c                 C  r_   )zx
    Parameterized fixture for unsigned integer dtypes.

    * 'uint8'
    * 'uint16'
    * 'uint32'
    * 'uint64'
    r`   rb   r.   r.   r/   any_unsigned_int_numpy_dtype  rh   ro  c                 C  r_   )z
    Parameterized fixture for any integer dtype.

    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    r`   rb   r.   r.   r/   any_int_numpy_dtype  r{   rp  c                 C  r_   )z
    Parameterized fixture for any nullable integer dtype.

    * 'UInt8'
    * 'Int8'
    * 'UInt16'
    * 'Int16'
    * 'UInt32'
    * 'Int32'
    * 'UInt64'
    * 'Int64'
    r`   rb   r.   r.   r/   any_int_ea_dtype  r  rq  c                 C  r_   )a.  
    Parameterized fixture for any nullable integer dtype.

    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    * 'UInt8'
    * 'Int8'
    * 'UInt16'
    * 'Int16'
    * 'UInt32'
    * 'Int32'
    * 'UInt64'
    * 'Int64'
    r`   rb   r.   r.   r/   any_int_dtype   s   rr  c                 C  r_   )z
    Parameterized fixture for any nullable integer dtype and
    any float ea dtypes.

    * 'UInt8'
    * 'Int8'
    * 'UInt16'
    * 'Int16'
    * 'UInt32'
    * 'Int32'
    * 'UInt64'
    * 'Int64'
    * 'Float32'
    * 'Float64'
    r`   rb   r.   r.   r/   any_numeric_ea_dtype:  s   rs  c                 C  r_   )a  
    Parameterized fixture for any nullable integer dtype and
    any float ea dtypes.

    * 'UInt8'
    * 'Int8'
    * 'UInt16'
    * 'Int16'
    * 'UInt32'
    * 'Int32'
    * 'UInt64'
    * 'Int64'
    * 'Float32'
    * 'Float64'
    * 'uint8[pyarrow]'
    * 'int8[pyarrow]'
    * 'uint16[pyarrow]'
    * 'int16[pyarrow]'
    * 'uint32[pyarrow]'
    * 'int32[pyarrow]'
    * 'uint64[pyarrow]'
    * 'int64[pyarrow]'
    * 'float32[pyarrow]'
    * 'float64[pyarrow]'
    r`   rb   r.   r.   r/   any_numeric_ea_and_arrow_dtypeP  s    rt  c                 C  r_   )z~
    Parameterized fixture for any signed nullable integer dtype.

    * 'Int8'
    * 'Int16'
    * 'Int32'
    * 'Int64'
    r`   rb   r.   r.   r/   any_signed_int_ea_dtypes  rh   ru  c                 C  r_   )z
    Parameterized fixture for any (purely) real numeric dtype.

    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    * float
    * 'float32'
    * 'float64'
    r`   rb   r.   r.   r/   any_real_numpy_dtype  s   rv  c                 C  r_   )a  
    Parameterized fixture for any (purely) real numeric dtype.

    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    * float
    * 'float32'
    * 'float64'

    and associated ea dtypes.
    r`   rb   r.   r.   r/   any_real_numeric_dtype  s   rw  c                 C  r_   )a  
    Parameterized fixture for all numpy dtypes.

    * bool
    * 'bool'
    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    * float
    * 'float32'
    * 'float64'
    * complex
    * 'complex64'
    * 'complex128'
    * str
    * 'str'
    * 'U'
    * bytes
    * 'bytes'
    * 'datetime64[ns]'
    * 'M8[ns]'
    * 'timedelta64[ns]'
    * 'm8[ns]'
    * object
    * 'object'
    r`   rb   r.   r.   r/   any_numpy_dtype  r"  rx  c                 C  r_   )a  
    Parameterized fixture for all real dtypes that can hold NA.

    * float
    * 'float32'
    * 'float64'
    * 'Float32'
    * 'Float64'
    * 'UInt8'
    * 'UInt16'
    * 'UInt32'
    * 'UInt64'
    * 'Int8'
    * 'Int16'
    * 'Int32'
    * 'Int64'
    * 'uint8[pyarrow]'
    * 'uint16[pyarrow]'
    * 'uint32[pyarrow]'
    * 'uint64[pyarrow]'
    * 'int8[pyarrow]'
    * 'int16[pyarrow]'
    * 'int32[pyarrow]'
    * 'int64[pyarrow]'
    * 'float[pyarrow]'
    * 'double[pyarrow]'
    r`   rb   r.   r.   r/   any_real_nullable_dtype  s   ry  c                 C  r_   )a  
    Parameterized fixture for all numeric dtypes.

    * int
    * 'int8'
    * 'uint8'
    * 'int16'
    * 'uint16'
    * 'int32'
    * 'uint32'
    * 'int64'
    * 'uint64'
    * float
    * 'float32'
    * 'float64'
    * complex
    * 'complex64'
    * 'complex128'
    * 'UInt8'
    * 'Int8'
    * 'UInt16'
    * 'Int16'
    * 'UInt32'
    * 'Int32'
    * 'UInt64'
    * 'Int64'
    * 'Float32'
    * 'Float64'
    r`   rb   r.   r.   r/   any_numeric_dtype  s   rz  r   cZmixedbytes   a   czmixed-integerr   g       @Zfloatingg      ?Zintegerzmixed-integer-floatdecimal
datetime64z
2013-01-01z
2018-01-01r   Z20180101r   i  i  complexy      ?      ?y       @       @r   c                 C  s    | j \}}tj|td}||fS )a  
    Fixture for all inferred dtypes from _libs.lib.infer_dtype

    The covered (inferred) types are:
    * 'string'
    * 'empty'
    * 'bytes'
    * 'mixed'
    * 'mixed-integer'
    * 'mixed-integer-float'
    * 'floating'
    * 'integer'
    * 'decimal'
    * 'boolean'
    * 'datetime64'
    * 'datetime'
    * 'date'
    * 'timedelta'
    * 'time'
    * 'period'
    * 'interval'

    Returns
    -------
    inferred_dtype : str
        The string for the inferred dtype from _libs.lib.infer_dtype
    values : np.ndarray
        An array of object dtype that will be inferred to have
        `inferred_dtype`

    Examples
    --------
    >>> from pandas._libs import lib
    >>>
    >>> def test_something(any_skipna_inferred_dtype):
    ...     inferred_dtype, values = any_skipna_inferred_dtype
    ...     # will pass
    ...     assert lib.infer_dtype(values, skipna=True) == inferred_dtype
    r   )ra   rM   r   r   )rc   Zinferred_dtyper   r.   r.   r/   any_skipna_inferred_dtype2  s   
)r  c                  C  s>   t jddd ddlm}  ddlm} | }d|j_| |dS )	zj
    Get an instance of IPython.InteractiveShell.

    Will raise a skip if IPython is not installed.
    ZIPythonz6.0.0)Z
minversionr   )InteractiveShell)Configz:memory:)rB   )r8   importorskipZIPython.core.interactiveshellr  Ztraitlets.configr  ZHistoryManagerZ	hist_file)r  r  r{  r.   r.   r/   ipe  s   
r  )ZbsrZcooZcscZcsrZdiaZdokZlilc                 C  s   t d}t|| jd S )z-
    Yields scipy sparse matrix classes.
    zscipy.sparseZ_matrix)r8   r  getattrra   )rc   Zsparser.   r.   r/   spmatrixx  s   
r  c                 C  s6   g | ]}t ttj|tjjr|d krttj|qS )Tick)
issubclassr  rN   offsetsr  )r   or.   r.   r/   r     s    
c                 C  r_   )zN
    Fixture for Tick based datetime offsets available for a time series.
    r`   rb   r.   r.   r/   tick_classes  r:  r  c                 C  s   | S r   r.   rY   r.   r.   r/   r[     s    c                 C  r_   )zk
    Simple fixture for testing keys in sorting methods.
    Tests None (no key) and the identity key.
    r`   rb   r.   r.   r/   sort_by_key  rm   r  )r   NN)ZEgonZVenkmanN)NCC1701Dr  r  #tuple[Hashable, Hashable, Hashable]c                 C  r_   )zP
    A 3-tuple of names, the first two for operands, the last for a result.
    r`   rb   r.   r.   r/   r     s   r   c                 C  r_   )zI
    Parametrize over __setitem__, loc.__setitem__, iloc.__setitem__
    r`   rb   r.   r.   r/   indexer_sli  re   r  c                 C  r_   )z<
    Parametrize over loc.__getitem__, iloc.__getitem__
    r`   rb   r.   r.   r/   
indexer_li  re   r  c                 C  r_   )z8
    Parametrize over __setitem__, iloc.__setitem__
    r`   rb   r.   r.   r/   
indexer_si  re   r  c                 C  r_   )z7
    Parametrize over __setitem__, loc.__setitem__
    r`   rb   r.   r.   r/   
indexer_sl  re   r  c                 C  r_   )z:
    Parametrize over at.__setitem__, loc.__setitem__
    r`   rb   r.   r.   r/   
indexer_al  re   r  c                 C  r_   )z<
    Parametrize over iat.__setitem__, iloc.__setitem__
    r`   rb   r.   r.   r/   indexer_ial  re   r  boolc                   C  s   t ddddkS )z>
    Fixture to check if the array manager is being used.
    mode.data_managerTZsilentr   r   r.   r.   r.   r/   using_array_manager  rR   r  c                   C  s   t jjjdu otddddkS )z7
    Fixture to check if Copy-on-Write is enabled.
    Tr  r  blockrN   optionsmodeZcopy_on_writer   r.   r.   r.   r/   using_copy_on_write     r  c                   C  s   t jjjdkotddddkS )z?
    Fixture to check if Copy-on-Write is in warning mode.
    warnr  Tr  r  r  r.   r.   r.   r/   warn_copy_on_write  r  r  c                   C  s   t jjjdu S )z=
    Fixture to check if infer string option is enabled.
    T)rN   r  ZfutureZinfer_stringr.   r.   r.   r/   using_infer_string  s   r  zEurope/Warsawzdateutil/Europe/Warsawc                 C  r_   )zE
    tzinfo for Europe/Warsaw using pytz, dateutil, or zoneinfo.
    r`   rb   r.   r.   r/   warsaw  re   r  c                   C  s   dS )N)rQ  Zpyarrow_numpyr.   r.   r.   r.   r/   arrow_string_storage  s   r  r   )r1   r2   r3   r4   r5   r4   r'   r(   )r'   r   )r'   r   )r'   r#   )r'   r   )r'   r   )r<  r4   r'   r=  )r'   r   )r'   r  )r'   r  )r'   r4   (?  __doc__Z
__future__r   collectionsr   r   r   r   r   r   r  r	   operatorr?  typingr
   r   Zdateutil.tzr   r   Z
hypothesisr   stZnumpyrM   r8   Zpytzr   r   Zpandas._config.configr   Zpandas.util._test_decoratorsutilZ_test_decoratorsZtdZpandas.core.dtypes.dtypesr   r   ZpandasrN   r   r   r   r   r   r   r   r   r   r   r   r    Zpandas._testingZ_testingZtmZpandas.corer!   Zpandas.core.indexes.apir"   r#   Zpandas.util.versionr$   Zcollections.abcr%   r&   rQ  paImportErrorZhas_pyarrowZzoneinfoZZoneInfoZZoneInfoNotFoundErrorr0   r:   rC   ZHealthCheckZtoo_slowZhypothesis_health_checks__version__appendZdiffering_executorsZsettingsZregister_profiletupleZload_profilesplitr6   r  Ztseriesr  clsZregister_type_strategyZbuildsZintegersZbooleansZfixturerO   rQ   rd   Z
axis_framerf   rg   ri   rj   rl   rr   rs   rt   ra   Z
skip_if_norz   r|   r}   r   r   ZNULL_OBJECTSr   Znulls_fixture2nanZNaTr   Zunique_nulls_fixture2ZNP_NAT_OBJECTSr   Znp_nat_fixture2r   r   Zindex_or_series2r   r   r   Zbox_with_array2r   r   r   r   r   r   r   r   r   r  r  r   Zfrom_breaksZlinspacer   rw   r   r   idxkeysrS   Zindex_fixture2rA   r   Zindex_flat2r   r  r  r  r  Z_seriesr  ZNARROW_NP_DTYPESZ_narrow_seriesr  r  ZPYTHON_DATA_TYPESZ_typ_objects_seriesr  r  r  r  r  r  Zarithmetic_dunder_methodsr   addZraddsubZrsubmulZrmultruedivZrtruedivfloordivZ	rfloordivmodZrmodpowZrpoweqneltlegtgeand_Zrand_xorZrxoror_Zror_r!  r#  Z_all_numeric_reductionsr(  Z_all_boolean_reductionsr+  Z_all_reductionsr,  r-  r2  r9  Z_all_numeric_accumulationsr;  r<  rH  Z	TIMEZONESextendZTIMEZONE_IDSZparametrize_fixture_docr4   rI  rJ  Ztz_aware_fixture2Z_UTCSrK  Zutc_fixture2r  Zunit2ZSTRING_DTYPESrO  ZNArX  rY  r[  r]  r^  r_  Zstring_storage2Zstring_dtype_arguments2ZBYTES_DTYPESr`  ZOBJECT_DTYPESrb  r   rc  ZDATETIME64_DTYPESrd  ZTIMEDELTA64_DTYPESre  rh  ZFLOAT_NUMPY_DTYPESri  ZFLOAT_EA_DTYPESrj  ZALL_FLOAT_DTYPESrk  ZCOMPLEX_DTYPESrl  ZCOMPLEX_FLOAT_DTYPESrm  ZSIGNED_INT_NUMPY_DTYPESrn  ZUNSIGNED_INT_NUMPY_DTYPESro  ZALL_INT_NUMPY_DTYPESrp  ZALL_INT_EA_DTYPESrq  ZALL_INT_DTYPESrr  rs  ZALL_INT_PYARROW_DTYPES_STR_REPRZFLOAT_PYARROW_DTYPES_STR_REPRrt  ZSIGNED_INT_EA_DTYPESru  ZALL_REAL_NUMPY_DTYPESrv  ZALL_REAL_DTYPESrw  ZALL_NUMPY_DTYPESrx  ZALL_REAL_NULLABLE_DTYPESry  ZALL_NUMERIC_DTYPESrz  r  Z_any_skipna_inferred_dtyper^   _r  r  r  __all__r  r  r   setitemlocZilocr  r  r  r  Zatr  Ziatr  r  r  r  r  Zwarsawsr  r  r.   r.   r.   r/   <module>   s   8

<





























	
 !"#$%) 

	
	



	







%















	
$#$$2	


