B @`  @sdZddlmZmZddlmZmZmZmZddl m Z m Z ddl m Z erXddlmZGddded Zede eeee eeeeed d d Zede eeee eedeedefd dd Zde eeee eeeeeedefd dd ZdS)z# Read SAS sas7bdat or xport files. )ABCMetaabstractmethod) TYPE_CHECKINGOptionalUnionoverload)FilePathOrBufferLabel)stringify_path) DataFramec@s:eZdZdZed ddZeddZddZd d ZdS) ReaderBasez> Protocol for XportReader and SAS7BDATReader classes. NcCsdS)N)selfZnrowsr r ;/tmp/pip-unpacked-wheel-q9tj5l6a/pandas/io/sas/sasreader.pyreadszReaderBase.readcCsdS)Nr )rr r rcloseszReaderBase.closecCs|S)Nr )rr r r __enter__szReaderBase.__enter__cCs |dS)N)r)rexc_type exc_value tracebackr r r__exit__ szReaderBase.__exit__)N) __name__ __module__ __qualname____doc__rrrrrr r r rr s   r ) metaclass.)filepath_or_bufferformatindexencoding chunksizeiteratorreturncCsdS)Nr )rrrrr r!r r rread_sas$s r#Nr cCsdS)Nr )rrrrr r!r r rr#0s Fc Cs|dkrVd}t|}t|ts&t||}|dr>d}n|drNd}ntd|dkrdd lm}|||||d } n2|dkrdd lm } | ||||d } ntd |s|r| S| | SQRXdS) a) Read SAS files stored as either XPORT or SAS7BDAT format files. Parameters ---------- filepath_or_buffer : str, path object or file-like object Any valid string path is acceptable. The string could be a URL. Valid URL schemes include http, ftp, s3, and file. For file URLs, a host is expected. A local file could be: ``file://localhost/path/to/table.sas``. If you want to pass in a path object, pandas accepts any ``os.PathLike``. By file-like object, we refer to objects with a ``read()`` method, such as a file handle (e.g. via builtin ``open`` function) or ``StringIO``. format : str {'xport', 'sas7bdat'} or None If None, file format is inferred from file extension. If 'xport' or 'sas7bdat', uses the corresponding format. index : identifier of index column, defaults to None Identifier of column that should be used as index of the DataFrame. encoding : str, default is None Encoding for text data. If None, text data are stored as raw bytes. chunksize : int Read file `chunksize` lines at a time, returns iterator. .. versionchanged:: 1.2 ``TextFileReader`` is a context manager. iterator : bool, defaults to False If True, returns an iterator for reading the file incrementally. .. versionchanged:: 1.2 ``TextFileReader`` is a context manager. Returns ------- DataFrame if iterator=False and chunksize=None, else SAS7BDATReader or XportReader NzVIf this is a buffer object rather than a string name, you must specify a format stringz.xptZxportz .sas7bdatZsas7bdatz"unable to infer format of SAS filer) XportReader)rrr )SAS7BDATReaderzunknown SAS format) r isinstancestr ValueErrorlowerendswithZpandas.io.sas.sas_xportr$Zpandas.io.sas.sas7bdatr%r) rrrrr r!Zbuffer_error_msgfnamer$readerr%r r rr#<s<2         ).....).....)NNNNF)rabcrrtypingrrrrZpandas._typingrr Zpandas.io.commonr Zpandasr r r'intboolr#r r r rs6