Ë
    _Qêj[±  ã                   óª  — 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© ó    úZ/home/oem/CyberBrain26-unified/.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   Únpr   r   r   r   r   r   r   r   r   r   r   Ústr_Úbytes_r4   r5   r6   Úget_numpy_logical_type_maprS   \   sš   € å"Ü×&Ñ&Ü�G‰G�VÜ�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   )	rS   Ú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:   )rV   rY   ÚgetattrÚlenÚ
categoriesrd   ÚcodesrX   r   r   Útzinfo_to_stringrG   Úunit)ÚcolumnrV   ÚcatsÚmetadataÚphysical_dtypes        r6   Úget_extension_dtype_inforp   ƒ   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_typern   )rD   rp   rr   rs   rA   ÚfloatrP   ÚisnanrY   Ú	TypeErrorrW   Ú__name__)rl   ru   rJ   rv   Ú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           
      óR  — |€|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}}|j                  }	 t!        j"                  |«       dt!        j"                  ||||z   |dt&        j(                  dœt*        j,                  dœ«      j/                  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)ru   rJ   rv   Fr   z&The DataFrame has non-str index name `z@` which will be converted to string and not roundtrip correctly.é   ©Ú
stacklevelÚlevelsÚnamesz(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)rY   ÚziprA   Údictrg   r€   Úappendru   Ú_column_name_to_stringsÚwarningsÚwarnÚUserWarningrf   rŒ   Ú_get_simple_index_descriptorÚattrsÚjsonÚdumpsÚ	Exceptionr   Ú__version__r   r‰   Úencode)Úcolumns_to_convertÚdfÚcolumn_namesÚindex_levelsÚindex_descriptorsÚpreserve_indexrH   Úcolumn_field_namesru   ÚlevelÚ
descriptorÚserialized_index_levelsÚnum_serialized_index_levelsÚntypesÚdf_typesÚindex_typesÚcolumn_metadataÚcolrv   rJ   rn   Ú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à—‘€Jð'Ü�
‰
�:Ôð 	”4—:‘:Ø.Ø,Ø&Ð)>Ñ>Ø$à$ÜŸ>™>ñô *×1Ñ1ñ

ó 
÷ ‰6�&‹>ðð ùòK Bùóøôx ò 'Øˆ
Ü�‰Ø6°q°cð :/ð 0ä A÷	'ò 	'ûð'ús"   ‡I&ªI+ÈI1 É1	J&É:"J!Ê!J&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-8rt   )rp   r_   r•   r–   r—   )r¦   ru   r~   r   rw   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   rY   r   ÚdecodeÚtupleÚmapr”   r   r{   ry   rP   rz   ©ru   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                 ó¢   — | j                   �#| j                   |vrt        | j                   «      S |}d|d›d�|v r|dz  }d|d›d�|v rŒ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Ú__é   )ru   r”   )ÚindexÚir¡   Újs       r6   Ú_index_level_namerÄ   m  so   € ð ‡z�zÐ %§*¡*°LÑ"@Ü& u§z¡zÓ2Ð2àˆØ˜q ˜e 2Ð&¨,Ñ6Ø�‰FˆAð ˜q ˜e 2Ð&¨,Ò6à  !˜u BÐ'Ð'r5   c                 óZ  — 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        ||||z   «      }	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“   rY   Ú	enumeraterÄ   rA   ÚpdÚ
RangeIndexÚ_get_range_index_descriptor)r    Úschemar¤   rŒ   r¡   r¥   r¢   rŸ   Úconvert_fieldsru   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ò (‰ˆˆ;Ü Ø˜˜LÐ+=Ñ=ó
ˆô �{¤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¢   ru   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Úintrg   Úget_level_values)r    ru   Ú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{   rY   r»   s    r6   Ú_level_namerç     s1   € ðÜ�
‰
�4ÔØˆøÜò Ü�4‹yÒðús   ‚ ™0¯0c                 ót   — dt        | j                  «      | j                  | j                  | j                  dœS )NÚrange)Úkindru   ÚstartÚstopÚstep)rç   ru   rë   rì   rí   )r¦   s    r6   rÒ   rÒ     s0   € àÜ˜EŸJ™JÓ'Ø—‘Ø—
‘
Ø—
‘
ñð r5   c                 óŠ   — t        t        | d| g«      «      }t        |«      D �cg c]  }| j                  |«      ‘Œ c}S c c}w )Nr…   )rg   rf   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 �].  }t        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!                  |«       �Œ1 t#        |	| |||||
|¬«      }||
|fS )NT)Úfrom_pandasr   ©r¥   )rÙ   r   Ú
get_valuesÚis_categoricalr   ÚarrayrW   Úis_extension_array_dtyperA   rÐ   ÚSeriesÚheadÚget_datetimetz_typerV   r   Ú_ndarray_to_arrow_typer“   r²   )r    r¤   rŒ   rØ   r¡   r¥   Ú_r£   rŠ   rŸ   rH   rñ   ÚvaluesÚtype_r   rn   s                   r6   Údataframe_to_typesr   8  sK  € ô " " 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           
      ó4  ‡— 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 ]H  \  }} ||«      r|j                   |||«      «       Œ'|j                  |j                  |||«      «       ŒJ 	 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-                  |«       |j/                  |«      }d }t        |«      dk(  r<	 |
d   d   } | dk(  r.|
d   d	   }!|
d   d
   }"|
d   d   }#t        t1        |!|"|#«      «      }|||fS c c}}w # 1 sw Y   �ŒmxY wc c}w # t2        $ r Y Œ(w xY w)Néd   rÀ   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)rW   ró   ÚsafezConversion failed for column z with type r   zField z( was non-nullable but pandas column had z null values)ÚnullablerW   r   r÷   ÚArrowInvalidÚArrowNotImplementedErrorÚArrowTypeErrorÚargsru   rV   Ú
null_countrÊ   )r®   rÝ   Úfield_nullablerÿ   r^   r±   r  s         €r6   Úconvert_columnz+dataframe_to_arrays.<locals>.convert_columnt  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        | j                  t        j                  «      rn| j                  }t        |t        j                  «      xrF |j
                  j                  xr. t        |j                  j                  t        j                  «      S y)NF)
rA   rV   rP   rþ   ÚndarrayÚflagsÚ
contiguousÚ
issubclassrW   Úinteger)ÚserÚarrs     r6   Ú_can_definitely_zero_copyz6dataframe_to_arrays.<locals>._can_definitely_zero_copy‰  sb   € Ü�c—i‘i¤§¡Ô*Ø—*‘*ˆCÜ˜s¤B§J¡JÓ/ò ;Ø—I‘I×(Ñ(ò;ä˜sŸy™yŸ~™~¬r¯z©zÓ:ð<ð r5   rô   r   rê   ré   rë   rì   rí   )rÙ   rg   rŒ   r   Ú	cpu_countr	   r‘   r   ÚThreadPoolExecutorr“   ÚsubmitrÏ   rA   ÚFuturer^   rW   rÝ   rÓ   r²   rn   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   Úfieldsru   rÿ   Úpandas_metadatarn   Ún_rowsrê   rë   rì   rí   s$        `                              r6   Údataframe_to_arraysr&  [  sÏ  ø€ ô /¨r°6¸>Ø/6ó8ñ€YØØØØØØØð ÐÜ˜2“w¤ B§J¡J£ˆuˆØ�5˜3‘;Ò 5¨1¢9Ü—|‘|“~‰HàˆHäÔ!Øˆôò*ð �1‚}ä!Ð"4°nÓE÷GÙ�a˜ñ !  AÕ&ð Gˆò Gð ˆÜ×'Ñ'¨Ó1ð 	I°XÜÐ.°Ó?ò I‘��1Ù,¨QÔ/Ø—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+   ÂI3Â5AI9ÅJÈ3;J É9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æ   )rV   rW   rP   rU   r   Úis_datetimetzrG   rk   r   Ú	timestampÚfrom_numpy_dtype)rþ   rV   rÿ   rG   rk   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 rct        j                  |j                  «      \  }}	t        || d   «      }
t        j                  j                  |j                  d	«      |
d
¬«      }nQd| 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Ú
dictionaryrd   )rh   rd   re   r   F)rV   ÚcopyÚ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_datarV   Úmake_datetimetzrÐ   r÷   Úviewrg   rX   rÊ   r1  Ú
make_block)ÚitemrŒ   Úextension_columnsÚreturn_blockÚ_intÚ	block_arrr-  r  rk   rý   rV   ru   Úpandas_dtypes                r6   Ú_reconstruct_blockrB  Õ  sD  € ÷8 )Ð(à—‘˜ $Ó'€IØ�[Ñ!€IØ�tÑÜ×*Ñ*×5Ñ5Ø $ |Ñ"4Ø˜‘Oð 6ó %‰ð 
�tÑ	Ü×"Ñ" 9§?¡?Ó3‰ˆˆaÜ  d¨:Ñ&6Ó7ˆÜ�n‰n×"Ñ"Ø�N‰N˜7Ó#¨5°uð #ó 
‰ð 
�tÑ	à�:ÑˆÜ�9‹~ Ò"Ð"Ð"Ø�y ‘|Ñ$ˆØ(¨Ñ.ˆÜ�|Ð%5Ô6Üð :ó ;ð ;à×)Ñ)¨#Ó.‰àˆáØ�‰˜s¨iˆÓ8Ð8à�Iˆ~Ðr5   c                 ó–   — t         j                  j                  |t        j                  «       ¬«      }t        j
                  | |¬«      S )N©Úprefer_zoneinfo©rG   )r   r   Ústring_to_tzinfor   Úis_ge_v3Údatetimetz_type)rk   rG   s     r6   r9  r9    s7   € Ü	�‰×	 Ñ	  ´[×5IÑ5IÓ5KÐ	 Ó	L€BÜ×&Ñ& t°Ô3Ð3r5   c           	      óz  — 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} |||«      }|j7                  ||j8                  «      }||_        |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Ë   ÚkeysrH  Úpandas.api.internalsrK  rB  r™   r2  rL  ÚpandasrM  Ú	_from_mgrÚaxes)ÚoptionsÚtablerh   Úignore_metadataÚtypes_mapperÚall_columnsr‹   r�   r$  r£   rÁ   Úext_columns_dtypesrŒ   r¡   r^   rK  r<  Úblocksr    rL  rM  rY  Úmgrs                          r6   Útable_to_dataframerb    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Ó(ˆØ× Ñ   c§h¡hÓ/ˆàˆŒàˆ	ùò/
ùò
s   Ä/F3Å+F8>   r   r   r   r   r   r   r>   r   r   r   r   r   r   c                 óf  — |d   }|xs g }i }|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_categoricalrv   ru   rx   r1  )Úna_value)rÓ   rW   ru   rA   r   ÚBaseExtensionTypeÚto_pandas_dtypeÚNotImplementedErrorr@   Ú_pandas_supported_numpy_typesr   rA  Úextension_dtyperÐ   ÚStringDtyperH   Úis_dictionaryrÝ   rX   Úuses_string_dtypeÚ	is_stringÚis_large_stringÚis_string_viewrP   Únan)r[  Úcolumns_metadatar]  rZ  rh   rd  Úext_columnsrÝ   ÚtyprA  Úcol_metaru   rV   s                r6   rP  rP  \  su  € ð %Ð%=Ñ>ÐØÒ!˜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   ÂI>Â4JÄ(AJ#É>	JÊ
JÊJ ÊJ Ê#	J0Ê/J0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)ru   Nrv   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   rR  rR  «  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 )Nrv   ru   rÀ   ©r†   r   r»   )r5  r”   r¡   rg   r   rÐ   Ú
MultiIndexÚfrom_tuplesrË   rº   ÚastÚliteral_evalÚIndexÚ"_reconstruct_columns_from_metadata)	Úblock_tabler^  r‹   rñ   Úcolumns_name_dictru   Úcolumns_valuesÚ	col_indexrŒ   s	            r6   rS  rS  ¶  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 )Nrv   ru   rê   ré   rë   rì   rí   )rí   ru   zUnrecognized index kind: rÀ   r|  r   r»   )r5  rA   rY   Ú_extract_index_levelr   rÐ   rÑ   rg   rÊ   r“   r}  Úfrom_arraysr�  rQ  )r[  r£   r^  r]  rñ   Úfield_name_to_metadataÚindex_arraysÚindex_namesÚresult_tabler×   rÖ   Ú
index_namerÐ   rÁ   s                 r6   rO  rO  ×  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 )Nru   éÿÿÿÿ)r]  )Ú _backwards_compatible_index_namerÓ   Úget_field_indexrl   Ú	to_pandasru   Úremove_column)
r[  r�  rv   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)ru   Úpatterns     r6   rá   rá   7  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]rY   )
r   r<   r;   r   r   rN   r  Úfloatingr=   r   )Ú_pandas_logical_type_mapr   rP   rR   r   r   Úobject_r4   r5   r6   Úget_pandas_logical_type_mapr   <  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Ÿ  rV   )rw   Úpandas_logical_type_maps     r6   Ú_pandas_type_to_numpy_typer£  O  sM   € ô :Ó;Ðð%Ø& {Ñ3Ð3øÜò %Ø�kÑ!ä—:‘:ÒÜ�x‰x˜Ó$Ò$ð	%ús   Œ ‘A°AÁAc                 ó`  — 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                  |	«      }�n4|
d	k(  ršt        j                  j                  |d
   d   d   t        j                   «       ¬«      }|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                  |«       �ŒM|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…   Nri   )Ú	fillvaluerw   rx   rž   r¶   r;   r   rn   re   rD  T)Úutcr=   rY   r>   r´   )r   rN   rÀ   r|  )rV   ru   )r   rÐ   rf   r   r5  rY   rV   ÚoperatorÚmethodcallerr£  rP   rR   rº   r   r   rG  rH  Úto_datetimeÚ
tz_convertÚas_unitr8  r�  r=   ÚDecimalr“   Úastyperg   r}  r†   ru   )rŒ   r‹   rÐ   r…   Úlabelsr¦   r†  Úlevels_dtypesÚ
new_levelsÚencoderrA  Únumpy_dtyperV   rG   rÂ   s                  r6   r‚  r‚  f  s}  € ô, 
�‰€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Ü +× 4Ñ 4Ó 6ð )ó 8ˆ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à×Ñ˜%Ö ðQ(!ôT ˆ:ƒ˜ÒØ�}‰}˜Z¨°w·}±}ˆ}ÓEÐEà�x‰x˜
 1™¨Z¸©]×-@Ñ-@ÀwÇ|Á|ˆxÓTÐTùóqùò< *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Œ   rv   ru   ÚNoner�  rw   r;   rn   re   ÚnsrF  )rW   r   )rÓ   )rÓ   rA   rY   rg   rÏ   r5  r’  rW   r   r   rF   rG   r“  r)  ÚArrayró   rÝ   ru   ré   r“   ÚTabler‰  )r[  r$  Úmodified_columnsÚmodified_fieldsrÓ   rŠ   Úidx_colÚn_index_levelsÚ	n_columnsrÂ   ru  r—  Úidxr®   rn   Úmetadata_tzÚ	convertedÚtz_aware_typer  rŒ   r#  s                        r6   rN  rN  ¾  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                  |t        j                  «       ¬«      }| j
                  j                  d«      j
                  j                  |«      } | S )zB
    Make a datetime64 Series timezone-aware for the given tz
    rD  r¦  )r   r   rG  r   rH  ÚdtÚtz_localizerª  )ÚseriesrG   s     r6   Úmake_tz_awarerÅ  ÿ  sO   € ô 
�‰×	 Ñ	  ´[×5IÑ5IÓ5KÐ	 Ó	L€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   rS   r_   rp   r€   r²   r˜   r”   rÄ   rÙ   rÌ   rÛ   rç   rÒ   rÍ   rÈ   r   r&  rû   rB  r9  rb  ri  rP  rR  rS  rO  rˆ  r‘  rá   r   r£  r‚  rN  rÅ  r4   r5   r6   ú<module>rÍ     sQ  ðó& Ý $Ý ó !Ý Û Ý !Û Û Û 	Û ðÛó ß DÑ Dð Ð ØÐ ØÐ òò:ò"#ò,ò"$ò&,ðb +/ójòZò($òN(ò,AQòH;Qò|
*òòò9ò
ó &ðF IMØ!ód"òNó&:òz4ð JNó8òz!Ð òLò^òóB2ðl ?Có1ò&ò0/ò
$ò&%ò.UUòp:óBøðy& ò Ø	‚Bðús   ¶C ÃCÃC