3
���h� � @ s d Z ddlmZmZ ddlmZmZmZmZ ddl m
Z
mZ ddlm
Z
erXddlmZ G dd� ded �Zede
ee ee ee eeed�dd
��Zede
ee ee ee deedef d�dd
��Zde
ee ee ee ee eedef d�dd
�ZdS )z#
Read SAS sas7bdat or xport files.
� )�ABCMeta�abstractmethod)�
TYPE_CHECKING�Optional�Union�overload)�FilePathOrBuffer�Label)�stringify_path)� DataFramec @ s* e Zd ZdZeddd��Zedd� �ZdS )�
ReaderBasez>
Protocol for XportReader and SAS7BDATReader classes.
Nc C s d S )N� )�selfZnrowsr
r
�9/tmp/pip-build-5_djhm0z/pandas/pandas/io/sas/sasreader.py�read s zReaderBase.readc C s d S )Nr
)r r
r
r �close s zReaderBase.close)N)�__name__�
__module__�__qualname__�__doc__r r r r
r
r
r r s r )� metaclass.)�filepath_or_buffer�format�index�encoding� chunksize�iterator�returnc C s d S )Nr
)r r r r r r r
r
r �read_sas s r Nr c C s d S )Nr
)r r r r r r r
r
r r * s Fc C s� |dkrVd}t | �} t| t�s&t|��| j� }|jd�r>d}n|jd�rNd}ntd��|j� dkr�dd lm} || |||d
�} n2|j� dkr�ddlm }
|
| |||d
�} ntd��|s�|r�| S | j
� }| j� |S )
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 handler (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.
iterator : bool, defaults to False
If True, returns an iterator for reading the file incrementally.
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)r r r )�SAS7BDATReaderzunknown SAS format)r
�
isinstance�str�
ValueError�lower�endswithZpandas.io.sas.sas_xportr Zpandas.io.sas.sas7bdatr r r )r r r r r r Zbuffer_error_msg�fnamer �readerr �datar
r
r r 6 s2 *
).....).....)NNNNF)r �abcr r Ztypingr r r r Zpandas._typingr r Zpandas.io.commonr
Zpandasr r r" |