Ë
    ìmxi\³  ã                   óª  — d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlZd dl	m
Z
 d dlZd dlZd dlZd dlZ	 d dlZd dlZd dlmZmZmZ i ai ai ad„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Z 	 d+d„Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d+d„Z,	 	 d,d„Z-d„ Z.d-d„Z/d„ Z0	 d.d„Z1h d£Z2d„ Z3d „ Z4d!„ Z5d+d"„Z6	 d+d#„Z7d$„ Z8d%„ Z9d&„ Z:d'„ Z;d(„ Z<d)„ Z=d*„ Z>y# e$ r dZY Œ—w xY w)/é    N)ÚSequence)Úfutures)Údeepcopy)Úzip_longest)Ú_pandas_apiÚ	frombytesÚis_threading_enabledc            	      ó|  — t         �s0t         j                  i t        j                  j                  d“t        j                  j
                  d“t        j                  j                  d“t        j                  j                  d“t        j                  j                  d“t        j                  j                  d“t        j                  j                  d“t        j                  j                  d“t        j                  j                  d	“t        j                  j                  d
“t        j                  j                  d“t        j                  j                  d“t        j                  j                   d“t        j                  j"                  d“t        j                  j$                  d“t        j                  j&                  d“t        j                  j(                  d“t        j                  j*                  dt        j                  j,                  dt        j                  j.                  di¥«       t         S )NÚemptyÚboolÚint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64Úfloat16Úfloat32Úfloat64ÚdateÚtimeÚbytesÚunicode)Ú_logical_type_mapÚupdateÚpaÚlibÚType_NAÚ	Type_BOOLÚ	Type_INT8Ú
Type_INT16Ú
Type_INT32Ú
Type_INT64Ú
Type_UINT8ÚType_UINT16ÚType_UINT32ÚType_UINT64ÚType_HALF_FLOATÚ
Type_FLOATÚType_DOUBLEÚType_DATE32ÚType_DATE64ÚType_TIME32ÚType_TIME64ÚType_BINARYÚType_FIXED_SIZE_BINARYÚType_STRING© ó    úL/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/pandas_compat.pyÚget_logical_type_mapr7   .   sÆ  € ö Ü× Ñ ð "
Ü�F‰F�N‰N˜Gð"
ä�F‰F×Ñ˜fð"
ô �F‰F×Ñ˜fð"
ô �F‰F×Ñ˜wð	"
ô
 �F‰F×Ñ˜wð"
ô �F‰F×Ñ˜wð"
ô �F‰F×Ñ˜wð"
ô �F‰F×Ñ ð"
ô �F‰F×Ñ ð"
ô �F‰F×Ñ ð"
ô �F‰F×"Ñ" Ið"
ô �F‰F×Ñ˜yð"
ô �F‰F×Ñ 	ð"
ô �F‰F×Ñ ð"
ô �F‰F×Ñ ð"
ô  �F‰F×Ñ ð!"
ô" �F‰F×Ñ ð#"
ô$ �F‰F×Ñ Ü�F‰F×)Ñ)¨7Ü�F‰F×Ñ 	ñ)"
ô 	ô, Ðr5   c                 óÐ  — t        «       }	 || j                     S # t        $ rÁ t        | t        j
                  j                  «      rY yt        | t        j
                  j                  «      rdt        | j                  «      › d�cY S t        | t        j
                  j                  «      r| j                  �dcY S dcY S t        j                  j                  | «      rY yY yw xY w)NÚcategoricalzlist[ú]Ú
datetimetzÚdatetimeÚdecimalÚobject)r7   ÚidÚKeyErrorÚ
isinstancer   r   ÚDictionaryTypeÚListTypeÚget_logical_typeÚ
value_typeÚTimestampTypeÚtzÚtypesÚ
is_decimal)Ú
arrow_typeÚlogical_type_maps     r6   rD   rD   K   s³   € Ü+Ó-ÐðØ 
§¡Ñ.Ð.øÜò 	Ü�j¤"§&¡&×"7Ñ"7Ô8Ù Ü˜
¤B§F¡F§O¡OÔ4ØÔ+¨J×,AÑ,AÓBÐCÀ1ÐEÒEÜ˜
¤B§F¡F×$8Ñ$8Ô9Ø#-§=¡=Ð#<�<ÒLÀ*ÒLÜ�X‰X× Ñ  Ô,ÙÙð	ús'   Œ ›-C%Á
=C%Â	2C%Â=C%ÃC%Ã$C%c                  óè  — t         sçt         j                  t        j                  dt        j                  dt        j
                  dt        j                  dt        j                  dt        j                  dt        j                  dt        j                  dt        j                  d	t        j                  d
t        j                  dddt        j                  dt        j                  di«       t         S )Nr   r   r   r   r   r   r   r   r   r   r   údatetime64[D]r   Ústringr   )Ú_numpy_logical_type_mapr   ÚnpÚbool_r   r   r   r   r   r   r   r   r   r   Ústr_Úbytes_r4   r5   r6   Úget_numpy_logical_type_maprT   \   sš   € å"Ü×&Ñ&Ü�H‰H�fÜ�G‰G�VÜ�H‰H�gÜ�H‰H�gÜ�H‰H�gÜ�H‰H�gÜ�I‰I�xÜ�I‰I�xÜ�I‰I�xÜ�J‰J˜	Ü�J‰J˜	Ø˜VÜ�G‰G�XÜ�I‰I�wð(
ô 	ô  #Ð"r5   c                 óJ  — t        «       }	 || j                  j                     S # t        $ rt t	        | j                  d«      rY yt        | j                  «      j                  d«      rt        | j                  «      cY S t        j                  | «      }|dk(  rY y|cY S w xY w)NrG   r;   Ú
datetime64rN   r   )	rT   ÚdtypeÚtyper@   ÚhasattrÚstrÚ
startswithr   Úinfer_dtype)Úpandas_collectionÚnumpy_logical_type_mapÚresults      r6   Úget_logical_type_from_numpyr`   r   sš   € Ü7Ó9ÐðØ%Ð&7×&=Ñ&=×&BÑ&BÑCÐCøÜò 
ÜÐ$×*Ñ*¨DÔ1Ùô Ð ×&Ñ&Ó'×2Ñ2°<Ô@ÜÐ(×.Ñ.Ó/Ò/Ü×(Ñ(Ð):Ó;ˆØ�XÒÙØŠð
ús!   Œ% ¥B"Á9B"ÂB"ÂB"Â!B"c                 óš  — | j                   }t        |«      dk(  rVt        | d| «      }|€J ‚t        |j                  «      |j
                  dœ}t        |j                  j                   «      }||fS t        |d«      r?dt        j                  j                  |j                  «      i}d|j                  › d�}||fS d }t        |«      }||fS )NÚcategoryÚcat)Únum_categoriesÚorderedrG   Útimezonezdatetime64[r:   )rW   rZ   ÚgetattrÚlenÚ
categoriesre   ÚcodesrY   r   r   Útzinfo_to_stringrG   Úunit)ÚcolumnrW   ÚcatsÚmetadataÚphysical_dtypes        r6   Úget_extension_dtype_inforq   ƒ   sÑ   € Ø�L‰L€EÜ
ˆ5ƒz�ZÒÜ�v˜u fÓ-ˆØÐÐÐä! $§/¡/Ó2Ø—|‘|ñ
ˆô ˜TŸZ™Z×-Ñ-Ó.ˆð ˜8Ð#Ð#ô 
�˜Ô	Ø¤§¡× 7Ñ 7¸¿¹Ó AÐBˆØ& u§z¡z l°!Ð4ˆð ˜8Ð#Ð#ð ˆÜ˜U›ˆØ˜8Ð#Ð#r5   c                 óŒ  — t        |«      }t        | «      \  }}|dk(  r|j                  |j                  dœ}d}|�Yt	        |t
        «      rt        j                  |«      s4t	        |t        «      s$t        d|› dt        |«      j                  › �«      ‚t	        |t        «      sJ t        t        |«      «      «       ‚|||||dœS )a¿  Construct the metadata for a given column

    Parameters
    ----------
    column : pandas.Series or pandas.Index
    name : str
    arrow_type : pyarrow.DataType
    field_name : str
        Equivalent to `name` when `column` is a `Series`, otherwise if `column`
        is a pandas Index then `field_name` will not be the same as `name`.
        This is the name of the field in the arrow Table's schema.

    Returns
    -------
    dict
    r=   )Ú	precisionÚscaler>   z)Column name must be a string. Got column z	 of type ©ÚnameÚ
field_nameÚpandas_typeÚ
numpy_typero   )rD   rq   rs   rt   rA   ÚfloatrP   ÚisnanrZ   Ú	TypeErrorrX   Ú__name__)rm   rv   rJ   rw   Úlogical_typeÚstring_dtypeÚextra_metadatas          r6   Úget_column_metadatar�   –   sÐ   € ô" $ JÓ/€Lä#;¸FÓ#CÑ €L�.Ø�yÒ à#×-Ñ-Ø×%Ñ%ñ
ˆð  ˆð 	ÐÜ˜D¤%Ô(¬R¯X©X°d¬^Ü˜4¤Ô%äØ7¸°v¸YÜ�D‹z×"Ñ"Ð#ð%ó
ð 	
ô
 �j¤#Ô&Ð=¬¬D°Ó,<Ó(=Ó=Ð&àØ Ø#Ø"Ø"ñð r5   c           
      ón  — |€|D �cg c]  }t        |«      ‘Œ }}t        ||«      D �	�
cg c]  \  }	}
t        |
t        «      s|	|
f‘Œ }}	}
t	        |«      }t	        |«      }|d||z
   }|||z
  d }g }t        | |||«      D ]'  \  }}}}t        ||||¬«      }|j                  |«       Œ) g }|du�r=g }t        ||«      D ]|  \  \  }	}
}|	j                  �5t        |	j                  t         «      s|j                  |	j                  «       t        |	t        |	j                  «      ||
¬«      }|j                  |«       Œ~ t	        |«      dkD  r t        j                  d|› d�t        d¬«       g }t        |j                  d	|j                  g«      }t        |j                  d
|j                  j                  g«      }t        ||«      D ]"  \  }	}t        |	|«      }|j                  |«       Œ$ ng x}x}}t        |d«      r|j                   ni }	 t#        j$                  |«       dt#        j$                  ||||z   |dt(        j*                  dœt,        j.                  dœ«      j1                  d«      iS c c}w c c}
}	w # t&        $ r,}i }t        j                  d|› d�t        d¬«       Y d}~ŒŠd}~ww xY w)aÒ  Returns a dictionary containing enough metadata to reconstruct a pandas
    DataFrame as an Arrow Table, including index columns.

    Parameters
    ----------
    columns_to_convert : list[pd.Series]
    df : pandas.DataFrame
    column_names : list[str | None]
    column_field_names: list[str]
    index_levels : List[pd.Index]
    index_descriptors : List[Dict]
    preserve_index : bool
    types : List[pyarrow.DataType]

    Returns
    -------
    dict
    N)rv   rJ   rw   Fr   z&The DataFrame has non-str index name `z@` which will be converted to string and not roundtrip correctly.é   ©Ú
stacklevelÚlevelsÚnamesÚattrsz(Could not serialize pd.DataFrame.attrs: z!, defaulting to empty attributes.s   pandasÚpyarrow)ÚlibraryÚversion)Úindex_columnsÚcolumn_indexesÚcolumnsÚ
attributesÚcreatorÚpandas_versionÚutf8)rZ   ÚziprA   Údictrh   r�   Úappendrv   Ú_column_name_to_stringsÚwarningsÚwarnÚUserWarningrg   rŽ   Ú_get_simple_index_descriptorrY   rˆ   ÚjsonÚdumpsÚ	Exceptionr   Ú__version__r   r‹   Úencode)Úcolumns_to_convertÚdfÚcolumn_namesÚindex_levelsÚindex_descriptorsÚpreserve_indexrH   Úcolumn_field_namesrv   ÚlevelÚ
descriptorÚserialized_index_levelsÚnum_serialized_index_levelsÚntypesÚdf_typesÚindex_typesÚcolumn_metadataÚcolrw   rJ   ro   Úindex_column_metadataÚnon_str_index_namesr�   r†   r‡   r�   Úes                               r6   Úconstruct_metadatar³   Å   s  € ð* Ð!ð 5AÖA¨Dœc $�iÐAÐÐAô "% \Ð3DÓ!E÷áˆE�:Ü˜*¤dÔ+ð 
�
ÒðÐñ ô #&Ð&=Ó">Ðô �‹Z€FØÐ:�fÐ:Ñ:Ð;€HØ˜Ð!<Ñ<Ð=Ð>€Kà€OÜ-0Ð1CÀ\Ø1CÀXó.Oò )Ñ)ˆˆT�:˜zä& s°Ø2<Ø2<ô>ˆð 	×Ñ˜xÕ(ð)ð ÐØ˜UÒ"Ø ÐÜ/2Ø# [ó0
ò 	3Ñ+ÑˆU�J ð �z‰zÐ%¬j¸¿¹ÄSÔ.IØ#×*Ñ*¨5¯:©:Ô6ä*ØÜ,¨U¯Z©ZÓ8Ø%Ø%ô	ˆHð "×(Ñ(¨Õ2ð	3ô Ð"Ó# aÒ'Ü�M‰MØ8Ð9LÐ8Mð N0ð 0ô ¨õ	+ð ˆä˜Ÿ™ X°·
±
¨|Ó<ˆÜ˜Ÿ
™
 G¨b¯j©j¯o©oÐ->Ó?ˆÜ˜v uÓ-ò 	,‰KˆE�4Ü3°E¸4Ó@ˆHØ×!Ñ! (Õ+ñ	,ð FHÐGÐÐGÐ1°Nä$ R¨Ô1�—’°r€Jð'Ü�
‰
�:Ôð 	”4—:‘:Ø.Ø,Ø&Ð)>Ñ>Ø$à$ÜŸ>™>ñô *×1Ñ1ñ

ó 
÷ ‰6�&‹>ðð ùòK Bùóøôx ò 'Øˆ
Ü�‰Ø6°q°cð :/ð 0ä A÷	'ò 	'ûð'ús"   ‡I4ªI9ÈI? É?	J4Ê"J/Ê/J4c                 óž   — t        | «      \  }}t        | «      }d|v rt        j                  dt        d¬«       |dk(  r|rJ ‚ddi}|||||dœS )	NÚmixedzlThe DataFrame has column names of mixed type. They will be converted to strings and not roundtrip correctly.rƒ   r„   r   ÚencodingúUTF-8ru   )rq   r`   r—   r˜   r™   )r§   rv   r   r€   rx   s        r6   rš   rš   2  sp   € Ü#;¸EÓ#BÑ €L�.Ü-¨eÓ4€KØ�+ÑÜ�‰ð@ä Aõ	'ð �iÒÙ!Ð!Ð!Ø$ gÐ.ˆàØØ"Ø"Ø"ñð r5   c                 ój  — t        | t        «      r| S t        | t        «      r| j                  d«      S t        | t        «      r"t        t	        t        t        | «      «      «      S t        | t        «      rt        d«      ‚| �%t        | t        «      rt        j                  | «      r| S t        | «      S )a!  Convert a column name (or level) to either a string or a recursive
    collection of strings.

    Parameters
    ----------
    name : str or tuple

    Returns
    -------
    value : str or tuple

    Examples
    --------
    >>> name = 'foo'
    >>> _column_name_to_strings(name)
    'foo'
    >>> name = ('foo', 'bar')
    >>> _column_name_to_strings(name)
    "('foo', 'bar')"
    >>> import pandas as pd
    >>> name = (1, pd.Timestamp('2017-02-01 00:00:00'))
    >>> _column_name_to_strings(name)
    "('1', '2017-02-01 00:00:00')"
    r’   z%Unsupported type for MultiIndex level)rA   rZ   r   ÚdecodeÚtupleÚmapr–   r   r|   rz   rP   r{   ©rv   s    r6   r–   r–   F  s‹   € ô2 �$œÔØˆÜ	�Dœ%Ô	 à�{‰{˜6Ó"Ð"Ü	�Dœ%Ô	 Ü”5œÔ4°dÓ;Ó<Ó=Ð=Ü	�Dœ(Ô	#ÜÐ?Ó@Ð@Ø	ˆœ* T¬5Ô1´b·h±h¸t´nØˆÜˆt‹9Ðr5   c                 ón   — | j                   �#| j                   |vrt        | j                   «      S d|d›d�S )zÝReturn the name of an index level or a default name if `index.name` is
    None or is already a column name.

    Parameters
    ----------
    index : pandas.Index
    i : int

    Returns
    -------
    name : str
    Ú__index_level_ÚdÚ__)rv   r–   )ÚindexÚir¢   s      r6   Ú_index_level_namerÃ   m  s9   € ð ‡z�zÐ %§*¡*°LÑ"@Ü& u§z¡zÓ2Ð2à  !˜u BÐ'Ð'r5   c                 óT  — t        | ||«      }| j                  j                  s!t        dt	        | j                  «      › �«      ‚|�t        | ||«      S g }g }|durt        | j                  «      ng }g }g }|D ]ƒ  }	| |	   }
t        |	«      }	t        j                  |
«      rt        d|	› d�«      ‚|j                  |
«       |j                  d «       |j                  |	«       |j                  t        |	«      «       Œ… g }g }t        |«      D ]Š  \  }}t        |||«      }	t!        |t        j"                  j$                  «      r|€t'        |«      }n5|j                  |«       |j                  d «       |	}|j                  |	«       |j                  |«       ŒŒ ||z   }||||||||fS )NzDuplicate column names found: FúSparse pandas data (column ú) not supported.)Ú_resolve_columns_of_interestrŽ   Ú	is_uniqueÚ
ValueErrorÚlistÚ$_get_columns_to_convert_given_schemaÚ_get_index_level_valuesrÁ   r–   r   Ú	is_sparser|   r•   rZ   Ú	enumeraterÃ   rA   ÚpdÚ
RangeIndexÚ_get_range_index_descriptor)r¡   Úschemar¥   rŽ   r¢   r¦   r£   r    Úconvert_fieldsrv   r¯   r¤   Úindex_column_namesrÂ   Úindex_levelÚdescrÚ	all_namess                    r6   Ú_get_columns_to_convertrØ   €  sÚ  € Ü*¨2¨v°wÓ?€Gà�:‰:×ÒÜØ,¬T°"·*±*Ó-=Ð,>Ð?ó
ð 	
ð ÐÜ3°B¸ÀÓOÐOà€LØÐð .<À5Ñ-HÔ §¡Ô)Øð ð
 ÐØ€Nàò -ˆØ�‰hˆÜ& tÓ,ˆä× Ñ  Ô%ÜØ-¨d¨VÐ3CÐDóFð Fð 	×!Ñ! #Ô&Ø×Ñ˜dÔ#Ø×Ñ˜DÔ!Ø×!Ñ!¤# d£)Õ,ð-ð ÐØÐÜ# LÓ1ò 
(‰ˆˆ;Ü  ¨a°Ó>ˆÜ�{¤K§N¡N×$=Ñ$=Ô>ØÐ&Ü/°Ó<‰Eà×%Ñ% kÔ2Ø×!Ñ! $Ô'ØˆEØ×%Ñ% dÔ+Ø× Ñ  Õ'ð
(ð #Ð%7Ñ7€Ið �|Ð%7Ð9KØ˜|Ð-?ÀðQð Qr5   c                 óº  — g }g }g }g }g }g }|j                   D ]¨  }		 | |	   }
d}t        j                  |
«      rt        d|	› d�«      ‚|j                  |	«      }|j                  |
«       |j                  |«       |j                  |	«       |sŒv|j                  |	«       |j                  |	«       |j                  |
«       Œª ||z   }||||||||fS # t        $ r~ 	 t        | |	«      }
n"# t        t        f$ r t        d|	› d�«      ‚w xY w|du rt	        d|	› d�«      ‚|€3t        |
t        j                  j                  «      rt	        d|	› d�«      ‚d}Y �Œ5w xY w)	zõ
    Specialized version of _get_columns_to_convert in case a Schema is
    specified.
    In that case, the Schema is used as the single point of truth for the
    table structure (types, which columns are included, order of columns, ...).
    Fzname 'zF' present in the specified schema is not found in the columns or indexzd' present in the specified schema corresponds to the index, but 'preserve_index=False' was specifiedzý' is present in the schema, but it is a RangeIndex which will not be converted as a column in the Table, but saved as metadata-only not in columns. Specify 'preserve_index=True' to force it being added as a column, or remove it from the specified schemaTrÅ   rÆ   )r‡   r@   Ú_get_index_levelÚ
IndexErrorrÉ   rA   r   rÏ   rÐ   rÍ   r|   Úfieldr•   )r¡   rÒ   r¥   r¢   r    rÓ   r¤   rÔ   r£   rv   r¯   Úis_indexrÜ   r×   s                 r6   rË   rË   Â  sË  € ð €LØÐØ€NØÐØÐØ€Là—‘ò (%ˆð	Ø�T‘(ˆCØˆHô2 × Ñ  Ô%ÜØ-¨d¨VÐ3CÐDóFð Fð —‘˜TÓ"ˆØ×!Ñ! #Ô&Ø×Ñ˜eÔ$Ø×Ñ˜DÔ!âØ×%Ñ% dÔ+Ø×$Ñ$ TÔ*Ø×Ñ Õ$ðQ(%ðT Ð1Ñ1€Ià�| \Ð3EØ˜|Ð-?ÀðQð QøôQ ò 	ð/Ü& r¨4Ó0‘øÜœjÐ)ò /äØ˜T˜Fð #.ð .ó/ð /ð/úð
  Ñ&Ü Ø˜T˜Fð # ð  ó!ð !ð !Ð(Ü˜s¤K§N¡N×$=Ñ$=Ô>Ü Ø˜T˜Fð #'ð 'ó(ð (ð ‹Hð-	ús*   �CÃ	EÃC*Ã)EÃ*D	Ä	AEÅEc                 ó°   — |}|| j                   j                  vr"t        |«      rt        |t	        d«      d «      }| j                   j                  |«      S )z_
    Get the index level of a DataFrame given 'name' (column name in an arrow
    Schema).
    r¾   éþÿÿÿ)rÁ   r‡   Ú_is_generated_index_nameÚintrh   Úget_level_values)r¡   rv   Úkeys      r6   rÚ   rÚ      sO   € ð
 €CØ�2—8‘8—>‘>Ñ!Ô&>¸tÔ&Dô �$”sÐ+Ó,¨RÐ0Ó1ˆØ�8‰8×$Ñ$ SÓ)Ð)r5   c                 óf   — 	 t        j                  | «       | S # t        $ r t        | «      cY S w xY w©N)r›   rœ   r|   rZ   r¼   s    r6   Ú_level_nameræ     s1   € ðÜ�
‰
�4ÔØˆøÜò Ü�4‹yÒðús   ‚ ™0¯0c                 ó°   — dt        | j                  «      t        j                  | d«      t        j                  | d«      t        j                  | d«      dœS )NÚrangeÚstartÚstopÚstep)Úkindrv   ré   rê   rë   )ræ   rv   r   Úget_rangeindex_attribute)r§   s    r6   rÑ   rÑ     sM   € ð Ü˜EŸJ™JÓ'Ü×5Ñ5°e¸WÓEÜ×4Ñ4°U¸FÓCÜ×4Ñ4°U¸FÓCñð r5   c                 óŠ   — t        t        | d| g«      «      }t        |«      D �cg c]  }| j                  |«      ‘Œ c}S c c}w )Nr†   )rh   rg   rè   râ   )rÁ   ÚnrÂ   s      r6   rÌ   rÌ   !  s:   € ÜŒG�E˜8 e WÓ-Ó.€AÜ/4°Q«xÖ8¨!ˆE×"Ñ" 1Õ%Ò8Ð8ùÒ8s   ¥A c                 óª   — |�|�t        d«      ‚|�|j                  }|S |� |D �cg c]  }|| j                  v sŒ|‘Œ }}|S | j                  }|S c c}w )NzJSchema and columns arguments are mutually exclusive, pass only one of them)rÉ   r‡   rŽ   )r¡   rÒ   rŽ   Úcs       r6   rÇ   rÇ   &  sv   € ØÐ˜gÐ1Üð <ó =ð 	=à	Ð	Ø—,‘,ˆð €Nð 
Ð	Ø%Ö9˜¨¨b¯j©jª’1Ð9ˆÐ9ð €Nð —*‘*ˆà€Nùò	 :s
   ¦AºAc           
      óº  — t        | d ||«      \  }}}}}}}	}g }
|	D �]%  }|j                  }t        j                  |«      r"t	        j
                  |d¬«      j                  }nÎt        j                  |«      r\t        |t        j                  j                  «      r|j                  d«      n|d d }t	        j
                  |d¬«      j                  }n]t        ||j                  d «      \  }}t        j                  j                  ||«      }|€!t	        j
                  |d¬«      j                  }|
j!                  |«       �Œ( t#        |	| |||||
|¬«      }||
|fS )NT)Úfrom_pandasr   ©r¦   )rØ   Úvaluesr   Úis_categoricalr   ÚarrayrX   Úis_extension_array_dtyperA   rÏ   ÚSeriesÚheadÚget_datetimetz_typerW   r   Ú_ndarray_to_arrow_typer•   r³   )r¡   r¥   rŽ   r×   r¢   r¦   Ú_r¤   rŒ   r    rH   rñ   rõ   Útype_r   ro   s                   r6   Údataframe_to_typesrÿ   4  sD  € ô " " d¨N¸GÓ
Dñ€YØØØØØØØà€Eàó ˆØ—‘ˆÜ×%Ñ% fÔ-Ü—H‘H˜Q¨DÔ1×6Ñ6‰EÜ×1Ñ1°&Ô9Ü!+Ø”;—>‘>×(Ñ(ô"*�A—F‘F˜1”IØ/0°°!¨uð ä—H‘H˜U°Ô5×:Ñ:‰Eä/°¸¿¹ÀÓF‰MˆF�EÜ—F‘F×1Ñ1°&¸%Ó@ˆEØˆ}ÜŸ™ °Ô5×:Ñ:�Ø�‰�UÖðô "Ø˜B ¨mÐ=NØ˜Ð2Dô€Hð
 �e˜XÐ%Ð%r5   c           
      óH  ‡— t        | |||«      \  }}}}	}
}}}|€Dt        | «      t        | j                  «      }}||dz  kD  r|dkD  rt        j                  «       }nd}t        «       sd}ˆfd„}d„ }|dk(  r&t        ||«      D ��cg c]  \  }} |||«      ‘Œ }}}nÃg }t        j                  |«      5 }t        ||«      D ]R  \  }} ||j                  «      r|j                   |||«      «       Œ1|j                  |j                  |||«      «       ŒT 	 d d d «       t        |«      D ]3  \  }}t        |t        j                  «      sŒ!|j                  «       ||<   Œ5 |D �cg c]  }|j                   ‘Œ }}|€Pg }t        ||«      D ]*  \  }}|j                  t        j"                  ||«      «       Œ, t        j$                  |«      }t'        || |||
|||¬«      }|j(                  rt+        |j(                  «      n	t-        «       }|j/                  |«       |j1                  |«      }d }t        |«      dk(  r<	 |
d   d   } | dk(  r.|
d   d	   }!|
d   d
   }"|
d   d   }#t        t3        |!|"|#«      «      }|||fS c c}}w # 1 sw Y   �ŒmxY wc c}w # t4        $ r Y Œ(w xY w)Néd   é   c                 ó¬  •— |€d}d }n|j                   }|j                  }	 t        j                  | |d‰¬«      }|s+|j                  dkD  rt        d|› d|j                  › d�«      ‚|S # t        j                  t        j
                  t        j                  f$ r7}|xj                  d| j                  › d| j                  › �fz  c_        |‚d }~ww xY w)	NT)rX   ró   ÚsafezConversion failed for column z with type r   zField z( was non-nullable but pandas column had z null values)ÚnullablerX   r   r÷   ÚArrowInvalidÚArrowNotImplementedErrorÚArrowTypeErrorÚargsrv   rW   Ú
null_countrÉ   )r¯   rÜ   Úfield_nullablerþ   r_   r²   r  s         €r6   Úconvert_columnz+dataframe_to_arrays.<locals>.convert_columnp  sã   ø€ Øˆ=Ø!ˆNØ‰Eà"Ÿ^™^ˆNØ—J‘JˆEð	Ü—X‘X˜c¨¸4ÀdÔKˆFñ  &×"3Ñ"3°aÒ"7Ü˜v e Wð -$Ø$*×$5Ñ$5Ð#6°lðDó Eð Eàˆøô —‘Ü×+Ñ+Ü×!Ñ!ð#ò 	ð �FŠFØ/°·±¨z¸ÀSÇYÁYÀKÐPðSñ S�FàˆGûð	ús   ¢A* Á*2CÂ2CÃCc                 óÆ   — t        | t        j                  «      xrF | j                  j                  xr. t        | j                  j                  t        j                  «      S rå   )	rA   rP   ÚndarrayÚflagsÚ
contiguousÚ
issubclassrW   rX   Úinteger)Úarrs    r6   Ú_can_definitely_zero_copyz6dataframe_to_arrays.<locals>._can_definitely_zero_copy…  sB   € Ü˜3¤§
¡
Ó+ò 7Ø—	‘	×$Ñ$ò7ä˜3Ÿ9™9Ÿ>™>¬2¯:©:Ó6ð	8r5   rô   r   rì   rè   ré   rê   rë   )rØ   rh   rŽ   r   Ú	cpu_countr	   r“   r   ÚThreadPoolExecutorrõ   r•   ÚsubmitrÎ   rA   ÚFuturer_   rX   rÜ   rÒ   r³   ro   r   r”   r   Úwith_metadatarè   rÛ   )$r¡   rÒ   r¥   ÚnthreadsrŽ   r  r×   r¢   r¦   rÔ   r¤   rŒ   r    rÓ   ÚnrowsÚncolsr  r  rñ   ÚfÚarraysÚexecutorrÂ   Ú	maybe_futÚxrH   Úfieldsrv   rþ   Úpandas_metadataro   Ún_rowsrì   ré   rê   rë   s$        `                              r6   Údataframe_to_arraysr%  W  sÓ  ø€ ô /¨r°6¸>Ø/6ó8ñ€YØØØØØØØð ÐÜ˜2“w¤ B§J¡J£ˆuˆØ�5˜3‘;Ò 5¨1¢9Ü—|‘|“~‰HàˆHäÔ!Øˆôò*8ð
 �1‚}ä!Ð"4°nÓE÷GÙ�a˜ñ !  AÕ&ð Gˆò Gð ˆÜ×'Ñ'¨Ó1ð 	I°XÜÐ.°Ó?ò I‘��1Ù,¨Q¯X©XÔ6Ø—M‘M¡.°°AÓ"6Õ7à—M‘M (§/¡/°.À!ÀQÓ"GÕHñ	I÷	Iô & fÓ-ò 	/‰LˆAˆyÜ˜)¤W§^¡^Õ4Ø%×,Ñ,Ó.��q’	ð	/ð $Ö$˜ˆQ�V‹VÐ$€EÐ$à€~ØˆÜ˜y¨%Ó0ò 	1‰KˆD�%Ø�M‰Mœ"Ÿ(™( 4¨Ó/Õ0ð	1ä—‘˜6Ó"ˆä(Ø˜B ¨mÐ=NØ˜Ð2Dô€Oð -3¯OªOŒx˜Ÿ™Ô(ÄÃ€HØ‡O�O�OÔ$Ø×!Ñ! (Ó+€Fð €FÜ
ˆ6ƒ{�aÒð	Ø$ QÑ'¨Ñ/ˆDØ�wŠØ)¨!Ñ,¨WÑ5�Ø(¨Ñ+¨FÑ3�Ø(¨Ñ+¨FÑ3�ÜœU 5¨$°Ó5Ó6�ð �6˜6Ð!Ð!ùó[G÷	Iñ 	Iüò %øô6 ò 	Ùð	ús+   ÂI=Â5A"JÅ%JÈ=;J ÊJÊ	J!Ê J!c                 ó4  — | j                   j                  t        j                  k7  r| |fS t	        j
                  |«      r4|€2|j                  }|j                  }t        j                  ||«      }| |fS |€t        j                  | j                   «      }| |fS rå   )rW   rX   rP   rV   r   Úis_datetimetzrG   rl   r   Ú	timestampÚfrom_numpy_dtype)rõ   rW   rþ   rG   rl   s        r6   rû   rû   »  s‡   € Ø‡|�|×ÑœBŸM™MÒ)Ø�uˆ}Ðä× Ñ  Ô'¨E¨Mà�X‰XˆØ�z‰zˆÜ—‘˜T 2Ó&ˆð
 �5ˆ=Ðð	 
ˆä×#Ñ# F§L¡LÓ1ˆà�5ˆ=Ðr5   c                 ó°  — ddl mc m} | j                  dd«      }| d   }d| v r)t        j
                  j                  || d   | d   ¬«      }nñd| v rœt        j                  |j                  «      \  }}	t        || d   «      }
t	        j                  «       r2t        j                  j                  |j                  d	«      |
d
¬«      }nv|}|rr|j                  |||j                   |
¬«      }|S d| v rK| d   }t#        |«      dk(  sJ ‚||d      }||   }t%        |d«      st'        d«      ‚|j)                  |«      }n|}|r|j                  ||¬«      S ||fS )a´  
    Construct a pandas Block from the `item` dictionary coming from pyarrow's
    serialization or returned by arrow::python::ConvertTableToPandas.

    This function takes care of converting dictionary types to pandas
    categorical, Timestamp-with-timezones to the proper pandas Block, and
    conversion to pandas ExtensionBlock

    Parameters
    ----------
    item : dict
        For basic types, this is a dictionary in the form of
        {'block': np.ndarray of values, 'placement': pandas block placement}.
        Additional keys are present for other types (dictionary, timezone,
        object).
    columns :
        Column names of the table being constructed, used for extension types
    extension_columns : dict
        Dictionary of {column_name: pandas_dtype} that includes all columns
        and corresponding dtypes that will be converted to a pandas
        ExtensionBlock.

    Returns
    -------
    pandas Block

    r   NÚblockÚ	placementÚ
dictionaryre   )ri   re   rf   r   F)rW   Úcopy)r,  ÚklassrW   Úpy_arrayr  Ú__from_arrow__zGThis column does not support to be converted to a pandas ExtensionArray)r,  )Úpandas.core.internalsÚcoreÚ	internalsÚgetr   Úcategorical_typeÚ
from_codesrP   Údatetime_datarW   Úmake_datetimetzÚ	is_ge_v21rÏ   r÷   ÚviewÚ
make_blockÚDatetimeTZBlockrh   rY   rÉ   r1  )ÚitemrŽ   Úextension_columnsÚreturn_blockÚ_intÚ	block_arrr,  r  rl   rý   rW   r+  rv   Úpandas_dtypes                 r6   Ú_reconstruct_blockrD  Î  s‚  € ÷8 )Ð(à—‘˜ $Ó'€IØ�[Ñ!€IØ�tÑÜ×*Ñ*×5Ñ5Ø $ |Ñ"4Ø˜‘Oð 6ó %‰ð 
�tÑ	Ü×"Ñ" 9§?¡?Ó3‰ˆˆaÜ  d¨:Ñ&6Ó7ˆÜ× Ñ Ô"Ü—.‘.×&Ñ&Ø—‘˜wÓ'¨u¸5ð 'ó ‰Cð ˆCÙØŸ™¨	¸YØ.2×.BÑ.BØ.3ð (ó 5�ð �Ø	�tÑ	à�:ÑˆÜ�9‹~ Ò"Ð"Ð"Ø�y ‘|Ñ$ˆØ(¨Ñ.ˆÜ�|Ð%5Ô6Üð :ó ;ð ;à×)Ñ)¨#Ó.‰àˆáØ�‰˜s¨iˆÓ8Ð8à�Iˆ~Ðr5   c                 óš   — t        j                  «       rd} t        j                  j	                  |«      }t        j
                  | |¬«      S )NÚns©rG   )r   Úis_v1r   r   Ústring_to_tzinfoÚdatetimetz_type)rl   rG   s     r6   r9  r9    s:   € Ü×ÑÔØˆÜ	�‰×	 Ñ	  Ó	$€BÜ×&Ñ& t°Ô3Ð3r5   c           	      ó´  — g }g }i }|j                   j                  }|s]|�[|d   }|j                  dg «      }|j                  di «      }|d   }	t        ||«      }t	        ||	||«      \  }}
t        |||| |«      }n8t        j                  j                  |j                  «      }
t        |g || |«      }t        |«       t        |||«      }|j                  }t        j                  j                  | ||t!        |j#                  «       «      «      }t        j$                  «       r6ddlm} |D �cg c]  }t+        |||d¬«      ‘Œ }} |||
|¬	«      }||_        |S dd
lm} ddlm} |D �cg c]  }t+        |||«      ‘Œ }}||
g} |||«      }t        j6                  «       r|j9                  ||j:                  «      }n ||«      }||_        |S c c}w c c}w )NrŽ   r�   r�   rŒ   r   )Úcreate_dataframe_from_blocksF)r@  )rÁ   rŽ   )ÚBlockManager)Ú	DataFrame)rÒ   r#  r5  Ú_add_any_metadataÚ_reconstruct_indexÚ_get_extension_dtypesr   rÏ   rÐ   Únum_rowsÚ'_check_data_column_metadata_consistencyÚ_deserialize_column_indexr¢   r   r   Útable_to_blocksrÊ   ÚkeysÚis_ge_v3Úpandas.api.internalsrL  rD  rˆ   r2  rM  ÚpandasrN  r:  Ú	_from_mgrÚaxes)ÚoptionsÚtableri   Úignore_metadataÚtypes_mapperÚall_columnsr�   r�   r#  r¤   rÁ   Úext_columns_dtypesrŽ   r¢   r_   rL  r>  Úblocksr¡   rM  rN  r[  Úmgrs                          r6   Útable_to_dataframerd    s  € ð €KØ€NØ€JØ—l‘l×2Ñ2€Oá˜Ð:Ø% iÑ0ˆØ(×,Ñ,Ð-=¸rÓBˆØ$×(Ñ(¨°rÓ:ˆ
Ø+¨OÑ<ÐÜ! %¨Ó9ˆÜ)¨%Ð1BØ*5°|óE‰ˆˆuä2Ø�; ¨g°zóCÑô —‘×)Ñ)¨%¯.©.Ó9ˆÜ2Ø�2�| W¨jó
Ðô ,¨KÔ8Ü'¨¨{¸NÓK€Gà×%Ñ%€LÜ�V‰V×#Ñ# G¨U°JÜ$(Ð);×)@Ñ)@Ó)BÓ$CóE€Fä×ÑÔÝEð
 ö
ð ô Ø�lÐ$6ÀUöLð
ˆð 
ñ
 *¨&¸ÀwÔOˆØˆŒàˆ	å6Ý$ð ö
àô ˜t \Ð3EÕFð
ˆð 
ð ˜ÐˆÙ˜6 4Ó(ˆÜ× Ñ Ô"Ø×$Ñ$ S¨#¯(©(Ó3‰Bá˜3“ˆBàˆŒàˆ	ùò5
ùò
s   Ä/GÅ+G>   r   r   r   r   r   r   r>   r   r   r   r   r   r   c                 óŠ  — |d   }|xs g }i }t         j                  €|S |r7| j                  D ](  }|j                  } ||«      }	|	€Œ|	||j                  <   Œ* | j                  D ]X  }|j                  }|j                  |vsŒt        |t        j                  «      sŒ9	 |j                  «       }	|	||j                  <   ŒZ |D ]Í  }
	 |
d   }|
d   }||vsŒ|t        vsŒt        j                  |«      }	t        |	t         j                  «      sŒLt        |	t         j                  j                  «      rL|s||v rŒw	 t        j                  j!                  | j                  j#                  |«      j                  «      rŒ»	 t%        |	d«      sŒÉ|	||<   ŒÏ t        j&                  «       rè|sæ| j                  D ]×  }|j                  |vsŒt        j                  j)                  |j                  «      sSt        j                  j+                  |j                  «      s*t        j                  j-                  |j                  «      sŒŽ|j                  |vsŒ�t         j                  j                  t.        j0                  ¬«      ||j                  <   ŒÙ |S # t        $ r Y �Œ7w xY w# t        $ r	 |
d   }Y �Œæw xY w# t        $ r Y �ŒCw xY w)aó  
    Based on the stored column pandas metadata and the extension types
    in the arrow schema, infer which columns should be converted to a
    pandas extension dtype.

    The 'numpy_type' field in the column metadata stores the string
    representation of the original pandas dtype (and, despite its name,
    not the 'pandas_type' field).
    Based on this string representation, a pandas/numpy dtype is constructed
    and then we can check if this dtype supports conversion from arrow.

    Ústrings_to_categoricalrw   rv   ry   r1  )Úna_value)r   Úextension_dtyperÒ   rX   rv   rA   r   ÚBaseExtensionTypeÚto_pandas_dtypeÚNotImplementedErrorr@   Ú_pandas_supported_numpy_typesrC  rÏ   ÚStringDtyperH   Úis_dictionaryrÜ   rY   Úuses_string_dtypeÚ	is_stringÚis_large_stringÚis_string_viewrP   Únan)r]  Úcolumns_metadatar_  r\  ri   rf  Úext_columnsrÜ   ÚtyprC  Úcol_metarv   rW   s                r6   rQ  rQ  b  s‰  € ð %Ð%=Ñ>ÐØÒ!˜r€Jà€Kô ×"Ñ"Ð*ØÐñ Ø—\‘\ò 	7ˆEØ—*‘*ˆCÙ'¨Ó,ˆLØÑ'Ø*6�˜EŸJ™JÒ'ð		7ð —‘ò 7ˆØ�j‰jˆØ�:‰:˜[Ò(¬Z¸¼R×=QÑ=QÕ-Rð7Ø"×2Ñ2Ó4�ð +7�˜EŸJ™JÒ'ð7ð %ò 5ˆð	$Ø˜LÑ)ˆDð ˜Ñ&ˆà�{Ò" uÔ4QÒ'Qô '×3Ñ3°EÓ:ˆLÜ˜,¬×(CÑ(CÕDÜ˜l¬K¯N©N×,FÑ,FÔGñ .°¸Ñ1CØ ðÜŸ8™8×1Ñ1°%·,±,×2DÑ2DÀTÓ2J×2OÑ2OÔPØ$ð Qô ˜<Ð)9Õ:Ø(4�K Ò%ð55ô: ×$Ñ$Ô&Ñ/EØ—\‘\ò 	VˆEØ�z‰z Ò,Ü—‘×"Ñ" 5§:¡:Ô.Ü—8‘8×+Ñ+¨E¯J©JÔ7Ü—8‘8×*Ñ*¨5¯:©:Õ6Ø—*‘* JÒ.Ü*5¯.©.×*DÑ*DÌbÏfÉfÐ*DÓ*U�˜EŸJ™JÒ'ð	Vð ÐøôY 'ò Úðûô ò 	$Ø˜FÑ#‹Dð	$ûô( $ò Úðús7   ÂJÃJ Ä:AJ5Ê	JÊJÊ J2Ê1J2Ê5	KËKc                 ó,   — t        d„ | D «       «      sJ ‚y )Nc              3   óH   K  — | ]  }|d    du xr d|v xs |d    du–— Œ y­w)rv   Nrw   r4   )Ú.0rñ   s     r6   ú	<genexpr>z:_check_data_column_metadata_consistency.<locals>.<genexpr>º  s<   è ø€ ò àð 
ˆ6‰�dÐ	Ò	0˜|¨qÐ0ÒJ°Q°v±YÀdÐ5JÓJñùs   ‚ ")Úall)r`  s    r6   rS  rS  µ  s#   € ô
 ñ àôô ð ñ r5   c           
      óT  — |rY|D �ci c]$  }|j                  dt        |d   «      «      |d   “Œ& }}| j                  D �cg c]  }|j                  ||«      ‘Œ }}n| j                  }t        |«      dkD  r^t        j
                  j                  j                  t        t        t        j                  |«      «      |D �cg c]  }|d   ‘Œ	 c}¬«      }n+t        j
                  j                  ||r|d   d   nd ¬«      }t        |«      dkD  rt        ||«      }|S c c}w c c}w c c}w )Nrw   rv   r  ©r‡   r   r¼   )r5  r–   r¢   rh   r   rÏ   Ú
MultiIndexÚfrom_tuplesrÊ   r»   ÚastÚliteral_evalÚIndexÚ"_reconstruct_columns_from_metadata)	Úblock_tabler`  r�   rñ   Úcolumns_name_dictrv   Úcolumns_valuesÚ	col_indexrŽ   s	            r6   rT  rT  À  s8  € Ùð !ö
àð �E‰E�,Ô 7¸¸&¹	Ó BÓCÀQÀvÁYÑNð
Ðð 
ð
 ;F×:RÑ:Rö
Ø26Ð×!Ñ! $¨Õ-ð
ˆñ 
ð %×1Ñ1ˆô ˆ>Ó˜QÒô —.‘.×+Ñ+×7Ñ7Ü””S×%Ñ% ~Ó6Ó7Ø6DÖE¨�9˜VÓ$ÒEð 8ó 
‰ô
 —.‘.×&Ñ&Ø¹n °Ñ!2°6Ò!:ÐRVð 'ó 
ˆô
 ˆ>Ó˜QÒÜ4°W¸nÓMˆà€Nùò9
ùò
ùò Fs   ‡)DÁ D Â?D%
c                 ó  — |D �ci c]  }|j                  d|d   «      |“Œ }}g }g }| }|D ]¬  }	t        |	t        «      rt        | ||	||«      \  }}
}|
€cŒ)|	d   dk(  rI|	d   }t        j
                  j                  |	d   |	d   |	d   |¬«      }
t        |
«      t        | «      k7  rŒzt        d	|	d   › �«      ‚|j                  |
«       |j                  |«       Œ® t        j
                  }t        |«      d
kD  r!|j                  j                  ||¬«      }||fS t        |«      d
k(  r5|d   }t        ||j                  «      s|j                  ||d   ¬«      }||fS |j                  | j                  «      }||fS c c}w )Nrw   rv   rì   rè   ré   rê   rë   )rë   rv   zUnrecognized index kind: r  r~  r   r¼   )r5  rA   rZ   Ú_extract_index_levelr   rÏ   rÐ   rh   rÉ   r•   r  Úfrom_arraysrƒ  rR  )r]  r¤   r`  r_  rñ   Úfield_name_to_metadataÚindex_arraysÚindex_namesÚresult_tablerÖ   rÕ   Ú
index_namerÏ   rÁ   s                 r6   rP  rP  á  sÄ  € ð öàð 	
�‰ˆl˜A˜f™IÓ&¨Ñ)ðÐð ð €LØ€KØ€LØ"ò 'ˆÜ�eœSÔ!Ü4HØ�| UÐ,BÀLó5RÑ1ˆL˜+ zàÐ"àØ�6‰]˜gÒ%Ø˜v™ˆJÜ%Ÿ.™.×3Ñ3°E¸'±NØ49¸&±MØ9>¸v¹Ø9Cð 4ó EˆKô �;Ó¤3 u£:Ò-àäÐ8¸¸v¹¸ÐHÓIÐIØ×Ñ˜KÔ(Ø×Ñ˜:Õ&ð''ô* 
�‰€Bô ˆ<Ó˜1ÒØ—‘×)Ñ)¨,¸kÐ)ÓJˆð ˜ÐÐô 
ˆ\Ó	˜aÒ	Ø˜Q‘ˆÜ˜% §¡Ô*à—H‘H˜U¨°Q©�HÓ8ˆEð ˜ÐÐð —‘˜eŸn™nÓ-ˆà˜ÐÐùòYs   …E<c                 ó&  — ||   d   }t        ||«      }| j                  j                  |«      }|dk(  r|d d fS | j                  |«      }|j	                  |¬«      }	d |	_        |j                  |j                  j                  |«      «      }||	|fS )Nrv   éÿÿÿÿ)r_  )Ú _backwards_compatible_index_namerÒ   Úget_field_indexrm   Ú	to_pandasrv   Úremove_column)
r]  r�  rw   rŒ  r_  Úlogical_namer�  rÂ   r¯   rÕ   s
             r6   rŠ  rŠ    s�   € à)¨*Ñ5°fÑ=€LÜ1°*¸lÓK€JØ�‰×$Ñ$ ZÓ0€AàˆB‚wà˜T 4Ð'Ð'à
�,‰,�q‹/€CØ—-‘-¨\�-Ó:€KØ€KÔØ×-Ñ-Ø×Ñ×+Ñ+¨JÓ7ó€Lð ˜ jÐ0Ð0r5   c                 ó(   — | |k(  rt        | «      ry|S )a1  Compute the name of an index column that is compatible with older
    versions of :mod:`pyarrow`.

    Parameters
    ----------
    raw_name : str
    logical_name : str

    Returns
    -------
    result : str

    Notes
    -----
    * Part of :func:`~pyarrow.pandas_compat.table_to_blockmanager`
    N)rà   )Úraw_namer—  s     r6   r“  r“  )  s   € ð$ �<ÒÔ$<¸XÔ$FØàÐr5   c                 ó6   — d}t        j                  || «      d uS )Nz^__index_level_\d+__$)ÚreÚmatch)rv   Úpatterns     r6   rà   rà   A  s   € Ø&€GÜ�8‰8�G˜TÓ"¨$Ð.Ð.r5   c                  óæ   — t         sft         j                  ddddt        j                  dt        j                  t        j
                  t        j                  t        j                  dœ
«       t         S )NrM   zdatetime64[ns]rZ   )
r   r<   r;   r   r   rN   r  Úfloatingr=   r   )Ú_pandas_logical_type_mapr   rP   rS   r   r   Úobject_r4   r5   r6   Úget_pandas_logical_type_mapr¢  F  sT   € õ $Ü ×'Ñ'Ø#Ø(Ø*ØÜ—Y‘YØÜ—x‘xÜŸ
™
Ü—z‘zÜ—Z‘Zñ)
ô 	ô $Ð#r5   c                 ó–   — t        «       }	 ||    S # t        $ r. d| v rt        j                  cY S t        j                  | «      cY S w xY w)a  Get the numpy dtype that corresponds to a pandas type.

    Parameters
    ----------
    pandas_type : str
        The result of a call to pandas.lib.infer_dtype.

    Returns
    -------
    dtype : np.dtype
        The dtype that corresponds to `pandas_type`.
    rµ   )r¢  r@   rP   r¡  rW   )rx   Úpandas_logical_type_maps     r6   Ú_pandas_type_to_numpy_typer¥  Y  sM   € ô :Ó;Ðð%Ø& {Ñ3Ð3øÜò %Ø�kÑ!ä—:‘:ÒÜ�x‰x˜Ó$Ò$ð	%ús   Œ ‘A°AÁAc                 ó8  — t         j                  }t        | dd«      xs | g}t        | dd«      xs dg}t        ||i ¬«      D ��cg c]=  \  }}||j	                  dt        |j                  «      «      |j	                  dd«      f‘Œ? }}}g }t        j                  dd«      }	|D �]Ž  \  }}
}t        |
«      }|t        j                  k(  r|j                  |	«      }�n |
d	k(  r†t        j                  j                  |d
   d   d   «      }|j!                  |d¬«      j#                  |«      }t        j$                  «       r½|j'                  t        j(                  |«      d
   «      }n•|
dk(  rAt         j                  j+                  |D �cg c]  }t-        j.                  |«      ‘Œ c}«      }nO|j                  dk(  r |dk(  rd|
v s|
dv r|j1                  |«       �Œ9|j                  |k7  r|j3                  |«      }|j                  |k7  r|
d	k7  r|j3                  |«      }|j1                  |«       �Œ‘ t5        |«      dkD  r|j7                  ||| j8                  ¬«      S |j+                  |d
   |d
   j                  | j:                  ¬«      S c c}}w c c}w )a_  Construct a pandas MultiIndex from `columns` and column index metadata
    in `column_indexes`.

    Parameters
    ----------
    columns : List[pd.Index]
        The columns coming from a pyarrow.Table
    column_indexes : List[Dict[str, str]]
        The column index metadata deserialized from the JSON schema metadata
        in a :class:`~pyarrow.Table`.

    Returns
    -------
    result : MultiIndex
        The index reconstructed using `column_indexes` metadata with levels of
        the correct type.

    Notes
    -----
    * Part of :func:`~pyarrow.pandas_compat.table_to_blockmanager`
    r†   Nrj   )Ú	fillvaluerx   ry   rŸ   r·   r;   r   ro   rf   T)Úutcr=   rZ   r>   rµ   )r   rN   r  r~  )rW   rv   )r   rÏ   rg   r   r5  rZ   rW   ÚoperatorÚmethodcallerr¥  rP   rS   r»   r   r   rI  Úto_datetimeÚ
tz_convertrW  Úas_unitr8  rƒ  r=   ÚDecimalr•   Úastyperh   r  r‡   rv   )rŽ   r�   rÏ   r†   Úlabelsr§   rˆ  Úlevels_dtypesÚ
new_levelsÚencoderrC  Únumpy_dtyperW   rG   rÂ   s                  r6   r„  r„  p  sj  € ô, 
�‰€Bô �W˜h¨Ó-Ò:°'°€FÜ�W˜g tÓ,Ò6°°€Fô !,Ø�N¨bô!
÷ñ ˆE�9ð 
�	—‘˜m¬S°·±Ó-=Ó>Ø	�‰�| TÓ	*ò	,ð€Mñ ð €JÜ×#Ñ# H¨gÓ6€Gà,9ó '!Ñ(ˆˆ|˜[Ü*¨<Ó8ˆð ”B—I‘IÒØ—I‘I˜gÓ&ŠEà˜\Ò)Ü—‘×(Ñ(Ø˜qÑ! *Ñ-¨jÑ9ó;ˆBà—N‘N 5¨d�NÓ3×>Ñ>¸rÓBˆEÜ×#Ñ#Ô%ð Ÿ™¤b×&6Ñ&6°{Ó&CÀAÑ&FÓG‘à˜YÒ&Ü—N‘N×(Ñ(ÀeÖ)LÀ¬'¯/©/¸!Õ*<Ò)LÓM‰Eà�K‰K˜5Ò  [°HÒ%<Ø˜LÑ(¨LÐ<QÑ,Qð ×Ñ˜eÔ$ÙØ�[‰[˜EÒ!Ø—L‘L Ó'ˆEà�;‰;˜+Ò%¨,¸,Ò*FØ—L‘L Ó-ˆEà×Ñ˜%Ö ðO'!ôR ˆ:ƒ˜ÒØ�}‰}˜Z¨°w·}±}ˆ}ÓEÐEà�x‰x˜
 1™¨Z¸©]×-@Ñ-@ÀwÇ|Á|ˆxÓTÐTùóoùò: *Ms   ÁAJÆJ
c                 ó¼  — i }i }| j                   }|d   }|D �cg c]  }t        |t        «      r|‘Œ }}t        |«      }t        |d   «      |z
  }t	        |d   «      D �],  \  }	}
|
j                  d«      }|s|
d   }|	|k\  r||	|z
     }|€d}|j                  |«      }|dk7  sŒG|
d   dk(  sŒP| |   }t        |j                  t        j                  j                  «      sŒ„|
d	   }|sŒŒ|j                  d
«      }|sŒ ||j                  j                  k7  sŒº|j                  «       }t        j                  d|¬«      }t        j                  j                  ||¬«      }t        j                   ||   j"                  |«      ||<   |||<   �Œ/ t        |«      dkD  rºg }g }t%        t        | j                   «      «      D ]a  }	|	|v r)|j'                  ||	   «       |j'                  ||	   «       Œ0|j'                  | |	   «       |j'                  | j                   |	   «       Œc t        j(                  j+                  |t        j                   |«      ¬«      S | S c c}w )NrŒ   rŽ   rw   rv   ÚNoner’  rx   r;   ro   rf   rF  rG  )rX   r   )rÒ   )rÒ   rA   rZ   rh   rÎ   r5  r”  rX   r   r   rF   rG   r•  r(  ÚArrayró   rÜ   rv   rè   r•   ÚTabler‹  )r]  r#  Úmodified_columnsÚmodified_fieldsrÒ   rŒ   Úidx_colÚn_index_levelsÚ	n_columnsrÂ   rw  r™  Úidxr¯   ro   Úmetadata_tzÚ	convertedÚtz_aware_typer  rŽ   r"  s                        r6   rO  rO  Ç  sX  € ØÐØ€Oà�\‰\€Fà# OÑ4€Mà,9ö 2 Ü" 7¬CÔ0ò ð 2€Mð 2ä˜Ó'€NÜ�O IÑ.Ó/°.Ñ@€Iô ! °Ñ!;Ó<ó :‰ˆˆ8à—<‘< Ó-ˆÙà Ñ'ˆHØ�IŠ~à(¨¨Y©Ñ7�ØÐØ!�à×$Ñ$ XÓ.ˆØ�"‹9Ø˜Ñ&¨,Ó6Ø˜C‘j�Ü! #§(¡(¬B¯F©F×,@Ñ,@ÔAØØ# JÑ/�ÙØØ&Ÿl™l¨:Ó6�Ú ;°#·(±(·+±+Ó#=Ø #§¡£�IÜ$&§L¡L°¸+Ô$F�MÜ$&§H¡H×$8Ñ$8¸Ø>Kð %9ó %M�Mô ,.¯8©8°F¸3±K×4DÑ4DØ4Aó,C�O CÑ(à,9Ð$ SÓ)ð=:ô@ ÐÓ˜qÒ ØˆØˆÜ”s˜5Ÿ<™<Ó(Ó)ò 	/ˆAØÐ$Ñ$Ø—‘Ð/°Ñ2Ô3Ø—‘˜o¨aÑ0Õ1à—‘˜u Q™xÔ(Ø—‘˜eŸl™l¨1™oÕ.ð	/ô �x‰x×#Ñ# G´B·I±I¸fÓ4EÐ#ÓFÐFàˆùòe2s   šIc                 ó¬   — t         j                  j                  |«      }| j                  j	                  d«      j                  j                  |«      } | S )zB
    Make a datetime64 Series timezone-aware for the given tz
    r¨  )r   r   rI  ÚdtÚtz_localizer¬  )ÚseriesrG   s     r6   Úmake_tz_awarerÆ    sA   € ô 
�‰×	 Ñ	  Ó	$€BØ�i‰i×#Ñ# EÓ*ß‘RŸ
™
 2›ð à€Mr5   rå   )r  NT)NNT)NFN)?r�  Úcollections.abcr   Ú
concurrentr   Úconcurrent.futures.threadr.  r   r=   Ú	itertoolsr   r›   r©  r›  r—   ÚnumpyrP   ÚImportErrorr‰   r   Úpyarrow.libr   r   r	   r   rO   r   r7   rD   rT   r`   rq   r�   r³   rš   r–   rÃ   rØ   rË   rÚ   ræ   rÑ   rÌ   rÇ   rÿ   r%  rû   rD  r9  rd  rl  rQ  rS  rT  rP  rŠ  r“  rà   r¢  r¥  r„  rO  rÆ  r4   r5   r6   ú<module>rÎ     sQ  ðó& Ý $Ý ó !Ý Û Ý !Û Û Û 	Û ðÛó ß DÑ Dð Ð ØÐ ØÐ òò:ò"#ò,ò"$ò&,ðb +/ójòZò($òN(ò&?QòD;Qò|
*òòò9ò
ó &ðF IMØ!óa"òHó&BòJ4ð JNó;ò@!Ð òPòfòóB2ðl ?Có1ò&ò0/ò
$ò&%ò.TUòn:óBøðK' ò Ø	‚Bðús   ¶C ÃCÃC