Ë
    ¤eh˜0  ã                  ó   — d dl mZ d dlZd dlmZmZmZ d dlZ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 d d	lmZ d d
lmZmZ erd dlZd dlmZmZmZmZm Z  e G d„ de«      «       Z!	 d	 	 	 dd„Z" G d„ de«      Z#y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚClassVarÚcast)ÚlibÚmissing)Úis_list_like)Úregister_extension_dtype)Úisna)Úops)Úmasked_accumulations)ÚBaseMaskedArrayÚBaseMaskedDtype)ÚDtypeÚDtypeObjÚSelfÚnptÚtype_tc                  ó¤   — e Zd ZU dZdZded<   edd„«       Zedd„«       Zedd„«       Z	e
dd„«       Zdd	„Zedd
„«       Zedd„«       Z	 	 	 	 dd„Zy)ÚBooleanDtypeaI  
    Extension dtype for boolean data.

    .. warning::

       BooleanDtype is considered experimental. The implementation and
       parts of the API may change without warning.

    Attributes
    ----------
    None

    Methods
    -------
    None

    Examples
    --------
    >>> pd.BooleanDtype()
    BooleanDtype
    ÚbooleanzClassVar[str]Únamec                ó"   — t         j                  S ©N)ÚnpÚbool_©Úselfs    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/arrays/boolean.pyÚtypezBooleanDtype.typeD   s   € ä�x‰xˆó    c                 ó   — y)NÚb© r   s    r   ÚkindzBooleanDtype.kindH   s   € àr!   c                ó,   — t        j                  d«      S )NÚbool)r   Údtyper   s    r   Únumpy_dtypezBooleanDtype.numpy_dtypeL   s   € ä�x‰x˜ÓÐr!   c                ó   — t         S )zq
        Return the array type associated with this dtype.

        Returns
        -------
        type
        )ÚBooleanArray)Úclss    r   Úconstruct_array_typez!BooleanDtype.construct_array_typeP   s
   € ô Ðr!   c                 ó   — y)Nr   r$   r   s    r   Ú__repr__zBooleanDtype.__repr__[   s   € Ør!   c                 ó   — y©NTr$   r   s    r   Ú_is_booleanzBooleanDtype._is_boolean^   ó   € àr!   c                 ó   — yr1   r$   r   s    r   Ú_is_numericzBooleanDtype._is_numericb   r3   r!   c                ó  — ddl }|j                   |j                  «       k7  r>|j                  j	                  |j                  «      st        d|j                  › d�«      ‚t        ||j                  «      r|g}t        |«      }n|j                  }|j                  «       }|j                  j	                  |j                  «      rBt        j                  |t        ¬«      }t        j                  |t        ¬«      }t        ||«      S g }|D �]	  }|j!                  «       }	|j                  j#                  |j                  t        |«      d|	d   g|j$                  ¬«      j'                  d¬	«      }|j(                  dk7  rU|j                  j#                  |j                  t        |«      d|	d   g|j$                  ¬«      j'                  d¬	«      }| }n$t        j*                  t        |«      t        ¬«      }t        ||«      }
|j-                  |
«       �Œ |sRt        t        j.                  g t        j                  ¬«      t        j.                  g t        j                  ¬«      «      S t        j1                  |«      S )
zI
        Construct BooleanArray from pyarrow Array/ChunkedArray.
        r   Nz$Expected array of boolean type, got z instead©r(   é   )ÚoffsetF)Úzero_copy_only)Úpyarrowr    r   ÚtypesÚis_nullÚ	TypeErrorÚ
isinstanceÚArrayÚlenÚchunksÚlengthr   Úonesr'   Úemptyr+   ÚbuffersÚfrom_buffersr9   Úto_numpyÚ
null_countÚzerosÚappendÚarrayÚ_concat_same_type)r   rL   r;   rB   rC   ÚmaskÚdataÚresultsÚarrÚbuflistÚbool_arrs              r   Ú__from_arrow__zBooleanDtype.__from_arrow__f   sú  € ó 	à�:‰:˜˜Ÿ™›Ò(°·±×1FÑ1FÀuÇzÁzÔ1RÜÐBÀ5Ç:Á:À,ÈhÐWÓXÐXä�e˜WŸ]™]Ô+Ø�WˆFÜ˜“Z‰Fð —\‘\ˆFØ—\‘\“^ˆFà�=‰=× Ñ  §¡Ô,Ü—7‘7˜6¬Ô.ˆDä—8‘8˜F¬$Ô/ˆDÜ  dÓ+Ð+àˆØó 	%ˆCØ—k‘k“mˆGØ×'Ñ'×4Ñ4Ø—‘œ#˜c›( T¨7°1©:Ð$6¸s¿z¹zð 5ó ç‰h eˆhÓ,ð ð �~‰~ Ò"Ø×+Ñ+×8Ñ8Ø—H‘Hœc #›h¨¨w°q©zÐ(:À3Ç:Á:ð 9ó ç‘(¨%�(Ó0ð ð �u‘ä—x‘x¤ C£´Ô5�ä# D¨$Ó/ˆHØ�N‰N˜8Ö$ð	%ñ  ÜÜ—‘˜¤2§8¡8Ô,¬b¯h©h°rÄÇÁÔ.Jóð ô  ×1Ñ1°'Ó:Ð:r!   N)Úreturnr    )rU   Ústr)rU   znp.dtype)rU   ztype_t[BooleanArray]©rU   r'   )rL   z$pyarrow.Array | pyarrow.ChunkedArrayrU   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__Úpropertyr    r%   r)   Úclassmethodr-   r/   r2   r5   rT   r$   r!   r   r   r   (   s¥   … ñð, $€Dˆ-Ó#ð òó ðð òó ðð ò ó ð ð òó ðóð òó ðð òó ðð/;Ø9ð/;à	ô/;r!   r   c                óV  — t        | t        «      rK|�t        d«      ‚| j                  | j                  }} |r | j                  «       } |j                  «       }| |fS d}t        | t        j                  «      r2| j                  t        j                  k(  r|�rÈ| j                  «       } �n¶t        | t        j                  «      r«| j                  j                  dv r“t        | «      }t        j                  t        | «      t        ¬«      }| |    j                  t        «      || <   t        j                   ||    j                  | j                  «      | |    k(  «      st#        d«      ‚|} nñt        j$                  | t&        ¬«      }t)        j*                  |d¬«      }d}|d	|z   vrt#        d«      ‚t-        d
t        |«      «      }t        j                  t        | «      t        ¬«      } ||    j                  t        «      | | <   ||v rQt        j                   | |    j                  t.        «      ||    j                  t.        «      k(  «      st#        d«      ‚|€(|€&t        j                  | j0                  t        ¬«      }ny|€|}ntt        |t        j                  «      r8|j                  t        j                  k(  r|�||z  }n5|r3|j                  «       }n"t        j2                  |t        ¬«      }|�||z  }| j0                  |j0                  k7  rt        d«      ‚| |fS )a  
    Coerce the input values array to numpy arrays with a mask.

    Parameters
    ----------
    values : 1D list-like
    mask : bool 1D array, optional
    copy : bool, default False
        if True, copy the input

    Returns
    -------
    tuple of (values, mask)
    Nz'cannot pass mask for BooleanArray inputÚiufcbr7   zNeed to pass bool-like valuesT©Úskipna)ÚfloatingÚintegerzmixed-integer-float)r   rE   únpt.NDArray[np.bool_]z&values.shape and mask.shape must match)r?   r+   Ú
ValueErrorÚ_dataÚ_maskÚcopyr   Úndarrayr(   r   r%   r   rJ   rA   r'   ÚastypeÚallr>   ÚasarrayÚobjectr   Úinfer_dtyper   ÚfloatÚshaperL   )ÚvaluesrN   ri   Úmask_valuesÚvalues_boolÚvalues_objectÚinferred_dtypeÚinteger_likes           r   Úcoerce_to_arrayrx   ˜   s£  € ô" �&œ,Ô'ØÐÜÐFÓGÐGØ—|‘| V§\¡\�ˆÙØ—[‘[“]ˆFØ—9‘9“;ˆDØ�tˆ|Ðà€KÜ�&œ"Ÿ*™*Ô%¨&¯,©,¼"¿(¹(Ò*BÚØ—[‘[“]ŠFÜ	�FœBŸJ™JÔ	'¨F¯L©L×,=Ñ,=ÀÑ,HÜ˜6“lˆä—h‘hœs 6›{´$Ô7ˆØ$*¨K¨<Ñ$8×$?Ñ$?ÄÓ$Eˆ�[�LÑ!ä�v‰vØ˜˜Ñ%×,Ñ,¨V¯\©\Ó:¸fÀkÀ\Ñ>RÑRô
ô Ð;Ó<Ð<à‰äŸ
™
 6´Ô8ˆäŸ™¨¸tÔDˆØEˆØÐ!5¸Ñ!DÑDÜÐ;Ó<Ð<ô Ð2´D¸Ó4GÓHˆÜ—‘œ#˜f›+¬TÔ2ˆØ,¨k¨\Ñ:×AÑAÄ$ÓGˆ�ˆ|Ñð ˜lÑ*Ü�F‰FØ˜�|Ñ$×+Ñ+¬EÓ2Ø  + Ñ.×5Ñ5´eÓ<ñ=ôô
 Ð;Ó<Ð<à€|˜Ð+Ü�x‰x˜Ÿ™¬DÔ1‰Ø	ˆØ‰ä�dœBŸJ™JÔ'¨D¯J©J¼"¿(¹(Ò,BØÐ&Ø˜kÑ)‘áØŸ9™9›;‘Dä—8‘8˜D¬Ô-ˆDØÐ&Ø˜kÑ)�à‡|�|�t—z‘zÒ!ÜÐAÓBÐBà�4ˆ<Ðr!   c                  ó6  ‡ — e Zd ZdZdZdZdZh d£Zh d£Ze	dˆ fd„«       Z
	 d	 	 	 	 	 	 	 dˆ fd„Zedd„«       Ze	d	dd	d	d
œ	 	 	 	 	 	 	 	 	 	 	 dd„«       Zej                   ej$                  eej(                  fZe	ddœ	 	 	 	 	 dd„«       Zd„ Zddœ	 	 	 	 	 dd„Zˆ xZS )r+   a=  
    Array of boolean (True/False) data with missing values.

    This is a pandas Extension array for boolean data, under the hood
    represented by 2 numpy arrays: a boolean array with the data and
    a boolean array with the mask (True indicating missing).

    BooleanArray implements Kleene logic (sometimes called three-value
    logic) for logical operations. See :ref:`boolean.kleene` for more.

    To construct an BooleanArray from generic array-like input, use
    :func:`pandas.array` specifying ``dtype="boolean"`` (see examples
    below).

    .. warning::

       BooleanArray is considered experimental. The implementation and
       parts of the API may change without warning.

    Parameters
    ----------
    values : numpy.ndarray
        A 1-d boolean-dtype array with the data.
    mask : numpy.ndarray
        A 1-d boolean-dtype array indicating missing values (True
        indicates missing).
    copy : bool, default False
        Whether to copy the `values` and `mask` arrays.

    Attributes
    ----------
    None

    Methods
    -------
    None

    Returns
    -------
    BooleanArray

    Examples
    --------
    Create an BooleanArray with :func:`pandas.array`:

    >>> pd.array([True, False, None], dtype="boolean")
    <BooleanArray>
    [True, False, <NA>]
    Length: 3, dtype: boolean
    FT>   ú1.0Ú1ÚTRUEÚTrueÚtrue>   ú0.0Ú0ÚFALSEÚFalseÚfalsec                óF   •— t         ‰| �  ||«      }t        «       |_        |S r   )ÚsuperÚ_simple_newr   Ú_dtype)r,   rr   rN   ÚresultÚ	__class__s       €r   r†   zBooleanArray._simple_new-  s"   ø€ ä‘Ñ$ V¨TÓ2ˆÜ$›ˆŒØˆr!   c                óÌ   •— t        |t        j                  «      r|j                  t        j                  k(  st        d«      ‚t        «       | _        t        ‰| �%  |||¬«       y )NzIvalues should be boolean numpy array. Use the 'pd.array' function instead©ri   )
r?   r   rj   r(   r   r>   r   r‡   r…   Ú__init__)r   rr   rN   ri   r‰   s       €r   rŒ   zBooleanArray.__init__3  sS   ø€ ô ˜6¤2§:¡:Ô.°6·<±<Ä2Ç8Á8Ò3KÜð2óð ô #“nˆŒÜ‰Ñ˜ ¨DÐÕ1r!   c                ó   — | j                   S r   )r‡   r   s    r   r(   zBooleanArray.dtype>  s   € à�{‰{Ðr!   N)r(   ri   Útrue_valuesÚfalse_valuesc               ó>  ‡	‡
— | j                   j                  |xs g «      Š
| j                  j                  |xs g «      Š	dˆ	ˆ
fd„}t        j                  |t
        ¬«      }t        |«      }t        t        |||    «      «      || <   | j                  |||¬«      S )Nc                ó4   •— | ‰v ry| ‰v ryt        | › d�«      ‚)NTFz cannot be cast to bool)rf   )ÚsÚfalse_values_unionÚtrue_values_unions    €€r   Ú
map_stringz:BooleanArray._from_sequence_of_strings.<locals>.map_stringO  s.   ø€ ØÐ%Ñ%ØØÐ(Ñ(Øä  A 3Ð&=Ð!>Ó?Ð?r!   r7   )r(   ri   rW   )
Ú_TRUE_VALUESÚunionÚ_FALSE_VALUESr   rL   rn   r   ÚlistÚmapÚ_from_sequence)r,   Ústringsr(   ri   rŽ   r�   r•   ÚscalarsrN   r“   r”   s            @@r   Ú_from_sequence_of_stringsz&BooleanArray._from_sequence_of_stringsB  s“   ù€ ð  ×,Ñ,×2Ñ2°;Ò3DÀ"ÓEÐØ ×.Ñ.×4Ñ4°\Ò5GÀRÓHÐö	@ô —(‘(˜7¬&Ô1ˆÜ�G‹}ˆÜœc *¨g°t°e©nÓ=Ó>ˆ��‰Ø×!Ñ! '°¸TÐ!ÓBÐBr!   r‹   c               ó.   — |r|dk(  sJ ‚t        ||¬«      S )Nr   r‹   )rx   )r,   Úvaluer(   ri   s       r   Ú_coerce_to_arrayzBooleanArray._coerce_to_array^  s"   € ñ Ø˜IÒ%Ð%Ð%Ü˜u¨4Ô0Ð0r!   c                óè  — |j                   dv sJ ‚t        j                  |«      }d }t        |t        «      r|j
                  |j                  }}nwt        |«      rBt        j                  |d¬«      }|j                  dkD  rt        d«      ‚t        |d¬«      \  }}n*t        |t        j                  «      r|j                  «       }|rI|t        j                   ur7t        j"                  |«      s"t%        dt'        |«      j                   › d	�«      ‚|s"t)        | «      t)        |«      k7  rt+        d
«      ‚|j                   dv r0t-        j.                  | j
                  || j                  |«      \  }}nm|j                   dv r0t-        j0                  | j
                  || j                  |«      \  }}n/t-        j2                  | j
                  || j                  |«      \  }}| j5                  ||«      S )N>   Úor_ÚxorÚand_Úror_ÚrxorÚrand_r'   r7   r8   z(can only perform ops with 1-d structuresFr‹   z+'other' should be pandas.NA or a bool. Got z	 instead.zLengths must match>   r£   r¦   >   r¥   r¨   )rX   r   Ú	is_scalarr?   r+   rg   rh   r	   r   rm   ÚndimÚNotImplementedErrorrx   r   ÚitemÚ
libmissingÚNAÚis_boolr>   r    rA   rf   r   Ú	kleene_orÚ
kleene_andÚ
kleene_xorÚ_maybe_mask_result)r   ÚotherÚopÚother_is_scalarrN   rˆ   s         r   Ú_logical_methodzBooleanArray._logical_methodf  s�  € Ø�{‰{ÐMÑMÐMÐMÜŸ-™-¨Ó.ˆØˆä�eœ\Ô*ØŸ+™+ u§{¡{�4‰EÜ˜%Ô Ü—J‘J˜u¨FÔ3ˆEØ�z‰z˜AŠ~Ü)Ð*TÓUÐUÜ)¨%°eÔ<‰KˆE‘4Ü˜œrŸx™xÔ(Ø—J‘J“LˆEá˜u¬J¯M©MÑ9Ä#Ç+Á+ÈeÔBTÜðÜ˜E“{×+Ñ+Ð,¨Ið7óð ñ
 ¤3 t£9´°E³
Ò#:ÜÐ1Ó2Ð2à�;‰;˜/Ñ)ÜŸ=™=¨¯©°U¸D¿J¹JÈÓM‰LˆF‘DØ�[‰[Ð-Ñ-ÜŸ>™>¨$¯*©*°e¸T¿Z¹ZÈÓN‰LˆF‘Dô Ÿ>™>¨$¯*©*°e¸T¿Z¹ZÈÓN‰LˆF�Dð ×&Ñ& v¨tÓ4Ð4r!   ra   c               ó  — | j                   }| j                  }|dv r1t        t        |«      } |||fd|i|¤Ž\  }}| j	                  ||«      S ddlm}   ||j                  t        «      |«      j                  |fd|i|¤ŽS )N)ÚcumminÚcummaxrb   r   )ÚIntegerArray)
rg   rh   Úgetattrr   r†   Úpandas.core.arraysr»   rk   ÚintÚ_accumulate)r   r   rb   ÚkwargsrO   rN   rµ   r»   s           r   r¿   zBooleanArray._accumulate‰  s”   € ð �z‰zˆØ�z‰zˆØÐ'Ñ'ÜÔ-¨tÓ4ˆBÙ˜D $Ñ@¨vÐ@¸Ñ@‰JˆD�$Ø×#Ñ# D¨$Ó/Ð/å7àC‘< §¡¬CÓ 0°$Ó7×CÑCØñØ#ðØ'-ñð r!   )rr   ú
np.ndarrayrN   re   rU   r   )F)rr   rÁ   rN   rÁ   ri   r'   rU   ÚNone)rU   r   )rœ   z	list[str]r(   zDtype | Noneri   r'   rŽ   úlist[str] | Noner�   rÃ   rU   r+   )r(   r   ri   r'   rU   útuple[np.ndarray, np.ndarray])r   rV   rb   r'   rU   r   )rX   rY   rZ   r[   Ú_internal_fill_valueÚ_truthy_valueÚ_falsey_valuer–   r˜   r^   r†   rŒ   r]   r(   rž   r   rj   ÚnumbersÚNumberr'   r   Ú_HANDLED_TYPESr¡   r·   r¿   Ú__classcell__)r‰   s   @r   r+   r+   ï   sN  ø„ ñ1ðh !Ðð €MØ€MÚ7€LÚ;€Màôó ðð BGð	2Ø ð	2Ø(2ð	2Ø:>ð	2à	õ	2ð òó ðð ð
 #ØØ(,Ø)-ñCàðCð ð	Cð
 ðCð &ðCð 'ðCð 
òCó ðCð2 —j‘j '§.¡.°$¸¿¹ÐA€Nàà5:ñ1Ø&ð1Ø.2ð1à	&ò1ó ð1ò!5ðH ,0ñØðØ$(ðà	÷r!   r+   )NF)ri   r'   rU   rÄ   )$Ú
__future__r   rÈ   Útypingr   r   r   Únumpyr   Úpandas._libsr   r   r­   Úpandas.core.dtypes.commonr	   Úpandas.core.dtypes.dtypesr
   Úpandas.core.dtypes.missingr   Úpandas.corer   Úpandas.core.array_algosr   Úpandas.core.arrays.maskedr   r   r;   Úpandas._typingr   r   r   r   r   r   rx   r+   r$   r!   r   ú<module>r×      s’   ðÝ "ã ÷ñ ó ÷õ
 3Ý >Ý +å Ý 8÷ñ
 Û÷õ ð ôl;�?ó l;ó ðl;ð` %*ðTØ!ðTà"óTônh�?õ hr!   