Ë
    iKêj»†  ã                   ó  — d dl mZmZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZm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mZ d dlmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- 	 d dl.m/Z/  e1d„ ejd                  jg                  d«      dd D «       «      dk\  Z4d„ Z5d„ Z6d„ Z7d„ Z8d„ Z9d„ Z:d„ Z;e d>d„«       Z< G d „ d!ejz                  «      Z>d"Z?e* e+«       d d ej€                  «       fd#eAd$eAdz  d%ejz                  eBdz     d&ejz                  ej†                     fd'„«       «       ZDe* e+«       ddd dd( ej€                  «       d)œd*ejz                  e'   dz  d+ed#eAd$eAdz  d,eEd%ejz                  eBdz     d&ejz                  ejŒ                     fd-„«       «       ZG e+«       ddddd. ej€                  «       d/œd*ejz                  e'   dz  d+ed0ejz                  d1   dz  d2ejz                  e'   dz  d,eEd%ejz                  eBdz     d&ejz                  ej�                     fd3„«       ZI ed(d.¬4«       G d5„ d6ee'   «      «       ZJdddd.d7œd8eAeeB   z  d+ed*ejz                  e'   dz  d2ejz                  e'   dz  d,eEd&eKeJe'      fd9„ZL e+«       	 d>ddd:œd;eeJ   dz  d<ejz                  eMee   z     dz  d0ejz                  e'   dz  d&ejz                  ejœ                     fd=„«       ZOy# e0$ r dZ/Y �Œ~w xY w)?é    )ÚOrderedDictÚabc)ÚSequence)Úcopy)Ú	dataclass)ÚdatetimeÚ	timedeltaÚtimezone)ÚAnyÚGenericÚUnionN)Ú
strategies)Úreject)ÚInvalidArgument)Únumpy)Úutils)ÚcheckÚcheck_function)Ú
check_typeÚcheck_valid_intervalÚcheck_valid_sizeÚtry_convert)ÚExÚcheck_strategy)Ú	cacheableÚdefines_strategy)Únote_deprecation)ÚIntegerDtype© c              #   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úint)Ú.0Úxs     úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/hypothesis/extra/pandas/impl.pyú	<genexpr>r&   *   s   è ø€ ÒG ”S˜—VÑGùs   ‚ú.é   )r(   é   c                 ó"   — t        | t        «      S r!   )Ú
isinstancer
   )Útzs    r%   Úhas_constant_offsetr-   -   s   € ô
 �bœ(Ó#Ð#ó    c                 óT   — t        j                  | j                  d„ «      d| f¬«      S )Nc                 óB   — t        j                  | g«      j                  S r!   )ÚpandasÚSeriesÚdtype)r$   s    r%   ú<lambda>z-dtype_for_elements_strategy.<locals>.<lambda>7   s   € œŸ™ q cÓ*×0Ñ0€ r.   z3hypothesis.extra.pandas.dtype_for_elements_strategy)Úkey)ÚstÚsharedÚmap)Úss    r%   Údtype_for_elements_strategyr:   5   s(   € Ü�9‰9Ø	�‰Ñ0Ó1ØBÀAÐFôð r.   c                 ó0   — | €|s |t        |«      «      S | S r!   )r:   ©r3   ÚvaluesÚelementsÚdraws       r%   Úinfer_dtype_if_necessaryr@   <   s   € Ø€}™VÙÔ/°Ó9Ó:Ð:Ø€Lr.   c                 óV  — d}t        | t        j                  «      r| }nVt        | t        «      rF	 t        j                  j
                  j                  | «      }t        |t        j                  «      r|}|�"t        st        dt        j                  › �«      ‚|S # t        $ r Y yw xY w)a*  Return a normalised :class:`~pandas.DatetimeTZDtype` if ``dtype`` is a
    timezone-aware datetime dtype (e.g. ``"datetime64[ns, UTC]"``), else None.

    Every value in such a column or index shares a single timezone - the only
    arrangement pandas supports outside of the ``object`` dtype.
    NzPGenerating timezone-aware datetimes requires pandas >= 2.1, but you have pandas )r+   r1   ÚDatetimeTZDtypeÚstrÚapiÚtypesÚpandas_dtypeÚ	TypeErrorÚPANDAS_GE_21r   Ú__version__)r3   Útz_dtypeÚ	converteds      r%   Údatetime_tz_dtyperL   B   s¦   € ð €HÜ�%œ×/Ñ/Ô0Ø‰Ü	�Eœ3Ô	ð	ÜŸ
™
×(Ñ(×5Ñ5°eÓ<ˆIô �i¤×!7Ñ!7Ô8Ø ˆHØÐ¥Lô ðÜ%×1Ñ1Ð2ð4ó
ð 	
ð €Oøô ò 	Ùð	ús   ±)B Â	B(Â'B(c                 óH   — t        j                  d| j                  › d�«      S )zkThe underlying timezone-naive ``datetime64[unit]`` dtype that backs a
    :class:`~pandas.DatetimeTZDtype`.zdatetime64[ú])Únpr3   Úunit)rJ   s    r%   Únaive_datetime64_dtyperQ   ^   s    € ô �8‰8�k (§-¡- °Ð2Ó3Ð3r.   c                 óÌ  ‡— | j                   Št        t        j                  dd«      t        j                  d‰«      z  «      }t	        | j
                  «      rd|z   d|z
  }}n®t        t        j                  t        j                  t        d¬«      z   ‰«      j                  t        j                  «      «      }t        t        j                  t        j                  t        d¬«      z
  ‰«      j                  t        j                  «      «      }t        j                  ||«      j                  ˆfd„«      }|t        j                   t        j                  d‰«      «      z  S )a9  Default element strategy for a :class:`~pandas.DatetimeTZDtype`: naive
    ``datetime64[unit]`` values, interpreted as UTC instants.

    With a constant-offset timezone these cover the dtype's representable
    range, staying a day inside the int64 bounds because pandas' internal
    conversions - e.g. when accessing an element - can otherwise overflow.
    All other timezones resolve their UTC offsets through stdlib datetimes,
    as does pandas when displaying values, so for those we instead keep each
    instant a day inside Python's representable range.
    r)   ÚDlûÿÿÿÿÿÿÿ ì   ÿÿÿÿ )Údaysc                 ó0   •— t        j                  | ‰«      S r!   )rO   Ú
datetime64)ÚvrP   s    €r%   r4   z%tz_default_elements.<locals>.<lambda>v   s   ø€ ¬r¯}©}¸QÀÓ/E€ r.   ÚNaT)rP   r"   rO   Útimedelta64r-   r,   rW   r   Úminr	   ÚastypeÚint64Úmaxr6   Úintegersr8   Újust)rJ   ÚdayÚloÚhir=   rP   s        @r%   Útz_default_elementsrd   d   sð   ø€ ð �=‰=€DÜ
Œb�n‰n˜Q Ó$¬¯©°q¸$Ó(?Ñ?Ó
@€CÜ˜8Ÿ;™;Ô'Ø Ñ# Y°¡_ˆB‰ä”—‘œxŸ|™|¬i¸QÔ.?Ñ?ÀÓF×MÑMÌbÏhÉhÓWÓXˆÜ”—‘œxŸ|™|¬i¸QÔ.?Ñ?ÀÓF×MÑMÌbÏhÉhÓWÓXˆÜ�[‰[˜˜RÓ ×$Ñ$Ó%EÓF€FØ”B—G‘GœBŸM™M¨%°Ó6Ó7Ñ7Ð7r.   c                 óÞ   — t        | t        j                  «      r4| j                  j	                  d«      j                  j                  |«      S | j	                  d«      j                  |«      S )a…  Interpret a naive datetime64 :class:`~pandas.Series` or
    :class:`~pandas.Index` as UTC instants and convert it to ``tz``.

    We build timezone-aware columns from naive ``datetime64[unit]`` values and
    only attach the timezone at the array level, because constructing them from
    timezone-aware scalars silently corrupts values near the bounds of the
    representable range.
    ÚUTC)r+   r1   r2   ÚdtÚtz_localizeÚ
tz_convert)Úobjr,   s     r%   Úattach_timezonerk   z   sR   € ô �#”v—}‘}Ô%Ø�v‰v×!Ñ! %Ó(×+Ñ+×6Ñ6°rÓ:Ð:Ø�?‰?˜5Ó!×,Ñ,¨RÓ0Ð0r.   c                 ó¸  ‡‡‡	— |€dŠ	n|› d�Š	| �t        | ‰	› d�«       n)t        d«      5  ‰€t        d‰	› d‰	› d�«      ‚	 d d d «       t        d«      5  t        j                  j
                  j                  j                  ‰«      rt        ‰	› d	�«      ‚	 d d d «       t        ‰t        «      rt        ‰t        «      rt        d
‰›d�«      ‚t        ‰t        «      r‚t        j                  ‰«      j                  dk(  r`‰t        urXd
‰›d�}t        ‰t         «      r|dz  }t        |«      ‚t        ‰t"        «      r|dz  }t        |«      ‚t%        |› d�ddd¬«       t        ‰t&        j(                  «      rt        d
‰›d�«      ‚t+        ‰«      }|�| €t-        |«      t/        |«      fS | |fS t1        t        dt2        «      } |«       D �ci c]  }|j4                   |«       “Œ c}j7                  ‰‰«      ŠdŠt        ‰t        «      r0dŠt        j                  ‰j4                  j9                  «       «      Šn‰�t;        t        j                  ‰d«      Š| €/t=        j>                  ‰«      } ‰rAt'        j@                  «       | z  } n)‰�'‰j                  dk7  rˆˆˆ	fd„}| jC                  |«      } | €J ‚| ‰fS # 1 sw Y   �Œ~xY w# 1 sw Y   �Œ5xY wc c}w )NÚ r'   r>   zdtype is not NonezAt least one of zelements or zdtype must be provided.z#isinstance(dtype, CategoricalDtype)z4dtype is categorical, which is currently unsupportedzPassed dtype=zi is a dtype class, please pass in an instance of this class.Otherwise it would be treated as dtype=objectÚOz is not a valid Pandas dtype.z; To generate valid datetimes, pass `dtype="datetime64[ns]"`z= To generate valid timedeltas, pass `dtype="timedelta64[ns]"`zX  We'll treat it as dtype=object for now, but this will be an error in a future version.z
2021-12-31Fr)   )ÚsinceÚhas_codemodÚ
stacklevelzx is a strategy, but we require a concrete dtype here.  See https://stackoverflow.com/q/74355937 for workaround patterns.Ú__subclasses__Tr3   c                 óì   •— ‰r| €y 	 t        j                  | g‰¬«      d   S # t        t        t        f$ r< d‰› d�}t        d|› d| ›dt        | «      j                  › d‰j                  › �«      d ‚w xY w)	N©r3   r   zdraw(z	elements)zCannot convert ú=ú	 of type z
 to dtype )	rO   ÚarrayrG   Ú
ValueErrorÚOverflowErrorr   ÚtypeÚ__name__rC   )ÚvalueÚnamer3   Úis_na_dtypeÚprefixs     €€€r%   Úconvert_elementz+elements_and_dtype.<locals>.convert_elementÖ   s�   ø€ Ù˜u˜}ØðÜ—x‘x  ¨uÔ5°aÑ8Ð8øÜœz¬=Ð9ò Ø˜v˜h iÐ0�Ü%Ø% d V¨1¨U¨I°YÜ˜E“{×+Ñ+Ð,¨J°u·y±y°kðCóð ððús
   ˆ# £AA3)"r   r   r   r1   rD   rE   ÚCategoricalDtypeÚis_dtyper+   rz   Ú
issubclassr   rO   r3   ÚkindÚobjectr   r	   r   r6   ÚSearchStrategyrL   rd   rQ   ÚgetattrÚlistr}   ÚgetÚlowerr   ÚnpstÚ
from_dtypeÚnoner8   )
r>   r3   ÚsourceÚerr_msgrJ   Ú_get_subclassesÚtr€   r~   r   s
    `      @@r%   Úelements_and_dtyper’   ˆ   s÷  ú€ à€~Ø‰à�8˜1�ˆàÐÜ�x F 8¨8Ð!4Õ5äÐ&Ó'ñ 	Øˆ}Ü%Ø& v h¨l¸6¸(ÐBYÐZóð ð ÷	ô 
Ð4Ó	5ñ Ü�:‰:×Ñ×,Ñ,×5Ñ5°eÔ<Ü!Ø�(ÐNÐOóð ð =÷ô �%œÔ¤:¨e´\Ô#BÜØ�e�Xð <ð <ó
ð 	
ô
 �%œÔ¤2§8¡8¨E£?×#7Ñ#7¸3Ò#>À5ÔPVÑCVØ"˜E˜8Ð#@ÐAˆÜ�eœXÔ&ØÐTÑTˆGÜ! 'Ó*Ð*Ü˜œyÔ)ØÐVÑVˆGÜ! 'Ó*Ð*ÜØˆið Sð SàØØõ	
ô �%œ×*Ñ*Ô+ÜØ�e�Xð Wð Wó
ð 	
ô
 ! Ó'€HØÐð
 ÐÜ& xÓ0Ô2HÈÓ2RÐRÐRØ˜Ð!Ð!äœlÐ,<¼dÓC€OÙ"1Ó"3Ö4˜QˆQ�V‰V‘Q“S‰[Ò4×8Ñ8¸ÀÓF€Eà€KÜ�%œÔ&ØˆÜ—‘˜Ÿ™×)Ñ)Ó+Ó,‰Ø	Ð	ÜœBŸH™H e¨WÓ5ˆàÐÜ—?‘? 5Ó)ˆÙÜ—w‘w“y 8Ñ+‰Hð 
Ð	˜uŸz™z¨SÒ0ö	ð —<‘< Ó0ˆØÐÐÐà�Uˆ?Ð÷i	ñ 	ú÷ñ üòZ 5s   «J=ÁAK
ÇKÊ=KË
Kc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚValueIndexStrategyc                 óv   •— t         ‰| �  «        || _        || _        || _        || _        || _        || _        y r!   )ÚsuperÚ__init__r>   r3   Úmin_sizeÚmax_sizeÚuniquer}   )Úselfr>   r3   r˜   r™   rš   r}   Ú	__class__s          €r%   r—   zValueIndexStrategy.__init__ê   s8   ø€ Ü‰ÑÔØ ˆŒØˆŒ
Ø ˆŒØ ˆŒØˆŒØˆ�	r.   c                 ó\  — g }t        «       }t        j                  || j                  | j                  | j                  | j                  z   dz  ¬«      5 }|D ]`  }|j                  | j                  «      }| j                  r&||v r|j                  «        Œ?|j                  |«       |j                  |«       Œb 	 d d d «       t        | j                  || j                  |j
                  ¬«      }t        j                  ||d|j                  | j                  «      ¬«      S # 1 sw Y   ŒhxY w)Nr(   )r˜   r™   Úaverage_sizer<   F)r3   Útupleize_colsr}   )ÚsetÚcuÚmanyr˜   r™   r?   r>   rš   r   ÚaddÚappendr@   r3   r1   ÚIndexr}   )r›   ÚdataÚresultÚseenr>   Ú_Úeltr3   s           r%   Údo_drawzValueIndexStrategy.do_drawó   s÷   € ØˆÜ‹uˆä�W‰WØØ—]‘]Ø—]‘]ØŸ-™-¨$¯-©-Ñ7¸1Ñ<ô	
ð 	#ð
 Øò #�Ø—i‘i §¡Ó.�Ø—;’;Ø˜d‘{Ø Ÿ™Ô)Ø Ø—H‘H˜S”MØ—‘˜cÕ"ñ#÷	#ô )Ø—*‘* V°d·m±mÈ$Ï)É)ô
ˆô �|‰|Ø˜%¨u¸4¿9¹9ÀTÇYÁYÓ;Oô
ð 	
÷%	#ð 	#ús   ÁA&D"Ä"D+)r{   Ú
__module__Ú__qualname__r—   r«   Ú__classcell__)rœ   s   @r%   r”   r”   é   s   ø„ ôö
r.   r”   é
   r˜   r™   r}   Úreturnc                 ó  — t        | d«       t        |d«       |€t        | t        z   dg«      }t        | |dd«       t	        |«       t        j                  t        j                  t        j                  | |«      |¬«      S )a¤  Provides a strategy which generates an :class:`~pandas.Index` whose
    values are 0, 1, ..., n for some n.

    Arguments:

    * min_size is the smallest number of elements the index can have.
    * max_size is the largest number of elements the index can have. If None
      it will default to some suitable value based on min_size.
    * name is the name of the index. If st.none(), the index will have no name.
    r˜   r™   rT   ©r}   )
r   r[   ÚDEFAULT_MAX_SIZEr   r   r6   Úbuildsr1   Ú
RangeIndexr_   )r˜   r™   r}   s      r%   Úrange_indexesr¶     sm   € ô" �X˜zÔ*Ü�X˜zÔ*ØÐÜ˜Ô#3Ñ3°YÐ?Ó@ˆÜ˜ 8¨Z¸ÔDÜ�4Ôä�9‰9”V×&Ñ&¬¯©°H¸hÓ(GÈdÔSÐSr.   T)r>   r3   r˜   r™   rš   r}   r>   r3   rš   c                 ó   ‡— t        |d«       t        |d«       t        ||dd«       t        t        |d«       t	        |«      Š‰duxr | du }t        | |«      \  } }|€	|t        z   }t        | |||||«      }|r|j                  ˆfd„«      S |S )a  Provides a strategy for producing a :class:`pandas.Index`.

    Arguments:

    * elements is a strategy which will be used to generate the individual
      values of the index. If None, it will be inferred from the dtype. Note:
      even if the elements strategy produces tuples, the generated value
      will not be a MultiIndex, but instead be a normal index whose elements
      are tuples.
    * dtype is the dtype of the resulting index. If None, it will be inferred
      from the elements strategy. At least one of dtype or elements must be
      provided.
    * min_size is the minimum number of elements in the index.
    * max_size is the maximum number of elements in the index. If None then it
      will default to a suitable small size. If you want larger indexes you
      should pass a max_size explicitly.
    * unique specifies whether all of the elements in the resulting index
      should be distinct.
    * name is a strategy for strings or ``None``, which will be passed to
      the :class:`pandas.Index` constructor.
    r˜   r™   rš   Nc                 ó0   •— t        | ‰j                  «      S r!   ©rk   r,   )ÚixrJ   s    €r%   r4   zindexes.<locals>.<lambda>Z  s   ø€ ¤°r¸8¿;¹;Ó'G€ r.   )	r   r   r   ÚboolrL   r’   r³   r”   r8   )	r>   r3   r˜   r™   rš   r}   Úlocalize_tzÚstrategyrJ   s	           @r%   Úindexesr¾   ,  sŸ   ø€ ô@ �X˜zÔ*Ü�X˜zÔ*Ü˜ 8¨Z¸ÔDÜŒt�V˜XÔ&ä  Ó'€HØ $Ð&Ò;¨8°tÐ+;€Kä(¨°5Ó9�O€HˆeàÐØÔ.Ñ.ˆÜ! (¨E°8¸XÀvÈtÓT€HÙØ�|‰|ÓGÓHÐHØ€Or.   F)r>   r3   ÚindexÚfillrš   r}   r¿   zUnion[Sequence, pandas.Index]rÀ   c                 ó\  ‡ ‡‡‡‡‡	‡
— |€t        «       }nt        |d«       t        ‰«      Š
‰
duxr ‰ du }t        ‰ ‰«      \  Š }|Š	|r|Šn#|�!|j                  dk(  rt        ‰t        «      s|Št        j                  ˆˆ ˆˆ	ˆˆfd„«       }|r |«       j                  ˆ
fd„«      S  |«       S )a‚  Provides a strategy for producing a :class:`pandas.Series`.

    Arguments:

    * elements: a strategy that will be used to generate the individual
      values in the series. If None, we will attempt to infer a suitable
      default from the dtype.

    * dtype: the dtype of the resulting series and may be any value
      that can be passed to :class:`numpy.dtype`. If None, will use
      pandas's standard behaviour to infer it from the type of the elements
      values. Note that if the type of values that comes out of your
      elements strategy varies, then so will the resulting dtype of the
      series.

      With pandas >= 2.1, you may also pass a timezone-aware
      :class:`~pandas.DatetimeTZDtype` (e.g. ``"datetime64[ns, UTC]"``), in
      which case every value in the series will share that single timezone.
      For UTC and other fixed-offset timezones the generated values cover the
      full range representable at the dtype's resolution - which for coarser
      units is much wider than ``datetime64[ns]`` - while timezones with a
      UTC offset that varies over time are limited to years 1-9999.  Values
      include ``NaT`` unless you pass an elements strategy which excludes it.

    * index: If not None, a strategy for generating indexes for the
      resulting Series. This can generate either :class:`pandas.Index`
      objects or any sequence of values (which will be passed to the
      Index constructor).

      You will probably find it most convenient to use the
      :func:`~hypothesis.extra.pandas.indexes` or
      :func:`~hypothesis.extra.pandas.range_indexes` function to produce
      values for this argument.

    * name: is a strategy for strings or ``None``, which will be passed to
      the :class:`pandas.Series` constructor.

    Usage:

    .. code-block:: pycon

        >>> series(dtype=int).example()
        0   -2001747478
        1    1153062837
    Nr¿   rn   c                 óÖ  •—  | ‰«      }t        |«      dkD  r¡‰�< | t        j                  t        ‰t        |«      ‰‰¬«      «      j	                  «       }nDt         | t        j                  t        ‰t        |«      ‰‰¬«      «      j	                  «       «      }t        j                  ||‰ | ‰«      ¬«      S t        j                  d|‰�‰n | t        ‰«      «       | ‰«      ¬«      S )Nr   )r3   r>   ÚshaperÀ   rš   )r¿   r3   r}   r   )	Úlenr‹   Úarraysr…   Útolistrˆ   r1   r2   r:   )	r?   r¿   Úresult_datar3   r>   rÀ   Úindex_strategyr}   rš   s	      €€€€€€r%   r§   zseries.<locals>.result±  sä   ø€ á�^Ó$ˆäˆu‹:˜Š>ØÐ Ù"Ü—K‘KÜ$Ø!)Ü! %›jØ!Ø%ôó÷ ‘&“(ñ ô #ÙÜŸ™Ü"(Ø%-Ü"% e£*Ø!%Ø#)ôó÷ ‘f“hó
�ô —=‘= °EÀÉTÐRVËZÔXÐXä—=‘=ØØð Ð(ñ áÔ9¸(ÓCÓDá˜$“Zô	ð 	r.   c                 ó0   •— t        | ‰j                  «      S r!   r¹   )r9   rJ   s    €r%   r4   zseries.<locals>.<lambda>Ú  s   ø€ ¤o°a¸¿¹Ó&E€ r.   )
r¶   r   rL   r’   r„   r+   r   r6   Ú	compositer8   )r>   r3   r¿   rÀ   rš   r}   r¼   Únp_dtyper§   rÈ   rJ   s   `` ```   @@r%   ÚseriesrÌ   ^  s·   þ€ ðx €}Ü“‰ä�u˜gÔ&ä  Ó'€HØ $Ð&Ò;¨8°tÐ+;€Kä+¨H°eÓ<Ñ€HˆhØ€Náð ‰ð 	ÐØ�M‰M˜SÒ Ü˜5¤,Ô/àˆä‡\�\÷%ð %ó ð%ñN Ù‹x�|‰|ÓEÓFÐFÙ‹8€Or.   )ÚslotsÚfrozenc                   ó¤   — e Zd ZU dZdZeez  dz  ed<   dZe	j                  e   dz  ed<   dZeed<   dZe	j                  e   dz  ed<   dZeed<   y)	Úcolumna­  Data object for describing a column in a DataFrame.

    Arguments:

    * name: the column name, or None to default to the column position. Must
      be hashable, but can otherwise be any value supported as a pandas column
      name.
    * elements: the strategy for generating values in this column, or None
      to infer it from the dtype.
    * dtype: the dtype of the column, or None to infer it from the element
      strategy. At least one of dtype or elements must be provided.
    * fill: A default value for elements of the column. See
      :func:`~hypothesis.extra.numpy.arrays` for a full explanation.
    * unique: If all values in this column should be distinct.
    Nr}   r>   r3   rÀ   Frš   )r{   r¬   r­   Ú__doc__r}   rC   r"   Ú__annotations__r>   r6   r†   r   r3   r   rÀ   rš   r»   r   r.   r%   rÐ   rÐ   Þ  sd   … ñð  "€Dˆ#�‰)�dÑ
Ó!Ø-1€Hˆb×Ñ Ñ# dÑ*Ó1Ø€Eˆ3ÓØ)-€Dˆ"×
Ñ
˜BÑ
 $Ñ
&Ó-Ø€FˆDÔr.   rÐ   )r3   r>   rÀ   rš   Únames_or_numberc          
      ó˜   — t        | t        t        f«      rdg| z  }nt        | «      }|D �cg c]  }t	        |||||¬«      ‘Œ c}S c c}w )a—  A convenience function for producing a list of :class:`column` objects
    of the same general shape.

    The names_or_number argument is either a sequence of values, the
    elements of which will be used as the name for individual column
    objects, or a number, in which case that many unnamed columns will
    be created. All other arguments are passed through verbatim to
    create the columns.
    N)r}   r3   r>   rÀ   rš   )r+   r"   Úfloatrˆ   rÐ   )rÓ   r3   r>   rÀ   rš   ÚnamesÚns          r%   ÚcolumnsrØ   ÷  sW   € ô" �/¤C¬ <Ô0Ø)-¨°Ñ(@‰ä�_Ó%ˆð öàô 	�A˜U¨X¸DÈÖPòð ùò s   ­A)Úrowsr¿   rØ   rÙ   c                ó  ‡‡‡‡‡— |€t        «       Šnt        |d«       |Š| €-‰€t        d«      ‚t        j                  ˆˆfd„«       } |«       S | €J ‚t        t        | d«      }g Št        «       Ši Št        |«      D �]}  \  }}t        t        |d|› d�«       t        |«      }|j                  €d|› d�}||_        n"|j                  }	 t        |j                  «       |j                  ‰v rt        d|j                  ›�«      ‚‰j#                  |j                  «       t%        |j&                  «      }|duxr |j(                  du }	t+        |j(                  |j&                  |«      \  |_        }
|	r |
|_        |j,                  ‰|j                  <   |j&                  €‰�t        d«      ‚t/        j0                  |j2                  |j(                  |j4                  |¬«      |_        ‰j7                  |«       �Œ€ ‰€!t        j                  ˆˆˆfd„«       } |«       S t        j                  ˆˆˆˆˆfd„«       } |«       S # t        $ r> t        d|› d	|j                  ›d
t        |j                  «      j                   › d�«      d‚w xY w)aÌ  Provides a strategy for producing a :class:`pandas.DataFrame`.

    Arguments:

    * columns: An iterable of :class:`column` objects describing the shape
      of the generated DataFrame.

    * rows: A strategy for generating a row object. Should generate
      either dicts mapping column names to values or a sequence mapping
      column position to the value in that position (note that unlike the
      :class:`pandas.DataFrame` constructor, single values are not allowed
      here. Passing e.g. an integer is an error, even if there is only one
      column).

      At least one of rows and columns must be provided. If both are
      provided then the generated rows will be validated against the
      columns and an error will be raised if they don't match.

      Caveats on using rows:

      * In general you should prefer using columns to rows, and only use
        rows if the columns interface is insufficiently flexible to
        describe what you need - you will get better performance and
        example quality that way.
      * If you provide rows and not columns, then the shape and dtype of
        the resulting DataFrame may vary. e.g. if you have a mix of int
        and float in the values for one column in your row entries, the
        column will sometimes have an integral dtype and sometimes a float.

    * index: If not None, a strategy for generating indexes for the
      resulting DataFrame. This can generate either :class:`pandas.Index`
      objects or any sequence of values (which will be passed to the
      Index constructor).

      You will probably find it most convenient to use the
      :func:`~hypothesis.extra.pandas.indexes` or
      :func:`~hypothesis.extra.pandas.range_indexes` function to produce
      values for this argument.

    Usage:

    The expected usage pattern is that you use :class:`column` and
    :func:`columns` to specify a fixed shape of the DataFrame you want as
    follows. For example the following gives a two column data frame:

    .. code-block:: pycon

        >>> from hypothesis.extra.pandas import column, data_frames
        >>> data_frames([
        ... column('A', dtype=int), column('B', dtype=float)]).example()
                    A              B
        0  2021915903  1.793898e+232
        1  1146643993            inf
        2 -2096165693   1.000000e+07

    If you want the values in different columns to interact in some way you
    can use the rows argument. For example the following gives a two column
    DataFrame where the value in the first column is always at most the value
    in the second:

    .. code-block:: pycon

        >>> from hypothesis.extra.pandas import column, data_frames
        >>> import hypothesis.strategies as st
        >>> data_frames(
        ...     rows=st.tuples(st.floats(allow_nan=False),
        ...                    st.floats(allow_nan=False)).map(sorted)
        ... ).example()
                       0             1
        0  -3.402823e+38  9.007199e+15
        1 -1.562796e-298  5.000000e-01

    You can also combine the two:

    .. code-block:: pycon

        >>> from hypothesis.extra.pandas import columns, data_frames
        >>> import hypothesis.strategies as st
        >>> data_frames(
        ...     columns=columns(["lo", "hi"], dtype=float),
        ...     rows=st.tuples(st.floats(allow_nan=False),
        ...                    st.floats(allow_nan=False)).map(sorted)
        ... ).example()
                 lo            hi
        0   9.314723e-49  4.353037e+45
        1  -9.999900e-01  1.000000e+07
        2 -2.152861e+134 -1.069317e-73

    (Note that the column dtype must still be specified and will not be
    inferred from the rows. This restriction may be lifted in future).

    Combining rows and columns has the following behaviour:

    * The column names and dtypes will be used.
    * If the column is required to be unique, this will be enforced.
    * Any values missing from the generated rows will be provided using the
      column's fill.
    * Any values in the row not present in the column specification (if
      dicts are passed, if there are keys with no corresponding column name,
      if sequences are passed if there are too many items) will result in
      InvalidArgument being raised.
    Nr¿   z1At least one of rows and columns must be providedc                 óô   •‡ —  ‰ ‰«      }ˆ ˆfd„}t        |«      dkD  r*t        j                  |D �cg c]	  } |«       ‘Œ c}|¬«      S t        j                   |«       g«      }|j                  d«      S c c}w )Nc                  óN   •—  ‰‰«      } t        t        j                  | d«       | S )Nz	draw(row))r   r   ÚIterable)r§   r?   rÙ   s    €€r%   Úrowz+data_frames.<locals>.rows_only.<locals>.rowŽ  s!   ø€ Ù! $›Z�FÜœsŸ|™|¨V°[ÔAØ!�Mr.   r   ©r¿   )rÄ   r1   Ú	DataFrameÚdrop)r?   r¿   rÞ   r©   ÚbaserÈ   rÙ   s   `    €€r%   Ú	rows_onlyzdata_frames.<locals>.rows_onlyŠ  si   ù€ á˜^Ó,�õ"ô
 �u“: ’>Ü!×+Ñ+¸EÖ,B°q©S­UÒ,BÈ%ÔPÐPô
 "×+Ñ+©S«U¨GÓ4�DØŸ9™9 Q›<Ð'ùò -Cs   ²A5rØ   zcolumns[rN   z+Column names must be hashable, but columns[z].name was rv   z, which cannot be hashed.z$duplicate definition of column name zFMust specify a dtype for all columns when combining rows with columns.)rÀ   r>   rš   r}   c                 ój  •—  | ‰«      }t        j                  |«      }t        d„ ‰D «       «      }‰D �cg c]  }|j                  j                  sŒ|‘Œ }}|�r@|D ]S  }t        j                  t        j                  t        |«      t        ¬«      ||j                  ¬«      ||j                  <   ŒU |D �ci c]$  }|j                  sŒ|j                  t        «       “Œ& }}t        t        |«      «      D ]¢  }|D ]›  }|j                  r^t        d«      D ]E  } | |j                   «      }	|	||j                     vsŒ'||j                     j#                  |	«        n t%        «        n | |j                   «      }		 	||j                     j&                  |<   Œ� Œ¤ ‰D ]d  }|j                  j                  rŒ | t9        ||j                  |j                   |j                  |j                  ¬«      «      ||j                  <   Œf t        j:                  ||¬	«      }‰j=                  «       D ]  \  }}t?        ||   |«      ||<   Œ |S c c}w c c}w # t(        $ rY}
|j                  €Gt+        	t,        t.        t0        t2        t4        t6        f«      st)        d|	›d|j                  › d�«      |
‚‚ d }
~
ww xY w)
Nc              3   ó8   K  — | ]  }|j                   d f–— Œ y ­wr!   r²   ©r#   Úcs     r%   r&   z9data_frames.<locals>.just_draw_columns.<locals>.<genexpr>Õ  s   è ø€ ÒI°! §¡¨œ~ÑIùs   ‚)rÃ   r3   )r¿   r3   é   zFailed to add value=z to column z9 with dtype=None.  Maybe passing dtype=object would help?)r¿   r3   r>   rÀ   rš   rß   ) r6   r`   r   rÀ   Úis_emptyr1   r2   rO   ÚzerosrÄ   r…   r3   r}   rš   r    Úranger>   r£   r   Úilocrx   r+   rÕ   r"   rC   r»   r   r	   rÌ   rà   Úitemsrk   )r?   r¿   Úlocal_index_strategyr¦   rç   Úcolumns_without_fillr¨   Úir©   r|   Úerrr§   r}   r,   rÈ   Úrewritten_columnsÚ
tz_columnss                 €€€r%   Újust_draw_columnsz&data_frames.<locals>.just_draw_columnsÐ  sy  ø€ á˜Ó(ˆEÜ#%§7¡7¨5£>Ð äÑIÐ7HÔIÓIˆDð 0AÖ#T¨!ÀAÇFÁFÇOÃO¢AÐ#TÐ Ð#TÚ#Ø-ò �AÜ#)§=¡=ÜŸ™¤s¨5£z¼Ô@Ø#ØŸg™gô$�D˜Ÿ™’Lðð 0DÖP¨!ÀqÇxÃx˜Ÿ™¤£™ÐP�ÐPäœs 5›zÓ*ò "�AØ1ò "˜ØŸ8š8Ü%*¨1£Xò ) Ù(,¨Q¯Z©ZÓ(8 Ø#(°°Q·V±V±Ò#<Ø$(¨¯©¡L×$4Ñ$4°UÔ$;Ù$)ð	)ô !'¥á$(¨¯©Ó$4˜Eð"Ø38˜D §¡™L×-Ñ-¨aÒ0ñ"ð"ð: 'ò 
�Ø—v‘v—“Ù#'ÜØ"6Ø"#§'¡'Ø%&§Z¡ZØ!"§¡Ø#$§8¡8ôó$�D˜Ÿ™’Lð
ô ×%Ñ% d°%Ô8ˆFØ&×,Ñ,Ó.ò A‘��bÜ.¨v°d©|¸RÓ@��t’ðAàˆMùòm $Uùò Qøô"  *ò "ð  !Ÿw™w˜´zØ %¬¬s´C¼¼xÌÐ'Sô8ô '1Ø&;°U°H¸KØ'(§v¡v hð /?ð%?ó'"ð (+ð	!+ð "ûð"ús0   µIÁIÂ6IÃIÅ:IÉ	J2ÉAJ-Ê-J2c                 ó&  •‡—  | ‰«      Št        j                  t        ˆfd„‰D «       «      ‰¬«      }i }t        d„ ‰D «       «      }|r@‰D �cg c]  }|j                  r
t        «       nd ‘Œ }}|d   €|j                  «        |d   €Œt        t        ‰«      «      D �]Í  }t        d«      D �]±  } | ‰«      }|}	t        |	t        «      rod gt        ‰«      z  }
t        ‰«      D ]  \  }}	 |	|j                     |
|<   Œ |	D ]3  }|‰vsŒt!        d|	›d	|›d
‰D �cg c]  }|j                  ‘Œ c}›d�«      ‚ |
}	|r7d}t#        |	d¬«      D ]!  \  }}|€Œ	||v rd} n|j%                  |«       Œ# |rŒÆt'        t)        t*        |	d«      «      }	t        |	«      t        ‰«      kD  r&t!        d|›dt        |	«      › dt        ‰«      › �«      ‚t        |	«      t        ‰«      k  rn‰t        |	«         }|j                  j                  rt!        d|›d|›�«      ‚|	j-                   | |j                  «      «       t        |	«      t        ‰«      k  rŒn|	|j.                  |<    �ŒÃ t1        «        �ŒÐ ‰j3                  «       D ]  \  }}t5        ||   |«      ||<   Œ |S c c}w # t        $ rb 	 ||   |
|<   nT# t        $ rH |j                  j                  rt!        d|›d|›�«      d ‚ | |j                  «      ||<   ||   |
|<   Y nw xY wY �Œ%w xY wc c}w )Nc           
   3   óÈ   •K  — | ]Y  }|j                   t        j                  t        j                  |j
                  t        ‰«      ¬ «      |j
                  ¬«      f–— Œ[ y­w))r3   rÃ   rt   N)r}   r1   r2   rO   rê   r3   rÄ   )r#   rç   r¿   s     €r%   r&   z3data_frames.<locals>.assign_rows.<locals>.<genexpr>$  sL   øè ø€ ò ð ð Ÿ™ÜŸ™ÜŸH™H¨1¯7©7¼#¸e»*ÔEÈQÏWÉWôôñùs   ƒAA"rß   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr!   )rš   ræ   s     r%   r&   z3data_frames.<locals>.assign_rows.<locals>.<genexpr>2  s   è ø€ ÒA¨!˜QŸX�XÑAùs   ‚éÿÿÿÿrè   zEmpty fill strategy in z cannot complete row zRow z contains column z not in columns ú)F)ÚstrictTz
draw(rows)z  contains too many entries. Has z but expected at most )r1   rà   r   Úanyrš   r    Úpoprë   rÄ   r+   ÚdictÚ	enumerater}   ÚKeyErrorrÀ   ré   r   Úzipr£   rˆ   r   Útupler¤   rì   r   rí   rk   )r?   r§   ÚfillsÚ
any_uniquerç   Úall_seenÚ	row_indexr©   Úoriginal_rowrÞ   Úas_listrð   ÚkÚhas_duplicater¨   r|   r}   r,   r¿   Úcolumn_namesrÈ   rò   rÙ   ró   s                     @€€€€€r%   Úassign_rowsz data_frames.<locals>.assign_rows  s‡  ù€ á˜Ó(ˆEä×%Ñ%Üó ð /ôó ð ôˆFð ˆEäÑAÐ/@ÔAÓAˆJáØARÖS¸A Q§X¢XœCœE°4Ñ7ÐS�ÐSØ˜r‘lÐ*Ø—L‘L”Nð ˜r‘lÑ*ô #¤3 u£:Ó.ó 8�	Ü˜q›ó 7�AÙ#'¨£:�LØ&�CÜ! #¤tÔ,Ø#' &¬3Ð/@Ó+AÑ"A˜Ü$-Ð.?Ó$@ò :™D˜A˜qð:Ø-0°·±©[ ¨¢
ð:ð "%ò "˜AØ ¨Ò4Ü&5Ø&*¨3¨'Ð1BÀ1À%ð H/Ø@QÖ/R¸1°·³Ò/RÐ.UÐUVð%Xó'"ð !"ð"ð &˜Ù!Ø(-˜Ü+.¨x¸ÀUÔ+Kò ,™K˜D %Ø#˜|Ø (Ø$¨™}Ø04 Ù %Ø ŸH™H U�Oð,ñ )Ø$Üœ{¬5°#°|ÓDÓE�Cä˜3“x¤#Ð&7Ó"8Ò8Ü-Ø" <Ð"2Ð2RÜ" 3›x˜jÐ(>¼sÐCTÓ?UÐ>VðXóð ô ˜c›(¤SÐ):Ó%;Ò;Ø-¬c°#«hÑ7˜ØŸ6™6Ÿ?š?Ü"1Ø"9¸!¸ð ?0Ø0<Ð/?ð!Aó#ð ð Ÿ
™
¡4¨¯©£<Ô0ô ˜c›(¤SÐ):Ó%;Ó;ð .1�F—K‘K 	Ñ*Úðk7ôn –Hðq8ðr '×,Ñ,Ó.ò A‘��bÜ.¨v°d©|¸RÓ@��t’ðAàˆMùò Tøô $,ò 
:ð	!:Ø16°q± G¨A¢JøÜ'/ò !:Ø'(§v¡v§¢Ü.=Ø.EÀaÀUð K<Ø<HÐ;Kð-Mó/*ð 04ð)4ñ 04°A·F±F«| E¨!¡HØ16°q± G¨A£Jð!:ýð
:üò 0SsC   ÁJÃ,J ÄLÊ 	L	Ê*J3Ê2L	Ê3ALÌL	ÌLÌL	Ì
L	)r¶   r   r   r6   rÊ   r   r  r    rþ   r   rÐ   r   r}   ÚhashrG   rz   r{   r£   rL   r3   r>   r’   r,   r‹   Úfill_forrÀ   rš   r¤   )rØ   rÙ   r¿   rã   Úcolsrð   rç   ÚlabelÚ	column_tzr¼   rË   rô   r  r
  rÈ   rò   ró   s    `           @@@@r%   Údata_framesr    s‚  ü€ ðZ €}Ü&›‰ä�u˜gÔ&Øˆà€Øˆ<Ü!Ð"UÓVÐVô �\‰\ô(ó ð(ñ" “;ÐàÐÐÐÜ”u˜g yÓ1€DàÐÜ#&£5€Lð €Jä˜$“ó $$‰ˆˆ1Ü”6˜1 ¨¨¨1˜oÔ.ä�‹GˆØ�6‰6ˆ>Ø˜q˜c �OˆEØˆA�Fà—F‘FˆEðÜ�Q—V‘V”ð �6‰6�\Ñ!Ü!Ð$HÈÏÉÈ
Ð"SÓTÐTà×Ñ˜Ÿ™Ô Ü% a§g¡gÓ.ˆ	Ø tÐ+ÒB°·
±
¸dÐ0BˆÜ1°!·*±*¸a¿g¹gÀuÓMÑˆŒ
�HÙØˆAŒGØ!*§¡ˆJ�q—v‘vÑà�7‰7ˆ?˜tÐ/Ü!ØXóð ô —‘Ø—‘ !§*¡*°Q·X±XÀEô
ˆŒð 	× Ñ  Ö#ðI$$ðL €|ä	�‰õI	ó 
ðI	ñV !Ó"Ð"ô 
�‰÷T	ó 
ðT	ñl ‹}ÐøôG ò Ü%ØAÀ!ÀÀKØ—v‘v�j 	¬$¨q¯v©v«,×*?Ñ*?Ð)@Ð@Yð[óð ððús   ÃIÉAJr!   )PÚcollectionsr   r   Úcollections.abcr   r   Údataclassesr   r   r	   r
   Útypingr   r   r   r   rO   r1   Ú
hypothesisr   r6   Úhypothesis.controlr   Úhypothesis.errorsr   Úhypothesis.extrar‹   Úhypothesis.internal.conjecturer   r¡   Úhypothesis.internal.coverager   r   Úhypothesis.internal.validationr   r   r   r   Ú*hypothesis.strategies._internal.strategiesr   r   Ú%hypothesis.strategies._internal.utilsr   r   Úhypothesis.utils.deprecationr   Úpandas.core.arrays.integerr   ÚImportErrorr  rI   ÚsplitrH   r-   r:   r@   rL   rQ   rd   rk   r’   r†   r”   r³   r�   r"   rC   rµ   r¶   r»   r¥   r¾   r2   rÌ   rÐ   rˆ   rØ   rý   rà   r  r   r.   r%   ú<module>r#     s0  ð÷ )Ý $Ý Ý !ß 2Ñ 2ß &Ñ &ã Û å 'Ý %Ý -Ý *Ý 6ß >÷ó ÷ Jß MÝ 9ðÝ7ñ ÑG V×%7Ñ%7×%=Ñ%=¸cÓ%BÀ2ÀAÐ%FÔGÓGÈ6ÑQ€ò$òòòò84ò8ò,1ð ò]ó ð]ô@"
˜×*Ñ*ô "
ðJ Ð ð ÙÓàØØ*1¨"¯'©'«)ñTØðTà�D‰jðTð ×
Ñ
˜C $™JÑ
'ðTð ×Ñ�v×(Ñ(Ñ)ò	Tó ó ðTð2 ÙÓð .2ØØØØØ*1¨"¯'©'«)ò-à×Ñ Ñ# dÑ*ð-ð ð-ð ð	-ð
 �D‰jð-ð ð-ð ×
Ñ
˜C $™JÑ
'ð-ð ×Ñ�v—|‘|Ñ$ò-ó ó ð-ñ` Óð .2Øð 	Ø)-ØØ*1¨"¯'©'«)ò|à×Ñ Ñ# dÑ*ð|ð ð|ð 	×ÑÐ9Ñ:¸TÑAð|ð ×
Ñ
˜BÑ
 $Ñ
&ð|ð ð|ð ×
Ñ
˜C $™JÑ
'ð|ð ×Ñ�v—}‘}Ñ%ò|ó ð|ñ~ �˜eÔ$ôˆW�R‰[ó ó %ðð6 Ø-1Ø)-ØòØ˜8 C™=Ñ(ðð ðð ×Ñ Ñ# dÑ*ð	ð
 ×
Ñ
˜BÑ
 $Ñ
&ðð ðð 
ˆ&�‰*Ñóñ6 Óà'+ðcð <@Ø*.ò	cØ�fÑ Ñ$ðcð ×
Ñ
˜D 8¨C¡=Ñ0Ñ
1°DÑ
8ðcð ×Ñ˜RÑ  4Ñ'ð	cð
 ×Ñ�v×'Ñ'Ñ(òcó ñcøðY ò ØƒLðús   Â K: Ë:LÌL