§
    	�’jÚE ã                  óÌ  — d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlZd dlZd dlmZmZmZ d dlmZmZ d dlmZ d dlmZ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$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZD d dlEmFc mGZH d dlImJZJmKZKmLZLmMZMmNZN d dlOmPZP d dlQmRZRmSZSmTZT d dlUmVZV d dlWmXZXmYZYmZZZm[Z[m\Z\m]Z] d dl^m_Z_ d dl`maZa d dlbmFc mcZd d dlemfZf d dlgmhZhmiZi d dljmkZk d dllmmZm er0d dlnmoZompZpmqZqmrZr d dlsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z} d d l~mZ d d!l€m�Z�  ej‚        d"¦  «        Zƒ G d#„ d$eaej„        ¦  «        Z„ G d%„ d&e„¦  «        Z… G d'„ d(e…¦  «        Z† G d)„ d*e„¦  «        Z‡ G d+„ d,e…¦  «        Zˆ G d-„ d.eˆ¦  «        Z‰dJd2„ZŠdKd6„Z‹	 dLdMd;„ZŒdd<œdNd?„Z�dOdA„ZŽdPdD„Z�dLdQdF„Z�dRdSdH„Z‘dJdI„Z’dS )Té    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚLiteralÚSelfÚcastÚfinal)ÚNaTÚ	internalsÚlib)ÚBlockPlacementÚBlockValuesRefs)ÚNA)ÚAbstractMethodErrorÚOutOfBoundsDatetimeÚPandas4Warning)Úcache_readonly)Úfind_stack_level)Úvalidate_bool_kwarg)Úastype_array_safeÚastype_is_view)ÚLossySetitemErrorÚcan_hold_elementÚconvert_dtypesÚfind_result_typeÚnp_can_hold_element)Úis_1d_only_ea_dtypeÚis_float_dtypeÚis_integer_dtypeÚis_list_likeÚ	is_scalarÚis_string_dtype)ÚDatetimeTZDtypeÚExtensionDtypeÚIntervalDtypeÚNumpyEADtypeÚPeriodDtype)ÚABCDataFrameÚABCIndexÚABCNumpyExtensionArrayÚ	ABCSeries)Úis_re)Úis_valid_na_for_dtypeÚisnaÚna_value_for_dtype)Úmissing)Úextract_bool_arrayÚputmask_inplaceÚputmask_without_repeatÚsetitem_datetimelike_compatÚvalidate_putmask)Úquantile_compat)Úcompare_or_regex_searchÚreplace_regexÚshould_use_regex)Úshift)ÚDatetimeArrayÚExtensionArrayÚIntervalArrayÚNumpyExtensionArrayÚPeriodArrayÚTimedeltaArray)ÚStringDtype)ÚPandasObject)Úexpressions)Úensure_wrapped_if_datetimelikeÚextract_array)Úcheck_setitem_lengths)Úget_values_for_csv)ÚCallableÚ	GeneratorÚIterableÚSequence)
Ú	ArrayLikeÚAxisIntÚDtypeBackendÚDtypeObjÚFillnaOptionsÚIgnoreRaiseÚInterpolateOptionsÚQuantileInterpolationÚShapeÚnpt)ÚIndex)ÚNDArrayBackedExtensionArrayÚobjectc                  ó  — e Zd ZU dZded<   ded<   ded<   ded	<   d
ZdZeed¢d„¦   «         ¦   «         Z	eed¢d„¦   «         ¦   «         Z
eed¢d„¦   «         ¦   «         Zeed¢d„¦   «         ¦   «         Zeed„ ¦   «         ¦   «         Zeed¢d„¦   «         ¦   «         Zeed¢d„¦   «         ¦   «         Zed„ ¦   «         Zeed„ ¦   «         ¦   «         Zed„ ¦   «         Zed£d„¦   «         Zej        d¤d„¦   «         Ze	 	 d¥d¦d!„¦   «         Ze	 	 d¥d§d#„¦   «         Zed¨d%„¦   «         Zed©d&„¦   «         Zedªd)„¦   «         Zed«d,„¦   «         Ze	 d¬d­d/„¦   «         Zed®d2„¦   «         Zed¯d5„¦   «         Zed°d7„¦   «         Zed±d8„¦   «         Z ed²d:„¦   «         Z!ed³d<„¦   «         Z"ed°d=„¦   «         Z#ed´d?„¦   «         Z$ed°d@„¦   «         Z%	 	 	 	 	 	 dµd¶dJ„Z&eed·dL„¦   «         ¦   «         Z'e	 	 d¸d¹dR„¦   «         Z(edSddTœdºdV„¦   «         Z)ed»dX„¦   «         Z*d¼d½dZ„Z+ed¾d[„¦   «         Z,e	 	 d¿dÀd^„¦   «         Z-e	 	 d¿dÁd_„¦   «         Z.e	 	 dÂdÃde„¦   «         Z/e	 	 dÄdÅdg„¦   «         Z0dÆdj„Z1dk„ Z2edÇdm„¦   «         Z3dÈdp„Z4dÉdr„Z5d¬dÊdt„Z6ede7j8        fdËdx„¦   «         Z9dÌd{„Z:d±d|„Z;d°d}„Z<d°d~„Z=	 	 dÍdÎd�„Z>dddd‚œdÏd‡„Z?edddˆdd‰œdÐd�„¦   «         Z@edÑd‘„¦   «         ZAdÒdÓd”„ZBe	 dÔdÕd™„¦   «         ZCedÖd›„¦   «         ZDd°dœ„ZEed¢d�„¦   «         ZFed×dŸ„¦   «         ZGdÒdØd¡„ZHdS )ÙÚBlockz�
    Canonical n-dimensional unit of homogeneous dtype contained in a pandas
    data structure

    Index-ignorant; let the container take care of that
    znp.ndarray | ExtensionArrayÚvaluesÚintÚndimr   ÚrefsrH   Ú__init__© FÚreturnÚboolc                ó,   — t          | j        ¦  «         S )z§
        We validate dimension for blocks that can hold 2D values, which for now
        means numpy dtypes or EA dtypes like DatetimeTZDtype and PeriodDtype.
        )r   Údtype©Úselfs    úJC:\Projects\DSCons\.venv\Lib\site-packages\pandas\core\internals\blocks.pyÚ_validate_ndimzBlock._validate_ndimš   s   € õ ' t¤zÑ2Ô2Ð2Ð2ó    c                ó,   — | j         j        t          k    S ©N)r[   rd   Ú
_dtype_objre   s    rg   Ú	is_objectzBlock.is_object£   s   € ð Œ{Ô ¥JÒ.Ð.ri   c                ó@   — t          j        | j        j        ¦  «         S rk   )r   Úis_np_dtyper[   rd   re   s    rg   Úis_extensionzBlock.is_extension¨   s   € õ ”? 4¤;Ô#4Ñ5Ô5Ð5Ð5ri   c                ó   — | j          S rk   )rp   re   s    rg   Ú_can_consolidatezBlock._can_consolidate­   s   € ð Ô$Ð$Ð$ri   c                ó(   — | j         | j        j        fS rk   )rr   rd   Únamere   s    rg   Ú_consolidate_keyzBlock._consolidate_key³   s   € ð Ô$ d¤j¤oÐ5Ð5ri   c                ód   — | j         }t          |t          j         ¦  «        r	|j        dvS |j        S )z7
        Can we store NA values in this Block?
        Úiub)rd   Ú
isinstanceÚnpÚkindÚ_can_hold_na©rf   rd   s     rg   r{   zBlock._can_hold_na¸   s5   € ð ”
ˆÝ�e�RœXÑ&Ô&ð 	+Ø”: UÐ*Ð*ØÔ!Ð!ri   c                óP   — | j         j        t          j        t          ¦  «        k    S )z^
        We can be bool if a) we are bool dtype or b) object dtype with bool objects.
        )r[   rd   ry   rb   re   s    rg   Úis_boolzBlock.is_boolÃ   s   € ð Œ{Ô ¥B¤H­T¡N¤NÒ2Ð2ri   c                ó*   — t          | j        ¦  «        S rk   )Úexternal_valuesr[   re   s    rg   r€   zBlock.external_valuesË   s   € å˜tœ{Ñ+Ô+Ð+ri   c                ó.   — t          | j        d¬¦  «        S )NF)Úcompat)r/   rd   re   s    rg   Ú
fill_valuezBlock.fill_valueÏ   s   € õ " $¤*°UÐ;Ñ;Ô;Ð;ri   c                ó^   — | j         t          k    rt          || j         ¦  «        r| j        }|S rk   )rd   rl   r-   rƒ   ©rf   Úvalues     rg   Ú_standardize_fill_valuezBlock._standardize_fill_valueÕ   s/   € ð Œ:�Ò#Ð#Õ(=¸eÀTÄZÑ(PÔ(PÐ#Ø”OˆEØˆri   r   c                ó   — | j         S rk   ©Ú	_mgr_locsre   s    rg   Úmgr_locszBlock.mgr_locsÜ   s
   € àŒ~Ðri   Únew_mgr_locsÚNonec                ó   — || _         d S rk   r‰   )rf   rŒ   s     rg   r‹   zBlock.mgr_locsà   s   € à%ˆŒˆˆri   NÚ	placementúBlockPlacement | NoneúBlockValuesRefs | Nonec                ó~   — |€| j         }| j        rt          || j        ¬¦  «        }t	          ||| j        |¬¦  «        S )zm
        Create a new block, with type inference propagate any values that are
        not specified
        N©r]   ©r�   r]   r^   )rŠ   rp   Úensure_block_shaper]   Ú	new_block©rf   r[   r�   r^   s       rg   Ú
make_blockzBlock.make_blockä   sJ   € ð ÐØœˆIØÔð 	@Ý'¨°T´YÐ?Ñ?Ô?ˆFå˜¨9¸4¼9È4ÐPÑPÔPÐPri   r   c                óV   — |€| j         } t          | ¦  «        ||| j        |¬¦  «        S )z2Wrap given values in a block of same type as self.Nr”   )rŠ   Útyper]   r—   s       rg   Úmake_block_same_classzBlock.make_block_same_classö   s4   € ð ÐØœˆIð �t�D‰zŒz˜&¨I¸D¼IÈDÐQÑQÔQÐQri   Ústrc                óþ   — t          | ¦  «        j        }| j        dk    r|› dt          | ¦  «        › d| j        › �}n@d                     d„ | j        D ¦   «         ¦  «        }|› d| j        j        › d|› d| j        › �}|S )Né   z: z dtype: z x c                ó,   — g | ]}t          |¦  «        ‘ŒS r`   )rœ   )Ú.0Úss     rg   ú
<listcomp>z"Block.__repr__.<locals>.<listcomp>  s   € Ð;Ð;Ð;¨1¥ A¡¤Ð;Ð;Ð;ri   z, z	, dtype: )	rš   Ú__name__r]   Úlenrd   ÚjoinÚshaper‹   Úindexer)rf   rt   Úresultr¦   s       rg   Ú__repr__zBlock.__repr__  s“   € õ �D‰zŒzÔ"ˆØŒ9˜Š>ˆ>ØÐ?Ð?¥ D¡	¤	Ð?Ð?°4´:Ð?Ð?ˆFˆFà—J’JÐ;Ð;°´
Ð;Ñ;Ô;Ñ<Ô<ˆEØÐUÐU ¤Ô 5ÐUÐU¸ÐUÐUÈÌÐUÐUˆFàˆri   c                ó*   — t          | j        ¦  «        S rk   )r¤   r[   re   s    rg   Ú__len__zBlock.__len__  s   € å�4”;ÑÔÐri   ÚslcÚslicec                ó–   — | j         |         }|                      |¦  «        }| j        } t          | ¦  «        ||| j        |¬¦  «        S )zC
        Perform __getitem__-like, return result as block.
        ©r^   )rŠ   Ú_slicer^   rš   r]   )rf   r¬   rŒ   Ú
new_valuesr^   s        rg   Úslice_block_columnszBlock.slice_block_columns  sI   € ð
 ”~ cÔ*ˆà—[’[ Ñ%Ô%ˆ
ØŒyˆØ�t�D‰zŒz˜* l°D´IÀDÐIÑIÔIÐIri   Úindicesúnpt.NDArray[np.intp]c                óˆ   — | j         |         }|                      |¦  «        } t          | ¦  «        ||| j        d¬¦  «        S ©z
        Perform __getitem__-like, return result as block.

        Only supports slices that preserve dimensionality.
        Nr¯   )rŠ   r°   rš   r]   )rf   r³   rŒ   r±   s       rg   Útake_block_columnszBlock.take_block_columns!  sB   € ð ”~ gÔ.ˆà—[’[ Ñ)Ô)ˆ
Ø�t�D‰zŒz˜* l°D´IÀDÐIÑIÔIÐIri   ÚslicerÚref_inplace_opc                ó¶   — |                       |¦  «        }|r| j                             ¦   «         r| j        nd} t          | ¦  «        ||| j        |¬¦  «        S r¶   )r°   r^   Úhas_referencerš   r]   )rf   r¸   rŒ   r¹   r±   r^   s         rg   Úgetitem_block_columnszBlock.getitem_block_columns0  sZ   € ð —[’[ Ñ(Ô(ˆ
Ø .ÐU°$´)×2IÒ2IÑ2KÔ2KÐUˆtŒyˆyÐQUˆØ�t�D‰zŒz˜* l°D´IÀDÐIÑIÔIÐIri   Úelementr   c                óN   — t          |d¬¦  «        }t          | j        |¦  «        S )z#require the same dtype as ourselvesT©Úextract_numpy)rE   r   r[   )rf   r½   s     rg   Ú_can_hold_elementzBlock._can_hold_element=  s(   € õ   °tÐ<Ñ<Ô<ˆÝ ¤¨WÑ5Ô5Ð5ri   r†   rL   c                ó"   — |j         | j         k    S )zÝ
        Should we set self.values[indexer] = value inplace or do we need to cast?

        Parameters
        ----------
        value : np.ndarray or ExtensionArray

        Returns
        -------
        bool
        ©rd   r…   s     rg   Úshould_storezBlock.should_storeC  s   € ð Œ{˜dœjÒ(Ð(ri   úlist[Block]c                óf   —  || j         fi |¤Ž}t          |¦  «        }|                      |¦  «        S )z[
        apply the function to my values; return a block if we are not
        one
        )r[   Úmaybe_coerce_valuesÚ_split_op_result)rf   ÚfuncÚkwargsr¨   s       rg   ÚapplyzBlock.applyU  s>   € ð ��d”kÐ,Ð, VÐ,Ð,ˆå$ VÑ,Ô,ˆØ×$Ò$ VÑ,Ô,Ð,ri   c                ó¸   — | j         dk    sJ ‚ || j        ¦  «        }| j        j         dk    r|}n|                     dd¦  «        }|                      |¦  «        S )Né   rž   éÿÿÿÿ)r]   r[   Úreshaper˜   )rf   rÉ   r¨   Ú
res_valuess       rg   ÚreducezBlock.reduce`  s`   € ð Œy˜AŠ~ˆ~ˆ~ˆ~à��d”kÑ"Ô"ˆàŒ;Ô˜qÒ Ð ØˆJˆJàŸš¨¨AÑ.Ô.ˆJà�Š˜zÑ*Ô*Ð*ri   r¨   c                ó‚  — |j         dk    r�t          |j        t          ¦  «        rƒg }t	          | j        ¦  «        D ]j\  }}t          |j        ¦  «        s|||dz   …         }n||         }t          |¦  «        }|                      ||¬¦  «        }| 	                    |¦  «         Œk|S |                      |¦  «        }|gS )Nrž   )r[   r�   )
r]   rx   rd   r$   Ú	enumeraterŠ   r   r   r˜   Úappend)	rf   r¨   ÚnbsÚiÚlocÚvalsÚbpÚblockÚnbs	            rg   rÈ   zBlock._split_op_resulto  sÆ   € ð Œ;˜Š?ˆ?�z¨&¬,½ÑGÔGˆ?ð ˆCÝ# D¤NÑ3Ô3ð "ð "‘��3Ý*¨6¬<Ñ8Ô8ð %Ø! ! a¨!¡e )Ô,�D�Dà! !œ9�Då# CÑ(Ô(�ØŸš¨t¸r˜ÑBÔB�Ø—
’
˜5Ñ!Ô!Ð!Ð!ØˆJà�_Š_˜VÑ$Ô$ˆàˆtˆri   úGenerator[Block]c              #  óü   K  — | j         dk    sJ ‚t          | j        ¦  «        D ]W\  }}| j        t	          ||dz   ¦  «                 }t          |¦  «        } t          | ¦  «        ||d| j        ¬¦  «        }|V — ŒXdS )zD
        Split a block into a list of single-column blocks.
        rÍ   rž   r”   N)r]   rÓ   rŠ   r[   r­   r   rš   r^   )rf   rÖ   Úref_locrØ   rÙ   rÛ   s         rg   Ú_splitzBlock._split…  sŽ   è è € ð
 Œy˜AŠ~ˆ~ˆ~ˆ~å# D¤NÑ3Ô3ð 	ð 	‰JˆAˆwØ”;�u Q¨¨A©™œÔ/ˆDå Ñ(Ô(ˆBØ•�d‘”˜D¨B°Q¸T¼YÐGÑGÔGˆBØˆHˆHˆHˆHð	ð 	ri   c                ó¶   — | j         dk    r| j        d         dk    sJ ‚g }|                      ¦   «         D ]#} ||g|¢R i |¤Ž}|                     |¦  «         Œ$|S )zÙ
        Split the block and apply func column-by-column.

        Parameters
        ----------
        func : Block method
        *args
        **kwargs

        Returns
        -------
        List[Block]
        rÍ   r   rž   )r]   r¦   rß   Úextend)rf   rÉ   ÚargsrÊ   Ú
res_blocksrÛ   Úrbss          rg   Úsplit_and_operatezBlock.split_and_operate“  s}   € ð Œy˜AŠ~ˆ~ $¤*¨Q¤-°1Ò"4Ð"4Ð"4Ð4àˆ
Ø—+’+‘-”-ð 	#ð 	#ˆBØ�$�rÐ+˜DÐ+Ð+Ð+ FÐ+Ð+ˆCØ×Ò˜cÑ"Ô"Ð"Ð"ØÐri   Úraise_on_upcastc                óZ  — t          | j        j        |¦  «        }|| j        k    rt          d¦  «        ‚t	          |¦  «        rnt          | j        j        ¦  «        rUt          |¦  «        rF|t          ur=t          |t          j
        t          j        f¦  «        rt          j        |¦  «        sd}nht          |t          j        ¦  «        rN|j        dk    rCt          | j        j        ¦  «        r*t          |j        ¦  «        rt!          j        |¦  «        rd}|r t%          d|› d| j        j        › d�¦  «        ‚| j        j        |k    r t          d|› d| j        j        › d	�¦  «        ‚	 |                      |¦  «        S # t(          $ r}t)          d
| j        › d�¦  «        |‚d}~ww xY w)zé
        coerce the current block to a dtype compat for other
        we will return a block, possibly object, and not raise

        we can also safely try to coerce to the same dtype
        and will receive the same block
        z\Something has gone wrong, please report a bug at https://github.com/pandas-dev/pandas/issuesFrž   zInvalid value 'z' for dtype 'ú'zDid not expect new dtype z to equal self.dtype zE. Please report a bug at https://github.com/pandas-dev/pandas/issues.z0Incompatible (high-resolution) value for dtype='z$'. Explicitly cast before operating.N)r   r[   rd   ÚAssertionErrorr!   r   r.   r
   rx   ry   Ú
datetime64Útimedelta64ÚisnatÚndarrayr]   r   r   Úhas_only_ints_or_nanÚ	TypeErrorÚastyper   )rf   Úotherræ   Ú	new_dtypeÚerrs        rg   Úcoerce_to_target_dtypezBlock.coerce_to_target_dtype­  sø  € õ % T¤[Ô%6¸Ñ>Ô>ˆ	Ø˜œ
Ò"Ð"å ð>ñô ð õ �eÑÔð	$å  ¤Ô!2Ñ3Ô3ð	$õ �U‘”ð	$ð �SÐ Ð å˜5¥2¤=µ"´.Ð"AÑBÔBð !åGIÄxÐPUÁÄð !ð
 $ˆOˆOå�u�bœjÑ)Ô)ð	$à”
˜a’�Ý  ¤Ô!2Ñ3Ô3ð  å˜uœ{Ñ+Ô+ð  õ Ô(¨Ñ/Ô/ð  ð
 $ˆOàð 	XÝÐV¨eÐVÐVÀ$Ä+ÔBSÐVÐVÐVÑWÔWÐWØŒ;Ô 	Ò)Ð)Ý ð?¨Ið ?ð ?Ø”;Ô$ð?ð ?ð ?ñô ð ð

	Ø—;’;˜yÑ)Ô)Ð)øÝ"ð 	ð 	ð 	õ
 &ð4À4Ä:ð 4ð 4ð 4ñô ð ðøøøøð	øøøs   Å-F Æ
F*ÆF%Æ%F*c                óF  — | j         s|                      d¬¦  «        gS | j        dk    rb| j        d         dk    rQ|                      t
          j        ¦  «        }t          d„ |D ¦   «         ¦  «        r|                      d¬¦  «        gS |S | j        }|j        dk    r|d         }t          j
        |d¬¦  «        }d	}||u st          |t          ¦  «        r|j        |u r| j        }t          || j        ¦  «        }t!          |¦  «        }|                      ||¬
¦  «        gS )zz
        Attempt to coerce any object types to better types. Return a copy
        of the block (if copy = True).
        F©Údeeprž   r   c              3  ó6   K  — | ]}|j         j        d k    V — ŒdS )ÚON©rd   rz   )r    Úblks     rg   ú	<genexpr>z Block.convert.<locals>.<genexpr>ò  s+   è è € Ð;Ð;¨S�3”9”> SÒ(Ð;Ð;Ð;Ð;Ð;Ð;ri   rÍ   T)Úconvert_non_numericNr¯   )rm   Úcopyr]   r¦   rå   rZ   ÚconvertÚallr[   r   Úmaybe_convert_objectsrx   r>   Ú_ndarrayr^   r•   rÇ   r˜   )rf   Úblocksr[   rÐ   r^   s        rg   rÿ   zBlock.convertç  s=  € ð Œ~ð 	+Ø—I’I 5�IÑ)Ô)Ð*Ð*àŒ9˜Š>ˆ>˜dœj¨œm¨qÒ0Ð0Ø×+Ò+­E¬MÑ:Ô:ˆFÝÐ;Ð;°FÐ;Ñ;Ô;Ñ;Ô;ð /àŸ	š	 u˜	Ñ-Ô-Ð.Ð.ØˆMà”ˆØŒ;˜!ÒÐð ˜A”YˆFåÔ.ØØ $ð
ñ 
ô 
ˆ
ð ˆØ˜ÐÐÝ�zÕ#6Ñ7Ô7ð  àÔ# vÐ-Ð-à”9ˆDå'¨
°D´IÑ>Ô>ˆ
Ý(¨Ñ4Ô4ˆ
Ø—’ 
°�Ñ6Ô6Ð7Ð7ri   TÚnumpy_nullableÚinfer_objectsÚconvert_stringÚconvert_integerÚconvert_booleanÚconvert_floatingÚdtype_backendrN   c           	     óh  ‡‡‡‡‡‡‡— ‰r| j         r|                      ¦   «         }n| g}t          ‰‰‰‰g¦  «        sd„ |D ¦   «         S g }|D ]åŠ‰j        dk    s‰j        d         dk    r‰gn t          ‰                     ¦   «         ¦  «        }	ˆˆˆˆˆˆfd„|	D ¦   «         }
t          ˆfd„|
D ¦   «         ¦  «        r*|                     ‰ 	                    d¬¦  «        ¦  «         Œšt          |
|	d¬	¦  «        D ]8\  }}|                     |                     ||j        dk    ¬
¦  «        ¦  «         Œ9Œæ|S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Frö   )rþ   )r    Úbs     rg   r¢   z(Block.convert_dtypes.<locals>.<listcomp>  s&   € Ð5Ð5Ð5¨1�A—F’F �FÑ&Ô&Ð5Ð5Ð5ri   rž   r   c                óD   •— g | ]}t          |j        ‰‰‰‰‰‰¦  «        ‘ŒS r`   )r   r[   )r    r  r  r	  r  r  r
  r  s     €€€€€€rg   r¢   z(Block.convert_dtypes.<locals>.<listcomp>%  sL   ø€ ð ð ð ð õ Ø”HØ"Ø#Ø#Ø$Ø!Ø!ñô ðð ð ri   c              3  ó.   •K  — | ]}|‰j         k    V — Œd S rk   rÃ   )r    rd   rû   s     €rg   rü   z'Block.convert_dtypes.<locals>.<genexpr>1  s*   øè è € Ð:Ð:¨%�5˜CœIÒ%Ð:Ð:Ð:Ð:Ð:Ð:ri   Frö   T©Ústrict)rd   Úsqueeze)rm   rÿ   Úanyr]   r¦   Úlistrß   r   rÔ   rþ   Úziprð   )rf   r  r  r  r  r	  r
  Úblksrä   Úsub_blksÚdtypesrd   r  rû   s    ``````      @rg   r   zBlock.convert_dtypes  s�  øøøøøøø€ ð ð 	˜Tœ^ð 	Ø—<’<‘>”>ˆDˆDà�6ˆDåØ˜°ÀÐPñ
ô 
ð 	6ð 6Ð5°Ð5Ñ5Ô5Ð5àˆØð 	Gð 	GˆCð œ Qš˜¨#¬)°A¬,¸!Ò*;Ð*;���ÅÀcÇjÂjÁlÄlÑASÔASð ðð ð ð ð ð ð ð ð ð "ðñ ô ˆFõ Ð:Ð:Ð:Ð:°6Ð:Ñ:Ô:Ñ:Ô:ð à—
’
˜3Ÿ8š8¨˜8Ñ/Ô/Ñ0Ô0Ð0Øå ¨¸Ð>Ñ>Ô>ð Gð G‘��qØ—
’
˜1Ÿ8š8¨%¸¼À1º˜8ÑEÔEÑFÔFÐFÐFðGàˆ
ri   rO   c                ó   — | j         j        S rk   )r[   rd   re   s    rg   rd   zBlock.dtype=  s   € ð Œ{Ô Ð ri   Úraiserd   ÚerrorsrQ   r  c                óî  — | j         }|rF|j        dk    r;t          |¦  «        r,|j        d         dk    rt	          d¦  «        ‚|ddd…f         }t          |||¬¦  «        }t          |¦  «        }d}t          |j        |j        ¦  «        r| j	        }|  
                    ||¬¦  «        }|j        | j        k    r:t          d| j        j        › d	| j        › d
|j        j        › d	|j        › d�	¦  «        ‚|S )aÕ  
        Coerce to the new dtype.

        Parameters
        ----------
        dtype : np.dtype or ExtensionDtype
        errors : str, {'raise', 'ignore'}, default 'raise'
            - ``raise`` : allow exceptions to be raised
            - ``ignore`` : suppress exceptions. On error return original object
        squeeze : bool, default False
            squeeze values to ndim=1 if only one column is given

        Returns
        -------
        Block
        rÍ   r   rž   z*Can not squeeze with more than one column.N)r  r¯   zcannot set astype for dtype (z [z]) to different shape (z]))r[   r]   r   r¦   Ú
ValueErrorr   rÇ   r   rd   r^   r˜   rï   rt   )rf   rd   r  r  r[   r±   r^   Únewbs           rg   rð   zBlock.astypeB  s)  € ð. ”ˆØð 	"�v”{ aÒ'Ð'Õ,?ÀÑ,FÔ,FÐ'ØŒ|˜AŒ !Ò#Ð#Ý Ð!MÑNÔNÐNØ˜A˜q˜q˜q˜D”\ˆFå& v¨u¸VÐDÑDÔDˆ
å(¨Ñ4Ô4ˆ
àˆÝ˜&œ,¨
Ô(8Ñ9Ô9ð 	Ø”9ˆDà�Š˜z°ˆÑ5Ô5ˆØŒ:˜œÒ#Ð#Ýð6Ø”J”Oð6ð 6Ø'+¤zð6ð 6à”J”Oð6ð 6à'+¤zð6ð 6ð 6ñô ð ð
 ˆri   Únan)Úna_repÚquotingr   c               ó`   — t          | j        |||||¬¦  «        }|                      |¦  «        S )z"convert to our native types format)r   r!  Úfloat_formatÚdate_formatÚdecimal)rG   r[   r˜   )rf   r#  r$  r%  r   r!  r¨   s          rg   rG   zBlock.get_values_for_csvp  s@   € õ
 $ØŒKØØØ%Ø#Øð
ñ 
ô 
ˆð �Š˜vÑ&Ô&Ð&ri   r÷   c               óÄ   — | j         }|r|                     ¦   «         }d}n|                     ¦   «         }| j        } t	          | ¦  «        || j        | j        |¬¦  «        S )zcopy constructorNr”   )r[   rþ   Úviewr^   rš   rŠ   r]   )rf   r÷   r[   r^   s       rg   rþ   z
Block.copy  s_   € ð ”ˆàð 	Ø—[’[‘]”]ˆFØˆDˆDà—[’[‘]”]ˆFØ”9ˆDØ�t�D‰zŒz˜&¨D¬NÀÄÐQUÐVÑVÔVÐVri   Úinplacec                óh   — |r| j                              ¦   «         s| S |                      |¬¦  «        S )Nrö   )r^   r»   rþ   )rf   r(  r÷   s      rg   Ú_maybe_copyzBlock._maybe_copy�  s8   € Øð 	˜4œ9×2Ò2Ñ4Ô4ð 	ØˆKØ�yŠy˜dˆyÑ#Ô#Ð#ri   c                ó^   — d }| }|r#| j                              ¦   «         rd}n| j         }||fS )NT)r^   r»   )rf   r(  r^   rþ   s       rg   Ú_get_refs_and_copyzBlock._get_refs_and_copy”  sD   € àˆØˆ{ˆØð 	!ØŒy×&Ò&Ñ(Ô(ð !Ø��à”y�Ø�TˆzÐri   Úmaskúnpt.NDArray[np.bool_] | Nonec                ó’  — | j         }|                      |¦  «        s|                      |d¬¦  «        gS |€t          j        ||¦  «        }|                     ¦   «         s|                      |d¬¦  «        gS |                      |¦  «        s| j        dk    r=t          |¦  «        r.|                      |¦  «        }t          |j         ||¦  «         |gS | j	        dk    s| j
        d         dk    rh|�	|t          u r-|                      t          j        t          ¦  «        ¦  «        }n|                      |d¬¦  «        }|                     ||d|¬	¦  «        S g }t#          |                      ¦   «         ¦  «        D ]J\  }}	|                     t)          | ¦  «                             |	||d|||dz   …         ¬	¦  «        ¦  «         ŒK|S )
z…
        replace the to_replace value with value, possible to create new
        blocks here this is just a call to putmask.
        Frö   NÚstringrž   r   ©ræ   T©Ú
to_replacer†   r(  r-  )r[   rÁ   r*  r0   Úmask_missingr  rd   r,   r2   r]   r¦   r   rð   ry   rX   rô   ÚreplacerÓ   rß   rá   rš   )
rf   r3  r†   r(  r-  r[   rû   r  rÖ   rÛ   s
             rg   r5  zBlock.replace¢  së  € ð" ”ˆà×%Ò% jÑ1Ô1ð 	;ð
 ×$Ò$ W°5Ð$Ñ9Ô9Ð:Ð:àˆ<ÝÔ'¨°
Ñ;Ô;ˆDØ�xŠx‰zŒzð %	ð ×$Ò$ W°5Ð$Ñ9Ô9Ð:Ð:à×#Ò# EÑ*Ô*ð  	¨t¬z¸XÒ/EÐ/EÍ%ÐPUÉ,Ì,Ð/Eð ×"Ò" 7Ñ+Ô+ˆCÝ˜CœJ¨¨eÑ4Ô4Ð4Ø�5ˆLàŒY˜!Š^ˆ^˜tœz¨!œ}°Ò1Ð1Øˆ} ­  Ø—k’k¥"¤(­6Ñ"2Ô"2Ñ3Ô3��à×1Ò1°%ÈÐ1ÑOÔO�Ø—;’;Ø%ØØØð	 ñ ô ð ð ˆFÝ" 4§;¢;¡=¤=Ñ1Ô1ð 	ð 	‘��2Ø—’Ý˜‘J”J×&Ò&ØØ#-Ø#Ø $Ø! ! a¨!¡e )œ_ð 'ñ ô ñô ð ð ð ˆMri   c                ó"  — t          |¦  «        s,|                      |¦  «        s|                      d¬¦  «        gS t          |¦  «        r'| j        t          dfvr|                      d¬¦  «        gS |                      |¦  «        sG| j        dk    rt          |¦  «        s-|                      t          j        t          ¦  «        ¦  «        }n|                      |¦  «        }t          j	        |¦  «        }t          |j        |||¦  «         |gS )aæ  
        Replace elements by the given value.

        Parameters
        ----------
        to_replace : object or pattern
            Scalar to replace or regular expression to match.
        value : object
            Replacement object.
        inplace : bool, default False
            Perform inplace modification.
        mask : array-like of bool, optional
            True indicate corresponding element is ignored.

        Returns
        -------
        List[Block]
        Frö   r0  )r,   rÁ   rþ   rd   rX   rð   ry   r*  ÚreÚcompiler8   r[   )rf   r3  r†   r(  r-  rÚ   Úrxs          rg   Ú_replace_regexzBlock._replace_regexå  s  € õ4 �ZÑ Ô ð 	+¨×)?Ò)?À
Ñ)KÔ)Kð 	+ð —I’I 5�IÑ)Ô)Ð*Ð*å�ÑÔð 	+ ¤µF¸HÐ3EÐ!EÐ!Eð —I’I 5�IÑ)Ô)Ð*Ð*ð ×"Ò" 5Ñ)Ô)ð	.Ø.2¬j¸HÒ.DÐ.DÍÈuÉÌÐ.Dà—K’K¥¤­Ñ 0Ô 0Ñ1Ô1ˆEˆEà×$Ò$ WÑ-Ô-ˆEåŒZ˜
Ñ#Ô#ˆå�e”l B¨¨tÑ4Ô4Ð4Øˆwˆri   Úsrc_listúIterable[Any]Ú	dest_listúSequence[Any]Úregexc           	     ó  ‡ ‡‡‡— ‰ j         Šˆ fd„t          ||d¬¦  «        D ¦   «         }|s‰                      d¬¦  «        gS t          |¦  «        dz
  }t	          ‰j        ¦  «        r!t          ‰¦  «         Šˆˆˆfd„|D ¦   «         }nˆfd„|D ¦   «         }|rt          |¦  «        }‰ g}t          t          ||d¬¦  «        ¦  «        D �]4\  }	\  \  }
}}g }t          |¦  «        D �]\  }}t          |¦  «        dk    r|}n&|}t          |t          ¦  «        rJ ‚|||dz   …         }|                     |
|||‰¬	¦  «        }|	|k    rœd
„ t          ‰ j        j        ¦  «        D ¦   «         }|D ]v}|j        ‰ j        u rHt          |¦  «        |v r6|‰ ur2‰ j        j                             |t          |¦  «                 ¦  «         ŒX|j        j                             ¦   «          Œw|                     |¦  «         �Œ|}�Œ6|S )z:
        See BlockManager.replace_list docstring.
        c                ó|   •— g | ]8\  }}‰                      |¦  «        s‰j        d k    ¯%t          |¦  «        ¯4||f‘Œ9S )r0  )rÁ   rd   r,   )r    ÚxÚyrf   s      €rg   r¢   z&Block.replace_list.<locals>.<listcomp>#  s[   ø€ ð 
ð 
ð 
á��1Ø×&Ò& qÑ)Ô)ð
ð /3¬j¸HÒ.DÐ.DÍÈqÉÌÐ.Dð �ˆFà.DÐ.DÐ.Dri   Tr  Frö   rž   c           	   3  ód   •K  — | ]*}t          t          ‰|d          ‰‰¬¦  «        ¦  «        V — Œ+dS )r   )r?  r-  N)r1   r7   )r    r¡   Úna_maskr?  r[   s     €€€rg   rü   z%Block.replace_list.<locals>.<genexpr>1  s[   øè è € ð 6ð 6ð õ #Ý+¨F°A°a´DÀÈGÐTÑTÔTñô ð6ð 6ð 6ð 6ð 6ð 6ri   c              3  óN   •K  — | ]}t          j        ‰|d          ¦  «        V — Œ dS )r   N)r0   r4  )r    r¡   r[   s     €rg   rü   z%Block.replace_list.<locals>.<genexpr>9  s4   øè è € ÐGÐG¸A•WÔ)¨&°!°A´$Ñ7Ô7ÐGÐGÐGÐGÐGÐGri   )r3  r†   r-  r(  r?  c                óD   — i | ]\  }}t           |¦   «         ¦  «        |“ŒS r`   )Úid)r    rÖ   r  s      rg   ú
<dictcomp>z&Block.replace_list.<locals>.<dictcomp>`  s7   € ð $ð $ð $Ù'+ q¨!�˜1˜1™3œ3™œ ð$ð $ð $ri   )r[   r  rþ   r¤   r"   rd   r.   r  rÓ   rx   rb   Ú_replace_coercer^   Úreferenced_blocksrH  ÚpopÚclearrá   )rf   r;  r=  r(  r?  ÚpairsÚsrc_lenÚmasksÚrbrÖ   ÚsrcÚdestr-  Únew_rbÚblk_numrû   ÚmÚmibr¨   Úself_blk_idsr  rE  r[   s   `   `                @@rg   Úreplace_listzBlock.replace_list  s�  øøøø€ ð ”ˆð
ð 
ð 
ð 
å˜H i¸Ð=Ñ=Ô=ð
ñ 
ô 
ˆð
 ð 	+Ø—I’I 5�IÑ)Ô)Ð*Ð*å�e‘*”*˜q‘.ˆå˜6œ<Ñ(Ô(ð 	Hõ ˜F‘|”|�mˆGð6ð 6ð 6ð 6ð 6ð 6ð ð	6ñ 6ô 6ˆEˆEð HÐGÐGÐGÀÐGÑGÔGˆEð ð 	 Ý˜‘K”KˆEð ˆVˆå&/µ°E¸5ÈÐ0NÑ0NÔ0NÑ&OÔ&Oð +	ñ +	Ñ"ˆAÑ"‘��d˜TØ"$ˆFõ
 !*¨"¡¤ð $&ñ $&‘�˜Ý�r‘7”7˜a’<�<Ø�A�Aà�CÝ)¨#­tÑ4Ô4Ð4Ð4Ð4Ø˜G g°¡kÐ1Ô2�Að
 ×,Ò,Ø"ØØØ#Øð -ñ ô �ð ˜’<�<ð$ð $Ý/8¸¼Ô9TÑ/UÔ/Uð$ñ $ô $�Lð $ð 	=ð 	=˜Øœ6 T¤YÐ.Ð.å! !™uœu¨Ð4Ð4¸À$¸¸à $¤	Ô ;× ?Ò ?ÀÍRÐPQÉUÌUÔ@SÑ TÔ TÐ Tøð œFÔ4×:Ò:Ñ<Ô<Ð<Ð<Ø—’˜fÑ%Ô%Ð%Ñ%ØˆB‰BØˆ	ri   únpt.NDArray[np.bool_]c                ó4  — t          ||¦  «        r|                      ||||¬¦  «        S |€Õ|                     ¦   «         rª| j                             ¦   «         }|                      t          j        t          ¦  «        ¦  «        }|s| 	                    d¬¦  «        }n3|r1|r/|j                             ¦   «         r| 	                    d¬¦  «        }t          |j        ||¦  «         |gS |  	                    d¬¦  «        gS |                      ||||¬¦  «        S )ai  
        Replace value corresponding to the given boolean array with another
        value.

        Parameters
        ----------
        to_replace : object or pattern
            Scalar to replace or regular expression to match.
        value : object
            Replacement object.
        mask : np.ndarray[bool]
            True indicate corresponding element is ignored.
        inplace : bool, default True
            Perform inplace modification.
        regex : bool, default False
            If true, perform regular expression substitution.

        Returns
        -------
        List[Block]
        )r(  r-  NTrö   Fr2  )r9   r:  r  r^   r»   rð   ry   rd   rX   rþ   r2   r[   r5  )rf   r3  r†   r-  r(  r?  Úhas_refrÛ   s           rg   rJ  zBlock._replace_coerceq  s1  € õ< ˜E :Ñ.Ô.ð 	Ø×&Ò&ØØØØð	 'ñ ô ð ð ˆ}à—8’8‘:”:ð 	 Ø"œi×5Ò5Ñ7Ô7�GØŸš¥R¤X­fÑ%5Ô%5Ñ6Ô6�BØ"ð 0ØŸWšW¨$˜WÑ/Ô/˜˜Ø ð 0 Wð 0°´×1FÒ1FÑ1HÔ1Hð 0àŸWšW¨$˜WÑ/Ô/˜Ý# B¤I¨t°UÑ;Ô;Ð;Ø˜4�KØŸ	š	 u˜	Ñ-Ô-Ð.Ð.Ø—<’<Ø%ØØØð	  ñ ô ð ri   Úargú
np.ndarrayc                ó   — |S ©zA
        For compatibility with 1D-only ExtensionArrays.
        r`   ©rf   r]  s     rg   Ú_maybe_squeeze_argzBlock._maybe_squeeze_arg¯  s	   € ð ˆ
ri   c                ó   — |S r`  r`   )rf   r§   s     rg   Ú_unwrap_setitem_indexerzBlock._unwrap_setitem_indexerµ  s	   € ð ˆri   rT   c                ó   — | j         j        S rk   )r[   r¦   re   s    rg   r¦   zBlock.shape½  s   € àŒ{Ô Ð ri   rÖ   ú)int | tuple[int, int] | tuple[slice, int]c                ó   — | j         |         S rk   ©r[   )rf   rÖ   s     rg   Úigetz
Block.igetÁ  s   € ð Œ{˜1Œ~Ðri   ú4slice | npt.NDArray[np.bool_] | npt.NDArray[np.intp]c                ó   — | j         |         S )zreturn a slice of my valuesrh  )rf   r¸   s     rg   r°   zBlock._sliceÊ  s   € ð
 Œ{˜6Ô"Ð"ri   rþ   c                óZ   — |r| j                              ¦   «         | _         || j         |<   dS )a¨  
        Modify block values in-place with new item value.

        If copy=True, first copy the underlying values in place before modifying
        (for Copy-on-Write).

        Notes
        -----
        `set_inplace` never creates a new array or new Block, whereas `setitem`
        _may_ create a new array and always creates a new Block.

        Caller is responsible for checking values.dtype == self.dtype.
        N©r[   rþ   ©rf   Úlocsr[   rþ   s       rg   Úset_inplacezBlock.set_inplaceÑ  s3   € ð ð 	-Øœ+×*Ò*Ñ,Ô,ˆDŒKØ"ˆŒ�DÑÐÐri   r§   ÚaxisrM   c                ó\  — | j         }|t          j        u r
| j        }d}nd}t	          j        |||||¬¦  «        }t          | t          ¦  «        r| j        dk    r|€J ‚|dk    r|€J ‚|€| j	        }|j
        | j
        k    r|                      ||¦  «        S |                      ||¦  «        S )zN
        Take values according to indexer and return them as a block.
        FT)rq  Ú
allow_fillrƒ   rž   Nr   )r[   r   Ú
no_defaultrƒ   ÚalgosÚtake_ndrx   ÚExtensionBlockr]   rŠ   rd   r˜   r›   )rf   r§   rq  rŒ   rƒ   r[   rs  r±   s           rg   rv  zBlock.take_ndã  sÖ   € ð ”ˆà�œÐ'Ð'ØœˆJØˆJˆJàˆJõ ”]Ø�G $°:È*ð
ñ 
ô 
ˆ
õ �d�NÑ+Ô+ð 	Að œ	 Qš˜¨<Ð+?Ð+?Ð@Ø˜A’I�I ,Ð"6Ð"6Ð7àÐØœ>ˆLàÔ˜tœzÒ)Ð)Ø—?’? :¨|Ñ<Ô<Ð<à×-Ò-¨j¸,ÑGÔGÐGri   Únew_placementÚneeds_maskingc                óè   — |                      | j        j        |¬¦  «        \  }}|                     d¦  «        }|j        |         }||         }t	          |¦  «        }t          ||¬¦  «        g}||fS )a  
        Return a list of unstacked blocks of self

        Parameters
        ----------
        unstacker : reshape._Unstacker
        fill_value : int
            Only used in ExtensionBlock._unstack
        new_placement : np.ndarray[np.intp]
        allow_fill : bool
        needs_masking : np.ndarray[bool]

        Returns
        -------
        blocks : list of Block
            New blocks of unstacked values.
        mask : array-like of bool
            The mask of columns of `blocks` we should keep.
        ©rƒ   r   ©r�   )Úget_new_valuesr[   ÚTr  r   Únew_block_2d)	rf   Ú	unstackerrƒ   rx  ry  r±   r-  rÙ   r  s	            rg   Ú_unstackzBlock._unstack  s�   € ð4 %×3Ò3ØŒKŒM jð 4ñ 
ô 
Ñˆ
�Dð �xŠx˜‰{Œ{ˆð  ”\ $Ô'ˆ
Ø% dÔ+ˆå˜MÑ*Ô*ˆÝ˜z°RÐ8Ñ8Ô8Ð9ˆØ�tˆ|Ðri   c                ó¤  — |                       |¦  «        }t          t          j        | j        ¦  «        }| j        dk    r|j        }t          |||¦  «         | j        t          k    rt          |d¬¦  «        }	 t          |j        |¦  «        }| j        t          k    r:||         }t          j        |¦  «        rt          |t          |¦  «        |¦  «        }|                      d¬¦  «        } t          t          j        | j        j        ¦  «        }t#          |t          j        ¦  «        r&|j        dk    rt          |¦  «        dk    r|d         }	 |||<   nv# t$          t&          f$ r%}t          |¦  «        rt'          d¦  «        |‚‚ d}~ww xY w# t(          $ r0 |                      |d¬	¦  «        }|                     ||¦  «        cY S w xY w| S )
aÌ  
        Attempt self.values[indexer] = value, possibly creating a new array.

        Parameters
        ----------
        indexer : tuple, list-like, array-like, slice, int
            The subset of self.values to set
        value : object
            The value being set

        Returns
        -------
        Block

        Notes
        -----
        `indexer` is a direct slice/positional indexer. `value` must
        be a compatible shape.
        rÍ   Tr¿   ©r(  rž   )r   .z)setting an array element with a sequence.Nr1  )r‡   r   ry   rí   r[   r]   r~  rF   rd   rl   rE   r   r   r    r4   r¤   r*  rx   rï   r  r   rô   Úsetitem)rf   r§   r†   r[   ÚcastedÚviró   rÛ   s           rg   r„  zBlock.setitem9  sæ  € ð* ×,Ò,¨UÑ3Ô3ˆå•b”j $¤+Ñ.Ô.ˆØŒ9˜Š>ˆ>Ø”XˆFõ 	˜g u¨fÑ5Ô5Ð5àŒ:�Ò#Ð#å! %°tÐ<Ñ<Ô<ˆEð	Ý(¨¬°uÑ=Ô=ˆFð Œz�ZÒ'Ð'à˜G”_�ÝÔ# BÑ'Ô'ð Rõ 9¸ÅÀRÁÄÈ&ÑQÔQ�Fà×#Ò#¨DÐ#Ñ1Ô1ˆDÝ�"œ* d¤k¤mÑ4Ô4ˆFÝ˜&¥"¤*Ñ-Ô-ð (°&´+ÀÒ2BÐ2BÅsÈ6Á{Ä{ÐVWÒGWÐGWà œ�ðØ"(��w‘�øÝ�zÐ*ð ð ð Ý Ñ'Ô'ð Ý$ØCñô àðð øøøøðøøøøõ) !ð 	.ð 	.ð 	.à×,Ò,¨UÀDÐ,ÑIÔIˆBØ—:’:˜g uÑ-Ô-Ð-Ð-Ð-ð	.øøøð4 ˆs*   Á:F ÅE ÅFÅ+ FÆFÆ7GÇGc                ó   — |}t          t          j        | j        ¦  «        }t	          |j        |¦  «        \  }}t          |t          t          t          f¦  «        rJ ‚|t          j        u r| j        }|                      |¦  «        }t          |d¬¦  «        }|r|                      d¬¦  «        gS 	 t!          |j        |¦  «        }|                      d¬¦  «        } t          t          j        | j        ¦  «        }t'          |j        ||¦  «         | gS # t(          $ �r, | j        dk    s| j        d         dk    rwt/          |¦  «        s-|                      |d¬¦  «                             ||¦  «        cY S |                     ¦   «         d         }|                      |||         ¦  «        }|gcY S t          |t          j        ¦  «        }	g }
t9          |                      ¦   «         ¦  «        D ]V\  }}|}|	r|d	d	…||dz   …f         }|d	d	…||dz   …f         }|                     ||¦  «        }|
                     |¦  «         ŒW|
cY S w xY w)
aW  
        putmask the data to the block; it is possible that we may create a
        new dtype of block

        Return the resulting block(s).

        Parameters
        ----------
        mask : np.ndarray[bool], SparseArray[bool], or BooleanArray
        new : an ndarray/object

        Returns
        -------
        List[Block]
        Tr¿   Frö   rƒ  rž   r   r1  N)r   ry   rí   r[   r5   r~  rx   r)   r+   r(   r   rt  rƒ   r‡   rE   rþ   r   rd   r*  r3   r   r]   r¦   r    rô   ÚputmaskÚnonzeror„  rÓ   rß   rá   )rf   r-  ÚnewÚ	orig_maskr[   Únoopr…  r§   rÛ   Úis_arrayrã   rÖ   ÚnÚsubmaskrä   s                  rg   rˆ  zBlock.putmaskx  sk  € ð  ˆ	Ý•b”j $¤+Ñ.Ô.ˆÝ% f¤h°Ñ5Ô5‰
ˆˆdÝ˜c¥H­i½Ð#FÑGÔGÐGÐGÐGà•#”.Ð Ð Ø”/ˆCà×*Ò*¨3Ñ/Ô/ˆÝ˜C¨tÐ4Ñ4Ô4ˆàð 	+Ø—I’I 5�IÑ)Ô)Ð*Ð*ð#	"Ý(¨¬°sÑ;Ô;ˆFà×#Ò#¨DÐ#Ñ1Ô1ˆDÝ�"œ* d¤kÑ2Ô2ˆFå" 6¤8¨T°6Ñ:Ô:Ð:Ø�6ˆMøÝ ð 	"ñ 	"ð 	"ØŒy˜AŠ~ˆ~ ¤¨A¤°!Ò!3Ð!3õ $ CÑ(Ô(ð  à×6Ò6Ø¨Tð 7ñ ô ç’g˜d CÑ(Ô(ð)ð )ð )ð #Ÿlšl™nœn¨QÔ/�GØŸš g¨s°7¬|Ñ<Ô<�BØ˜4�K�K�Kõ & c­2¬:Ñ6Ô6�à�
Ý& t§{¢{¡}¤}Ñ5Ô5ð +ð +‘E�A�rØ�AØð .à    1 q¨1¡u 9 Ô-˜à'¨¨¨¨1¨q°1©u¨9¨Ô5�GØŸ*š* W¨aÑ0Ô0�CØ×%Ò% cÑ*Ô*Ð*Ð*Ø!Ð!Ð!Ð!ð7	"øøøs!   Â3A"D ÄA!IÅ99IÆ4BIÉIc                ó„  — |j         | j         k    sJ ‚t          |t          t          t          f¦  «        rJ ‚| j         dk    }t          |¦  «        }t          t          j        | j	        ¦  «        }|}|r|j
        }t          || ¦  «        \  }}|r|                      d¬¦  «        gS |t          j        u r| j        }|                      |¦  «        }	 t#          |j        |¦  «        }|}t'          ||                     ¦   «         |¦  «        }	|	|ur�t+          |¦  «        rFt-          |¦  «        t-          |¦  «        k     r&t          j        | ||¦  «         t1          d¦  «        ‚|                     ¦   «         }
t          j        |
||	¦  «         �n‘t+          |¦  «        rdt          |t          j        ¦  «        sJt-          |¦  «        | j        d         k    r,t          j        |¦  «                             |j        ¦  «        }t;          j        | ||¦  «        }
�n# t<          t>          t@          f$ rë | j         dk    s| j        d         dk    r/|  !                    |d¬¦  «        }|                     ||¦  «        cY S t          |t          j        tD          f¦  «        }g }tG          |  $                    ¦   «         ¦  «        D ]V\  }}|}|r|d	d	…||dz   …f         }|d	d	…||dz   …f         }|                     ||¦  «        }| %                    |¦  «         ŒW|cY S w xY w|r|
j
        }
|  &                    |
¦  «        gS )
a  
        evaluate the block; return result block(s) from the result

        Parameters
        ----------
        other : an ndarray/object
        cond : np.ndarray[bool], SparseArray[bool], or BooleanArray

        Returns
        -------
        List[Block]
        rÍ   Frö   z‡This should not be reached; call to np.where above is expected to raise ValueError. Please report a bug at github.com/pandas-dev/pandasrÎ   rž   r   r1  N)'r]   rx   r)   r+   r(   r1   r   ry   rí   r[   r~  r5   rþ   r   rt  rƒ   r‡   r   rd   r4   Úsumr    r¤   ÚwhereÚNotImplementedErrorrˆ  r¦   ÚarrayrÏ   rC   r  rï   r   rô   r<   rÓ   rß   rá   r˜   )rf   rñ   ÚcondÚ	transposer[   Ú
orig_otherÚicondrŒ  r…  Úaltr¨   rÚ   r�  rã   rÖ   rÛ   Úothr�  rä   s                      rg   r’  zBlock.where»  s^  € ð Œy˜DœIÒ%Ð%Ð%Ð%Ý˜e¥hµ	½<Ð%HÑIÔIÐIÐIÐIà”I ’Nˆ	å! $Ñ'Ô'ˆõ •b”j $¤+Ñ.Ô.ˆØˆ
Øð 	Ø”XˆFå& v°¨uÑ5Ô5‰ˆˆtØð 	+Ø—I’I 5�IÑ)Ô)Ð*Ð*à•C”NÐ"Ð"Ø”OˆEà×,Ò,¨UÑ3Ô3ˆð;	Bõ )¨¬°uÑ=Ô=ˆFð4 ˆEÝ-¨f°e·i²i±k´kÀ5ÑIÔIˆCØ˜%ÐÐÝ Ñ&Ô&ð ­3¨u©:¬:½¸F¹¼Ò+CÐ+Cå”H˜e˜V V¨UÑ3Ô3Ð3Ý-ð7ñô ð ð
  Ÿš™œ�Ý”
˜6 5¨#Ñ.Ô.Ð.Ñ.õ
 ! Ñ'Ô'ðBå& u­b¬jÑ9Ô9ðBõ ˜E™
œ
 d¤j°¤nÒ4Ð4õ
 œH U™OœO×3Ò3°F´LÑAÔA�Eõ
 %Ô*¨E¨6°6¸5ÑAÔA�‘øõm �IÕ'8Ð9ð 	"ð 	"ð 	"ð Œy˜AŠ~ˆ~ ¤¨A¤°!Ò!3Ð!3ð ×3Ò3°EÈ5Ð3ÑQÔQ�Ø—{’{ :¨tÑ4Ô4Ð4Ð4Ð4õ & e­b¬j½.Ð-IÑJÔJ�à�
Ý& t§{¢{¡}¤}Ñ5Ô5ð +ð +‘E�A�rØ�CØð 2à# A A A q¨1¨q©5 y LÔ1˜à" 1 1 1 a¨!¨a©% i <Ô0�GØŸ(š( 3¨Ñ0Ô0�CØ×%Ò% cÑ*Ô*Ð*Ð*Ø!Ð!Ð!Ð!ð-	"øøøðt ð 	Ø”XˆFà—’ Ñ'Ô'Ð(Ð(s   ÃH ÈA L Ê BL ÌL Úlimitú
int | Nonec                ó¨  — t          |d¦  «        }| j        sd}n,t          | j        ¦  «        }t	          | j        |¦  «        \  }}|r|                      d¬¦  «        gS |�)d||                     | j        j        dz
  ¦  «        |k    <   |r|                      |j	        |¦  «        }n|  
                    ||j	         ¦  «        }t          |¦  «        S )z…
        fillna on the block with the value. If we fail, then convert to
        block to hold objects instead and try again
        r(  TFrö   Nrž   )r   r{   r.   r[   r5   rþ   Úcumsumr]   rˆ  r~  r’  Úextend_blocks)rf   r†   r›  r(  rŒ  r-  rÕ   s          rg   ÚfillnazBlock.fillna"  s×   € õ & g¨yÑ9Ô9ˆàÔ ð 	=àˆDˆDå˜œÑ$Ô$ˆDÝ)¨$¬+°tÑ<Ô<‰JˆD�$àð 	+à—I’I 5�IÑ)Ô)Ð*Ð*àÐØ>CˆD�—’˜Tœ[Ô-°Ñ1Ñ2Ô2°UÒ:Ñ;àð 	-Ø—,’,˜tœv uÑ-Ô-ˆCˆCà—*’*˜U T¤V GÑ,Ô,ˆCÝ˜SÑ!Ô!Ð!ri   ©r(  r›  Ú
limit_areaÚmethodrP   r¢  ú#Literal['inside', 'outside'] | Nonec               ó:  — | j         s|                      d¬¦  «        gS |                      |¦  «        \  }}t          t          | j        ¦  «        }|j                             ||||¬¦  «        j        }t          |d¬¦  «        }	|  	                    |	|¬¦  «        gS )NFrö   )r£  r›  r¢  rþ   Tr¿   r¯   )
r{   rþ   r,  r   r>   Úarray_valuesr~  Ú_pad_or_backfillrE   r›   )
rf   r£  r(  r›  r¢  rþ   r^   rØ   r±   Údatas
             rg   Úpad_or_backfillzBlock.pad_or_backfillC  s²   € ð Ô ð 	+à—I’I 5�IÑ)Ô)Ð*Ð*à×,Ò,¨WÑ5Ô5‰
ˆˆdõ Õ'¨Ô):Ñ;Ô;ˆØ”V×,Ò,ØØØ!Øð	 -ñ 
ô 
ô
 ð 	õ ˜Z°tÐ<Ñ<Ô<ˆØ×*Ò*¨4°dÐ*Ñ;Ô;Ð<Ð<ri   Úforward)r(  r›  Úlimit_directionr¢  rR   ÚindexrV   r«  ú&Literal['forward', 'backward', 'both']c               ó¼  — t          |d¦  «        }|dk    rt          j        |¦  «         | j        s|                      d¬¦  «        gS | j        t          k    r"dddœ| j                 }t          |› d�¦  «        ‚|  	                    |¦  «        \  }	}
 | j
        j        d|| j        d	z
  |||||	d
œ|¤Ž}t          |d¬¦  «        }|                      ||
¬¦  «        gS )Nr(  ÚasfreqFrö   ÚSeriesÚ	DataFrame)rž   rÍ   z& cannot interpolate with object dtype.rž   )r£  rq  r¬  r›  r«  r¢  rþ   Tr¿   r¯   r`   )r   r0   Úclean_fill_methodr{   rþ   rd   rl   r]   rï   r,  r¦  ÚinterpolaterE   r›   )rf   r£  r¬  r(  r›  r«  r¢  rÊ   rt   rþ   r^   r±   r¨  s                rg   r³  zBlock.interpolate^  s  € õ & g¨yÑ9Ô9ˆà�XÒÐåÔ% fÑ-Ô-Ð-àÔ ð 	+à—I’I 5�IÑ)Ô)Ð*Ð*àŒ:�Ò#Ð#à KÐ0Ð0°´Ô;ˆDÝ˜tÐKÐKÐKÑLÔLÐLà×,Ò,¨WÑ5Ô5‰
ˆˆdð 3�TÔ&Ô2ð 	
ØØ”˜Q‘ØØØ+Ø!Øð	
ð 	
ð ð	
ð 	
ˆ
õ ˜Z°tÐ<Ñ<Ô<ˆØ×*Ò*¨4°dÐ*Ñ;Ô;Ð<Ð<ri   rŽ  c                ó|   — t          j        | j        j        |d¬¦  «        j        }|                      |¬¦  «        gS )z'return block for the diff of the valuesr   ©rq  rh  )ru  Údiffr[   r~  r˜   )rf   rŽ  r±   s      rg   r¶  z
Block.diff‰  s8   € õ
 ”Z ¤¤¨q°qÐ9Ñ9Ô9Ô;ˆ
Ø—’ z�Ñ2Ô2Ð3Ð3ri   Úperiodsrƒ   c                ór  — | j         dz
  }t          j        |¦  «        s| j        t          k    rt          d¦  «        ‚|                      |¦  «        }	 t          | j        |¦  «        }t          t          j
        | j        ¦  «        }t          ||||¦  «        }|                      |¦  «        gS # t          $ r| | j        j        dvst!          || j        ¦  «        s(t#          j        dt&          t)          ¦   «         ¬¦  «         |                      |d¬¦  «        }|                     ||¬¦  «        cY S w xY w)	z+shift the block by periods, possibly upcastrž   zfill_value must be a scalarrw   z°shifting with a fill value that cannot be held by original dtype is deprecated and will raise in a future version. Explicitly cast to the desired dtype before shifting instead.©Ú
stacklevelFr1  r{  )r]   r   r!   rd   rl   r  r‡   r   r   ry   rí   r[   r:   r›   r   rz   r-   ÚwarningsÚwarnr   r   rô   )rf   r·  rƒ   rq  r…  r[   r±   rÛ   s           rg   r:   zBlock.shift‘  sW  € ð Œy˜1‰}ˆõ Œ}˜ZÑ(Ô(ð 	<¨T¬Z½:Ò-EÐ-Eõ Ð:Ñ;Ô;Ð;à×1Ò1°*Ñ=Ô=ˆ
ð	<õ )Ø”
Øñô ˆFõ* �"œ* d¤kÑ2Ô2ˆFÝ˜v w°°fÑ=Ô=ˆJØ×.Ò.¨zÑ:Ô:Ð;Ð;øõ' !ð 	<ð 	<ð 	<ØŒzŒ eÐ+Ð+Õ3HØ˜DœJñ4ô 4Ð+õ ”ð(õ #Ý/Ñ1Ô1ðñ ô ð ð ×,Ò,¨ZÈÐ,ÑOÔOˆBØ—8’8˜G°
�8Ñ;Ô;Ð;Ð;Ð;ð	<øøøs   ÁB0 Â0BD6Ä5D6ÚlinearÚqsÚinterpolationrS   c                óæ   — | j         dk    sJ ‚t          |¦  «        sJ ‚t          | j        t	          j        |j        ¦  «        |¦  «        }t          |d¬¦  «        }t          || j	        ¬¦  «        S )a  
        compute the quantiles of the

        Parameters
        ----------
        qs : Index
            The quantiles to be computed in float64.
        interpolation : str, default 'linear'
            Type of interpolation.

        Returns
        -------
        Block
        rÍ   r“   r|  )
r]   r    r6   r[   ry   ÚasarrayÚ_valuesr•   r  rŠ   )rf   r¾  r¿  r¨   s       rg   ÚquantilezBlock.quantile¿  so   € ð* Œy˜AŠ~ˆ~ˆ~ˆ~Ý˜BÑÔÐÐÐå  ¤­b¬j¸¼Ñ.DÔ.DÀmÑTÔTˆõ $ F°Ð3Ñ3Ô3ˆÝ˜F¨d¬nÐ=Ñ=Ô=Ð=ri   Údecimalsc                ón  — | j         r| j        ret          | j        t          t
          t          f¦  «        r(t          j        dt          t          ¦   «         ¬¦  «         |                      d¬¦  «        S | j                             |¦  «        }d}|| j        u r| j        }|                      ||¬¦  «        S )ax  
        Rounds the values.
        If the block is not of an integer or float dtype, nothing happens.
        This is consistent with DataFrame.round behavior.
        (Note: Series.round would raise)

        Parameters
        ----------
        decimals: int,
            Number of decimal places to round to.
            Caller is responsible for validating this
        zbobj.round has no effect with datetime, timedelta, or period dtypes. Use obj.dt.round(...) instead.r¹  Frö   Nr¯   )Ú
is_numericr~   rx   r[   r;   r@   r?   r»  r¼  ÚUserWarningr   rþ   Úroundr^   r›   )rf   rÄ  r[   r^   s       rg   rÈ  zBlock.roundÝ  s¾   € ð Œð 
	) $¤,ð 
	)Ý˜$œ+­µ~Å{Ð'SÑTÔTð õ ”ðGåÝ/Ñ1Ô1ð	ñ ô ð ð —9’9 %�9Ñ(Ô(Ð(ð
 ”×"Ò" 8Ñ,Ô,ˆàˆØ�T”[Ð Ð Ø”9ˆDà×)Ò)¨&°tÐ)Ñ<Ô<Ð<ri   c                ó  — t          |¦  «        s|g}| j        dk    rot          t          j        | j        ¦  «        }t          j        ||¦  «        }| j                             |¦  «        } t          | ¦  «        ||| j        ¬¦  «        gS t          j	        |¦  «        | j        j
        d         k    rt          ‚t          j        || j        j
        d         gg¦  «        }| j        j        }g }d}| j                             ¦   «         r| j        nd}|D ]t}||dz   k    rnf| j        |dz   |…dd…f         }||dz   |…         }	 t          | ¦  «        |t!          |	¦  «        | j        |¬¦  «        }
|                     |
¦  «         |}Œu|S )a?  Deletes the locs from the block.

        We split the block to avoid copying the underlying data. We create new
        blocks for every connected segment of the initial block that is not deleted.
        The new blocks point to the initial array.

        Assumes `loc` is strictly increasing when list-like.
        rž   ©r�   r]   r   rÎ   Nr”   )r    r]   r   ry   rí   r[   ÚdeleterŠ   rš   Úmaxr¦   Ú
IndexErrorÚconcatenateÚas_arrayr^   r»   r   rÔ   )rf   r×   r[   r‹   Úmgr_locs_arrÚ
new_blocksÚprevious_locr^   Úidxro  rÛ   s              rg   rË  zBlock.delete  s¥  € õ ˜CÑ Ô ð 	Ø�%ˆCàŒ9˜Š>ˆ>Ý�"œ* d¤kÑ2Ô2ˆFÝ”Y˜v sÑ+Ô+ˆFØ”~×,Ò,¨SÑ1Ô1ˆHØ•D˜‘J”J˜v°ÀÄ	ÐJÑJÔJÐKÐKåŒ6�#‰;Œ;˜$œ+Ô+¨AÔ.Ò.Ð.ÝÐõ Œn˜c D¤KÔ$5°aÔ$8Ð#9Ð:Ñ;Ô;ˆØ”~Ô.ˆØ"$ˆ
àˆð !œI×3Ò3Ñ5Ô5Ð?ˆtŒyˆy¸4ˆØð 	ð 	ˆCØ�l QÑ&Ò&Ð&àð œ \°AÑ%5¸Ð%;¸Q¸Q¸QÐ%>Ô?�Ø# L°1Ñ$4°sÐ$:Ô;�Ø•T˜$‘Z”ZØ¥n°TÑ&:Ô&:ÀÄÐQUðñ ô �ð ×!Ò! "Ñ%Ô%Ð%àˆLˆLàÐri   c                ó    — t          | ¦  «        ‚)ú(return a boolean if I am possibly a view©r   re   s    rg   Úis_viewzBlock.is_view7  s   € õ " $Ñ'Ô'Ð'ri   r<   c                ó    — t          | ¦  «        ‚)zP
        The array that Series.array returns. Always an ExtensionArray.
        rÖ  re   s    rg   r¦  zBlock.array_values<  ó   € õ
 " $Ñ'Ô'Ð'ri   úDtypeObj | Nonec                ó    — t          | ¦  «        ‚)z‹
        return an internal format, currently just the ndarray
        this is often overridden to handle to_dense like operations
        rÖ  r|   s     rg   Ú
get_valueszBlock.get_valuesC  rÙ  ri   ©ra   rb   )ra   r   )rŒ   r   ra   r�   )NN)r�   r�   r^   r‘   ra   rZ   )r�   r�   r^   r‘   ra   r   )ra   rœ   )ra   r\   )r¬   r­   ra   r   )r³   r´   ra   r   ©F)r¸   r­   rŒ   r   r¹   rb   ra   r   )r½   r   ra   rb   )r†   rL   ra   rb   ©ra   rÅ   )ra   rZ   )r¨   rL   ra   rÅ   )ra   rÜ   )ræ   rb   ra   rZ   )TTTTTr  )r  rb   r  rb   r  rb   r  rb   r	  rb   r
  rN   ra   rÅ   )ra   rO   )r  F)rd   rO   r  rQ   r  rb   ra   rZ   )r   rœ   ra   rZ   )r÷   rb   ra   r   )T)r(  rb   r÷   rb   ra   r   )r(  rb   )FN)r(  rb   r-  r.  ra   rÅ   )r(  rb   ra   rÅ   )FF)
r;  r<  r=  r>  r(  rb   r?  rb   ra   rÅ   )TF)r-  rZ  r(  rb   r?  rb   ra   rÅ   )r]  r^  ra   r^  ©ra   rT   )rÖ   rf  ra   r^  )r¸   rj  ra   rL   ©r[   rL   rþ   rb   ra   r�   )r§   r´   rq  rM   rŒ   r�   ra   rZ   ©rx  r´   ry  rZ  ©NF©r›  rœ  r(  rb   ra   rÅ   ©
r£  rP   r(  rb   r›  rœ  r¢  r¤  ra   rÅ   )r£  rR   r¬  rV   r(  rb   r›  rœ  r«  r­  r¢  r¤  ra   rÅ   )rŽ  r\   ra   rÅ   rk   ©r·  r\   rƒ   r   ra   rÅ   )r½  )r¾  rV   r¿  rS   ra   rZ   )rÄ  r\   ra   r   ©ra   r<   ©rd   rÚ  ra   r^  )Ir£   Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Ú	__slots__rÆ  r	   r   rh   rm   rp   rr   ru   r{   Úpropertyr~   r€   rƒ   r‡   r‹   Úsetterr˜   r›   r©   r«   r²   r·   r¼   rÁ   rÄ   rË   rÑ   rÈ   rß   rå   rô   rÿ   r   rd   rð   rG   rþ   r*  r,  r5  r:  rY  rJ  rb  rd  r¦   ri  r°   rp  r   rt  rv  r�  r„  rˆ  r’  r   r©  r³  r¶  r:   rÃ  rÈ  rË  r×  r¦  rÜ  r`   ri   rg   rZ   rZ   Š   s±  € € € € € € ðð ð (Ð'Ð'Ñ'Ø€I€I�IØÐÐÑØÐÐÑà€IØ€Jà
Øð3ð 3ð 3ñ „^ñ „Uð3ð Øð/ð /ð /ñ „^ñ „Uð/ð Øð6ð 6ð 6ñ „^ñ „Uð6ð Øð%ð %ð %ñ „^ñ „Uð%ð Øð6ð 6ñ „^ñ „Uð6ð Øð"ð "ð "ñ „^ñ „Uð"ð Øð3ð 3ð 3ñ „Xñ „Uð3ð ð,ð ,ñ „Uð,ð Øð<ð <ñ „^ñ „Uð<ð ðð ñ „Uðð ðð ð ñ „Xðð „_ð&ð &ð &ñ „_ð&ð ð ,0Ø'+ð	Qð Qð Qð Qñ „UðQð" ð ,0Ø'+ð	Rð Rð Rð Rñ „UðRð ð	ð 	ð 	ñ „Uð	ð ð ð  ð  ñ „Uð ð ðJð Jð Jñ „UðJð ðJð Jð Jñ „UðJð àRWð
Jð 
Jð 
Jð 
Jñ „Uð
Jð ð6ð 6ð 6ñ „Uð6ð
 ð)ð )ð )ñ „Uð)ð" ð-ð -ð -ñ „Uð-ð ð+ð +ð +ñ „Uð+ð ðð ð ñ „Uðð* ðð ð ñ „Uðð ðð ð ñ „Uðð2 ð7ð 7ð 7ñ „Uð7ðr ð"8ð "8ð "8ñ „Uð"8ðL #Ø#Ø $Ø $Ø!%Ø&6ð,ð ,ð ,ð ,ð ,ðb Øð!ð !ð !ñ „^ñ „Uð!ð ð &Øð	+ð +ð +ð +ñ „Uð+ðZ àCHÐRVð'ð 'ð 'ð 'ð 'ñ „Uð'ð ð
Wð 
Wð 
Wñ „Uð
Wð$ð $ð $ð $ð $ð
 ðð ð ñ „Uðð ð
 à-1ð@ð @ð @ð @ñ „Uð@ðD ð
 Øð-ð -ð -ð -ñ „Uð-ð^ ð
 ØðYð Yð Yð Yñ „UðYðv ð Øð7ð 7ð 7ð 7ñ „Uð7ðzð ð ð ðð ð ð ð!ð !ð !ñ „Xð!ðð ð ð ð#ð #ð #ð #ð#ð #ð #ð #ð #ð$ ð
 /3Ø”>ð%Hð %Hð %Hð %Hñ „Uð%HðN*ð *ð *ð *ð\=ð =ð =ð =ð~A"ð A"ð A"ð A"ðFe)ð e)ð e)ð e)ðT !Øð	"ð "ð "ð "ð "ðJ Ø Ø:>ð=ð =ð =ð =ð =ð =ð6 ð Ø ØBKØ:>ð(=ð (=ð (=ð (=ð (=ñ „Uð(=ðT ð4ð 4ð 4ñ „Uð4ð,<ð ,<ð ,<ð ,<ð ,<ð\ ð 08ð>ð >ð >ð >ñ „Uð>ð: ð"=ð "=ð "=ñ „Uð"=ðN0ð 0ð 0ð 0ðd ð(ð (ð (ñ „Xð(ð ð(ð (ð (ñ „Xð(ð(ð (ð (ð (ð (ð (ð (ri   rZ   c                  ó  ‡ — e Zd ZU dZded<   ed d!d„¦   «         Zed„ ¦   «         Zed"d„¦   «         Zed"d„¦   «         Z	ed"ˆ fd„¦   «         Z
eed#d„¦   «         ¦   «         Zed d$d„¦   «         Zeddddœd%d„¦   «         Zˆ xZS )&ÚEABackedBlockz>
    Mixin for Block subclasses backed by ExtensionArray.
    r<   r[   Nr·  r\   rƒ   r   ra   rÅ   c                óz   — | j         j                             ||¬¦  «        j        }|                      |¦  «        gS )z‹
        Shift the block by `periods`.

        Dispatches to underlying ExtensionArray and re-boxes in an
        ExtensionBlock.
        )r·  rƒ   )r[   r~  r:   r›   )rf   r·  rƒ   r±   s       rg   r:   zEABackedBlock.shiftR  s:   € ð ”[”]×(Ò(°ÀZÐ(ÑPÔPÔRˆ
Ø×*Ò*¨:Ñ6Ô6Ð7Ð7ri   c                ó  — |}|}|                       |¦  «        }|                      |¦  «        }| j        }|j        dk    r|j        }t          |||¦  «         	 |||<   | S # t          t          f$ r� t          | j	        t          ¦  «        r/|                      |d¬¦  «        }|                     ||¦  «        cY S t          | t          ¦  «        r/|                      |d¬¦  «        }|                     ||¦  «        cY S ‚ w xY w)a7  
        Attempt self.values[indexer] = value, possibly creating a new array.

        This differs from Block.setitem by not allowing setitem to change
        the dtype of the Block.

        Parameters
        ----------
        indexer : tuple, list-like, array-like, slice, int
            The subset of self.values to set
        value : object
            The value being set

        Returns
        -------
        Block

        Notes
        -----
        `indexer` is a direct slice/positional indexer. `value` must
        be a compatible shape.
        rÍ   Tr1  )rd  rb  r[   r]   r~  rF   r  rï   rx   rd   r%   rô   r„  ÚNDArrayBackedExtensionBlock)rf   r§   r†   Úorig_indexerÚ
orig_valuer[   rÛ   s          rg   r„  zEABackedBlock.setitem_  s*  € ð0 ˆØˆ
à×.Ò.¨wÑ7Ô7ˆØ×'Ò'¨Ñ.Ô.ˆà”ˆØŒ;˜!ÒÐð ”XˆFÝ˜g u¨fÑ5Ô5Ð5ð	Ø#ˆF�7‰Oð ˆKøõ �IÐ&ð 	ð 	ð 	Ý˜$œ*¥mÑ4Ô4ð 
à×0Ò0°ÈTÐ0ÑRÔR�Ø—z’z ,°
Ñ;Ô;Ð;Ð;Ð;å˜DÕ"=Ñ>Ô>ð Ø×0Ò0°ÈTÐ0ÑRÔR�Ø—z’z ,°
Ñ;Ô;Ð;Ð;Ð;ð ð	øøøs   ÁA! Á!ADÂ;ADÃ?Dc                ó  — | j         j        }t          |¦  «        }|}|}|                      |¦  «        }|                      |¦  «        }|t          j        u r| j        }t          || ¦  «        \  }}|r|                      d¬¦  «        gS 	 | 	                    ||¦  «        j        }�nÀ# t          $ r ‚ t          t          f$ �r¡ | j        dk    s| j        d         dk    råt          | j        t"          t$          f¦  «        r|                      |d¬¦  «        }	| j        dk    rEt          |t(          j        ¦  «        r+|j        dk    r t-          |	j        ¦  «        s|d d …d f         }|	                     ||¦  «        cY S t          | t0          ¦  «        r/|                      |d¬¦  «        }	|	                     ||¦  «        cY S ‚ t          |t(          j        t2          f¦  «        }
g }t5          |                      ¦   «         ¦  «        D ]V\  }}|}|
r|d d …||dz   …f         }|d d …||dz   …f         }|                     ||¦  «        }|                     |¦  «         ŒW|cY S w xY w|                      |¦  «        }|gS )NFrö   rž   r   r1  rÍ   )r[   r~  r1   rb  r   rt  rƒ   r5   rþ   Ú_wherer   r  rï   r]   r¦   rx   rd   r%   rA   rô   ry   rí   r   r’  rô  r<   rÓ   rß   rá   r›   )rf   rñ   r•  Úarrr—  Ú	orig_condr˜  rŒ  rÐ   rû   r�  rã   rÖ   rÛ   rŽ  r�  rä   s                    rg   r’  zEABackedBlock.where–  s¿  € àŒkŒmˆå! $Ñ'Ô'ˆàˆ
Øˆ	Ø×'Ò'¨Ñ.Ô.ˆØ×&Ò& tÑ,Ô,ˆà•C”NÐ"Ð"Ø”OˆEå& s¨T¨EÑ2Ô2‰ˆˆtØð 	+ð —I’I 5�IÑ)Ô)Ð*Ð*ð)	"ØŸš D¨%Ñ0Ô0Ô2ˆJ‰JøÝ"ð 	ð 	ð 	ØÝ�IÐ&ð %	"ñ %	"ð %	"ØŒy˜AŠ~ˆ~ ¤¨A¤°!Ò!3Ð!3Ý˜dœj­=½+Ð*FÑGÔGð à×5Ò5°jÐRWÐ5ÑXÔX�Càœ	 Qš˜Ý& yµ"´*Ñ=Ô=ð 'à%œN¨aÒ/Ð/Ý 3°C´IÑ >Ô >ð 0ð %.¨a¨a¨a°¨gÔ$6˜	ØŸ9š9 Z°Ñ;Ô;Ð;Ð;Ð;å Õ&AÑBÔBð ð ×5Ò5°jÐRWÐ5ÑXÔX�CØŸ9š9 Z°Ñ;Ô;Ð;Ð;Ð;ð õ & jµ2´:½~Ð2NÑOÔO�à�
Ý& t§{¢{¡}¤}Ñ5Ô5ð +ð +‘E�A�rØ"�AØð 5à& q q q¨!¨a°!©e¨) |Ô4˜à'¨¨¨¨1¨q°1©u¨9¨Ô5�GØŸ(š( 1 gÑ.Ô.�CØ×%Ò% cÑ*Ô*Ð*Ð*Ø!Ð!Ð!Ð!ðK%	"øøøðN ×'Ò'¨
Ñ3Ô3ˆØˆtˆs!   ÂB* Â*CI'ÆAI'ÇBI'É&I'c                ód  — t          |¦  «        }|t          j        u r| j        }|}|}|                      |¦  «        }|                      |¦  «        }|                     ¦   «         s|                      d¬¦  «        gS |                      d¬¦  «        } | j        }|j	        dk    r|j
        }	 |                     ||¦  «         �ni# t          $ r ‚ t          t          f$ �rJ | j	        dk    s| j        d         dk    rŽt!          | j        t$          ¦  «        r/|                      |d¬¦  «        }|                     ||¦  «        cY S t!          | t*          ¦  «        r/|                      |d¬¦  «        }|                     ||¦  «        cY S ‚ t!          |t,          j        t0          f¦  «        }g }t3          |                      ¦   «         ¦  «        D ]V\  }	}
|}|r|d	d	…|	|	dz   …f         }|d	d	…|	|	dz   …f         }|
                     ||¦  «        }|                     |¦  «         ŒW|cY S w xY w| gS )
z+
        See Block.putmask.__doc__
        Frö   Trƒ  rÍ   rž   r   r1  N)r1   r   rt  rƒ   rb  r  rþ   r*  r[   r]   r~  Ú_putmaskr   rï   r  r¦   rx   rd   r%   rô   rˆ  rô  ry   rí   r<   rÓ   rß   rá   )rf   r-  rŠ  Úorig_newr‹  r[   rû   r�  rã   rÖ   rÛ   rŽ  r�  rä   s                 rg   rˆ  zEABackedBlock.putmaskØ  sp  € õ
 " $Ñ'Ô'ˆØ•#”.Ð Ð Ø”/ˆCàˆØˆ	Ø×%Ò% cÑ*Ô*ˆØ×&Ò& tÑ,Ô,ˆà�xŠx‰zŒzð 	+Ø—I’I 5�IÑ)Ô)Ð*Ð*à×Ò¨ÐÑ-Ô-ˆØ”ˆØŒ;˜!ÒÐØ”XˆFð$	"à�OŠO˜D #Ñ&Ô&Ð&Ñ&øÝ"ð 	ð 	ð 	ØÝ�:Ð&ð 	"ñ 	"ð 	"ØŒy˜AŠ~ˆ~ ¤¨A¤°!Ò!3Ð!3Ý˜dœj­-Ñ8Ô8ð ð ×5Ò5°hÐPTÐ5ÑUÔU�CØŸ;š; y°(Ñ;Ô;Ð;Ð;Ð;å Õ&AÑBÔBð ð ×5Ò5°hÐPTÐ5ÑUÔU�CØŸ;š; y°(Ñ;Ô;Ð;Ð;Ð;ð õ & hµ´½^Ð0LÑMÔM�à�
Ý& t§{¢{¡}¤}Ñ5Ô5ð +ð +‘E�A�rØ �AØð 3à$ Q Q Q¨¨A°©E¨	 \Ô2˜à'¨¨¨¨1¨q°1©u¨9¨Ô5�GØŸ*š* W¨aÑ0Ô0�CØ×%Ò% cÑ*Ô*Ð*Ð*Ø!Ð!Ð!Ð!ð?	"øøøðB ˆvˆs!   Â.C ÃA?H,ÅAH,ÆBH,È+H,c                ó*  •— | j         dk    rU| j                             |¦  «        }| j                             |¦  «        } t	          | ¦  «        ||| j         ¬¦  «        gS | j        j         dk    rg S t          ¦   «                              |¦  «        S )Nrž   rÊ  )r]   r[   rË  rŠ   rš   Úsuper)rf   r×   r[   r‹   Ú	__class__s       €rg   rË  zEABackedBlock.delete  s‡   ø€ ð Œ9˜Š>ˆ>Ø”[×'Ò'¨Ñ,Ô,ˆFØ”~×,Ò,¨SÑ1Ô1ˆHØ•D˜‘J”J˜v°ÀÄ	ÐJÑJÔJÐKÐKØŒ[Ô Ò"Ð"àˆIÝ‰wŒw�~Š~˜cÑ"Ô"Ð"ri   c                ó   — | j         S rk   rh  re   s    rg   r¦  zEABackedBlock.array_values"  s   € ð Œ{Ðri   rd   rÚ  r^  c                ó²   — | j         }|t          k    r|                     t          ¦  «        }t	          j        |¦  «                             | j        ¦  «        S )zS
        return object dtype as boxed values, such as Timestamps/Timedelta
        )r[   rl   rð   rX   ry   rÁ  rÏ   r¦   )rf   rd   r[   s      rg   rÜ  zEABackedBlock.get_values'  sG   € ð
 !œKˆØ•JÒÐØ—]’]¥6Ñ*Ô*ˆFåŒz˜&Ñ!Ô!×)Ò)¨$¬*Ñ5Ô5Ð5ri   Fr¡  r£  rP   r(  rb   r›  rœ  r¢  r¤  c               ó>  — | j         }||dœ}dt          j        |j        ¦  «        j        v r||d<   n&|�$t          t          |¦  «        j        › d�¦  «        ‚|j        dk    r |j	        j        di |¤Žj	        }n |j        di |¤Ž}|  
                    |¦  «        gS )N)r£  r›  r¢  z… does not implement limit_area (added in pandas 2.2). 3rd-party ExtensionArray authors need to add this argument to _pad_or_backfill.rÍ   r`   )r[   ÚinspectÚ	signaturer§  Ú
parametersr“  rš   r£   r]   r~  r›   )rf   r£  r(  r›  r¢  r[   rÊ   r±   s           rg   r©  zEABackedBlock.pad_or_backfill2  sÔ   € ð ”ˆà,2¸UÐ!CÐ!CˆØ�7Ô,¨VÔ-DÑEÔEÔPÐPÐPØ#-ˆF�<Ñ Ð ØÐ#Ý%Ý˜‘<”<Ô(ð Að Að Añô ð ð Œ;˜!ÒÐà2˜œÔ2Ð<Ð<°VÐ<Ð<Ô>ˆJˆJà0˜Ô0Ð:Ð:°6Ð:Ð:ˆJØ×*Ò*¨:Ñ6Ô6Ð7Ð7ri   rk   ræ  rß  rç  rè  rå  )r£   ré  rê  rë  rì  r	   r:   r„  r’  rˆ  rË  r   r¦  rÜ  r©  Ú__classcell__©r   s   @rg   rñ  rñ  K  sh  ø€ € € € € € ðð ð ÐÐÑà
ð
8ð 
8ð 
8ð 
8ñ „Uð
8ð ð4ð 4ñ „Uð4ðl ð?ð ?ð ?ñ „Uð?ðB ð;ð ;ð ;ñ „Uð;ðz ð	#ð 	#ð 	#ð 	#ð 	#ñ „Uð	#ð Øðð ð ñ „^ñ „Uðð ð6ð 6ð 6ð 6ñ „Uð6ð ð
 Ø Ø:>ð8ð 8ð 8ð 8ð 8ñ „Uð8ð 8ð 8ð 8ð 8ri   rñ  c                  óÄ   ‡ — e Zd ZU dZded<   	 	 d%d&ˆ fd„Zed'd„¦   «         Zd(d„Zd)d*d„Z	d„ Z
d„ Zed+d„¦   «         Zed+d„¦   «         Zd,d„Zed-d„¦   «         Zd.d$„Zˆ xZS )/rw  zñ
    Block for holding extension types.

    Notes
    -----
    This holds all 3rd-party extension array types. It's also the immediate
    parent class for our internal extension types' blocks.

    ExtensionArrays are limited to 1-D.
    r<   r[   NFr›  rœ  r(  rb   ra   rÅ   c                ó¨  •— t          | j        t          t          f¦  «        rOt          | j        t          ¦  «        r|�t	          d¦  «        ‚t          ¦   «                              |||¬¦  «        S | j        r| j        j	        s| j
        }| j        }n¨|                      |¦  «        \  }}	 | j                             |||¬¦  «        }nq# t          $ rd d }| j                             ||¬¦  «        }t          j        dt          | j        ¦  «        j        › d�t"          t%          ¦   «         ¬¦  «         Y nw xY w|                      ||¬¦  «        gS )	Nzlimit must be None)r†   r›  r(  )r†   r›  rþ   )r†   r›  zÛExtensionArray.fillna added a 'copy' keyword in pandas 2.1.0. In a future version, ExtensionArray subclasses will need to implement this keyword or an exception will be raised. In the interim, the keyword is ignored by ú.r¹  r¯   )rx   rd   r%   rA   r  rÿ  r   r{   r[   Ú_hasnar^   r,  rï   r»  r¼  rš   r£   r   r   r›   )rf   r†   r›  r(  r^   r±   rþ   r   s          €rg   r   zExtensionBlock.fillna]  s‚  ø€ õ �d”j¥=µ+Ð">Ñ?Ô?ð 	å˜$œ*¥mÑ4Ô4ð 7¸Ð9JÝ Ð!5Ñ6Ô6Ð6Ý‘7”7—>’>ØØØð "ñ ô ð ð
 Ôð 	 T¤[Ô%7ð 	Ø”9ˆDØœˆJˆJà×0Ò0°Ñ9Ô9‰JˆD�$ðØ!œ[×/Ò/°eÀ5ÈtÐ/ÑTÔT�
�
øÝð ð ð à�Ø!œ[×/Ò/°eÀ5Ð/ÑIÔI�
õ ”ð5õ ˜DœKÑ(Ô(Ô1ð	5ð 5ð 5õ
 #Ý/Ñ1Ô1ð	ñ 	ô 	ð 	ð 	ð 	ðøøøð" ×*Ò*¨:¸DÐ*ÑAÔAÐBÐBs   Â-C ÃA+D9Ä8D9rT   c                ó’   — | j         dk    rt          | j        ¦  «        fS t          | j        ¦  «        t          | j        ¦  «        fS )Nrž   )r]   r¤   r[   rŠ   re   s    rg   r¦   zExtensionBlock.shape‡  sA   € ð Œ9˜Š>ˆ>Ý˜œÑ$Ô$Ð&Ð&Ý�4”>Ñ"Ô"¥C¨¬Ñ$4Ô$4Ð4Ð4ri   rÖ   rf  c                ón  — t          |t          ¦  «        r‚|\  }}t          j        |¦  «        s|dk    rt	          | › d�¦  «        ‚t          |t
          ¦  «        r/|dk     r|t          | j        ¦  «        z  }| j        ||dz   …         S | j        |         S |dk    rt	          | › d�¦  «        ‚| j        S )Nr   z only contains one itemrž   )rx   ÚtupleÚcomÚis_null_slicerÍ  r­   r¤   r[   )rf   rÖ   Úcolr×   s       rg   ri  zExtensionBlock.igetŽ  sÏ   € õ �a�ÑÔð 	à‰HˆC�ÝÔ$ SÑ)Ô)ð C¨c°Qªh¨hÝ  DÐ!AÐ!AÐ!AÑBÔBÐBÝ˜#�uÑ%Ô%ð 2ð ˜’7�7Ø�3˜tœ{Ñ+Ô+Ñ+�Cð ”{ 3¨¨q© =Ô1Ð1Ø”;˜sÔ#Ð#à�AŠvˆvÝ  DÐ!AÐ!AÐ!AÑBÔBÐBØ”;Ðri   rL   rþ   r�   c                ó^   — |r| j                              ¦   «         | _         || j         d d …<   d S rk   rm  rn  s       rg   rp  zExtensionBlock.set_inplaceª  s4   € ð ð 	-Øœ+×*Ò*Ñ,Ô,ˆDŒKØˆŒ�A�A�A‰ˆˆri   c                ó@  — t          |t          j        t          f¦  «        r8|j        | j        j        dz   k    r |j        d         dk    sJ ‚|dd…df         }nDt          |t          ¦  «        r/|j        d         dk    sJ ‚|                     dd¬¦  «        j	        }|S )z@
        If necessary, squeeze a (N, 1) ndarray to (N,)
        rž   Nr   rµ  )
rx   ry   rí   r<   r]   r[   r¦   r(   Ú_ixsrÂ  ra  s     rg   rb  z!ExtensionBlock._maybe_squeeze_arg±  sª   € õ �s�RœZ­Ð8Ñ9Ô9ð	.à”˜DœKÔ,¨qÑ0Ò0Ð0ð ”9˜Q”< 1Ò$Ð$Ð$Ð$ð �a�a�a˜�d”)ˆCˆCÝ˜�\Ñ*Ô*ð 	.ð ”9˜Q”< 1Ò$Ð$Ð$Ð$Ø—(’(˜1 1�(Ñ%Ô%Ô-ˆCàˆ
ri   c                óV  — t          |t          ¦  «        �rt          |¦  «        dk    rÿt          d„ |D ¦   «         ¦  «        rU|\  }}|j        dk    r)|dk                         ¦   «         r|j        d         dk    st          d¦  «        ‚|dd…df         }n‘t          j        |d         ¦  «        r|d         dk    r	|d         }nbt          j
        |d         ¦  «        r	|d         }n?t          |d         ¦  «        r|d         d         dk    r	|d         }nt          d¦  «        ‚|S )zw
        Adapt a 2D-indexer to our 1D values.

        This is intended for 'setitem', not 'iget' or '_slice'.
        rÍ   c              3  ó`   K  — | ])}t          |t          j        ¦  «        o
|j        d k    V — Œ*dS )rÍ   N)rx   ry   rí   r]   )r    rB  s     rg   rü   z9ExtensionBlock._unwrap_setitem_indexer.<locals>.<genexpr>Ô  s9   è è € ÐNÐNÀ•:˜a¥¤Ñ,Ô,Ð<°´¸1²ÐNÐNÐNÐNÐNÐNri   rž   r   zPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/N)rx   r  r¤   r   Úsizer¦   r“  r   Ú
is_integerr  r  r    )rf   r§   ÚfirstÚseconds       rg   rd  z&ExtensionBlock._unwrap_setitem_indexerÇ  sO  € õ �g�uÑ%Ô%ñ 	­#¨g©,¬,¸!Ò*;Ð*;õ
 ÐNÐNÀgÐNÑNÔNÑNÔNð à '‘��và”K 1Ò$Ð$¨&°Aª+×):Ò):Ñ)<Ô)<Ð$ÀÄÈQÄÐSTÒATÐATå-ð8ñô ð ð      1 œ+��å” ¨¤
Ñ+Ô+ð °¸´
¸a²°à! !œ*��åÔ" 7¨1¤:Ñ.Ô.ð 
Ø! !œ*��å˜g aœjÑ)Ô)ð ¨g°a¬j¸¬m¸qÒ.@Ð.@Ø! !œ*��õ *ð4ñô ð ð ˆri   c                ó   — dS )z,Extension arrays are never treated as views.Fr`   re   s    rg   r×  zExtensionBlock.is_viewñ  s	   € ð ˆuri   c                ó$   — | j         j        j        S rk   )r[   rd   Ú_is_numericre   s    rg   rÆ  zExtensionBlock.is_numeric÷  s   € àŒ{Ô Ô,Ð,ri   r¸   rj  c                ó  — | j         dk    rht          |t          ¦  «        st          d|¦  «        ‚t	          d¦  «        |         }t          |¦  «        st          d|¦  «        ‚t          d¦  «        }| j        |         S )zþ
        Return a slice of my values.

        Parameters
        ----------
        slicer : slice, ndarray[int], or ndarray[bool]
            Valid (non-reducing) indexer for self.values.

        Returns
        -------
        ExtensionArray
        rÍ   z+invalid slicing for a 1-ndim ExtensionArrayrž   N)r]   rx   r­   ré   Úranger¤   r[   )rf   r¸   Únew_locss      rg   r°   zExtensionBlock._sliceû  s‹   € ð& Œ9˜Š>ˆ>õ ˜f¥eÑ,Ô,ð Ý$ØAÀ6ñô ð õ ˜Q‘x”x Ô'ˆHÝ�x‘=”=ð Ý$ØAÀ6ñô ð õ ˜4‘[”[ˆFàŒ{˜6Ô"Ð"ri   r­   r   c                ór   — | j         |         } t          | ¦  «        || j        | j        | j        ¬¦  «        S )zN
        Perform __getitem__-like specialized to slicing along index.
        )r]   r^   )r[   rš   rŠ   r]   r^   )rf   r¸   r±   s      rg   Úslice_block_rowszExtensionBlock.slice_block_rows#  s5   € ð ”[ Ô(ˆ
Ø�t�D‰zŒz˜* d¤n¸4¼9È4Ì9ÐUÑUÔUÐUri   rx  r´   ry  rZ  c                ó¨   ‡ ‡‡— |j         \  }}|j        |         }||         }ˆˆˆ fd„t          t          ||d¬¦  «        ¦  «        D ¦   «         }||fS )Nc           	     ó®   •— g | ]Q\  }\  }} t          ‰¦  «        ‰j                             |‰|         ‰¬ ¦  «        t          |¦  «        d¬¦  «        ‘ŒRS ))rs  rƒ   rÍ   r“   )rš   r[   Útaker   )r    rÖ   r³   Úplacerƒ   ry  rf   s       €€€rg   r¢   z+ExtensionBlock._unstack.<locals>.<listcomp>I  s�   ø€ ð 
ð 
ð 
ñ $�Ñ#�G˜Uð �D�‰JŒJØ”× Ò Ø¨°aÔ(8ÀZð !ñ ô õ ˜uÑ%Ô%Øðñ ô ð
ð 
ð 
ri   Tr  )Úarange_resultr~  rÓ   r  )rf   r€  rƒ   rx  ry  r±   r-  r  s   ` ` `   rg   r�  zExtensionBlock._unstack-  sˆ   øøø€ ð %Ô2Ñˆ
�Dð  ”\ $Ô'ˆ
Ø% dÔ+ˆð
ð 
ð 
ð 
ð 
ð 
õ (1Ý�J °dÐ;Ñ;Ô;ñ(ô (ð
ñ 
ô 
ˆð �tˆ|Ðri   rã  rä  rà  )rÖ   rf  rÞ  rá  rÝ  )r¸   rj  ra   r<   )r¸   r­   ra   r   râ  )r£   ré  rê  rë  rì  r   r   r¦   ri  rp  rb  rd  rî  r×  rÆ  r°   r	   r#  r�  r  r  s   @rg   rw  rw  O  se  ø€ € € € € € ð	ð 	ð ÐÐÑð
 !Øð	(Cð (Cð (Cð (Cð (Cð (Cð (CðT ð5ð 5ð 5ñ „^ð5ðð ð ð ð8 ð  ð  ð  ð  ðð ð ð,(ð (ð (ðT ðð ð ñ „Xðð
 ð-ð -ð -ñ „^ð-ð&#ð &#ð &#ð &#ðP ðVð Vð Vñ „UðVð)ð )ð )ð )ð )ð )ð )ð )ri   rw  c                  óp   — e Zd ZU ded<   dZedd„¦   «         Zedd„¦   «         Zddd„Ze	dd„¦   «         Z
d	S )Ú
NumpyBlockr^  r[   r`   ra   rb   c                ó   — | j         j        duS ©rÕ  N)r[   Úbasere   s    rg   r×  zNumpyBlock.is_view]  s   € ð Œ{Ô tÐ+Ð+ri   r<   c                ó*   — t          | j        ¦  «        S rk   )r>   r[   re   s    rg   r¦  zNumpyBlock.array_valuesb  s   € å" 4¤;Ñ/Ô/Ð/ri   Nrd   rÚ  c                ód   — |t           k    r| j                             t           ¦  «        S | j        S rk   )rl   r[   rð   r|   s     rg   rÜ  zNumpyBlock.get_valuesf  s+   € Ø•JÒÐØ”;×%Ò%¥jÑ1Ô1Ð1ØŒ{Ðri   c                ó0   — | j         j        }|j        }|dv S )NÚfciub)r[   rd   rz   )rf   rd   rz   s      rg   rÆ  zNumpyBlock.is_numerick  s   € à”Ô!ˆØŒzˆà�wˆÐri   rÝ  rç  rk   rè  )r£   ré  rê  rì  rí  rî  r×  r¦  rÜ  r   rÆ  r`   ri   rg   r*  r*  Y  sž   € € € € € € ØÐÐÑØ€Iàð,ð ,ð ,ñ „Xð,ð ð0ð 0ð 0ñ „Xð0ðð ð ð ð ð
 ðð ð ñ „^ðð ð ri   r*  c                  ó6   — e Zd ZU dZded<   edd„¦   «         ZdS )	rô  z8
    Block backed by an NDArrayBackedExtensionArray
    rW   r[   ra   rb   c                ó(   — | j         j        j        duS r,  )r[   r  r-  re   s    rg   r×  z#NDArrayBackedExtensionBlock.is_viewz  s   € ð Œ{Ô#Ô(°Ð4Ð4ri   NrÝ  )r£   ré  rê  rë  rì  rî  r×  r`   ri   rg   rô  rô  s  sL   € € € € € € ðð ð (Ð'Ð'Ñ'àð5ð 5ð 5ñ „Xð5ð 5ð 5ri   rô  c                  ó&   — e Zd ZU dZdZdZded<   dS )ÚDatetimeLikeBlockz*Block for datetime64[ns], timedelta64[ns].r`   FzDatetimeArray | TimedeltaArrayr[   N)r£   ré  rê  rë  rí  rÆ  rì  r`   ri   rg   r5  r5  �  s.   € € € € € € Ø4Ð4à€IØ€JØ*Ð*Ð*Ñ*Ð*Ð*ri   r5  r[   rL   ra   c                ó<  — t          | t          j        ¦  «        rIt          | ¦  «        } t	          | j        j        t          ¦  «        rt          j        | t          ¬¦  «        } t          | t          t          f¦  «        r| j        �|                      d¦  «        } | S )a:  
    Input validation for values passed to __init__. Ensure that
    any datetime64/timedelta64 dtypes are in nanoseconds.  Ensure
    that we do not have string dtypes.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray

    Returns
    -------
    values : np.ndarray or ExtensionArray
    rÃ   N)rx   ry   rí   rD   Ú
issubclassrd   rš   rœ   r”  rX   r;   r@   ÚfreqÚ
_with_freqrh  s    rg   rÇ   rÇ   �  s†   € õ  �&�"œ*Ñ%Ô%ð 4Ý/°Ñ7Ô7ˆå�f”lÔ'­Ñ-Ô-ð 	4Ý”X˜f­FÐ3Ñ3Ô3ˆFå�&�=­.Ð9Ñ:Ô:ð )¸v¼{Ð?Và×"Ò" 4Ñ(Ô(ˆà€Mri   rd   rO   útype[Block]c                óÜ   — t          | t          ¦  «        rt          S t          | t          ¦  «        rt          S t          | t
          ¦  «        rt          S | j        }|dv rt          S t          S )zÑ
    Find the appropriate Block subclass to use for the given values and dtype.

    Parameters
    ----------
    dtype : numpy or pandas dtype

    Returns
    -------
    cls : class, subclass of Block
    ÚMm)	rx   r#   r5  r'   rô  r$   rw  rz   r*  rú   s     rg   Úget_block_typer=  ª  sj   € õ �%�Ñ)Ô)ð Ý Ð Ý	�E�;Ñ	'Ô	'ð Ý*Ð*Ý	�E�>Ñ	*Ô	*ð åÐð Œ:€DØˆt€|€|Ý Ð åÐri   r�   r   r^   r‘   c                óf   — t          | j        ¦  «        }t          | ¦  «        }  || d||¬¦  «        S )NrÍ   ©r]   r�   r^   )r=  rd   rÇ   )r[   r�   r^   Úklasss       rg   r  r  Ç  s9   € õ ˜6œ<Ñ(Ô(€Eå  Ñ(Ô(€FØˆ5�˜a¨9¸4Ð@Ñ@Ô@Ð@ri   r¯   r]   r\   c               óH   — t          | j        ¦  «        } || |||¬¦  «        S )Nr?  )r=  rd   )r[   r�   r]   r^   r@  s        rg   r–   r–   Ô  s,   € õ ˜6œ<Ñ(Ô(€EØˆ5�˜d¨i¸dÐCÑCÔCÐCri   r�   c                ó¼  — | j         |k    rt          d| j         › d|› d�¦  «        ‚t          | j        ¦  «        sw| j         |k    rt          d| j         › d|› d�¦  «        ‚t	          |¦  «        t	          | ¦  «        k    r/t          dt	          | ¦  «        › dt	          |¦  «        › �¦  «        ‚dS |dk    r"t	          |¦  «        d	k    rt          d
¦  «        ‚dS dS )aV  
    ndim inference and validation.

    Validates that values.ndim and ndim are consistent.
    Validates that len(values) and len(placement) are consistent.

    Parameters
    ----------
    values : array-like
    placement : BlockPlacement
    ndim : int

    Raises
    ------
    ValueError : the number of dimensions do not match
    z0Wrong number of dimensions. values.ndim > ndim [z > ú]z1Wrong number of dimensions. values.ndim != ndim [z != zWrong number of items passed z, placement implies rÍ   rž   zneed to splitN)r]   r  r   rd   r¤   )r[   r�   r]   s      rg   Ú
check_ndimrD  ã  s-  € ð$ „{�TÒÐåØV¸v¼{ÐVÐVÈtÐVÐVÐVñ
ô 
ð 	
õ ˜vœ|Ñ,Ô,ð *àŒ;˜$ÒÐÝðAØ(.¬ðAð AØ9=ðAð Að Añô ð õ ˆy‰>Œ>�S ™[œ[Ò(Ð(Ýð6µ°F±´ð 6ð 6Ý%(¨¡^¤^ð6ð 6ñô ð ð )Ð(ð
 
�Šˆ•s˜9‘~”~¨Ò*Ð*å˜Ñ)Ô)Ð)ð 
ˆÐ*Ð*ri   rÚ  ú!tuple[ArrayLike, DtypeObj | None]c                óÌ   — t          | t          ¦  «        r0|                      ¦   «         } |r|dk    rt          j        | ¦  «        } t          |t
          ¦  «        r|j        }| |fS )zU
    Ensure that we don't allow NumpyExtensionArray / NumpyEADtype in internals.
    rž   )rx   r*   Úto_numpyry   Ú
atleast_2dr&   Únumpy_dtype)r[   rd   r]   s      rg   Úextract_pandas_arrayrJ  	  si   € õ �&Õ0Ñ1Ô1ð +Ø—’Ñ"Ô"ˆØð 	+�D˜1’H�Hå”] 6Ñ*Ô*ˆFå�%�Ñ&Ô&ð "ØÔ!ˆà�5ˆ=Ðri   rÅ   c                óF  — |€g }t          | t          ¦  «        rF| D ]B}t          |t          ¦  «        r|                     |¦  «         Œ-|                     |¦  «         ŒCnAt          | t          ¦  «        sJ t          | ¦  «        ¦   «         ‚|                     | ¦  «         |S )z.return a new extended blocks, given the result)rx   r  rá   rÔ   rZ   rš   )r¨   r  Úrs      rg   rŸ  rŸ  "	  s«   € à€~ØˆÝ�&�$ÑÔð Øð 	!ð 	!ˆAÝ˜!�TÑ"Ô"ð !Ø—’˜aÑ Ô Ð Ð à—’˜aÑ Ô Ð Ð ð		!õ ˜&¥%Ñ(Ô(Ð6Ð6­$¨v©,¬,Ñ6Ô6Ð(Ø�Š�fÑÔÐØ€Mri   rž   c                ó�   — | j         |k     r:t          | j        ¦  «        s&t          d| ¦  «        } |                      dd¦  «        } | S )z:
    Reshape if possible to have values.ndim == ndim.
    z+np.ndarray | DatetimeArray | TimedeltaArrayrž   rÎ   )r]   r   rd   r   rÏ   )r[   r]   s     rg   r•   r•   2	  sM   € ð
 „{�TÒÐÝ" 6¤<Ñ0Ô0ð 	+õ ÐGÈÑPÔPˆFØ—^’^ A rÑ*Ô*ˆFà€Mri   c                ó0  — t          | t          t          f¦  «        r|                      t          ¦  «        S t          | t
          t          f¦  «        r| j        } t          | t          j	        ¦  «        r!|  
                    ¦   «         } d| j        _        n	 | S )a+  
    The array that Series.values returns (public attribute).

    This has some historical constraints, and is overridden in block
    subclasses to return the correct array (e.g. period returns
    object ndarray and datetimetz a datetime64[ns] ndarray instead of
    proper extension array).
    F)rx   r?   r=   rð   rX   r;   r@   r  ry   rí   r'  ÚflagsÚ	writeablerh  s    rg   r€   r€   B	  s…   € õ �&�;­Ð6Ñ7Ô7ð !Ø�}Š}�VÑ$Ô$Ð$Ý	�F�]­NÐ;Ñ	<Ô	<ð !ð ”ˆå�&�"œ*Ñ%Ô%ð Ø—’‘”ˆØ!&ˆŒÔÐð 	à€Mri   )r[   rL   ra   rL   )rd   rO   ra   r:  rk   )r[   rL   r�   r   r^   r‘   ra   rZ   )r�   r   r]   r\   r^   r‘   ra   rZ   )r�   r   r]   r\   ra   r�   )r[   rL   rd   rÚ  r]   r\   ra   rE  rß  )rž   )r[   rL   r]   r\   ra   rL   )“Ú
__future__r   r  r7  Útypingr   r   r   r   r   r	   r»  Únumpyry   Úpandas._libsr
   r   Úlibinternalsr   Úpandas._libs.internalsr   r   Úpandas._libs.missingr   Úpandas.errorsr   r   r   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.util._validatorsr   Úpandas.core.dtypes.astyper   r   Úpandas.core.dtypes.castr   r   r   r   r   Úpandas.core.dtypes.commonr   r   r   r    r!   r"   Úpandas.core.dtypes.dtypesr#   r$   r%   r&   r'   Úpandas.core.dtypes.genericr(   r)   r*   r+   Úpandas.core.dtypes.inferencer,   Úpandas.core.dtypes.missingr-   r.   r/   Úpandas.corer0   Úpandas.core.algorithmsÚcoreÚ
algorithmsru  Úpandas.core.array_algos.putmaskr1   r2   r3   r4   r5   Ú pandas.core.array_algos.quantiler6   Úpandas.core.array_algos.replacer7   r8   r9   Ú"pandas.core.array_algos.transformsr:   Úpandas.core.arraysr;   r<   r=   r>   r?   r@   Úpandas.core.arrays.string_rA   Úpandas.core.baserB   Úpandas.core.commonÚcommonr  Úpandas.core.computationrC   Úpandas.core.constructionrD   rE   Úpandas.core.indexersrF   Úpandas.core.indexes.baserG   Úcollections.abcrH   rI   rJ   rK   Úpandas._typingrL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   Úpandas.core.apirV   Úpandas.core.arrays._mixinsrW   rd   rl   rZ   rñ  rw  r*  rô  r5  rÇ   r=  r  r–   rD  rJ  rŸ  r•   r€   r`   ri   rg   ú<module>rx     s°  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð
 5Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7àð Gðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð%Ð%Ð%Ð%Ð%ØFÐFÐFÐFÐFÐFð ˆRŒX�hÑÔ€
ð~(ð ~(ð ~(ð ~(ð ~(ˆL˜,Ô,ñ ~(ô ~(ð ~(ðB.A8ð A8ð A8ð A8ð A8�Eñ A8ô A8ð A8ðHGð Gð Gð Gð G�]ñ Gô Gð GðTð ð ð ð �ñ ô ð ð45ð 5ð 5ð 5ð 5 -ñ 5ô 5ð 5ð+ð +ð +ð +ð +Ð3ñ +ô +ð +ðð ð ð ð:ð ð ð ð< RVð
Að 
Að 
Að 
Að 
Að$ $(ðDð Dð Dð Dð Dð Dð&*ð &*ð &*ð &*ðRð ð ð ð,ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ri   