+
    QV-ji‡  ã                  óp  € R t ^ RIHt ^ RIt^ RIHt ^ RIHtH	t	H
t
 ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ]P,                  P.                  P1                  ]4      tR R	 ltR
 tR R lt] ! R R]P<                  4      4       t ! R R] 4      t! ! R R]"4      t#Rt$ ! R R]PJ                  4      t&R# )uç  TsFile (table model) packaged builder â€” per-device wide format.

Each output row corresponds to a single device (identified by its TAG values).
The ``time`` column and every FIELD column are Arrow ``list<...>`` columns
holding the entire time series for that device. When the same device is
present in multiple TsFiles within a split, its data is merged across files
and the resulting lists are sorted in ascending time order.

Output schema layout::

    <tag1>:    string
    <tag2>:    string                   (one column per TAG)
    ...
    time:      list<timestamp[unit, tz]>
    <field1>:  list<original_type>      (one column per FIELD)
    <field2>:  list<original_type>
    ...

Reading model
-------------
Data is fetched **per device** via ``TsFileReader.query_table`` with a
push-down ``tag_filter``. For each split the builder:

1. Opens every input file once, calls ``get_all_devices`` to enumerate the
   ``(tag-tuple) â†’ [files]`` index across all shards.
2. Iterates the index in stable order. For each device, streams Arrow
   batches from every contributing file, concatenates and sorts by time,
   and emits one wide row.

Peak memory is bounded by **one device's** total payload across the split,
not by the split's total size.
)ÚannotationsN)Ú	dataclass)ÚAnyÚLiteralÚOptional)ÚKey)Ú
table_cast)Útqdmc               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚunitÚstrÚtzúOptional[str]Úreturnzpa.DataType© )Úformats   "Úx/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/datasets/packaged_modules/tsfile/tsfile.pyÚ__annotate__r   9   s!   € ÷ !ñ ! 3ð !¨Mð !¸kñ !ó    c               óÈ  € ^ RI Hp VP                  \        P                  ! 4       VP
                  \        P                  ! 4       VP                  \        P                  ! 4       VP                  \        P                  ! 4       VP                  \        P                  ! 4       VP                  \        P                  ! 4       VP                  \        P                  ! 4       VP                   \        P"                  ! WR7      VP$                  \        P&                  ! 4       VP(                  \        P*                  ! 4       /
P-                  V \        P                  ! 4       4      # )z8Map a tsfile ``TSDataType`` to its Arrow representation.©Ú
TSDataType©r   )Útsfile.constantsr   ÚBOOLEANÚpaÚbool_ÚINT32Úint32ÚINT64Úint64ÚFLOATÚfloat32ÚDOUBLEÚfloat64ÚTEXTÚstringÚSTRINGÚ	TIMESTAMPÚ	timestampÚDATEÚdate32ÚBLOBÚbinaryÚget)Úts_dtyper   r   r   s   &$$ r   Ú_arrow_typer1   9   sÌ   € å+ð 	×ÑœBŸHšH›JØ×Ñœ"Ÿ(š(›*Ø×Ñœ"Ÿ(š(›*Ø×Ñœ"Ÿ*š*›,Ø×Ñœ2Ÿ:š:›<Ø�‰œŸš›Ø×Ñœ2Ÿ9š9›;Ø×ÑœbŸlšl¨4Ô7Ø�‰œŸš›Ø�‰œŸš›ð÷ 
�cˆ(”B—I’I“KÓ ð!r   c                óN  € W8X  d   V # ^ RI Hp VP                  VP                  3VP                  VP                  VP                  3VP                  VP                  VP
                  3VP
                  VP                  VP                  3VP
                  VP                  VP
                  3VP
                  VP                  VP
                  3VP
                  /pW3V9   d   W0V3,          # W3V9   d   W1V 3,          # \        RV P                   RVP                   R24      h)u9  Return the widest of two ``TSDataType`` values.

Mirrors IoTDB's ``ALTER COLUMN ... SET DATA TYPE`` rules:

- ``INT32 â†’ INT64 â†’ DOUBLE``
- ``INT32 â†’ FLOAT â†’ DOUBLE``

``INT64`` and ``FLOAT`` cannot widen losslessly into either, so their
join is ``DOUBLE``. Non-numeric or otherwise unrelated pairs raise.
r   z(Incompatible column types across files: z vs uV   . Only numeric widening (INT32â†’INT64â†’DOUBLE, INT32â†’FLOATâ†’DOUBLE) is supported.)r   r   r   r    r"   r$   Ú
ValueErrorÚname)ÚaÚbr   Útables   &&  r   Ú_promote_tsdatatyper8   K   s  € ð 	„vØˆå+ð 
×	Ñ	˜:×+Ñ+Ð,¨j×.>Ñ.>Ø	×	Ñ	˜:×+Ñ+Ð,¨j×.>Ñ.>Ø	×	Ñ	˜:×,Ñ,Ð-¨z×/@Ñ/@Ø	×	Ñ	˜:×+Ñ+Ð,¨j×.?Ñ.?Ø	×	Ñ	˜:×,Ñ,Ð-¨z×/@Ñ/@Ø	×	Ñ	˜:×,Ñ,Ð-¨z×/@Ñ/@ð€Eð 	
€v�„Ø˜�V�}ÐØ	€v�„Ø˜�V�}ÐÜ
Ø
2°1·6±6°(¸$¸q¿v¹v¸hð G_ð 	_óð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úvaluer   r   r   r   Úintr   )r   s   "r   r   r   m   s!   € ÷ ñ �Sð  ð ¨ñ r   c                óŒ  € \        V \        4      '       d   \        RV : 24      h\        V \        4      '       d   V #  \        V \        P
                  4      '       dI   V P                  e:   V P                  \        P                  P                  4      P                  RR7      p MŒ\        V \        P                  4      '       d8   \        P
                  ! V P                  V P                  V P                  4      p M5\        V \        4      '       d    \        P
                  P!                  V 4      p \"        P$                  ! V \"        P&                  ! V4      R7      P(                  #   \"        P*                  \"        P,                  \        \.        3 d,   p\        R\1        T 4      P2                   RT : 24      ThRp?ii ; i)z¸Coerce a timestamp boundary to an integer epoch in ``unit``.

Accepts ``int`` (raw epoch in ``unit``), ``datetime``/``date``,
ISO-8601 ``str``, or any ``pa.Scalar`` of timestamp type.
z3start_time/end_time must be a timestamp, got bool: N)Útzinfo©Útypezbstart_time/end_time must be a datetime, date, pa.TimestampScalar, ISO-8601 str, or int epoch; got ú: )Ú
isinstanceÚboolÚ	TypeErrorr;   Ú_dtÚdatetimer=   Ú
astimezoneÚtimezoneÚutcÚreplaceÚdateÚyearÚmonthÚdayr   Úfromisoformatr   Úscalarr*   r:   ÚArrowInvalidÚArrowTypeErrorr3   r?   Ú__name__)r:   r   Úes   && r   Ú	_to_epochrT   m   sG  € ô �%œ×ÒÜÐMÈeÉYÐWÓXÐXÜ�%œ×ÒØˆðô �eœSŸ\™\×*Ò*Ø�|‰|Ò'Ø×(Ñ(¬¯©×)9Ñ)9Ó:×BÑBÈ$ÐBÓO�øÜ˜œsŸx™x×(Ò(Ü—L’L §¡¨U¯[©[¸%¿)¹)ÓD‰EÜ˜œs×#Ò#Ü—L‘L×.Ñ.¨uÓ5ˆEÜ�yŠy˜¤R§\¢\°$Ó%7Ô8×>Ñ>Ð>øÜ�O‰OœR×.Ñ.´	¼:ÐFô Üð/Ü/3°E«{×/CÑ/CÐ.DÀBÀuÁiðQó
ð ð	ûðús   ¿D)E) Å)/GÆ&F>Æ>Gc                  óº   a € ] tR t^Žt$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R	&   R
t
R]R&   ^ tR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   V 3R ltRtV ;t# )ÚTsFileConfigu�  BuilderConfig for TsFile (table model) â€” per-device wide format.

Args:
    table_name (`str`, *optional*):
        Name of the table to read. When unset, the first table found in
        the first valid file is used. Lookups are case-insensitive.
    columns (`list[str]`, *optional*):
        Subset of FIELD columns to keep. TAG columns and the TIME column
        are *always* returned (they identify the device / its timeline
        and cannot be excluded). Names that refer to TAG or TIME columns,
        or to fields absent from every file, resolve quietly: TAGs/TIME
        are emitted as usual, and never-seen fields become all-null list
        columns. When unset, all FIELDs are returned.
    start_time, end_time (`datetime`, `date`, `pa.TimestampScalar`, ISO-8601 `str`, or `int`, *optional*):
        Inclusive timestamp range. Either bound may be omitted.
        ``datetime`` values are taken in their own tz (UTC if naive);
        ``int`` is interpreted as a raw epoch in ``timestamp_unit``.
    input_batch_size (`int`, *optional*, defaults to 65_536):
        Maximum number of rows fetched per Arrow batch from
        ``TsFileReader.query_table``. Controls peak memory while
        streaming a single device.
    output_batch_size (`int`, *optional*, defaults to 32):
        Number of devices (output dataset rows) packed into each Arrow
        record batch yielded to the writer. Also the granularity at
        which the dataset progress bar advances; smaller values give
        more responsive feedback on slow per-device reads, larger ones
        reduce per-batch overhead.
    features (`Features`, *optional*):
        Final Features schema. When provided, the metadata scan over
        input files is skipped.
    on_bad_files (`Literal["error", "warn", "skip"]`, *optional*, defaults to "error"):
        What to do if a file cannot be opened or lacks the requested table.
    timestamp_unit (`Literal["s", "ms", "us", "ns"]`, *optional*, defaults to "ms"):
        Time unit for the timestamp column. IoTDB defaults to milliseconds.
    timestamp_tz (`str`, *optional*):
        Time zone for the timestamp column. ``None`` means timezone-naive.
Nr   Ú
table_namezOptional[list[str]]ÚcolumnszOptional[Any]Ú
start_timeÚend_timei   r;   Úinput_batch_sizeÚoutput_batch_sizezOptional[datasets.Features]ÚfeaturesÚerrorz Literal['error', 'warn', 'skip']Úon_bad_filesÚmszLiteral['s', 'ms', 'us', 'ns']Útimestamp_unitÚtimestamp_tzc                	óÞ  <€ \         SV `  4        V P                  e   V P                  ^ 8:  d   \        RV P                   24      hV P                  e   V P                  ^ 8:  d   \        RV P                   24      hV P
                  e&   \        V P
                  4      ^ 8X  d   \        R4      hV P                  R9  d   \        RV P                  : 24      hV P                  R9  d   \        RV P                  : 24      hV P                  e&   \        V P                  V P                  4      V n	        V P                  e(   \        V P                  V P                  4      V n        R # R # )Nz3`input_batch_size` must be a positive integer, got z4`output_batch_size` must be a positive integer, got z1`columns` must be a non-empty list when provided.z;`timestamp_unit` must be one of 's', 'ms', 'us', 'ns', got z;`on_bad_files` must be one of 'error', 'warn', 'skip', got )Úsr`   ÚusÚns)r^   ÚwarnÚskip)ÚsuperÚ__post_init__r[   r3   r\   rX   Úlenra   r_   rY   rT   rZ   )ÚselfÚ	__class__s   &€r   rj   ÚTsFileConfig.__post_init__Á   s9  ø€ Ü‰ÑÔØ× Ñ Ò(¨D×,AÑ,AÀQÔ,FÜÐRÐSW×ShÑShÐRiÐjÓkÐkØ×!Ñ!Ò)¨T×-CÑ-CÀqÔ-HÜÐSÐTX×TjÑTjÐSkÐlÓmÐmØ�<‰<Ò#¬¨D¯L©LÓ(9¸QÔ(>ÜÐPÓQÐQØ×ÑÐ&=Ô=ÜÐZÐ[_×[nÑ[nÑZqÐrÓsÐsØ×ÑÐ$=Ô=ÜÐZÐ[_×[lÑ[lÑZoÐpÓqÐqØ�?‰?Ò&Ü'¨¯©¸×9LÑ9LÓMˆDŒOØ�=‰=Ò$Ü% d§m¡m°T×5HÑ5HÓIˆDŽMñ %r   )rZ   rY   )rR   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rW   Ú__annotations__rX   rY   rZ   r[   r\   r]   r_   ra   rb   rj   Ú__static_attributes__Ú__classcell__©rm   s   @r   rV   rV   Ž   s�   ø‡ ñ$ðL !%€J�Ó$Ø#'€GÐ Ó'Ø $€J�Ó$Ø"€HˆmÓ"Ø"Ð�cÓ"ØÐ�sÓØ,0€HÐ)Ó0Ø5<€LÐ2Ó<Ø59€NÐ2Ó9Ø"&€L�-Ó&÷Jó Jr   rV   c                  ó   € ] tR t^ØtRtRtR# )Ú
_SkipSplitz5Raised internally to abort emitting a split entirely.r   N)rR   ro   rp   rq   rr   rt   r   r   r   rx   rx   Ø   s   † Ý?r   rx   c                  ó.   a € ] tR t^ÜtR V 3R lltRtV ;t# )Ú_MissingTableErrorc               ó   € V ^8„  d   QhRR/# )r   r7   r   r   )r   s   "r   r   Ú_MissingTableError.__annotate__Ý   s   € ÷ ^ñ ^˜mñ ^r   c                	ó4   <€ \         SV `  R V: RV 24       R# )zTable z& not found in file. Available tables: N)ri   Ú__init__)rl   r7   Ú	availablerm   s   &&&€r   r~   Ú_MissingTableError.__init__Ý   s    ø€ Ü‰Ñ˜6 %¡Ð*PÐQZÐP[Ð\Ö]r   r   )rR   ro   rp   rq   r~   rt   ru   rv   s   @r   rz   rz   Ü   s   ø† ÷^ö ^r   rz   s   TsFilec                  ó  a € ] tR t^étRt]tV 3R ltR tR t	R t
R tR R ltR	 R
 ltR R ltR R ltR R ltR R ltR R ltR R lt]R R l4       t]R R l4       t]R R l4       t]R R l4       tR R  ltR!tV ;t# )"ÚTsFilez8Per-device wide-format builder for TsFile (table model).c                	ón   <€ \         SV `  ! V/ VB  R V n        RV n        . V n        / V n        R V n        R # )NÚtime)ri   r~   Ú_tableÚ	_time_colÚ	_tag_colsÚ_field_innerÚ_requested_fields)rl   ÚargsÚkwargsrm   s   &*,€r   r~   ÚTsFile.__init__ð   s:   ø€ Ü‰Ò˜$Ð) &Ò)Ø%)ˆŒØ$ˆŒØ$&ˆŒØ46ˆÔØ6:ˆÖr   c                	óÞ  € V P                   P                  e¬   V P                   P                  e”   \        V P                   P                  4      P	                  \        V P                   P                  4      4      '       gC   \        RV P                   P                   R\        V P                   P                  4       24      h\        P                  ! V P                   P                  R7      # )NzIEvery entry in `columns` must also appear in `features`, but got columns=z and features=)r]   )	ÚconfigrX   r]   ÚsetÚissubsetr3   ÚlistÚdatasetsÚDatasetInfo)rl   s   &r   Ú_infoÚTsFile._infoø   s¬   € à�K‰K×ÑÒ+Ø—‘×$Ñ$Ò0Ü˜Ÿ™×+Ñ+Ó,×5Ñ5´c¸$¿+¹+×:NÑ:NÓ6O×PÒPäðØŸ;™;×.Ñ.Ð/¨~¼dÀ4Ç;Á;×CWÑCWÓ>XÐ=Yð[óð ô ×#Ò#¨T¯[©[×-AÑ-AÔBÐBr   c                	ó>  € V P                   P                  '       g#   \        R V P                   P                   24      hRVP                  n        VP                  V P                   P                  4      pV P                   P                  '       d%   V P                   P                  P                  4       MRV n        V P                   P                  '       d4   V P                   P                   Uu. uF  q3P                  4       NK  	  upMRV n
        VP                  4        UUu. uF  qD F  qUNK  	  K  	  pppV P                  V4      pVf   \        R4      hVR,          V n        VR,          V n        VR,          V n        VR,          V n        V P                   P"                  f    V P%                  4       V P                   n        VP'                  4        UUu. uF(  w  r„\(        P*                  ! VR\-        V4      /R	7      NK*  	  upp# u upi u uppi u uppi )
z=At least one data file must be specified, but got data_files=TNzjCould not infer schema from any of the provided files. Set `features` explicitly or check the input files.r7   Útime_colÚtag_colsÚfield_innerÚfiles)r4   Ú
gen_kwargs)rŽ   Ú
data_filesr3   Údownload_configÚextract_on_the_flyÚdownloadrW   Úlowerr…   rX   r‰   ÚvaluesÚ_scan_metadatar†   r‡   rˆ   Úinfor]   Ú_build_featuresÚitemsr’   ÚSplitGeneratorr‘   )	rl   Ú
dl_managerrœ   Úcrš   ÚfÚ	all_filesÚscanÚsplits	   &&       r   Ú_split_generatorsÚTsFile._split_generators  s¹  € Ø�{‰{×%×%Ð%ÜÐ\Ð]a×]hÑ]h×]sÑ]sÐ\tÐuÓvÐvØ8<ˆ
×"Ñ"Ô5Ø×(Ñ(¨¯©×)?Ñ)?Ó@ˆ
ð 9=¿¹×8N×8NÐ8N�d—k‘k×,Ñ,×2Ñ2Ô4ÐTXˆŒØMQÏ[É[×M`×M`ÐM`°T·[±[×5HÒ5HÓ!IÑ5H°§'¡'¦)Ñ5HÒ!IÐfjˆÔà$.×$5Ñ$5Ô$7ÔGÑ$7˜5Â¸A’QÁ‘QÑ$7ˆ	ÑGØ×"Ñ" 9Ó-ˆØŠ<ÜðFóð ð ˜7•mˆŒØ˜jÕ)ˆŒØ˜jÕ)ˆŒØ  Õ/ˆÔà�9‰9×ÑÒ%Ø!%×!5Ñ!5Ó!7ˆD�I‰IÔð !+× 0Ñ 0Ô 2ô
á 2‘�ô ×#Ò#¨¸GÄTÈ%Ã[Ð;Q×RÙ 2ò
ð 	
ùò# "JùãGùó
s   Ã0HÄ%HÇ.Hc              #  	ó&   "  € T R j  x€L
  R #  L5i©Nr   )rl   rš   s   &&r   Ú_generate_shardsÚTsFile._generate_shards"  s   é € Ø×Ôùs   ‚ˆ‰c              #  	óª   "  € V P                   P                  P                  p V P                  W4       R j  x€L
  R #  L  \         d     R # i ; i5ir°   )r£   r]   Úarrow_schemaÚ_fold_splitrx   )rl   rš   Útarget_schemas   && r   Ú_generate_tablesÚTsFile._generate_tables%  sD   é € ØŸ	™	×*Ñ*×7Ñ7ˆð	Ø×'Ñ'¨Ó=×=Ô=øÜô 	Úð	üs5   ‚!A¤A ¸?¹A ½A¿A ÁAÁAÁAÁAc               ó   € V ^8„  d   QhRR/# )r   r   zOptional[dict]r   )r   s   "r   r   ÚTsFile.__annotate__.  s   € ÷ J
ñ J
 ~ñ J
r   c                óÀ  € ^ RI HpHp V P                  pV P                  e   \        V P                  4      MRpTpRp. p\        4       p	/ p
V EFL  p V P                  V4      ;_uu_ 4       pV P                  V4      pV P                  W½4       Vf   \        \        V4      4      pWm9  d   \        V\        V4      4      hWÖ,          P                  4        F¶  pVP                  4       pVP                  4       pVP!                  4       pVVP"                  8X  d   TpKH  VVP$                  8X  d-   Wù9  d%   V	P'                  V4       VP)                  V4       Kƒ  K…  Ve	   Wõ9  d   K‘  V
P+                  V4      pVf   TM\-        VV4      W¯&   K¸  	  RRR4       EKO  	  Vf   R# V P2                  P4                  pV P2                  P6                  pV P                  eo   Ve
   W—0,          MT	p/ pV P                   FL  pVV9   d   K  V
P+                  V4      pVe   \9        VVVR7      VV&   K4  \:        P<                  ! 4       VV&   KN  	  M1V
P?                  4        UUu/ uF  w  ppV\9        VVVR7      bK  	  pppRTRT;'       g    TRVRV/#   + '       g   i     EKV  ; i  \.         d&   pT P1                  TT4      '       d   h  Rp?EK„  Rp?ii ; iu uppi )z?Walk every file and unify table name, TAG columns, FIELD types.)ÚTIME_COLUMNÚColumnCategoryN)r   r   r7   r—   r˜   r™   ) r   r¼   r½   r…   r‰   r�   Ú_open_readerÚ_schemas_by_lcÚ_require_table_modelÚnextÚiterrz   r‘   Úget_columnsÚget_column_nameÚget_categoryÚget_data_typeÚTIMEÚTAGÚaddÚappendr/   r8   Ú	ExceptionÚ_should_reraiserŽ   ra   rb   r1   r   r%   r¥   )rl   rš   r¼   r½   Úwanted_tableÚwanted_fieldsr7   r—   r˜   Útag_seenÚfield_widestÚfileÚreaderÚschemasÚcolr4   Úcatr0   ÚprevrS   r   r   Úreservedr™   ÚnÚds   &&                        r   r¢   ÚTsFile._scan_metadata.  s¯  € ç@à—{‘{ˆØ7;×7MÑ7MÒ7Yœ˜D×2Ñ2Ô3Ð_cˆà+ˆØ"&ˆØ ˆÜ ›UˆàˆäˆDðØ×&Ñ& t×,Ô,°Ø"×1Ñ1°&Ó9�GØ×-Ñ-¨dÔ<Ø’}Ü $¤T¨'£]Ó 3˜ØÔ+Ü0°¼¸W»ÓFÐFØ&�~×9Ñ9Ö;˜Ø"×2Ñ2Ó4˜Ø!×.Ñ.Ó0˜Ø#&×#4Ñ#4Ó#6˜Ø .×"5Ñ"5Ô5Ø'+šHØ  N×$6Ñ$6Ô6Ø#Ô3Ø (§¡¨TÔ 2Ø (§¡°Ö 5ñ  4ð  -Ò8¸TÔ=VÙ (Ø#/×#3Ñ#3°DÓ#9˜DØ=Aº\±ÔObÐcgÐiqÓOr˜LÓ.ñ  <÷ -Ò,ñ ð: Š=Ùà�{‰{×)Ñ)ˆØ�[‰[×%Ñ%ˆà×!Ñ!Ò-ð
 19Ò0D�x *Ö,È(ˆHØ24ˆKØ×.Ô.�Ø˜8Ô#ÙØ'×+Ñ+¨DÓ1�ØÒ'Ü(3°HÀ4ÈBÔ(O�K Ó%ô )+¯
ª
«�K Ó%ò /ð LX×K]ÑK]ÔK_Ô`ÑK_Á4À1Àa˜1œk¨!°$¸2Ô>Ò>ÑK_ˆKÑ`ð �UØ˜×/Ð/ KØ˜Ø˜;ð	
ð 	
÷k -×,Ñ,ûô, ô Ø×'Ñ'¨¨a×0Ò0ØÞûðüó: as=   ÁJ'Á,D&JÆJ'É KÊJ$ÊJ'Ê$J'Ê'KÊ2KËKc               ó   € V ^8„  d   QhRR/# )r   r   zdatasets.Featuresr   )r   s   "r   r   rº   z  s   € ÷ Fñ FÐ!2ñ Fr   c                	ó¼  € V P                   P                  pV P                   P                  pV P                   Uu. uF-  p\        P
                  ! V\        P                  ! 4       4      NK/  	  ppVP                  \        P
                  ! V P                  \        P                  ! \        P                  ! WR 7      4      4      4       V P                  P                  4        F?  w  rVVP                  \        P
                  ! V\        P                  ! V4      4      4       KA  	  \        P                  P                  \        P                   ! V4      4      # u upi )r   )rŽ   ra   rb   r‡   r   Úfieldr'   rÊ   r†   Úlist_r*   rˆ   r¥   r’   ÚFeaturesÚfrom_arrow_schemaÚschema)rl   r   r   ÚtÚfieldsr4   Úinners   &      r   r¤   ÚTsFile._build_featuresz  sÖ   € Ø�{‰{×)Ñ)ˆØ�[‰[×%Ñ%ˆØDHÇNÂNÓ!SÁN¸q¤"§(¢(¨1¬b¯iªi«kÖ":ÁNˆÐ!SØ�‰”b—h’h˜tŸ~™~¬r¯xªx¼¿ºÀTÔ8QÓ/RÓSÔTØ×,Ñ,×2Ñ2Ö4‰KˆDØ�M‰Mœ"Ÿ(š( 4¬¯ª°%«Ó9Ö:ñ 5ä× Ñ ×2Ñ2´2·9²9¸VÓ3DÓEÐEùò	 "Ts   »3Ec               ó   € V ^8„  d   QhRR/# ©r   r¶   ú	pa.Schemar   )r   s   "r   r   rº   …  s   € ÷  ñ  °	ñ  r   c              #  ó²  "  € V P                   f   \        h/ p V F  p V P                  V4      W4&   K  	  V P                  V4      w  rgV'       g,    VP                  4        F  p VP                  4        K  	  R# V P                  WgW24       Rj  x€L
  VP                  4        F  p VP                  4        K  	  R#   \         d$   pT P	                  YE4      '       d   h  Rp?KÎ  Rp?ii ; i  \         d     K�  i ; i Lq  \         d     Km  i ; i  TP                  4        F&  p TP                  4        K    \         d     K$  i ; i	  i ; i5i)uœ  Stream every device in this split via per-device tag-filter pushdown.

Open one ``TsFileReader`` per file, build a cross-file device index
keyed by ``(tag-tuple)``, then iterate devices in stable order. For
each device, ``query_table(tag_filter=...)`` reads only that device's
rows from each contributing file, so peak memory is bounded by one
device's payload across the split â€” never the split's total size.
N)	r…   rx   r¾   rË   rÌ   Ú_build_device_indexr¡   ÚcloseÚ_iter_device_batches)	rl   rš   r¶   ÚreadersrÑ   rS   Údevice_indexÚ	file_metarÒ   s	   &&&      r   rµ   ÚTsFile._fold_split…  s>  é € ð �;‰;ÒÜÐà"$ˆð	Û�ðØ$(×$5Ñ$5°dÓ$;�G“Mñ ð '+×&>Ñ&>¸wÓ&GÑ#ˆLßØð "Ÿ.™.Ö*�ðØ—L‘L–Nó +ð ×0Ñ0°È'Óa×aÐaà!Ÿ.™.Ö*�ðØ—L‘L–Nó +øô !ô Ø×+Ñ+¨D×4Ò4ØÝûðûô !ô Úðúñ bøô
 !ô Úðûð "Ÿ.™.Ö*�ðØ—L‘L–NøÜ ô Úðúò +üsÎ   ‚EšD  C³D ÁEÁ'C2Á7EÁ=D ÂDÂD ÂEÂ+DÂ;EÃC/ÃC*Ã$D Ã*C/Ã/D Ã2DÃ=EÄ DÄEÄD ÄDÄEÄDÄEÄEÄ-D?Ä=EÄ?E	Å
EÅE	ÅEÅEc               ó   € V ^8„  d   QhRR/# )r   rí   Údictr   )r   s   "r   r   rº   §  s   € ÷ N'ñ N'¨4ñ N'r   c                ó4  a€ ^ RI Hp / p. p/ pV P                  p\        VP	                  4       \        V4      RRR7      pV EFk  w  r‰ V P                  V	4      p
V P                  WŠ4       Wj9  d   \        V\        V
4      4      hW¦,          p. p\        4       pV P                  pVP                  4        F€  pVP                  4       pVP                  4       pVVP                  8X  d   TpK8  VVP                   8X  d   VP#                  V4       K\  VVP$                  8X  g   Ko  VP'                  V4       K‚  	  RVRVRV/WX&   V	P)                  4        EFT  pVP*                  e    VP*                  P-                  4       V8w  d   K3  \        VP.                  ^^\        V4      ,            4      p\1        \3        VV4      4      o\4        ;QJ d!    . V3R	 lV P6                   4       F  NK  	  5M! V3R	 lV P6                   4       4      p\8        ;QJ d    R
 V 4       F  '       g   K   RM	  RM! R
 V 4       4      '       d0   \;        RV R\1        \3        V P6                  V4      4       R24      hVV9  d   . VV&   VP#                  V4       VV,          P#                  V4       EKW  	  EKn  	  V Uu. uF  pVVV,          3NK  	  ppVV3#   \<         d8   pT P?                  TT4      '       d   h TPA                  TR4        Rp?EKË  Rp?ii ; iu upi )a•  Walk every open reader and build the cross-file device index.

Returns ``(device_index, file_meta)``:

- ``device_index``: list of ``(device_key, [file_path, ...])`` pairs
  in stable first-seen order. ``device_key`` is a tuple aligned to
  ``self._tag_cols`` (the unified tag-column order).
- ``file_meta``: maps each readable file to its per-file context
  (``tag_cols``, ``field_cols``, ``time_col``).
)r½   zIndexing TsFile devicesrÑ   )ÚtotalÚdescr   r˜   Ú
field_colsr—   Nc              3  óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir°   )r/   )Ú.0r¨   Úfile_tag_dicts   & €r   Ú	<genexpr>Ú-TsFile._build_device_index.<locals>.<genexpr>â  s   øé € Ð'UÁnÀ¨×(9Ñ(9¸!×(<Ð(<Ãnùs   ƒ!c              3  ó(   "  € T F  qR J x € K
  	  R # 5ir°   r   )rø   Úvs   & r   rú   rû   ã  s   é € Ð:©k¨ �9«kùs   ‚TFzDevice in file 'z' has missing tag values: zm. Schema-evolution devices with NULL tag values are not supported because tsfile lacks an IS NULL tag filter.)!r   r½   r…   r	   r¥   rk   r¿   rÀ   rz   r‘   r�   r†   rÃ   rÄ   rÅ   rÇ   rÈ   rÊ   ÚFIELDrÉ   Úget_all_devicesrW   r    Úsegmentsrò   ÚzipÚtupler‡   Úanyr3   rË   rÌ   Úpop)rl   rí   r½   Údevice_to_filesÚdevice_orderrï   Útable_lcÚ
files_iterrÑ   rÒ   rÓ   rá   Úfile_tag_colsÚfile_field_colsr—   rÔ   r4   rÕ   ÚdeviceÚfile_tag_valuesÚunified_keyrS   Úkeyrî   rù   s   &&                      @r   rê   ÚTsFile._build_device_index§  sÈ  ø€ õ 	4à24ˆØ$&ˆØ%'ˆ	ð —;‘;ˆäØ�M‰M‹OÜ�g“,Ø*Øô	
ˆ
ô '‰LˆDð/Ø×-Ñ-¨fÓ5�Ø×)Ñ)¨$Ô8ØÔ*Ü,¨X´t¸G³}ÓEÐEØ Õ*�à+-�Ü,/«E�ØŸ>™>�Ø!×-Ñ-Ö/�CØ×.Ñ.Ó0�DØ×*Ñ*Ó,�CØ˜n×1Ñ1Ô1Ø#'šØ × 2Ñ 2Ô2Ø%×,Ñ,¨TÖ2Ø × 4Ñ 4Ö4Ø'×+Ñ+¨DÖ1ñ 0ð  Ø  /Ø ð#�	‘ð %×4Ñ4×6�FØ×(Ñ(Ò0°F×4EÑ4E×4KÑ4KÓ4MÐQYÔ4YÙ Ü&*¨6¯?©?¸1¸qÄ3À}ÓCUÕ?UÐ+VÓ&W�OÜ$(¬¨]¸OÓ)LÓ$M�Mß"'¤%Ô'UÀdÇnÂnÓ'U§%¡%Ô'UÀdÇnÂnÓ'UÓ"U�Kß“sÑ:©kÓ:—s—s’sÑ:©kÓ:×:Ò:Ü(Ø.¨t¨fÐ4NÜ#¤C¨¯©¸Ó$DÓEÐFð GTðTóð ð #¨/Ô9Ø79˜¨Ñ4Ø$×+Ñ+¨KÔ8Ø# KÕ0×7Ñ7¸×=ô! 7ñ7 'ñd @LÓL¹|¸˜˜o¨cÕ2Ó3¹|ˆÐLØ˜YÐ&Ð&øô ô Ø×'Ñ'¨¨a×0Ò0ØØ—‘˜d DÔ)Þûð	üò Ms9   Á	CKÄ%C/KÈKÈ)KÉA)KÊ6LËLË+LÌLc               ó   € V ^8„  d   QhRR/# rç   r   )r   s   "r   r   rº   ÷  s   € ÷  Nñ  NÐT]ñ  Nr   c              #  ób  "  € \        V P                  P                  4       4      p. p^ pV EF  w  r‰. p
V Uu/ uF  q». bK  	  ppV	 F  pWÒ9  d   K   V P                  W=,          W-,          V4      w  rï\        T4      ^ 8X  d   K?  T
P                  T4       T F)  pYË,          P                  TP                  T4      4       K+  	  K�  	  V
'       g   K¨  V P                  WŠWÅ4      pVP                  V4       \        V4      V P                  P                  8¼  g   Kñ  \        ^ V4      V P                  Wd4      3x € . pV^,          pEK  	  V'       d"   \        ^ V4      V P                  Wd4      3x € R# R# u upi   \         d&   pT P                  TT4      '       d   h  Rp?EK`  Rp?ii ; i5i)z:Materialize devices in order and emit packed Arrow tables.N)r‘   rˆ   ÚkeysÚ_read_device_from_filerË   rÌ   rk   rÊ   r/   Ú_finalize_devicerŽ   r\   r   Ú_rows_to_table)rl   rî   rï   rí   r¶   Úfield_namesÚrowsÚ	batch_idxÚ
device_keyÚcontributing_filesÚtime_chunksr©   Úfield_chunksrÑ   Úts_arrÚvalsrS   Úrows   &&&&&             r   rì   ÚTsFile._iter_device_batches÷  s‚  é € ä˜4×,Ñ,×1Ñ1Ó3Ó4ˆØˆØˆ	Ü.:Ñ*ˆJØ,.ˆKÙ<GÓ,H¹K°q°ªU¹KˆLÐ,HÛ*�ØÔ(ÙðØ#'×#>Ñ#>¸w½}ÈiÍoÐ_iÓ#j‘L�Fô
 �v“; !Ô#ÙØ×"Ñ" 6Ô*Û$�AØ •O×*Ñ*¨4¯8©8°A«;Ö7ó %ñ +÷ Ùà×'Ñ'¨
ÀÓ[ˆCØ�K‰K˜ÔÜ�4‹y˜DŸK™K×9Ñ9Ö9Ü˜!˜YÓ'¨×)<Ñ)<¸TÓ)QÐQÒQØ�Ø˜Q•“	ñ3 /;÷4 Ü�a˜Ó# T×%8Ñ%8¸Ó%MÐMÔMñ ùò1 -Iøô !ô Ø×+Ñ+¨D°!×4Ò4ØÞûðüsN   ‚6F/¸E7ÁF/Á!E<Á4AF/ÃAF/Ä6F/Å(F/Å<F,ÆF'Æ F/Æ'F,Æ,F/c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úmetarò   r  r  r   r   )r   s   "r   r   rº     s&   € ÷ X"ñ X"°4ð X"ÀUð X"Èuñ X"r   c           	     ó¸  € ^ RI Hp VR,          pVR,          pVR,          p\        \        V P                  V4      4      pRp	V Fb  p
VP                  V
4      pVf+   \        P                  ! . \        P                  R7      / 3u # V! V
\        V4      4      pV	f   TMWœ,          p	Kd  	  \        V P                  P                  4       4      pV Uu. uF  qîV9   g   K  VNK  	  ppRpV'       gH   V'       g)   \        P                  ! . \        P                  R7      / 3# \        \        V4      4      .pRpR	V	R
V P                  P                   /pV P                  P"                  e   V P                  P"                  VR&   V P                  P$                  e   V P                  P$                  VR&   . pV Uu/ uF  qî. bK  	  ppVP&                  ! V P(                  V3/ VB ;_uu_ 4       p VP+                  4       pVf   EM£VP,                  ^ 8X  d   K*  VP/                  \        P0                  ! VP3                  V4      P5                  4       \        P                  R7      4       V EF4  pVP3                  V4      p\6        P8                  P;                  VP<                  4      '       dM   VV,          P/                  VP?                  \6        P                  ! 4       4      P5                  RR7      4       K�  \6        P8                  PA                  VP<                  4      '       dN   VV,          P/                  VP?                  \6        PB                  ! 4       4      P5                  RR7      4       EK  VV,          P/                  VP5                  RR7      4       EK7  	  EKº  RRR4       V'       g)   \        P                  ! . \        P                  R7      / 3# \E        V4      ^8”  d   \        PF                  ! V4      MV^ ,          pVPI                  4        UUu/ uF6  w  ppT\E        V4      ^8”  d   \        PF                  ! V4      MV^ ,          bK8  	  pppV P                  P"                  f   V P                  P$                  Ee   V P                  P"                  e   V P                  P"                  M-\        PJ                  ! \        P                  4      PL                  pV P                  P$                  e   V P                  P$                  M-\        PJ                  ! \        P                  4      PN                  pVV8¬  VV8*  ,          pVPQ                  4       '       g6   VV,          pVPI                  4        UUu/ uF  w  ppVVV,          bK  	  pppV'       d   / pVV3# u upi u upi   + '       g   i     EL; iu uppi u uppi )a
  Stream one device's rows from one file via ``query_table`` pushdown.

Returns ``(timestamps, {field_name: values})``. The dict only includes
field columns that this file owns *and* that the builder requested;
callers fill missing fields with all-null contributions.
)Útag_eqr˜   rö   r—   N©ÚdtypeFTÚ
tag_filterÚ
batch_sizerY   rZ   )Úzero_copy_only))Útsfiler$  rò   r  r‡   r/   ÚnpÚarrayr!   r   r‘   rˆ   r  rÁ   rÂ   rŽ   r[   rY   rZ   Úquery_tabler…   Úread_arrow_batchÚnum_rowsrÊ   ÚasarrayÚcolumnÚto_numpyr   ÚtypesÚis_timestampr?   ÚcastÚis_dater   rk   Úconcatenater¥   ÚiinfoÚminÚmaxÚall)rl   rÒ   r"  r  r$  r	  r
  r—   Úunified_to_valuer'  r¨   rý   ÚexprÚ	requestedr©   Úfields_to_queryÚfallback_onlyr‹   Úts_partsÚfield_partsÚrsÚbatchrÔ   Úts_fullÚpartsÚ	vals_fullÚloÚhiÚmaskÚarrs   &&&&                          r   r  ÚTsFile._read_device_from_file  sc  € õ 	"à#'¨
Õ#3ˆØ$(¨Õ$6ˆØ˜ZÕ(ˆô  ¤ D§N¡N°JÓ ?Ó@ÐØˆ
ÛˆAØ ×$Ñ$ QÓ'ˆAØŠyä—x’x ¬"¯(©(Ô3°RÐ7Ò7Ù˜!œS ›VÓ$ˆDØ!+Ò!3™¸Õ9JŠJñ ô ˜×*Ñ*×/Ñ/Ó1Ó2ˆ	Ù&/ÓH¡i ¸Ñ3GŸ1˜1¡iˆÐHØˆßß"Ü—x’x ¬"¯(©(Ô3°RÐ7Ð7Ü#¤D¨Ó$9Ó:Ð;ˆOØ ˆMà$ j°,ÀÇÁ×@\Ñ@\Ð]ˆØ�;‰;×!Ñ!Ò-Ø#'§;¡;×#9Ñ#9ˆF�<Ñ Ø�;‰;×ÑÒ+Ø!%§¡×!5Ñ!5ˆF�:Ñà%'ˆÙ7FÓ'G±°!¨2ª±ˆÐ'GØ×Ò §¡¨_ÑGÀ×GÒGÈ2ØØ×+Ñ+Ó-�Ø’=ÙØ—>‘> QÔ&ÙØ—‘¤§
¢
¨5¯<©<¸Ó+A×+JÑ+JÓ+LÔTV×T\ÑT\Ô ]Ô^Ü(�AØŸ,™, q›/�Cô —x‘x×,Ñ,¨S¯X©X×6Ò6Ø# A�×-Ñ-¨c¯h©h´r·x²x³zÓ.B×.KÑ.KÐ[`Ð.KÓ.aÖbÜŸ™×)Ñ)¨#¯(©(×3Ò3Ø# A�×-Ñ-¨c¯h©h´r·x²x³zÓ.B×.KÑ.KÐ[`Ð.KÓ.a×bà# A�×-Ñ-¨c¯l©lÈ%¨lÓ.P×Qô )÷ H÷0 Ü—8’8˜B¤b§h¡hÔ/°Ð3Ð3Ü.1°(«m¸aÔ.?”"—.’. Ô*ÀXÈaÅ[ˆØ`k×`qÑ`qÔ`sÔtÑ`sÑT\ÐTUÐW\�Q´#°e³*¸q´.œŸš¨Ô.ÀeÈAÅhÒNÑ`sˆ	Ñtð �;‰;×!Ñ!Ò-°·±×1EÑ1EÓ1QØ+/¯;©;×+AÑ+AÒ+M�—‘×'Ò'ÔSU×S[ÒS[Ô\^×\dÑ\dÓSe×SiÑSiˆBØ)-¯©×)=Ñ)=Ò)I�—‘×%Ò%ÌrÏxÊxÔXZ×X`ÑX`ÓOa×OeÑOeˆBØ˜r‘M g°¡mÕ4ˆDØ—8‘8—:’:Ø! $�-�Ø8A¿¹Ô8IÔJÑ8I©f¨a°˜Q  D¥	š\Ñ8I�	ÑJ÷ ØˆIØ˜	Ð!Ð!ùòu Iùò (HßG×GÐGüó6 uùó Ks2   ÃV2ÃV2Æ:V7Ç-D=V<Ì+A=V<Ð"<WÖWÖ<W	c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r   r  r  r  r‘   r  rò   r  z	list[str]r   r   )r   s   "r   r   rº   s  s<   € ÷ 1ñ 1àð1ð ð1ð ð	1ð
 ð1ð 
ñ1r   c                ó(  € V'       d   \         P                  ! V4      M%\         P                  ! . \         P                  R7      p\	        V4      pV^ 8”  d�   \         P
                  ! VRR7      pWW,          pV^8”  du   VR,          VRR	 8H  p	V	P                  4       '       dP   \        VR,          V	,          ^ ,          4      p
\        RV
 R\        \        V P                  V4      4       R24      hMRpTp/ p\        V P                  V4       F  w  rÍVf   RM
\        V4      W¼&   K  	  W‹V P                  &   V FÓ  pVP                  V. 4      p. p\        W/4       FR  w  ppVf8   VP                  \         P                   ! \	        V4      R\"        R7      4       KA  VP                  V4       KT  	  V'       d   \         P                  ! V4      M\         P                  ! . \"        R7      pVe   \	        V4      V8X  d
   VV,          pVW¾&   KÕ  	  V# )
uñ   Concatenate per-file chunks, sort by time, and return one row.

Raises ``ValueError`` if the same timestamp appears more than once
for a device (within or across files) â€” tsfile's per-device timeline
is required to be unique-by-timestamp.
r%  Ústable)Úkind:é   NNNzDuplicate timestamp z for device zC. Cross-file or within-file duplicate timestamps are not supported.éÿÿÿÿ)r+  r7  r,  r!   rk   Úargsortr  r;   r3   rò   r  r‡   r   r†   r/   rÊ   ÚfullÚobject)rl   r  r  r  r  Útime_arrÚn_totalÚsort_idxÚtime_sortedÚdup_maskÚdup_tsr  Útag_nameÚtag_valÚfnameÚchunksÚmaterializedÚtchunkÚfchunkrK  s   &&&&&               r   r  ÚTsFile._finalize_devices  s¾  € ÷ 3>”2—>’> +Ô.Ä2Ç8Â8ÈBÔVX×V^ÑV^ÔC_ˆÜ�h“-ˆà�QŒ;Ü—z’z (°Ô:ˆHØ"Õ,ˆKØ˜Œ{Ø& r�?¨k¸#¸2Ð.>Ñ>�Ø—<‘<—>’>Ü  ¨R¥°Õ!:¸1Õ!=Ó>�FÜ$Ø.¨v¨h°lÜ¤ D§N¡N°JÓ ?Ó@ÐAð B\ð\óð øð ˆHØ"ˆKàˆÜ!$ T§^¡^°ZÖ!@ÑˆHØ$+¢O™D¼¸W»ˆC‹Mñ "Aà)ˆD�N‰NÑã ˆEØ!×%Ñ% e¨RÓ0ˆFØ!#ˆLÜ"% kÖ":‘�˜Ø’>Ø ×'Ñ'¬¯ª´°F³¸TÌÔ(PÖQà ×'Ñ'¨Ö/ñ	 #;÷
 3?”"—.’. Ô.ÄBÇHÂHÈRÔW]ÔD^ˆCØÒ#¬¨C«°GÔ(;Ø˜(•m�ØˆC‹Jñ !ð ˆ
r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  z
list[dict]r¶   rè   r   zpa.Tabler   )r   s   "r   r   rº   ¨  s!   € ÷ 
3ñ 
3 :ð 
3¸ið 
3ÈHñ 
3r   c                ó  € . pV F¯  pV Uu. uF  qUVP                   ,          NK  	  pp\        P                  P                  VP                  4      '       d-   VP                  V P                  WdP                  4      4       K  VP                  \        P                  ! WdP                  R7      4       K±  	  \        P                  P                  Y2 Uu. uF  qDP                   NK  	  upR7      p\        Wr4      # u upi u upi )zLConvert a batch of row dicts into an Arrow table matching ``target_schema``.r>   )Únames)r4   r   r3  Úis_listr?   rÊ   Ú_build_list_arrayr,  ÚTableÚfrom_arraysr   )rl   r  r¶   Úarraysr©   Úrr¡   Úpa_tables   &&&     r   r  ÚTsFile._rows_to_table¨  s¼   € à!#ˆÛˆAÙ)-Ó.© A˜Ÿ™—i�i©ˆFÐ.Ü�x‰x×Ñ §¡×'Ò'Ø—‘˜d×4Ñ4°V¿V¹VÓDÖEà—‘œbŸhšh v·F±FÔ;Ö<ñ ô —8‘8×'Ñ'¨À}Ó6UÁ}À!·v´vÁ}Ñ6UÐ'ÓVˆÜ˜(Ó2Ð2ùò /ùò
 7Vs   ŒC<ÃD
c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¡   r‘   Ú	list_typezpa.ListTyper   zpa.ListArrayr   )r   s   "r   r   rº   µ  s&   € ÷ Vñ V $ð V°;ð VÀ<ñ Vr   c                ó¢  € VP                   p^ .p. p^ pV  F?  pVf   ^ pM\        V4      pVP                  V4       WW,          pVP                  V4       KA  	  V'       dU    \        P                  ! V Uu. uF  p\        P
                  ! V4      NK  	  up4      p	\        P                  ! W’RR7      p
M\        P                  ! . VR7      p
\        P                  P                  \        P                  ! V\        P                  ! 4       R7      V
4      # u upi   \         d)    . p	T F  pT	P                  \        T4      4       K  	   L±i ; i)zCBuild a ``ListArray`` from a list of per-row 1D arrays / sequences.T)r?   Úfrom_pandasr>   )Ú
value_typerk   rÊ   r+  r7  r0  r3   Úextendr‘   r   r,  Ú	ListArrayrj  r   )r¡   rp  Ú
inner_typeÚoffsetsÚflat_chunksrô   rý   Úlengthr¨   ÚflatÚflat_arrs   &&         r   rh  ÚTsFile._build_list_array´  s  € ð ×)Ñ)ˆ
Ø�#ˆØˆØˆÛˆAØŠyØ‘ä˜Q›�Ø×"Ñ" 1Ô%Ø�OˆEØ�N‰N˜5Ö!ñ ÷ ð)Ü—~’~¹kÓ&J¹k¸¤r§z¢z°!¦}¹kÑ&JÓK�ô —x’x À4ÔH‰Hä—x’x ¨Ô4ˆHä�|‰|×'Ñ'¬¯ª°¼r¿xºx»zÔ(JÈHÓUÐUùò 'KøÜô )à�Û$�AØ—K‘K¤ Q£Ö(ó %ð)ús$   Á"D Á6DÂD ÄD Ä0EÅEc               ó   € V ^8„  d   QhRR/# )r   rÑ   r   r   )r   s   "r   r   rº   Õ  s   € ÷ "ñ "˜3ñ "r   c                ó>  € ^ RI Hp  \        V R4      ;_uu_ 4       pVP                  \	        \
        4      4      pRRR4       X\
        8w  d   \        RT : R24      hT! T 4      #   + '       g   i     L3; i  \         d   p\        RT : RT 24      ThRp?ii ; i)a  Open a file as a ``TsFileReader`` after verifying its magic header.

The C library's ``TsFileReader`` constructor silently returns an
invalid handle for non-tsfile inputs, and any subsequent call on it
segfaults. The 6-byte ``TsFile`` magic header is checked first to
bail out cleanly.
)ÚTsFileReaderÚrbNzCannot open file r@   úFile z* is not a valid TsFile (bad magic header).)r*  r  ÚopenÚreadrk   Ú_TSFILE_MAGICÚOSErrorr3   )rÑ   r  ÚfhÚheaderrS   s   &    r   r¾   ÚTsFile._open_readerÔ  s“   € õ 	(ð	GÜ�d˜D×!Ô! RØŸ™¤¤]Ó!3Ó4�÷ "ð ”]Ô"Ü˜u T¡HÐ,VÐWÓXÐXÙ˜DÓ!Ð!÷ "×!ûäô 	GÜÐ0°±¸¸1¸#Ð>Ó?ÀQÐFûð	Gús3   ˆA9 œA&»A9 Á&A6	Á1A9 Á6A9 Á9BÂBÂBc               ó    € V ^8„  d   QhRRRR/# )r   rÑ   r   r   ÚNoner   )r   s   "r   r   rº   é  s   € ÷ ñ  3ð °Dñ r   c                	ó6   € V'       g   \        R V : R24      hR# )r�  zX is a tree-model TsFile, which is not supported. Only table-model TsFiles can be loaded.N)r3   )rÑ   rÓ   s   &&r   rÀ   ÚTsFile._require_table_modelè  s(   € çÜØ˜‘xð  :ð :óð ñ r   c               ó   € V ^8„  d   QhRR/# )r   r   rò   r   )r   s   "r   r   rº   ñ  s   € ÷ añ a $ñ ar   c                ó�   € V P                  4       P                  4        UUu/ uF  w  rVP                  4       VbK  	  upp# u uppi )aD  Return ``get_all_table_schemas()`` keyed by lowercased table name.

TsFile / IoTDB treat table names case-insensitively, but the Python
binding's ``get_all_table_schemas()`` returns a dict keyed by whatever
casing the file was written with. Lowercasing the keys here lets all
downstream lookups use a single canonical form.
)Úget_all_table_schemasr¥   r    )rÒ   r4   rá   s   &  r   r¿   ÚTsFile._schemas_by_lcð  s>   € ð :@×9UÑ9UÓ9W×9]Ñ9]Ô9_Ô`Ñ9_©¨�—
‘
“˜fÒ$Ñ9_Ò`Ð`ùÓ`s   ¢Ac               ó$   € V ^8„  d   QhRRRRRR/# )r   rÑ   r   ÚexcÚBaseExceptionr   rB   r   )r   s   "r   r   rº   û  s!   € ÷ 
ñ 
 Cð 
¨mð 
Àñ 
r   c                ó|  € V P                   P                  pVR8X  d4   \        P                  RV R\	        V4      P
                   RV 24       R# VR8X  d4   \        P                  RV R\	        V4      P
                   RV 24       R	# \        P                  RV R\	        V4      P
                   RV 24       R	# )
zKApply ``on_bad_files`` policy. Returns True iff the caller should re-raise.r^   zFailed to read file 'z' with error r@   Trg   zSkipping bad file 'z'. F)rŽ   r_   Úloggerr^   r?   rR   ÚwarningÚdebug)rl   rÑ   r’  Úmodes   &&& r   rÌ   ÚTsFile._should_reraiseû  s±   € à�{‰{×'Ñ'ˆØ�7Œ?Ü�L‰LÐ0°°°mÄDÈÃI×DVÑDVÐCWÐWYÐZ]ÐY^Ð_Ô`ÙØ�6Œ>Ü�N‰NÐ0°°°c¼$¸s»)×:LÑ:LÐ9MÈRÐPSÈuÐUÔVñ ô �L‰LÐ.¨t¨f°C¼¸S»	×8JÑ8JÐ7KÈ2ÈcÈUÐSÔTÙr   )rˆ   r‰   r…   r‡   r†   )rR   ro   rp   rq   rr   rV   ÚBUILDER_CONFIG_CLASSr~   r”   r­   r±   r·   r¢   r¤   rµ   rê   rì   r  r  r  Ústaticmethodrh  r¾   rÀ   r¿   rÌ   rt   ru   rv   s   @r   r‚   r‚   é   s·   ø† ÙBà'Ðõ;ò
Cò
ò<òõJ
õXFõ õDN'õ` NõDX"õt1õj
3ð ôVó ðVð> ô"ó ð"ð& ôó ðð ôaó ða÷
ó 
r   r‚   )'rr   Ú
__future__r   rE   rD   Údataclassesr   Útypingr   r   r   Únumpyr+  Úpyarrowr   r’   Údatasets.builderr   Údatasets.tabler   Údatasets.utils.tqdmr	   ÚutilsÚloggingÚ
get_loggerrR   r•  r1   r8   rT   ÚBuilderConfigrV   rË   rx   r3   rz   r„  ÚArrowBasedBuilderr‚   r   r   r   Ú<module>r©     sº   ðñõB #ã Ý !ß )Ñ )ã Û ã Ý  Ý %Ý $ð 
�‰×	Ñ	×	*Ñ	*¨8Ó	4€õ!ò$õDðB ôAJ�8×)Ñ)ó AJó ðAJôR@�ô @ô^˜ô ^ð
 €ô\ˆX×'Ñ'ö \r   