+
    xȇii                    P   R t ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIt^ RI	H
t
 ^ RIHtHtHtHtHt ^ RIHtHt ^ RIHt ^ R	IHt ^ RIt^ R
IHtHt ^ RIHt ^ RIHu H u H!t" ^ RI#H$t$ ]'       d   ^ RI%H&t&H't'H(t( ]! R4      t)]! R4      t*R R lt+ ! R R4      t, ! R R]$4      t-R# )a  
Read SAS7BDAT files

Based on code written by Jared Hobbs:
  https://bitbucket.org/jaredhobbs/sas7bdat

See also:
  https://github.com/BioStatMatt/sas7bdat

Partial documentation of the file format:
  https://cran.r-project.org/package=sas7bdat/vignettes/sas7bdat.pdf

Reference for binary data compression:
  http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/CUJ/1992/9210/ross/ross.htm
)annotations)datetimeN)TYPE_CHECKING)using_string_dtype)read_double_with_byteswapread_float_with_byteswapread_uint16_with_byteswapread_uint32_with_byteswapread_uint64_with_byteswap)Parserget_subheader_index)cast_from_unit_vectorized)EmptyDataError)	DataFrame	Timestamp)
get_handle)	SASReader)CompressionOptionsFilePath
ReadBufferz
1970-01-01z
1960-01-01c               $    V ^8  d   QhRRRRRR/# )   sas_datetimesz	pd.Seriesunitstrreturn )formats   "f/Users/max/.openclaw/workspace/postharvest/venv/lib/python3.14/site-packages/pandas/io/sas/sas7bdat.py__annotate__r   ?   s&     U Ui Us Uy U    c                z   \         \        ,
          P                  R4      pVR8X  dS   \        V P                  RRR7      pVP                  R4      V,           p\        P                  ! W@P                  RR7      # \        P                  ! V RR7      V,           p\        P                  ! VR	V P                  RR
7      # )a  
Convert to Timestamp if possible, otherwise to datetime.datetime.
SAS float64 lacks precision for more than ms resolution so the fit
to datetime.datetime is ok.

Parameters
----------
sas_datetimes : {Series, Sequence[float]}
   Dates or datetimes in SAS
unit : {'d', 's'}
   "d" if the floats represent dates, "s" for datetimes

Returns
-------
Series
   Series of datetime64 dtype or datetime.datetime.
sms)r   out_unitzM8[ms]FindexcopyzM8[D]dtypezM8[s]r)   r&   r'   )_sas_origin_unix_originas_unitr   _valuesviewpdSeriesr&   nparray)r   r   tdmillisdt64msvalss   &&    r   _convert_datetimesr8   ?   s    $ 
$	-	-c	2Bs{*!!d
 X&+yy':':GGxxW5:yyWM4G4GeTTr    c                  `    ] tR t^]t$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R
 R ltRtR# )_Columnintcol_idstr | bytesnamelabelr   bytesctypelengthc               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r   r<   r;   r>   r=   r?   r   rA   r@   rB   r   Noner   )r   s   "r   r   _Column.__annotate__e   sP       	
     
r    c                	N    Wn         W n        W0n        W@n        WPn        W`n        R # N)r<   r>   r?   r   rA   rB   )selfr<   r>   r?   r   rA   rB   s   &&&&&&&r   __init___Column.__init__e   s"     	

r    )r<   rA   r   r?   rB   r>   N)__name__
__module____qualname____firstlineno____annotations__rI   __static_attributes__r   r    r   r:   r:   ]   s-    K
LK r    r:   c                  p   ] tR t^xt$ RtR]R&   R]R&   R<R R l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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tR+ R, ltR- R. ltR/ R0 ltR1 R2 ltR=R3 R4 lltR5 tR6 R7 ltR8 tR9 R: lt R;t!R# )>SAS7BDATReadera_  
Read SAS files in SAS7BDAT format.

Parameters
----------
path_or_buf : path name or buffer
    Name of SAS file or file-like object pointing to SAS file
    contents.
index : column identifier, defaults to None
    Column to use as index.
convert_dates : bool, defaults to True
    Attempt to convert dates to Pandas datetime values.  Note that
    some rarely used SAS date formats may be unsupported.
blank_missing : bool, defaults to True
    Convert empty strings to missing values (SAS uses blanks to
    indicate missing character variables).
chunksize : int, defaults to None
    Return SAS7BDATReader object for iterations, returns chunks
    with given number of lines.
encoding : str, 'infer', defaults to None
    String encoding acc. to Python standard encodings,
    encoding='infer' tries to detect the encoding from the file header,
    encoding=None will leave the data in binary format.
convert_text : bool, defaults to True
    If False, text variables are left as raw bytes.
convert_header_text : bool, defaults to True
    If False, header text, including column names, are left as raw
    bytes.
r;   _int_lengthzbytes | None_cached_pageNc               <    V ^8  d   QhRRRRRRRRRR	R
RRRRRRR/	# )r   path_or_bufzFilePath | ReadBuffer[bytes]convert_datesboolblank_missing	chunksize
int | Noneencodingz
str | Noneconvert_textconvert_header_textcompressionr   r   rD   r   )r   s   "r   r   SAS7BDATReader.__annotate__   sd     = =1= 	=
 = = = = "= (= 
=r    c
           	     	   W n         W0n        W@n        WPn        W`n        Wpn        Wn        R V n        RV n        . V n	        . V n
        . V n        . V n        . V n        RV n        . V n        . V n        . V n        ^ V n        ^ V n        ^ V n        \)        VRRV	R7      V n        V P*                  P,                  V n        V P0                  V P2                  V P4                  V P6                  V P8                  V P:                  V P<                  V P>                  R.	V n          V PC                  4        V PE                  4        R#   \F         d    T PI                  4        h i ; i)zlatin-1r    NrbF)is_textr_   )%r&   rW   rY   rZ   r\   r]   r^   default_encodingr_   column_names_rawcolumn_namescolumn_formatscolumns%_current_page_data_subheader_pointersrT   _column_data_lengths_column_data_offsets_column_types_current_row_in_file_index_current_row_on_page_indexr   handleshandle_path_or_buf_process_rowsize_subheader_process_columnsize_subheader_process_subheader_counts_process_columntext_subheader_process_columnname_subheader#_process_columnattributes_subheader_process_format_subheader_process_columnlist_subheader_subheader_processors_get_properties_parse_metadata	Exceptionclose)
rH   rV   r&   rW   rY   rZ   r\   r]   r^   r_   s
   &&&&&&&&&&r   rI   SAS7BDATReader.__init__   sR    
**" (#6  )-//113&(LN2 /1!/1!*,*+'*+'*+'!u+
 !LL// ++..**....44**..
&
"	  "  " 	JJL	s    D? ?Ec                   V ^8  d   QhRR/# r   r   z
np.ndarrayr   )r   s   "r   r   r`           E EZ Er    c                b    \         P                  ! V P                  \         P                  R7      # )z5Return a numpy int64 array of the column data lengthsr(   )r2   asarrayrj   int64rH   s   &r   column_data_lengths"SAS7BDATReader.column_data_lengths       zz$33288DDr    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`      r   r    c                b    \         P                  ! V P                  \         P                  R7      # )z0Return a numpy int64 array of the column offsetsr(   )r2   r   rk   r   r   s   &r   column_data_offsets"SAS7BDATReader.column_data_offsets   r   r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`      s     D Dj Dr    c                n    \         P                  ! V P                  \         P                  ! R4      R7      # )zR
Returns a numpy character array of the column types:
   s (string) or d (double)
S1r(   )r2   r   rl   r)   r   s   &r   column_typesSAS7BDATReader.column_types   s#    
 zz$,,BHHTNCCr    c                   V ^8  d   QhRR/# r   r   rD   r   )r   s   "r   r   r`      s      t r    c                	:    V P                   P                  4        R # rG   )ro   r~   r   s   &r   r~   SAS7BDATReader.close   s    r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`      s     B
 B
 B
r    c                	v   V P                   P                  ^ 4       V P                   P                  R4      V n        V P                  ^ \	        \
        P                  4       \
        P                  8w  d   \        R4      hV P                  \
        P                  \
        P                  4      pV\
        P                  8X  d:   RV n        ^V n        \
        P                  V n        \
        P                   V n        M8RV n        \
        P$                  V n        \
        P&                  V n        ^V n        V P                  \
        P(                  \
        P*                  4      pV\
        P,                  8X  d   \
        P.                  pM^ pV P                  \
        P0                  \
        P2                  4      pVR8X  d!   RV n        \6        P8                  R8H  V n        MRV n        \6        P8                  R	8H  V n        V P                  \
        P<                  \
        P>                  4      ^ ,          pV\
        P@                  9   d@   \
        P@                  V,          V n!        V PD                  R
8X  d   V PB                  V n"        MRV R2V n!        \G        R^^4      pV PI                  \
        PJ                  V,           \
        PL                  4      pV\N        PP                  ! VRR7      ,           V n)        V PI                  \
        PT                  V,           \
        PV                  4      pV\N        PP                  ! VRR7      ,           V n,        V P[                  \
        P\                  V,           \
        P^                  4      V n0        V P                   P                  V P`                  R,
          4      pV ;P                  V,          un        \	        V P                  4      V P`                  8w  d   \        R4      hV P[                  \
        Pb                  V,           \
        Pd                  4      V n3        R# )    i   z'magic number mismatch (not a SAS file?)TF   <big>littleinferzunknown (code=)i  r"   )r   z*The SAS7BDAT file appears to be truncated.N)4rq   seekreadrT   lenconstmagic
ValueError_read_bytesalign_1_offsetalign_1_lengthu64_byte_checker_valueU64rS   page_bit_offset_x64_page_bit_offsetsubheader_pointer_length_x64_subheader_pointer_lengthpage_bit_offset_x86subheader_pointer_length_x86align_2_offsetalign_2_lengthalign_1_checker_valuealign_2_valueendianness_offsetendianness_length
byte_ordersys	byteorderneed_byteswapencoding_offsetencoding_lengthencoding_namesinferred_encodingr\   r   _read_floatdate_created_offsetdate_created_lengthr0   to_timedeltadate_createddate_modified_offsetdate_modified_lengthdate_modified
_read_uintheader_size_offsetheader_size_lengthheader_lengthpage_size_offsetpage_size_length_page_length)rH   bufalign1epochxs   &    r   r{   SAS7BDATReader._get_properties   s   q! --2237QU[[!12ekkAFGG u33U5I5IJ%...DH D$)$=$=D!-2-O-OD*DH$)$=$=D!-2-O-OD* Du33U5I5IJ%---((FF u668O8OP'>!DO!$%!7D!DO!$(!:D u44e6K6KLQO%&&&%*%9%9#%>D"}}' $ 6 6'5cU!%<D" q!$%%.0I0I
 "BOOAC$@@&&/1K1K
 #R__QS%AA!__$$v-u/G/G

 $$T%7%7#%=>S t  !T%7%77IJJ OO""V+U-C-C
r    c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   r`   /  s      ) r    c                	    T P                  V P                  ;'       g    ^R7      pVP                  '       d   V P                  4        \        hV# )   )nrows)r   rZ   emptyr~   StopIteration)rH   das   & r   __next__SAS7BDATReader.__next__/  s;    YYT^^00qY1888JJL	r    c               $    V ^8  d   QhRRRRRR/# )r   offsetr;   widthr   floatr   )r   s   "r   r   r`   7  s!     4 4# 4c 4e 4r    c                	    V P                   f   Q hV^8X  d!   \        V P                   WP                  4      # V^8X  d!   \        V P                   WP                  4      # V P	                  4        \        R4      h)Nzinvalid float width)rT   r   r   r   r~   r   rH   r   r   s   &&&r   r   SAS7BDATReader._read_float7  sw      ,,,A:+!!6+=+=  aZ,!!6+=+=  JJL233r    c               $    V ^8  d   QhRRRRRR/# )r   r   r;   r   r   r   )r   s   "r   r   r`   F  s!     2 2 2S 2S 2r    c                	   V P                   f   Q hV^8X  d   V P                  V^4      ^ ,          # V^8X  d!   \        V P                   WP                  4      # V^8X  d!   \	        V P                   WP                  4      # V^8X  d!   \        V P                   WP                  4      # V P                  4        \        R4      h)Nzinvalid int width)rT   r   r   r   r	   r
   r~   r   r   s   &&&r   r   SAS7BDATReader._read_uintF  s      ,,,A:##FA.q11aZ,!!6+=+=  aZ,!!6+=+=  aZ,!!6+=+=  JJL011r    c                    V ^8  d   QhRRRR/# )r   r   r;   rB   r   )r   s   "r   r   r`   Z  s     ; ;# ;s ;r    c                	    V P                   f   Q hW,           \        V P                   4      8  d   V P                  4        \        R4      hV P                   WV,            # )NzThe cached page is too small.)rT   r   r~   r   rH   r   rB   s   &&&r   r   SAS7BDATReader._read_bytesZ  sS      ,,,?S!2!233JJL<==  6/::r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`   a  s     - - -r    c                	(   R pV'       g   V P                   P                  V P                  4      V n        \	        V P                  4      ^ 8:  d   R# \	        V P                  4      V P                  8w  d   \        R4      hV P                  4       pK  R# )Fz2Failed to read a meta data page from the SAS file.N)rq   r   r   rT   r   r   _process_page_meta)rH   dones   & r   r|   SAS7BDATReader._parse_metadataa  sw     $ 1 1 6 6t7H7H ID4$$%*4$$%):):: !UVV**,D r    c                   V ^8  d   QhRR/# )r   r   rX   r   )r   s   "r   r   r`   k  s     
 
D 
r    c                	   V P                  4        . \        P                  O\        P                  N\        P                  NpV P
                  V9   d   V P                  4        V P
                  \        P                  8H  pV P
                  \        P                  8H  p\        T;'       g    T;'       g    V P                  . 8g  4      # rG   )
_read_page_headerr   page_meta_typespage_amd_typepage_mix_type_current_page_type_process_page_metadatapage_data_typerX   ri   )rH   ptis_data_pageis_mix_pages   &   r   r   !SAS7BDATReader._process_page_metak  s     Ou$$Oe&9&9O5;N;NO""b('')..%2F2FF--1D1DD @ @@ @99R?
 	
r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`   x  s     
 
4 
r    c                	   V P                   p\        P                  V,           pV P                  V\        P                  4      \        P
                  ,          V n        \        P                  V,           pV P                  V\        P                  4      V n	        \        P                  V,           pV P                  V\        P                  4      V n        R # rG   )r   r   page_type_offsetr   page_type_lengthpage_type_mask2r   block_count_offsetblock_count_length_current_page_block_countsubheader_count_offsetsubheader_count_length_current_page_subheaders_count)rH   
bit_offsettxs   &  r   r    SAS7BDATReader._read_page_headerx  s    **
##j0OOB 6 67%:O:OO 	 %%
2)-U=U=U)V&))J6.2oo,,/
+r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`     s     )H )H )Hr    c                	   V P                   p\        V P                  4       EF  p\        P                  V,           pW0P
                  V,          ,           pV P                  W@P                  4      pW@P                  ,          pV P                  W@P                  4      pW@P                  ,          pV P                  V^4      pV^,          pV P                  V^4      pV^ 8X  g   V\        P                  8X  d   K  V P                  WPP                  4      p	\        V	4      p
V P                  V
,          pVf   V\        P                  ^ 39   pV\        P                  8H  pV P                  '       d0   V'       d(   V'       d    V P                  P!                  WV34       EK  V P#                  4        \%        RV	 24      hV! WV4       EK  	  R# )r   NzUnknown subheader signature )r   ranger  r   subheader_pointers_offsetr   r   rS   truncated_subheader_idr   r   rz   compressed_subheader_idcompressed_subheader_typer_   ri   appendr~   r   )rH   r	  ir   total_offsetsubheader_offsetsubheader_lengthsubheader_compressionsubheader_typesubheader_signaturesubheader_indexsubheader_processorf1f2s   &             r   r   %SAS7BDATReader._process_page_metadata  s   **
t::;A44zAF!$B$BQ$FFL#|=M=MN,,,L#|=M=MN,,,L$(OOL!$D!AL!__\1=N !A%(E,H,HH"&"2"23CEUEU"V12EFO"&"<"<_"M"**u/L/La.PP#u'F'FF###r>>EE)< JJL$67J6KL  $$4GM <r    c               $    V ^8  d   QhRRRRRR/# r   r   r;   rB   r   rD   r   )r   s   "r   r   r`     s!     3 3 3c 3d 3r    c                	   V P                   pTpTpV P                  '       d   VR ,          pVR,          pMVR,          pVR,          pV P                  V\        P                  V,          ,           V4      V n        V P                  V\        P                  V,          ,           V4      V n        V P                  V\        P                  V,          ,           V4      V n	        V P                  V\        P                  V,          ,           V4      V n        \        P                  V,          pV P                  W,           V4      V n        V P                  V^4      V n        V P                  V^4      V n        R# )i  i  ib  iz  N)rS   r   r   r   row_length_offset_multiplier
row_lengthrow_count_offset_multiplier	row_countcol_count_p1_multipliercol_count_p1col_count_p2_multipliercol_count_p2'row_count_on_mix_page_offset_multiplier_mix_page_row_count_lcs_lcp)rH   r   rB   int_len
lcs_offset
lcp_offsetmxs   &&&    r   rr   )SAS7BDATReader._process_rowsize_subheader  s1   ""

888#J#J#J#J//U77'AA
 U66@@
 !OOU22W<<g
 !OOU22W<<g
 ::WD#'??6;#H OOJ2	OOJ2	r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`     s!      C   r    c           	     	   V P                   pW,          pV P                  W4      V n        V P                  V P                  ,           V P                  8w  d6   \        R V P                   RV P                   RV P                   R24       R# R# )z Warning: column count mismatch (z + z != z)
N)rS   r   column_countr(  r*  print)rH   r   rB   r/  s   &&& r   rs   ,SAS7BDATReader._process_columnsize_subheader  s    "" OOF<t000D4E4EE243D3D2ES$$%T$*;*;)<CA Fr    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`     s!       S T r    c                	    R # rG   r   r   s   &&&r   rt   (SAS7BDATReader._process_subheader_counts  s    r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`     s&     +Q +QC +Q +Q +Qr    c                	   WP                   ,          pV P                  V\        P                  4      pV P	                  W4      pV^ V P                  R4      pV P                  P                  V4       \        V P                  4      ^8X  Ed   Rp\        P                   F  pWu9   g   K  TpK  	  W`n
        WP                   ,          pV^,           pV P                  '       d
   V^,          pV P	                  WP                  4      pVP                  R4      pVR8X  d\   ^ V n        V^ ,           pV P                  '       d
   V^,          pV P	                  WP                  4      pV^ V P                   V n        MV\        P                  8X  dU   V^(,           pV P                  '       d
   V^,          pV P	                  WP                  4      pV^ V P                   V n        MkV P                  ^ 8  d[   ^ V n        V^,           pV P                  '       d
   V^,          pV P	                  WP                  4      pV^ V P                   V n        \!        V R4      '       d#   V P#                  V P                  4      V n        R# R# R# )r   s     r        creator_procN)rS   r   r   text_block_size_lengthr   rstripre   r  r   compression_literalsr_   r   r.  r-  r?  rle_compressionhasattr_convert_header_text)	rH   r   rB   text_block_sizer   	cname_rawcompression_literalcloffset1s	   &&&      r   ru   ,SAS7BDATReader._process_columntext_subheader  s   """//&%2N2NOv7/*11(;	$$Y/t$$%*"%00?*,' 1  3&&&FrkGxxx1""7II6C"%**W"5"c)	 2+888qLG&&w		:$'DII$6!$(=(== 2+888qLG&&w		:$'DII$6!Q	 2+888qLG&&w		:$'DII$6!t^,,$($=$=d>O>O$P! -E +r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`   	  s&     G GC G G Gr    c                	<   V P                   pW,          pV^V,          ,
          ^,
          ^,          p\        V4       EFY  pV\        P                  V^,           ,          ,           \        P                  ,           pV\        P                  V^,           ,          ,           \        P
                  ,           pV\        P                  V^,           ,          ,           \        P                  ,           pV P                  V\        P                  4      p	V P                  V\        P                  4      p
V P                  V\        P                  4      pV P                  V	,          pWW,            pV P                  P                  V P                  V4      4       EK\  	  R# )r   N)rS   r  r   column_name_pointer_length!column_name_text_subheader_offsetcolumn_name_offset_offsetcolumn_name_length_offsetr   !column_name_text_subheader_lengthcolumn_name_offset_lengthcolumn_name_length_lengthre   rf   r  rE  )rH   r   rB   r/  column_name_pointers_countr  text_subheadercol_name_offsetcol_name_lengthidx
col_offsetcol_lenname_rawcnames   &&&           r   rv   ,SAS7BDATReader._process_columnname_subheader	  sS   ""&,q7{&:R&?A%E"12A22a!e<=99:  22a!e<=112  22a!e<=112  // G GC !@!@J ooou7V7VWG,,S1H**>?E$$T%>%>u%EF7 3r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`   *  s&     @ @# @s @t @r    c                	,   V P                   pV^V,          ,
          ^,
          V^,           ,          p\        V4       EFR  pW,           \        P                  ,           WS^,           ,          ,           pV^V,          ,           \        P                  ,           WS^,           ,          ,           pV^V,          ,           \        P
                  ,           WS^,           ,          ,           pV P                  Wc4      p	V P                  P                  V	4       V P                  V\        P                  4      p	V P                  P                  V	4       V P                  V\        P                  4      p	V P                  P                  V	^8X  d   RMR4       EKU  	  R# )r      d   sN)rS   r  r   column_data_offset_offsetcolumn_data_length_offsetcolumn_type_offsetr   rk   r  column_data_length_lengthrj   column_type_lengthrl   )
rH   r   rB   r/  column_attributes_vectors_countr  col_data_offsetcol_data_len	col_typesr   s
   &&&       r   rw   2SAS7BDATReader._process_columnattributes_subheader*  s>   ""+1AK+?"+D'TU+*V'67A 5#B#BBQTU+EVV  g+112 {#$  W$u'?'??!QR{BSS  9A%%,,Q/e.M.MNA%%,,Q/	5+C+CDA%%a1fd$?+ 8r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`   D  s!      C   r    c                	    R # rG   r   r   s   &&&r   ry   ,SAS7BDATReader._process_columnlist_subheaderD  s    r    c               $    V ^8  d   QhRRRRRR/# r!  r   )r   s   "r   r   r`   H  s!     5! 5! 5!S 5!T 5!r    c           	     	   V P                   pV\        P                  ,           ^V,          ,           pV\        P                  ,           ^V,          ,           pV\        P                  ,           ^V,          ,           pV\        P
                  ,           ^V,          ,           pV\        P                  ,           ^V,          ,           pV\        P                  ,           ^V,          ,           p	V P                  V\        P                  4      p
\        V
\        V P                  4      ^,
          4      pV P                  V\        P                  4      pV P                  V\        P                  4      pV P                  V\        P                  4      p\        V\        V P                  4      ^,
          4      pV P                  V\        P                   4      pV P                  V	\        P"                  4      pV P                  V,          pV P%                  VWV,            4      pV P                  V,          pV P%                  VWV,            4      p\        V P&                  4      p\)        VV P*                  V,          VVV P,                  V,          V P.                  V,          4      pV P0                  P3                  V4       V P&                  P3                  V4       R# )   N)rS   r   )column_format_text_subheader_index_offsetcolumn_format_offset_offsetcolumn_format_length_offset(column_label_text_subheader_index_offsetcolumn_label_offset_offsetcolumn_label_length_offsetr   )column_format_text_subheader_index_lengthminr   re   column_format_offset_lengthcolumn_format_length_length(column_label_text_subheader_index_lengthcolumn_label_offset_lengthcolumn_label_length_lengthrE  rh   r:   rf   rl   rj   rg   r  )rH   r   rB   r/  text_subheader_formatcol_format_offsetcol_format_lentext_subheader_labelcol_label_offsetcol_label_lenr   
format_idxformat_start
format_len	label_idxlabel_start	label_lenlabel_namescolumn_labelformat_namescolumn_formatcurrent_column_numbercols   &&&                    r   rx   (SAS7BDATReader._process_format_subheaderH  sT   ""UDDDq7{R 	 #U%F%FFWT%"C"CCa'kQUCCCa'kQ 	 "E$D$DDq7{R!A!AAAKOOO!5#R#R
 C 5 56:;
u@@
 __^U5V5VW
OO %"P"P
	 	3t'<'<#=#AB	ooe>>
 OOM53S3ST	++I600I&=>
 ,,Z811z(AB
 !$DLL 1!3445%%&;<
 	""=1C r    c                    V ^8  d   QhRRRR/# )r   r   r[   r   r   r   )r   s   "r   r   r`     s      * 	 r    c                	B   Vf   V P                   e   V P                   pMVf   V P                  p\        V P                  4      ^ 8X  d   V P	                  4        \        R4      hV^ 8  d&   V P                  V P                  8  d   \        4       # \        WP                  V P                  ,
          4      pV P                  P                  R4      pV P                  P                  R4      p\        P                  ! W13\        R7      V n        \        P                  ! V^V,          3\        P                  R7      V n        ^ V n        \%        V 4      pVP'                  V4       V P)                  4       pV P*                  e   VP-                  V P*                  4      pV# )NzNo columns to parse from filera  rb  r(   )rZ   r&  r   rl   r~   r   rm   r   rz  countr2   r   object_string_chunkzerosuint8_byte_chunk_current_row_in_chunk_indexr   r   _chunk_to_dataframer&   	set_index)rH   r   ndnsprslts   &&    r   r   SAS7BDATReader.read  s3   M :NNE]NNEt!!"a'JJL !@AA1988DNNJ;E>>D,K,KKL%%d+%%d+XXrk@88RUO288D+,(4L	u'')::!>>$**-Dr    c                	   . V n         V P                  P                  V P                  4      V n        \        V P                  4      ^ 8:  d   R# \        V P                  4      V P                  8w  dD   V P                  4        R\        V P                  4      R RV P                  R R2p\        V4      hV P                  4        V P                  \        P                  9   d   V P                  4        V P                  . \        P                  O\        P                  N\        P                  N9  d   V P                  4       # R# )r   Tz-failed to read complete page from file (read dz of z bytes)F)ri   rq   r   r   rT   r   r~   r   r   r   r   r   r   r   r   _read_next_page)rH   msgs   & r   r  SAS7BDATReader._read_next_page  s   572 --2243D3DEt  !Q&""#t'8'88JJL?t(()!,D1B1B10EWN  S/! ""e&;&;;'')"" +
""+
  +
 +
 

 ''))r    c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r`     s     ! !Y !r    c                	   V P                   pV P                  p\        W!,
          V4      p/ p^ ^ re\        4       p\        V P                  4       EF  pV P
                  V,          p	V P                  V,          R8X  d   V P                  VR3,          P                  V P                  R,           R7      p
\        P                  ! V
\        P                  VRR7      WI&   V P                  '       dv   V P                  V,          \         P"                  9   d   \%        WI,          R4      WI&   M:V P                  V,          \         P&                  9   d   \%        WI,          R4      WI&   V^,          pEK"  V P                  V,          R8X  d   \        P                  ! V P(                  VR3,          VRR	7      WI&   V P*                  '       dS   V P,                  eE   V P/                  WI,          P0                  4      WI&   V'       d   WI,          P3                  R
4      WI&   V^,          pEK  V P5                  4        \7        RV P                  V,          : 24      h	  \9        W@P
                  VRR7      pV# )r   ra  :NNNr  r(   Fr*   r"   rb  r%   r   zunknown column type )rh   r&   r'   )r  rm   r  r   r6  rf   rl   r  r/   r   r0   r1   r2   float64rW   rg   r   sas_date_formatsr8   sas_datetime_formatsr  r]   r\   _decode_stringr   astyper~   r   r   )rH   nmixr  jsjbinfer_stringjr>   col_arrdfs   &           r   r  "SAS7BDATReader._chunk_to_dataframe  s   ,,++15!_AB)+t(()A$$Q'D!!!$,**2q5166T__s=R6SYYwbjjQVW
%%%**1-1G1GG%7
C%H
,,Q/53M3MM%7
C%H
a##A&$.YYt'9'9"a%'@QVW
$$$$--*C!%!4!4TZ^^!DDJ#%)Z%6%6u%=
a

 #78J8J18M7P!QRR- *0 t%6%6buM	r    c                	`    TP                  V P                  ;'       g    V P                  4      # rG   )decoder\   rd   rH   bs   &&r   r  SAS7BDATReader._decode_string  s#    xx>>)>)>??r    c                    V ^8  d   QhRRRR/# )r   r  r@   r   r=   r   )r   s   "r   r   r`     s      e  r    c                	L    V P                   '       d   V P                  V4      # V# rG   )r^   r  r  s   &&r   rE  #SAS7BDATReader._convert_header_text  s$    ###&&q))Hr    )1r   r  rT   rj   rk   rl   r  ri   r  r   r  rm   rn   rS   r.  r-  r,  r   r   rq   r  r   rz   rY   r   rZ   r(  r*  r6  rg   rf   re   rh   r_   rW   r^   r]   r?  r   r   rd   r\   ro   r   r&   r   r   r&  r$  )NTTNNTTr   rG   )"rK   rL   rM   rN   __doc__rO   rI   r   r   r   r~   r{   r   r   r   r   r|   r   r   r   rr   rs   rt   ru   rv   rw   ry   rx   r   r  r  r  rE  rP   r   r    r   rR   rR   x   s    < =~EEDB
H42(;-

)HV3<+QZGB@45!n>4!F@ r    rR   ).r  
__future__r   r   r   typingr   numpyr2   pandas._configr   pandas._libs.byteswapr   r   r   r	   r
   pandas._libs.sasr   r   pandas._libs.tslibs.conversionr   pandas.errorsr   pandasr0   r   r   pandas.io.commonr   pandas.io.sas.sas_constantsiosassas_constantsr   pandas.io.sas.sasreaderr   pandas._typingr   r   r   r,   r+   r8   r:   rR   r   r    r   <module>r     s     #  
    -  E ( 
 ( + + -  &%U< 6j	Y j	r    