././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710418355.0
pyreadstat-1.2.7/ 0000755 0234772 0000024 00000000000 14574564663 013627 5 ustar 00fajardoo staffs ././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710350830.0
pyreadstat-1.2.7/LICENSE 0000644 0234772 0000024 00000031147 14574360756 014637 0 ustar 00fajardoo staffs The pyreadstat package as a whole is distributed under Apache License
Vesrion 2 (see below).
The pyreadstat package also includes the following open source software
components:
- ReadStat; https://github.com/WizardMac/ReadStat, distributed under MIT license
ReadStat license:
---------------------------------------------------------------------------
Copyright (c) 2013-2016 Evan Miller (except where otherwise noted)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
pyreadstat liscence:
---------------------------------------------------------------------------
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. ././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710350830.0
pyreadstat-1.2.7/MANIFEST.in 0000644 0234772 0000024 00000000252 14574360756 015361 0 ustar 00fajardoo staffs include *.h
recursive-include src *.h
recursive-include pyreadstat *.h
include *.pyx
recursive-include pyreadstat *.pyx
include *.pxd
recursive-include pyreadstat *.pxd
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710418355.0
pyreadstat-1.2.7/PKG-INFO 0000644 0234772 0000024 00000001773 14574564663 014734 0 ustar 00fajardoo staffs Metadata-Version: 2.1
Name: pyreadstat
Version: 1.2.7
Summary: Reads and Writes SAS, SPSS and Stata files into/from pandas data frames.
Home-page: https://github.com/Roche/pyreadstat
Download-URL: https://github.com/Roche/pyreadstat/dist
Author: Otto Fajardo
Author-email: pleasecontactviagithub@notvalid.com
License: Apache License Version 2.0
Classifier: Programming Language :: Python
Classifier: Programming Language :: Cython
Classifier: Programming Language :: C
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering
Classifier: Environment :: Console
Description-Content-Type: text/markdown
License-File: LICENSE
A Python package to read and write SAS
(sas7bdat, sas7bcat, xport/xpt), SPSS (sav, zsav, por) and Stata (dta) files into/from pandas data frames. It is a wrapper
around the C library readstat.
Please visit out project home page for more information:
https://github.com/Roche/pyreadstat
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710411123.0
pyreadstat-1.2.7/README.md 0000644 0234772 0000024 00000121634 14574546563 015114 0 ustar 00fajardoo staffs # pyreadstat
A python package to read and write sas (sas7bdat, sas7bcat, xport), spps (sav, zsav, por) and stata (dta) data files
into/from pandas dataframes.
This module is a wrapper around the excellent [Readstat](https://github.com/WizardMac/ReadStat) C library by
[Evan Miller](https://www.evanmiller.org/). Readstat is the library used in the back of the R library
[Haven](https://github.com/tidyverse/haven),
meaning pyreadstat is a python equivalent to R Haven.
Detailed documentation on all available methods is in the
[Module documentation](https://ofajardo.github.io/pyreadstat_documentation/_build/html/index.html)
If you would like to read R RData and Rds files into python in an easy way,
take a look to [pyreadr](https://github.com/ofajardo/pyreadr), a wrapper
around the C library [librdata](https://github.com/WizardMac/librdata)
**DISCLAIMER**
**Pyreadstat is not a validated package. The results may have inaccuracies deriving from the fact most of the data formats
are not open. Do not use it for critical tasks such as reporting to the authorities. Pyreadstat is not meant to replace
the original applications in this regard.**
## Table of Contents
* [Motivation](#motivation)
* [Dependencies](#dependencies)
* [Installation](#installation)
+ [Using pip](#using-pip)
+ [Using conda](#using-conda)
+ [From the latest sources](#from-the-latest-sources)
+ [Compiling on Windows and Mac](#compiling-on-windows-and-mac)
* [Usage](#usage)
+ [Basic Usage](#basic-usage)
- [Reading Files](#reading-files)
- [Writing Files](#writing-files)
+ [More reading options](#more-reading-options)
- [Reading only the headers](#reading-only-the-headers)
- [Reading selected columns](#reading-selected-columns)
- [Reading files in parallel processes](#reading-files-in-parallel-processes)
- [Reading rows in chunks](#reading-rows-in-chunks)
- [Reading value labels](#reading-value-labels)
- [Missing Values](#missing-values)
+ [SPSS](#spss)
+ [SAS and STATA](#sas-and-stata)
- [Reading datetime and date columns](#reading-datetime-and-date-columns)
- [Other options](#other-options)
+ [More writing options](#more-writing-options)
- [File specific options](#file-specific-options)
- [Writing value labels](#writing-value-labels)
- [Writing user defined missing values](#writing-user-defined-missing-values)
- [Setting variable formats](#setting-variable-formats)
- [Variable type conversion](#variable-type-conversion)
* [Roadmap](#roadmap)
* [CD/CI and wheels](#cdci_and_wheels)
* [Known limitations](#known-limitations)
* [Python 2.7 support.](#python-27-support)
* [Change log](#change-log)
* [License](#license)
* [Contributing](#contributing)
* [People](#people)
## Motivation
The original motivation came from reading sas7bdat files in python. That is already possible using either the (pure
python) package [sas7bdat](https://pypi.org/project/sas7bdat/) or the (cythonized) method
[read_sas](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sas.html)
from pandas. However, those methods are slow (important if you want to read several large files), do not give the
possibility to recover value labels (stored in
the file itself in the case of spss or stata, or in catalog files in sas), convert both dates and datetime variables to datetime,
and you have to specify the encoding otherwise in python 3 instead of strings you get bytes.
This package corrects those problems.
**1. Good Performance:** Here a comparison of reading a 190 Mb sas7dat file having 202 K rows
by 70 columns with numeric, character and date-like columns using different methods. As you can see
pyreadstat is the fastest for python and matches the speeds of R Haven.
| Method | time |
| :----- | :-----------------: |
| Python 3 - sas7bdat | 6 min |
| Python 3- pandas | 42 s |
| Python 3- pyreadstat | 7 s |
| R - Haven | 7 s |
**2. Reading Value Labels** Neither sas7bdat and pandas.read_sas gives the possibility to read sas7bcat catalog files.
Pyreadstat can do that and also extract value labels from SPSS and STATA files.
**3. Reading dates and datetimes** sas7bdat and pandas.read_sas convert both date and datetime variables into datetime.
That means if you have a date such a '01-01-2018' it will be transformed to '01-01-2018 00:00:00' (it always inserts a
time), making it impossible
to know looking only at the data if the variable was originally a datetime (if it had a time) or not.
Pyreadstat transforms dates to dates and datetimes to datetimes, so that you have a better correspondence with the original
data. However, it is possible to keep the original pandas behavior and get always datetimes.
**4. Encoding** On python 3, pandas.read_sas reads all strings as bytes. If you want strings you have to specify the encoding manually.
pyreadstat read strings as str. Thas is possible because readstat extracts the original encoding and translates
to utf-8, so that you don't have to care about that anymore. However it is still possible to manually set the encoding.
In addition pyreadstat exposes the variable labels in an easy way (see later). As pandas dataframes cannot handle value
labels, you as user will have to take the decision whether to use those values or not. Pandas read_sas reads those labels,
but in order to recover them you have to work a bit harder.
Compared to R Haven, pyreadstat offers the possibility to read only the headers: Sometimes you want to take a
look to many (sas) files looking for the datasets that contain
some specific columns, and you want to do it quick. This package offers the possibility to read only the metadata making
it possible a very fast metadata scraping (Pandas read_sas can also do it if you pass the value iterator=True).
In addition it offers the capability to read sas7bcat files separately from the sas7bdat files.
More recently there has been a lot of interest from users on using pyreadstat to read SPSS sav files. After improvements
in pyreadstat 1.0.3 below some benchmarks are presented. The small file is 200K rows x 100 columns (152 Mb)
containing only numeric columns and
the big file is 294K rows x 666 columns (1.5 Gb). There are two versions of the big file: one containing numeric
columns only and one with a mix of numeric and character. Pyreadstat gives two ways to read files: reading in
a single process using read_sav and reading it in multiple processes using read_file_multiprocessing (see later
in the readme for more information).
| Method | small | big numeric | big mixed |
| :----- | :----: | :---------: | :-------: |
| pyreadstat read_sav | 2.3 s | 28 s | 40 s |
| pyreadstat read_file_multiprocessing | 0.8 s | 10 s | 21 s |
As you see performance degrades in pyreadstat when reading a table with both numeric and character types. This
is because numpy and pandas do not have a native type for strings but they use a generic object type which
brings a big hit in performance. The situation can be improved tough by reading files in multiple processes.
## Dependencies
The module depends on pandas, which you normally have installed if you got Anaconda (highly recommended.)
In order to compile from source you will need a C compiler (see installation).
Only if you want to do changes to the cython source code, you will need cython (normally not necessary).
If you want to compile for python 2.7 or windows, you will need cython (see python 2.7 support
later).
Readstat depends on the C library iconv to handle character encodings. On mac, the library is found on the system, but
users have sometimes reported problems. In those cases it may help to install libiconv with conda (see later, compilation
on mac). Readstat also depends on zlib; it was reported not to be installed by default on Lubuntu. If you face this problem installing the
library solves it.
## Installation
### Using pip
Probably the easiest way: from your conda, virtualenv or just base installation do:
```
pip install pyreadstat
```
If you are running on a machine without admin rights, and you want to install against your base installation you can do:
```
pip install pyreadstat --user
```
At the moment we offer pre-compiled wheels for windows, mac and
linux. Look at the [pypi webpage](https://pypi.org/project/pyreadstat/) to find out which python versions
are currently supported. If there is no pre-compiled
wheel available, pip will attempt to compile the source code.
### Using conda
The package is also available in [conda-forge](https://anaconda.org/conda-forge/pyreadstat) for windows, mac and linux
64 bit. Visit the Conda forge webpage to find out which python versions are currently supported.
In order to install:
```
conda install -c conda-forge pyreadstat
```
### From the latest sources
Download or clone the repo, open a command window and type:
```
python3 setup.py install
```
If you don't have admin privileges to the machine (for example on Bee) do:
```
python3 setup.py install --user
```
You can also install from the github repo directly (without cloning). Use the flag --user if necessary.
```
pip install git+https://github.com/Roche/pyreadstat.git
```
You need a working C compiler and cython >=3.0.0.
### Compiling on Windows and Mac
Compiling on linux is very easy, but on windows you need some extra preparation.
Some instructions are found [here](https://github.com/Roche/pyreadstat/blob/master/windows_compilation.md)
Compiling on mac is usually easy. Readstat depends however on the C library iconv to handle character encodings; while
on linux is part of gclib, on mac it is a separated shared library found on the system (h file is in /usr/include and shared
library on /usr/lib). While compiling against this usually works fine, some users have reported problems (for example
missing symbol _iconv, or libiconv version too old). In those cases it helped to install libiconv with conda:
```
conda install libiconv
```
and then recompile again (be sure to delete any cache, if using pip do pip --no-cache-dir, if using setup.py remove
the folder build, otherwise you may be installing the old compilation again).
## Usage
### Basic Usage
#### Reading files
Pass the path to a file to any of the functions provided by pyreadstat. It will return a pandas data frame and a metadata
object.
The dataframe uses the column names. The metadata object contains the column names, column labels, number_rows,
number_columns, file label
(if any), file encoding (if applicable), notes and objects about value labels (if present). Be aware that file_label and
file_encoding may be None, not all columns may have labels, notes may not be present and there may be no value labels.
For example, in order to read a sas7bdat file:
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat')
# done! let's see what we got
print(df.head())
print(meta.column_names)
print(meta.column_labels)
print(meta.column_names_to_labels)
print(meta.number_rows)
print(meta.number_columns)
print(meta.file_label)
print(meta.file_encoding)
# there are other metadata pieces extracted. See the documentation for more details.
```
You can replace the column names by column labels very easily (but check first that all columns have distinct labels!):
```python
# replace column names with column labels
df.columns = meta.column_labels
# to go back to column names
df.columns = meta.column_names
```
#### Writing files
Pyreadstat can write STATA (dta), SPSS (sav and zsav, por currently nor supported) and SAS (Xport, sas7bdat and sas7bcat
currently not supported) files from pandas data frames.
write functions take as first argument a pandas data frame (other data structures are not supported), as a second argument
the path to the destination file. Optionally you can also pass a file label and a list with column labels.
```python
import pandas as pd
import pyreadstat
df = pd.DataFrame([[1,2.0,"a"],[3,4.0,"b"]], columns=["v1", "v2", "v3"])
# column_labels can also be a dictionary with variable name as key and label as value
column_labels = ["Variable 1", "Variable 2", "Variable 3"]
pyreadstat.write_sav(df, "path/to/destination.sav", file_label="test", column_labels=column_labels)
```
Some special arguments are available depending on the function. write_sav can take also notes as string, wheter to
compress or not as zsav or apply row compression, variable display widths and variable measures. write_dta can take a stata version.
write_xport a name for the dataset. User defined missing values and value labels are also supported. See the
[Module documentation](https://ofajardo.github.io/pyreadstat_documentation/_build/html/index.html) for more details.
Here there is a relation of all functions available.
You can also check the [Module documentation](https://ofajardo.github.io/pyreadstat_documentation/_build/html/index.html).
| Function in this package | Purpose |
| ------------------- | ----------- |
| read_sas7dat | read SAS sas7bdat files |
| read_xport | read SAS Xport (XPT) files |
| read_sas7bcat | read SAS catalog files |
| read_dta | read STATA dta files |
| read_sav | read SPSS sav and zsav files |
| read_por | read SPSS por files |
| set_catalog_to_sas | enrich sas dataframe with catalog formats |
| set_value_labels | replace values by their labels |
| read_file_in_chunks | generator to read files in chunks |
| write_sav | write SPSS sav and zsav files |
| write_por | write SPSS Portable (POR) files |
| write_dta | write STATA dta files |
| write_xport | write SAS Xport (XPT) files version 8 and 5 |
### More reading options
#### Reading only the headers
All functions accept a keyword argument "metadataonly" which by default is False. If True, then no data will be read,
but still both the metadata and the dataframe will be returned. The metadata will contain all fields as usual, but
the dataframe will be emtpy, although with the correct columns names. Sometimes number_rows may be None if it was not
possible to determine the number of rows without reading the data.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', metadataonly=True)
```
#### Reading selected columns
All functions accept a keyword "usecols" which should be a list of column names. Only the columns which names match those
in the list will be imported (case sensitive). This decreases memory consumption and speeds up the process. Usecols must
always be a list, even if there is only one member.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', usecols=["variable1", "variable2"])
```
#### Reading files in parallel processes
A challenge when reading large files is the time consumed in the operation. In order to alleviate this
pyreadstat provides a function "read\_file\_multiprocessing" to read a file in parallel processes using
the python multiprocessing library. As it reads the whole file in one go you need to have enough RAM for the operation. If
that is not the case look at Reading rows in chunks (next section)
Speed ups in the process will depend on a number of factors such as number of processes available, RAM,
content of the file etc.
```python
import pyreadstat
fpath = "path/to/file.sav"
df, meta = pyreadstat.read_file_multiprocessing(pyreadstat.read_sav, fpath, num_processes=4)
```
num_processes is the number of workers and it defaults to 4 (or the number of cores if less than 4). You can play with it to see where you
get the best performance. You can also get the number of all available workers like this:
```
import multiprocessing
num_processes = multiprocessing.cpu_count()
```
**Notes for Xport, Por and some defective SAV files not having the number of rows in the metadata**
1. In all Xport, Por and some defective SAV files, the number of rows cannot be determined from the metadata. In such cases,
you can use the parameter num\_rows to be equal or larger to the number of rows in the dataset. This number can be obtained
reading the file without multiprocessing, reading in another application, etc.
**Notes for windows**
1. For this to work you must include a __name__ == "__main__" section in your script. See [this issue](#85)
for more details.
```
import pyreadstat
if __name__ == "__main__":
df, meta = pyreadstat.read_file_multiprocessing(pyreadstat.read_sav, 'sample.sav')
```
2. If you include too many workers or you run out of RAM you main get a message about not enough page file
size. See [this issue](#87)
#### Reading rows in chunks
Reading large files with hundred of thouseds of rows can be challenging due to memory restrictions. In such cases, it may be helpful
to read the files in chunks.
Every reading function has two arguments row_limit and row_offset that help achieving this. row_offset makes to skip a number of rows before
start reading. row_limit makes to stop after a number of rows are read. Combining both you can read the file in chunks inside or outside a loop.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat("/path/to/file.sas7bdat", row_offset=1, row_limit=1)
# df will contain only the second row of the file
```
Pyreadstat also has a convienence function read_file_in_chunks, which returns a generator that helps you to iterate through the file in
chunks. This function takes as first argument a pyreadstat reading function and a second argument a path to a file. Optionally you can
change the size of the chunks with chunksize (default to 100000), and also add an offset and limit. You can use any keyword argument
you wish to pass to the pyreadstat reading function.
```python
import pyreadstat
fpath = "path/to/file.sas7bdat"
reader = pyreadstat.read_file_in_chunks(pyreadstat.read_sas7bdat, fpath, chunksize= 10, offset=2, limit=100, disable_datetime_conversion=True)
for df, meta in reader:
print(df) # df will contain 10 rows except for the last one
# do some cool calculations here for the chunk
```
For very large files it may be convienient to speed up the process by reading each chunks in parallel. For
this purpose you can pass the argument multiprocess=True. This is a combination of read_file_in_chunks and
read_file_multiprocessing. Here you can use the arguments row_offset and row_limit to start reading the
file from an offest and stop after a row_offset+row_limit.
```python
import pyreadstat
fpath = "path/to/file.sav"
reader = pyreadstat.read_file_in_chunks(pyreadstat.read_sav, fpath, chunksize= 10000, multiprocess=True, num_processes=4)
for df, meta in reader:
print(df) # df will contain 10000 rows except for the last one
# do some cool calculations here for the chunk
```
**If using multiprocessing, please read the notes in the previous section regarding Xport, Por and some defective SAV files not
having the number of rows in the metadata**
**For Windows, please check the notes on the previous section reading files in parallel processes**
#### Reading value labels
For sas7bdat files, value labels are stored in separated sas7bcat files. You can use them in combination with the sas7bdat
or read them separately.
If you want to read them in combination with the sas7bdat files, pass the path to the sas7bcat files to the read_sas7bdat
function. The original values will be replaced by the values in the catalog.
```python
import pyreadstat
# formats_as_category is by default True, and it means the replaced values will be transformed to a pandas category column. There is also formats_as_ordered_category to get an ordered category, this by default is False.
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', catalog_file='/path/to/a/file.sas7bcat', formats_as_category=True, formats_as_ordered_category=False)
```
If you prefer to read the sas7bcat file separately, you can apply the formats later with the function set_catalog_to_sas.
In this way you can have two copies of the dataframe, one with catalog and one without.
```python
import pyreadstat
# this df will have the original values
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat')
# read_sas7bdat returns an emtpy data frame and the catalog
df_empty, catalog = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bcat')
# enrich the dataframe with the catalog
# formats_as_category is by default True, and it means the replaced values will be transformed to a pandas category column. formats_as_ordered_category is by default False meaning by default categories are not ordered.
df_enriched, meta_enriched = pyreadstat.set_catalog_to_sas(df, meta, catalog,
formats_as_category=True, formats_as_ordered_category=False)
```
For SPSS and STATA files, the value labels are included in the files. You can choose to replace the values by the labels
when reading the file using the option apply_value_formats, ...
```python
import pyreadstat
# apply_value_formats is by default False, so you have to set it to True manually if you want the labels
# formats_as_category is by default True, and it means the replaced values will be transformed to a pandas category column. formats_as_ordered_category is by default False meaning by default categories are not ordered.
df, meta = pyreadstat.read_sav("/path/to/sav/file.sav", apply_value_formats=True,
formats_as_category=True, formats_as_ordered_category=False)
```
... or to do it later with the function set_value_labels:
```python
import pyreadstat
# This time no value labels.
df, meta = pyreadstat.read_sav("/path/to/sav/file.sav", apply_value_formats=False)
# now let's add them to a second copy
df_enriched = pyreadstat.set_value_labels(df, meta, formats_as_category=True, formats_as_ordered_category=False)
```
Internally each variable is associated with a label set. This information is stored in meta.variable_to_label. Each
label set contains a map of the actual value in the variable to the label, this informtion is stored in
meta.variable_value_labels. By combining both you can get a dictionary of variable names to a dictionary of actual
values to labels.
For SPSS and STATA:
```python
import pyreadstat
df, meta = pyreadstat.read_sav("test_data/basic/sample.sav")
# the variables mylabl and myord are associated to the label sets labels0 and labels1 respectively
print(meta.variable_to_label)
#{'mylabl': 'labels0', 'myord': 'labels1'}
# labels0 and labels1 contain a dictionary of actual value to label
print(meta.value_labels)
#{'labels0': {1.0: 'Male', 2.0: 'Female'}, 'labels1': {1.0: 'low', 2.0: 'medium', 3.0: 'high'}}
# both things have been joined by pyreadstat for convienent use
print(meta.variable_value_labels)
#{'mylabl': {1.0: 'Male', 2.0: 'Female'}, 'myord': {1.0: 'low', 2.0: 'medium', 3.0: 'high'}}
```
SAS is very similar except that meta.variable_to_label comes from the sas7bdat file and meta.value_labels comes from the
sas7bcat file. That means if you read a sas7bdat file and a sas7bcat file togheter meta.variable_value_labels will be
filled in. If you read only the sas7bdat file only meta.variable_to_label will be available and if you read the
sas7bcat file only meta.value_labels will be available. If you read a sas7bdat file and there are no associated label
sets, SAS will assign by default the variable format as label sets.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat("test_data/sas_catalog/test_data_linux.sas7bdat")
meta.variable_to_label
{'SEXA': '$A', 'SEXB': '$B'}
df2, meta2 = pyreadstat.read_sas7bcat("test_data/sas_catalog/test_formats_linux.sas7bcat")
meta2.value_labels
{'$A': {'1': 'Male', '2': 'Female'}, '$B': {'2': 'Female', '1': 'Male'}}
```
#### Missing Values
There are two types of missing values: system and user defined. System are assigned by the program by default. User defined are
valid values that the user decided to give the meaning of missing in order to differentiate between several situations.For
example if one has a categorical variable representing if the person passed a test, you could have 0 for did not pass,
1 for pass, and as user defined missing variables 2 for did not show up for the test, 3 for unable to process the results,
etc.
**By default both cases are represented by NaN when
read with pyreadstat**. Notice that the only possible missing value in pandas is NaN (Not a Number) for both string and numeric
variables, date, datetime and time variables have NaT (Not a Time).
##### SPSS
In the case of SPSS sav files, the user can assign to a numeric variable either up to three discrete missing values or
one range plus one discrete missing value. As mentioned by default all of these possiblities are translated into NaN,
but one can get those original values by passing the argument user_missing=True to the read_sav function:
```python
# user set with default missing values
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/file.sav")
print(df)
>> test_passed
1
0
NaN
NaN
```
Now, reading the user defined missing values:
```python
# user set with user defined missing values
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/file.sav", user_missing=True)
print(df)
>> test_passed
1
0
2
3
```
As you see now instead o NaN the values 2 and 3 appear. In case the dataset had value labels, we could bring those in
```python
# user set with user defined missing values and labels
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/file.sav", user_missing=True, apply_value_formats=True)
print(df)
>> test_passed
"passed"
"not passed"
"not shown"
"not processed"
```
Finally, the information about what values are user missing is stored in the meta object, in the variable missing_ranges.
This is a dicitonary with the key being the name of the variable, and as value a list of dictionaries, each dictionary
contains the elements "hi" and "lo" to represent the lower and upper bound of the range, however for discrete values
as in the example, both boundaries are also present although the value is the same in both cases.
```python
# user set with default missing values
import pyreadstat
df, meta = pyreadstat.read_sav("/path/to/file.sav", user_missing=True, apply_value_formats=True)
print(meta.missing_ranges)
>>> {'test_passed':[{'hi':2, 'lo':2}, {'hi':3, 'lo':3}]}
```
SPSS sav files also support up to 3 discrete user defined missing values for non numeric (character) variables.
Pyreadstat is able to read those and the behavior is the same as for discrete
numerical user defined missing values. That means those values will be
translated as NaN by default and to the correspoding string value if
user_missing is set to True. meta.missing_ranges will show the string
value as well.
If the value in
a character variable is an empty string (''), it will not be translated to NaN, but will stay as an empty string. This
is because the empty string is a valid character value in SPSS and pyreadstat preserves that property. You can convert
empty strings to nan very easily with pandas if you think it is appropiate
for your dataset.
##### SAS and STATA
In SAS the user can assign values from .A to .Z and ._ as user defined missing values. In Stata values from
.a to .z. As in SPSS, those are normally translated to
NaN. However, using user_missing=True with read_sas7bdat or read_dta
will produce values from A to Z and _ for SAS and a to z for dta. In addition a variable
missing_user_values will appear in the metadata object, being a list with those values that are user defined missing
values.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat("/path/to/file.sas7bdat", user_missing=True)
df, meta = pyreadstat.read_dta("/path/to/file.dta", user_missing=True)
print(meta.missing_user_values)
```
The user may also assign a label to user defined missing values. In such
case passing the corresponding sas7bcat file to read_sas7bdat or using
the option apply_value_formats to read_dta will show those labels instead
of the user defined missing value.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat("/path/to/file.sas7bdat", catalog_file="/path/to/file.sas7bcat", user_missing=True)
df, meta = pyreadstat.read_dta("/path/to/file.dta", user_missing=True, apply_value_formats=True)
```
Empty strings are still transtaled as empty strings and not as NaN.
The information about what values are user missing is stored in the meta object, in the variable missing_user_values.
This is a list listing all user defined missing values.
User defined missing values are currently not supported for file types other than sas7bdat,
sas7bcat and dta.
#### Reading datetime and date columns
SAS, SPSS and STATA represent datetime, date and other similar concepts as a numeric column and then applies a
display format on top. Roughly speaking, internally there are two possible representations: one for concepts with a day or lower
granularity (date, week, quarter, year, etc.) and those with a higher granularity than a day (datetime, time, hour, etc).
The first group is suceptible to be converted to a python date object and the second to a python datetime object.
Pyreadstat attempts to read columns with datetime, date and time formats that are convertible
to python datetime, date and time objects automatically. However there are other formats that are not fully convertible to
any of these formats, for example SAS "YEAR" (displaying only the year), "MMYY" (displaying only month and year), etc.
Because there are too many of these formats and these keep changing, it is not possible to implement a rule for each of
those, therefore these columns are not transformed and the user will obtain a numeric column.
In order to cope with this issue, there are two options for each reader function: extra\_datetime\_formats and
extra\_date\_formats that allow the user to
pass these datetime or date formats, to transform the numeric values into datetime or date python objects. Then, the user
can format those columns appropiately; for example extracting the year only to an integer column in the case of 'YEAR' or
formatting it to a string 'YYYY-MM' in the case of 'MMYY'. The choice between datetime or date format depends on the granularity
of the data as explained above.
This arguments are also useful in the case you have a valid datetime, date or time format that is currently not recognized in pyreadstat.
In those cases, feel free to file an issue to ask those to be added to the list, in the meantime you can use these arguments to do
the conversion.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', extra_date_formats=["YEAR", "MMYY"])
```
#### Other options
You can set the encoding of the original file manually. The encoding must be a [iconv-compatible encoding](https://gist.github.com/hakre/4188459).
This is absolutely necessary if you are handling old xport files with
non-ascii characters. Those files do not have stamped the encoding in the
file itself, therefore the encoding must be set manually. For SPSS POR files it is not possible to set the encoding and
files are assumed to be always encoded in UTF-8.
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', encoding="LATIN1")
```
You can preserve the original pandas behavior regarding dates (meaning dates are converted to pandas datetime) with the
dates_as_pandas_datetime option
```python
import pyreadstat
df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', dates_as_pandas_datetime=True)
```
You can get a dictionary of numpy arrays instead of a pandas dataframe when reading any file format.
In order to do that, set the parameter output_format='dict' (default is 'pandas'). This is useful if
you want to transform the data to some other format different to pandas, as transforming the data to pandas is a costly
process both in terms of speed and memory. Here for example an efficient way to transform the data to a polars dataframe:
```python
import pyreadstat
import polars
dicdata, meta = pyreadstat.read_sav('/path/to/a/file.sav', output_format='dict')
df = polars.DataFrame(dicdata)
```
For more information, please check the [Module documentation](https://ofajardo.github.io/pyreadstat_documentation/_build/html/index.html).
### More writing options
#### File specific options
Some special arguments are available depending on the function. write_sav can take also notes as string, wheter to
compress or not as zsav or apply row compression, variable display widths and variable measures. write_dta can take a stata version.
write_xport a name for the dataset. See the
[Module documentation](https://ofajardo.github.io/pyreadstat_documentation/_build/html/index.html) for more details.
#### Writing value labels
The argument variable_value_labels can be passed to write_sav and write_dta to write value labels. This argument must be a
dictionary where keys are variable names (names must match column names in the pandas data frame). Values are another dictionary where
keys are the value present in the dataframe and values are the labels (strings).
```python
import pandas as pd
import pyreadstat
df = pd.DataFrame([[1,1],[2,2],[1,3]], columns=['mylabl', 'myord'])
variable_value_labels = {'mylabl': {1: 'Male', 2: 'Female'}, 'myord': {1: 'low', 2: 'medium', 3: 'high'}}
path = "/path/to/somefile.sav"
pyreadstat.write_sav(df, path, variable_value_labels=variable_value_labels)
```
#### Writing user defined missing values
##### SPSS
The argument missing_ranges can be passed to write_sav to write user defined missing values.
This argument be a dictionary with keys as variable names matching variable
names in the dataframe. The values must be a list. Each element in that list can either be
either a discrete numeric or string value (max 3 per variable) or a dictionary with keys 'hi' and 'lo' to
indicate the upper and lower range for numeric values (max 1 range value + 1 discrete value per
variable). hi and lo may also be the same value in which case it will be interpreted as a discrete
missing value. For this to be effective, values in the dataframe must be the same as reported here and not NaN.
```python
import pandas as pd
import pyreadstat
df = pd.DataFrame([["a",1],["c",2],["c",3]], columns=['mychar', 'myord'])
missing_ranges = {'mychar':['a'], 'myord': [{'hi':2, 'lo':1}]}
path = "/path/to/somefile.sav"
pyreadstat.write_sav(df, path, missing_ranges=missing_ranges)
```
##### STATA
The argument missing_user_values can be passed to write_dta to write user defined missing values only for numeric variables.
This argument be a dictionary with keys as variable names matching variable
names in the dataframe. The values must be a list of missing values, valid values are single character strings
between a and z. Optionally a value label can also be attached to those missing values using variable_value_labels.
```python
import pandas as pd
import pyreadstat
df = pd.DataFrame([["a", 1],[2.2, 2],[3.3, "b"]], columns=['Var1', 'Var2'])
variable_value_labels = {'Var1':{'a':'a missing value'}
missing_ranges = {'Var1':['a'], 'Var2': ['b']}
path = "/path/to/somefile.sav"
pyreadstat.write_sav(df, path, missing_ranges=missing_ranges, variable_value_labels=variable_value_labels)
```
#### Setting variable formats
Numeric types in SPSS, SAS and STATA can have formats that affect how those values are displayed to the user
in the application. Pyreadstat automatically sets the formatting in some cases, as for example when translating
dates or datetimes (which in SPSS/SAS/STATA are just numbers with a special format). The user can however specify custom formats
for their columns with the argument "variable_format", which is
a dictionary with the column name as key and a string with the format as values:
```python
import pandas as pd
import pyreadstat
path = "path/where/to/write/file.sav"
df = pd.DataFrame({'restricted':[1023, 10], 'integer':[1,2]})
formats = {'restricted':'N4', 'integer':'F1.0'}
pyreadstat.write_sav(df, path, variable_format=formats)
```
The appropiate formats to use are beyond the scope of this documentation. Probably you want to read a file
produced in the original application and use meta.original_value_formats to get the formats. Otherwise look
for the documentation of the original application.
##### SPSS
In the case of SPSS we have some presets for some formats:
* restricted_integer: with leading zeros, equivalent to N + variable width (e.g N4)
* integer: Numeric with no decimal places, equivalent to F + variable width + ".0" (0 decimal positions). A
pandas column of type integer will also be translated into this format automatically.
```python
import pandas as pd
import pyreadstat
path = "path/where/to/write/file.sav"
df = pd.DataFrame({'restricted':[1023, 10], 'integer':[1,2]})
formats = {'restricted':'restricted_integer', 'integer':'integer'}
pyreadstat.write_sav(df, path, variable_format=formats)
```
There is some information about the possible formats [here](https://www.gnu.org/software/pspp/pspp-dev/html_node/Variable-Record.html).
#### Variable type conversion
The following rules are used in order to convert from pandas/numpy/python types to the target file types:
| Python Type | Converted Type |
| ------------------- | --------- |
| np.int32 or lower | integer (stata), numeric (spss, sas) |
| int, np.int64, np.float | double (stata), numeric (spss, sas) |
| str | character |
| bool | integer (stata), numeric (spss, sas) |
| datetime, date, time | numeric with datetime/date/time formatting |
| category | depends on the original dtype |
| any other object | character |
| column all missing | integer (stata), numeric (spss, sas) |
| column with mixed types | character |
Columns with mixed types are translated to character. This does not apply to column
cotaining np.nan, where the missing values are correctly translated. It also does not apply to columns with
user defined missing values in stata/sas where characters (a to z, A to Z, \_) will be recorded as numeric.
## Roadmap
* Include latest releases from Readstat as they come out.
## CD/CI and Wheels
A CD/CI pipeline producing the wheels is available [here](https://github.com/ofajardo/pyreadstat_wheels4). Contributions
are welcome.
## Known limitations
pyreadstat builds on top of Readstat and therefore inherits its limitations. Currently those include:
* Cannot write SAS sas7bdat. Those files can be written but not read in
SAS and therefore are not supported in pyreadstat. (see [here](https://github.com/WizardMac/ReadStat/issues/98))
Converting data types from foreign applications into python some times also bring some limitations:
* Pyreadstat transforms date, datetime and time like variables which are internally represented in the original application as
numbers to python datetime objects. Python datetime objects are however limited in the range of dates they can represent
(for example the max year is 10,000), while in other applications it is possible (although probably an error in the data)
to have very high or very low dates. In this cases pyreadstat would raise an error:
```
OverflowError: date value out of range
```
The workaround is to deal with this include using the keyword argument disable_datetime_conversion so that you will
get numbers instead of datetime objects or skipping reading such columns with the argument usecols.
## Python 2.7 support.
As version 1.2.3 Python 2.7 is not supported. In previous versions it was possible to compile it for
mac and linux but not for windows, but no wheels were provided. In linux and mac it will fail if
the path file contains non-ascii characters.
## Change log
A log with the changes for each version can be found [here](https://github.com/Roche/pyreadstat/blob/master/change_log.md)
## License
pyreadstat is distributed under Apache 2.0 license. Readstat is distributed under MIT license. See the License file for
more information.
## Contributing
Contributions are welcome! Those include corrections to the documentation, bugs reporting, testing,
and of course code pull requests. For code pull requests please
consider opening an issue explaining what you plan to do, so that we can get aligned before you start investing time on
it (this also avoids duplicated efforts).
The ReadStat code in this repo (under the subfolder src) is coming from the main Readstat trunk and should not be
modified in order to
keep full compatibility with the original. In that way improvements in ReadStat can be taken here with almost
no effort. If you would like to propose new features involving changes in the ReadStat code, please submit a
pull request to ReadStat first.
## People
[Otto Fajardo](https://github.com/ofajardo) - author, maintainer
[Matthew Brett](http://matthew.dynevor.org/) - contributor [python wheels](https://github.com/MacPython/pyreadstat-wheels)
[Jonathon Love](https://jona.thon.love/) - contributor: open files with international characters. Function to open files for writing.
[Clemens Brunner](https://github.com/cbrnr) - integration with pandas.read_spss
[Thomas Grainger](https://github.com/graingert) - corrections and suggestions to source code
[benjello](https://github.com/benjello), [maxwell8888](https://github.com/maxwell8888), [drcjar](https://github.com/drcjar), [labenech](https://github.com/labenech): improvements to documentation
[alchemyst](https://github.com/alchemyst): improvements to docstrings
[bmwiedemann](https://github.com/bmwiedemann), [toddrme2178 ](https://github.com/toddrme2178), [Martin Thorsen Ranang](https://github.com/mtr): improvements to source code
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710350831.0
pyreadstat-1.2.7/pyproject.toml 0000644 0234772 0000024 00000000162 14574360757 016540 0 ustar 00fajardoo staffs [build-system]
requires = [
"setuptools",
"wheel",
"cython"
]
build-backend = "setuptools.build_meta"
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710418355.0
pyreadstat-1.2.7/pyreadstat/ 0000755 0234772 0000024 00000000000 14574564663 016007 5 ustar 00fajardoo staffs ././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710350845.0
pyreadstat-1.2.7/pyreadstat/__init__.py 0000644 0234772 0000024 00000002320 14574360775 020113 0 ustar 00fajardoo staffs # #############################################################################
# Copyright 2018 Hoffmann-La Roche
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# #############################################################################
from .pyreadstat import read_sas7bdat, read_xport, read_dta, read_sav, read_por, read_sas7bcat
from .pyreadstat import write_sav, write_dta, write_xport, write_por
#from .pyreadstat import set_value_labels, set_catalog_to_sas
#from .pyreadstat import set_catalog_to_sas
from .pyreadstat import read_file_in_chunks, read_file_multiprocessing
from ._readstat_parser import ReadstatError, metadata_container
from .pyfunctions import set_value_labels, set_catalog_to_sas
__version__ = "1.2.7"
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1710418353.0
pyreadstat-1.2.7/pyreadstat/_readstat_parser.c 0000644 0234772 0000024 00004125251 14574564661 021505 0 ustar 00fajardoo staffs /* Generated by Cython 3.0.9 */
/* BEGIN: Cython Metadata
{
"distutils": {
"depends": [
"pyreadstat/conditional_includes.h",
"src/readstat.h",
"src/readstat_io_unistd.h"
],
"extra_compile_args": [
"-Ireadstat",
"-DHAVE_ZLIB=1"
],
"include_dirs": [
"pyreadstat",
"src",
"src/stata",
"src/spss",
"src/sas",
"."
],
"libraries": [
"m",
"z"
],
"name": "pyreadstat._readstat_parser",
"sources": [
"pyreadstat/_readstat_parser.pyx",
"./src/CKHashTable.c",
"./src/readstat_bits.c",
"./src/readstat_convert.c",
"./src/readstat_error.c",
"./src/readstat_io_unistd.c",
"./src/readstat_malloc.c",
"./src/readstat_metadata.c",
"./src/readstat_parser.c",
"./src/readstat_value.c",
"./src/readstat_variable.c",
"./src/readstat_writer.c",
"./src/sas/ieee.c",
"./src/sas/readstat_sas.c",
"./src/sas/readstat_sas7bcat_read.c",
"./src/sas/readstat_sas7bcat_write.c",
"./src/sas/readstat_sas7bdat_read.c",
"./src/sas/readstat_sas7bdat_write.c",
"./src/sas/readstat_sas_rle.c",
"./src/sas/readstat_xport.c",
"./src/sas/readstat_xport_parse_format.c",
"./src/sas/readstat_xport_read.c",
"./src/sas/readstat_xport_write.c",
"./src/spss/readstat_por.c",
"./src/spss/readstat_por_parse.c",
"./src/spss/readstat_por_read.c",
"./src/spss/readstat_por_write.c",
"./src/spss/readstat_sav.c",
"./src/spss/readstat_sav_compress.c",
"./src/spss/readstat_sav_parse.c",
"./src/spss/readstat_sav_parse_timestamp.c",
"./src/spss/readstat_sav_read.c",
"./src/spss/readstat_sav_write.c",
"./src/spss/readstat_spss.c",
"./src/spss/readstat_spss_parse.c",
"./src/spss/readstat_zsav_compress.c",
"./src/spss/readstat_zsav_read.c",
"./src/spss/readstat_zsav_write.c",
"./src/stata/readstat_dta.c",
"./src/stata/readstat_dta_parse_timestamp.c",
"./src/stata/readstat_dta_read.c",
"./src/stata/readstat_dta_write.c"
]
},
"module_name": "pyreadstat._readstat_parser"
}
END: Cython Metadata */
#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
#if defined(CYTHON_LIMITED_API) && 0
#ifndef Py_LIMITED_API
#if CYTHON_LIMITED_API+0 > 0x03030000
#define Py_LIMITED_API CYTHON_LIMITED_API
#else
#define Py_LIMITED_API 0x03030000
#endif
#endif
#endif
#include "Python.h"
#ifndef Py_PYTHON_H
#error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.7+ or Python 3.3+.
#else
#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API
#define __PYX_EXTRA_ABI_MODULE_NAME "limited"
#else
#define __PYX_EXTRA_ABI_MODULE_NAME ""
#endif
#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
#define CYTHON_HEX_VERSION 0x030009F0
#define CYTHON_FUTURE_DIVISION 0
#include
#ifndef offsetof
#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
#ifndef __stdcall
#define __stdcall
#endif
#ifndef __cdecl
#define __cdecl
#endif
#ifndef __fastcall
#define __fastcall
#endif
#endif
#ifndef DL_IMPORT
#define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
#define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef HAVE_LONG_LONG
#define HAVE_LONG_LONG
#endif
#ifndef PY_LONG_LONG
#define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
#define Py_HUGE_VAL HUGE_VAL
#endif
#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
#if defined(GRAALVM_PYTHON)
/* For very preliminary testing purposes. Most variables are set the same as PyPy.
The existence of this section does not imply that anything works or is even tested */
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 1
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#undef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#undef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 1
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
#endif
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#elif defined(PYPY_VERSION)
#define CYTHON_COMPILING_IN_PYPY 1
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#ifndef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#endif
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#undef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 1
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
#endif
#if PY_VERSION_HEX < 0x03090000
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#elif defined(CYTHON_LIMITED_API)
#ifdef Py_LIMITED_API
#undef __PYX_LIMITED_VERSION_HEX
#define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
#endif
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 1
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_CLINE_IN_TRACEBACK
#define CYTHON_CLINE_IN_TRACEBACK 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#undef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 1
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#ifndef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#endif
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS 1
#endif
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 1
#ifndef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#endif
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL)
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 1
#ifndef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 1
#endif
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#ifndef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#ifndef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 1
#endif
#ifndef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 1
#endif
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#ifndef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 1
#endif
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#else
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 1
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#ifndef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 1
#endif
#ifndef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#endif
#ifndef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 1
#endif
#if PY_MAJOR_VERSION < 3
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#ifndef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 1
#endif
#ifndef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 1
#endif
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
#if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
#define CYTHON_USE_UNICODE_WRITER 1
#endif
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#ifndef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 1
#endif
#ifndef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 1
#endif
#ifndef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6)
#endif
#ifndef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1)
#endif
#ifndef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 1
#endif
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS 1
#endif
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#ifndef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#endif
#if PY_VERSION_HEX < 0x030400a1
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#elif !defined(CYTHON_USE_TP_FINALIZE)
#define CYTHON_USE_TP_FINALIZE 1
#endif
#if PY_VERSION_HEX < 0x030600B1
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#elif !defined(CYTHON_USE_DICT_VERSIONS)
#define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5)
#endif
#if PY_VERSION_HEX < 0x030700A3
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#elif !defined(CYTHON_USE_EXC_INFO_STACK)
#define CYTHON_USE_EXC_INFO_STACK 1
#endif
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 1
#endif
#endif
#if !defined(CYTHON_FAST_PYCCALL)
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if !defined(CYTHON_VECTORCALL)
#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1)
#endif
#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1)
#if CYTHON_USE_PYLONG_INTERNALS
#if PY_MAJOR_VERSION < 3
#include "longintrepr.h"
#endif
#undef SHIFT
#undef BASE
#undef MASK
#ifdef SIZEOF_VOID_P
enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
#endif
#endif
#ifndef __has_attribute
#define __has_attribute(x) 0
#endif
#ifndef __has_cpp_attribute
#define __has_cpp_attribute(x) 0
#endif
#ifndef CYTHON_RESTRICT
#if defined(__GNUC__)
#define CYTHON_RESTRICT __restrict__
#elif defined(_MSC_VER) && _MSC_VER >= 1400
#define CYTHON_RESTRICT __restrict
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_RESTRICT restrict
#else
#define CYTHON_RESTRICT
#endif
#endif
#ifndef CYTHON_UNUSED
#if defined(__cplusplus)
/* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
* but leads to warnings with -pedantic, since it is a C++17 feature */
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
#if __has_cpp_attribute(maybe_unused)
#define CYTHON_UNUSED [[maybe_unused]]
#endif
#endif
#endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_UNUSED_VAR
# if defined(__cplusplus)
template void CYTHON_UNUSED_VAR( const T& ) { }
# else
# define CYTHON_UNUSED_VAR(x) (void)(x)
# endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
#define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON
# define CYTHON_NCP_UNUSED
# else
# define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_USE_CPP_STD_MOVE
#if defined(__cplusplus) && (\
__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
#define CYTHON_USE_CPP_STD_MOVE 1
#else
#define CYTHON_USE_CPP_STD_MOVE 0
#endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#ifdef _MSC_VER
#ifndef _MSC_STDINT_H_
#if _MSC_VER < 1300
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#else
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
#endif
#endif
#if _MSC_VER < 1300
#ifdef _WIN64
typedef unsigned long long __pyx_uintptr_t;
#else
typedef unsigned int __pyx_uintptr_t;
#endif
#else
#ifdef _WIN64
typedef unsigned __int64 __pyx_uintptr_t;
#else
typedef unsigned __int32 __pyx_uintptr_t;
#endif
#endif
#else
#include
typedef uintptr_t __pyx_uintptr_t;
#endif
#ifndef CYTHON_FALLTHROUGH
#if defined(__cplusplus)
/* for clang __has_cpp_attribute(fallthrough) is true even before C++17
* but leads to warnings with -pedantic, since it is a C++17 feature */
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
#if __has_cpp_attribute(fallthrough)
#define CYTHON_FALLTHROUGH [[fallthrough]]
#endif
#endif
#ifndef CYTHON_FALLTHROUGH
#if __has_cpp_attribute(clang::fallthrough)
#define CYTHON_FALLTHROUGH [[clang::fallthrough]]
#elif __has_cpp_attribute(gnu::fallthrough)
#define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
#endif
#endif
#endif
#ifndef CYTHON_FALLTHROUGH
#if __has_attribute(fallthrough)
#define CYTHON_FALLTHROUGH __attribute__((fallthrough))
#else
#define CYTHON_FALLTHROUGH
#endif
#endif
#if defined(__clang__) && defined(__apple_build_version__)
#if __apple_build_version__ < 7000000
#undef CYTHON_FALLTHROUGH
#define CYTHON_FALLTHROUGH
#endif
#endif
#endif
#ifdef __cplusplus
template
struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
#define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value)
#else
#define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
#endif
#if CYTHON_COMPILING_IN_PYPY == 1
#define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000)
#else
#define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000)
#endif
#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))
#ifndef CYTHON_INLINE
#if defined(__clang__)
#define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
#elif defined(__GNUC__)
#define CYTHON_INLINE __inline__
#elif defined(_MSC_VER)
#define CYTHON_INLINE __inline
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_INLINE inline
#else
#define CYTHON_INLINE
#endif
#endif
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#if PY_MAJOR_VERSION < 3
#define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
#define __Pyx_DefaultClassType PyClass_Type
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
#define __Pyx_DefaultClassType PyType_Type
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
PyObject *code, PyObject *c, PyObject* n, PyObject *v,
PyObject *fv, PyObject *cell, PyObject* fn,
PyObject *name, int fline, PyObject *lnos) {
PyObject *exception_table = NULL;
PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
#if __PYX_LIMITED_VERSION_HEX < 0x030B0000
PyObject *version_info;
PyObject *py_minor_version = NULL;
#endif
long minor_version = 0;
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
#if __PYX_LIMITED_VERSION_HEX >= 0x030B0000
minor_version = 11;
#else
if (!(version_info = PySys_GetObject("version_info"))) goto end;
if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
minor_version = PyLong_AsLong(py_minor_version);
Py_DECREF(py_minor_version);
if (minor_version == -1 && PyErr_Occurred()) goto end;
#endif
if (!(types_module = PyImport_ImportModule("types"))) goto end;
if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
if (minor_version <= 7) {
(void)p;
result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code,
c, n, v, fn, name, fline, lnos, fv, cell);
} else if (minor_version <= 10) {
result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code,
c, n, v, fn, name, fline, lnos, fv, cell);
} else {
if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code,
c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
}
end:
Py_XDECREF(code_type);
Py_XDECREF(exception_table);
Py_XDECREF(types_module);
if (type) {
PyErr_Restore(type, value, traceback);
}
return result;
}
#ifndef CO_OPTIMIZED
#define CO_OPTIMIZED 0x0001
#endif
#ifndef CO_NEWLOCALS
#define CO_NEWLOCALS 0x0002
#endif
#ifndef CO_VARARGS
#define CO_VARARGS 0x0004
#endif
#ifndef CO_VARKEYWORDS
#define CO_VARKEYWORDS 0x0008
#endif
#ifndef CO_ASYNC_GENERATOR
#define CO_ASYNC_GENERATOR 0x0200
#endif
#ifndef CO_GENERATOR
#define CO_GENERATOR 0x0020
#endif
#ifndef CO_COROUTINE
#define CO_COROUTINE 0x0080
#endif
#elif PY_VERSION_HEX >= 0x030B0000
static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
PyObject *code, PyObject *c, PyObject* n, PyObject *v,
PyObject *fv, PyObject *cell, PyObject* fn,
PyObject *name, int fline, PyObject *lnos) {
PyCodeObject *result;
PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0);
if (!empty_bytes) return NULL;
result =
#if PY_VERSION_HEX >= 0x030C0000
PyUnstable_Code_NewWithPosOnlyArgs
#else
PyCode_NewWithPosOnlyArgs
#endif
(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes);
Py_DECREF(empty_bytes);
return result;
}
#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
#endif
#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
#define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
#else
#define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
#define __Pyx_Py_Is(x, y) Py_Is(x, y)
#else
#define __Pyx_Py_Is(x, y) ((x) == (y))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
#define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
#else
#define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
#define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
#else
#define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
#define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
#else
#define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
#endif
#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj))
#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
#else
#define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
#endif
#ifndef CO_COROUTINE
#define CO_COROUTINE 0x80
#endif
#ifndef CO_ASYNC_GENERATOR
#define CO_ASYNC_GENERATOR 0x200
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
#define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
#define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
#define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
#define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef Py_TPFLAGS_SEQUENCE
#define Py_TPFLAGS_SEQUENCE 0
#endif
#ifndef Py_TPFLAGS_MAPPING
#define Py_TPFLAGS_MAPPING 0
#endif
#ifndef METH_STACKLESS
#define METH_STACKLESS 0
#endif
#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
#ifndef METH_FASTCALL
#define METH_FASTCALL 0x80
#endif
typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
Py_ssize_t nargs, PyObject *kwnames);
#else
#if PY_VERSION_HEX >= 0x030d00A4
# define __Pyx_PyCFunctionFast PyCFunctionFast
# define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
#else
# define __Pyx_PyCFunctionFast _PyCFunctionFast
# define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
#endif
#endif
#if CYTHON_METH_FASTCALL
#define __Pyx_METH_FASTCALL METH_FASTCALL
#define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
#define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
#else
#define __Pyx_METH_FASTCALL METH_VARARGS
#define __Pyx_PyCFunction_FastCall PyCFunction
#define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
#endif
#if CYTHON_VECTORCALL
#define __pyx_vectorcallfunc vectorcallfunc
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET
#define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n))
#elif CYTHON_BACKPORT_VECTORCALL
typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwnames);
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1))
#define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET))
#else
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0
#define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n))
#endif
#if PY_MAJOR_VERSION >= 0x030900B1
#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func)
#else
#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func)
#endif
#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func)
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth)
#elif !CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func)
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags)
static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
}
#endif
static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) {
#if CYTHON_COMPILING_IN_LIMITED_API
return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
#else
return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
#endif
}
#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc)
#if __PYX_LIMITED_VERSION_HEX < 0x030900B1
#define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b))
typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
#else
#define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b)
#define __Pyx_PyCMethod PyCMethod
#endif
#ifndef METH_METHOD
#define METH_METHOD 0x200
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
#define PyObject_Malloc(s) PyMem_Malloc(s)
#define PyObject_Free(p) PyMem_Free(p)
#define PyObject_Realloc(p) PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
#define __Pyx_PyFrame_SetLineNumber(frame, lineno)
#else
#define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
#define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyThreadState_Current PyThreadState_Get()
#elif !CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x030d00A1
#define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
#elif PY_VERSION_HEX >= 0x03060000
#define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#elif PY_VERSION_HEX >= 0x03000000
#define __Pyx_PyThreadState_Current PyThreadState_GET()
#else
#define __Pyx_PyThreadState_Current _PyThreadState_Current
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
{
void *result;
result = PyModule_GetState(op);
if (!result)
Py_FatalError("Couldn't find the module state");
return result;
}
#endif
#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype)
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name))
#else
#define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name)
#endif
#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
#include "pythread.h"
#define Py_tss_NEEDS_INIT 0
typedef int Py_tss_t;
static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
*key = PyThread_create_key();
return 0;
}
static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
*key = Py_tss_NEEDS_INIT;
return key;
}
static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
PyObject_Free(key);
}
static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
return *key != Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
PyThread_delete_key(*key);
*key = Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
return PyThread_set_key_value(*key, value);
}
static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
return PyThread_get_key_value(*key);
}
#endif
#if PY_MAJOR_VERSION < 3
#if CYTHON_COMPILING_IN_PYPY
#if PYPY_VERSION_NUM < 0x07030600
#if defined(__cplusplus) && __cplusplus >= 201402L
[[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]]
#elif defined(__GNUC__) || defined(__clang__)
__attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")))
#elif defined(_MSC_VER)
__declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))
#endif
static CYTHON_INLINE int PyGILState_Check(void) {
return 0;
}
#else // PYPY_VERSION_NUM < 0x07030600
#endif // PYPY_VERSION_NUM < 0x07030600
#else
static CYTHON_INLINE int PyGILState_Check(void) {
PyThreadState * tstate = _PyThreadState_Current;
return tstate && (tstate == PyGILState_GetThisThreadState());
}
#endif
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n) PyDict_New()
#endif
#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
#define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
#else
#define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
if (res == NULL) PyErr_Clear();
return res;
}
#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000)
#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError
#define __Pyx_PyDict_GetItemStr PyDict_GetItem
#else
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
#if CYTHON_COMPILING_IN_PYPY
return PyDict_GetItem(dict, name);
#else
PyDictEntry *ep;
PyDictObject *mp = (PyDictObject*) dict;
long hash = ((PyStringObject *) name)->ob_shash;
assert(hash != -1);
ep = (mp->ma_lookup)(mp, name, hash);
if (ep == NULL) {
return NULL;
}
return ep->me_value;
#endif
}
#define __Pyx_PyDict_GetItemStr PyDict_GetItem
#endif
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags)
#define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
#define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext)
#else
#define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp))
#define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature)
#define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v)
#else
#define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v)
#endif
#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000
#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\
PyTypeObject *type = Py_TYPE((PyObject*)obj);\
assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
PyObject_GC_Del(obj);\
Py_DECREF(type);\
}
#else
#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define CYTHON_PEP393_ENABLED 1
#define __Pyx_PyUnicode_READY(op) (0)
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U)
#define __Pyx_PyUnicode_KIND(u) ((void)u, (0))
#define __Pyx_PyUnicode_DATA(u) ((void*)u)
#define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u))
#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
#define CYTHON_PEP393_ENABLED 1
#if PY_VERSION_HEX >= 0x030C0000
#define __Pyx_PyUnicode_READY(op) (0)
#else
#define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
0 : _PyUnicode_Ready((PyObject *)(op)))
#endif
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
#define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u))
#define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
#define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
#if PY_VERSION_HEX >= 0x030C0000
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u))
#else
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
#else
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#endif
#endif
#else
#define CYTHON_PEP393_ENABLED 0
#define PyUnicode_1BYTE_KIND 1
#define PyUnicode_2BYTE_KIND 2
#define PyUnicode_4BYTE_KIND 4
#define __Pyx_PyUnicode_READY(op) (0)
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U)
#define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE))
#define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
#define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch)
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
#endif
#if CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
#define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
#else
#define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
#define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY
#if !defined(PyUnicode_DecodeUnicodeEscape)
#define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors)
#endif
#if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500)
#undef PyUnicode_Contains
#define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
#endif
#if !defined(PyByteArray_Check)
#define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
#endif
#if !defined(PyObject_Format)
#define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
#endif
#endif
#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
#else
#define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
#define PyObject_ASCII(o) PyObject_Repr(o)
#endif
#if PY_MAJOR_VERSION >= 3
#define PyBaseString_Type PyUnicode_Type
#define PyStringObject PyUnicodeObject
#define PyString_Type PyUnicode_Type
#define PyString_Check PyUnicode_Check
#define PyString_CheckExact PyUnicode_CheckExact
#ifndef PyObject_Unicode
#define PyObject_Unicode PyObject_Str
#endif
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
#define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
#else
#define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
#define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PySequence_ListKeepNew(obj)\
(likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#else
#define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj)
#endif
#ifndef PySet_CheckExact
#define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
#define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
#define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
#define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
#define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
#define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
#define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
#define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
#define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
#define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
#define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
#define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
#define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
#else
#define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
#define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
#define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
#define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
#define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
#define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
#define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
#define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
#define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
#endif
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
#define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#else
static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
PyObject *module = PyImport_AddModule(name);
Py_XINCREF(module);
return module;
}
#endif
#if PY_MAJOR_VERSION >= 3
#define PyIntObject PyLongObject
#define PyInt_Type PyLong_Type
#define PyInt_Check(op) PyLong_Check(op)
#define PyInt_CheckExact(op) PyLong_CheckExact(op)
#define __Pyx_Py3Int_Check(op) PyLong_Check(op)
#define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op)
#define PyInt_FromString PyLong_FromString
#define PyInt_FromUnicode PyLong_FromUnicode
#define PyInt_FromLong PyLong_FromLong
#define PyInt_FromSize_t PyLong_FromSize_t
#define PyInt_FromSsize_t PyLong_FromSsize_t
#define PyInt_AsLong PyLong_AsLong
#define PyInt_AS_LONG PyLong_AS_LONG
#define PyInt_AsSsize_t PyLong_AsSsize_t
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
#define PyNumber_Int PyNumber_Long
#else
#define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op))
#define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op))
#endif
#if PY_MAJOR_VERSION >= 3
#define PyBoolObject PyLongObject
#endif
#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
#ifndef PyUnicode_InternFromString
#define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
#endif
#endif
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
#define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
#define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if CYTHON_USE_ASYNC_SLOTS
#if PY_VERSION_HEX >= 0x030500B1
#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
#else
#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
#endif
#else
#define __Pyx_PyType_AsAsync(obj) NULL
#endif
#ifndef __Pyx_PyAsyncMethodsStruct
typedef struct {
unaryfunc am_await;
unaryfunc am_aiter;
unaryfunc am_anext;
} __Pyx_PyAsyncMethodsStruct;
#endif
#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
#if !defined(_USE_MATH_DEFINES)
#define _USE_MATH_DEFINES
#endif
#endif
#include
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
float value;
memset(&value, 0xFF, sizeof(value));
return value;
}
#endif
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif
#define __PYX_MARK_ERR_POS(f_index, lineno) \
{ __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
#define __PYX_ERR(f_index, lineno, Ln_error) \
{ __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
#ifdef CYTHON_EXTERN_C
#undef __PYX_EXTERN_C
#define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
#ifdef _MSC_VER
#pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
#else
#warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
#endif
#else
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
#endif
#define __PYX_HAVE__pyreadstat___readstat_parser
#define __PYX_HAVE_API__pyreadstat___readstat_parser
/* Early includes */
#include
#include
#include
#include "readstat.h"
#include "readstat_io_unistd.h"
#include "conditional_includes.h"
#include
#include
#include "datetime.h"
/* Backport for Python 2.x */
#if PY_MAJOR_VERSION < 3
#ifndef PyDateTime_DELTA_GET_DAYS
#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days)
#endif
#ifndef PyDateTime_DELTA_GET_SECONDS
#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)o)->seconds)
#endif
#ifndef PyDateTime_DELTA_GET_MICROSECONDS
#define PyDateTime_DELTA_GET_MICROSECONDS(o) (((PyDateTime_Delta*)o)->microseconds)
#endif
#endif
/* Backport for Python < 3.6 */
#if PY_VERSION_HEX < 0x030600a4
#ifndef PyDateTime_TIME_GET_FOLD
#define PyDateTime_TIME_GET_FOLD(o) ((void)(o), 0)
#endif
#ifndef PyDateTime_DATE_GET_FOLD
#define PyDateTime_DATE_GET_FOLD(o) ((void)(o), 0)
#endif
#endif
/* Backport for Python < 3.6 */
#if PY_VERSION_HEX < 0x030600a4
#define __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold) ((void)(fold), PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, minute, second, microsecond, tz, PyDateTimeAPI->DateTimeType))
#define __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold) ((void)(fold), PyDateTimeAPI->Time_FromTime(hour, minute, second, microsecond, tz, PyDateTimeAPI->TimeType))
#else /* For Python 3.6+ so that we can pass tz */
#define __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold) PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, minute, second, microsecond, tz, fold, PyDateTimeAPI->DateTimeType)
#define __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold) PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, microsecond, tz, fold, PyDateTimeAPI->TimeType)
#endif
/* Backport for Python < 3.7 */
#if PY_VERSION_HEX < 0x030700b1
#define __Pyx_TimeZone_UTC NULL
#define __Pyx_TimeZone_FromOffsetAndName(offset, name) ((void)(offset), (void)(name), (PyObject*)NULL)
#else
#define __Pyx_TimeZone_UTC PyDateTime_TimeZone_UTC
#define __Pyx_TimeZone_FromOffsetAndName(offset, name) PyTimeZone_FromOffsetAndName(offset, name)
#endif
/* Backport for Python < 3.10 */
#if PY_VERSION_HEX < 0x030a00a1
#ifndef PyDateTime_TIME_GET_TZINFO
#define PyDateTime_TIME_GET_TZINFO(o) ((((PyDateTime_Time*)o)->hastzinfo) ? ((PyDateTime_Time*)o)->tzinfo : Py_None)
#endif
#ifndef PyDateTime_DATE_GET_TZINFO
#define PyDateTime_DATE_GET_TZINFO(o) ((((PyDateTime_DateTime*)o)->hastzinfo) ? ((PyDateTime_DateTime*)o)->tzinfo : Py_None)
#endif
#endif
#include
#ifdef _OPENMP
#include
#endif /* _OPENMP */
#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif
typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 1
#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
#define __PYX_DEFAULT_STRING_ENCODING "utf8"
#define __Pyx_PyObject_FromString __Pyx_PyUnicode_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
(sizeof(type) < sizeof(Py_ssize_t)) ||\
(sizeof(type) > sizeof(Py_ssize_t) &&\
likely(v < (type)PY_SSIZE_T_MAX ||\
v == (type)PY_SSIZE_T_MAX) &&\
(!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
v == (type)PY_SSIZE_T_MIN))) ||\
(sizeof(type) == sizeof(Py_ssize_t) &&\
(is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
v == (type)PY_SSIZE_T_MAX))) )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
#include
#define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
#define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
#define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
#define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
#define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
#define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if PY_MAJOR_VERSION < 3
#define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#else
#define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString
#define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#endif
#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o)
#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#else
#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
#endif
#if CYTHON_USE_PYLONG_INTERNALS
#if PY_VERSION_HEX >= 0x030C00A7
#ifndef _PyLong_SIGN_MASK
#define _PyLong_SIGN_MASK 3
#endif
#ifndef _PyLong_NON_SIZE_BITS
#define _PyLong_NON_SIZE_BITS 3
#endif
#define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
#define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0)
#define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x))
#define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1)
#define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0)
#define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0])
#define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
#define __Pyx_PyLong_SignedDigitCount(x)\
((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
#if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
#define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x)
#define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x)
#else
#define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
#define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
#endif
typedef Py_ssize_t __Pyx_compact_pylong;
typedef size_t __Pyx_compact_upylong;
#else
#define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0)
#define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0)
#define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0)
#define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0)
#define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
#define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x))
#define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x)
#define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
#define __Pyx_PyLong_CompactValue(x)\
((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
typedef sdigit __Pyx_compact_pylong;
typedef digit __Pyx_compact_upylong;
#endif
#if PY_VERSION_HEX >= 0x030C00A5
#define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit)
#else
#define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit)
#endif
#endif
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
#include
static int __Pyx_sys_getdefaultencoding_not_ascii;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
PyObject* sys;
PyObject* default_encoding = NULL;
PyObject* ascii_chars_u = NULL;
PyObject* ascii_chars_b = NULL;
const char* default_encoding_c;
sys = PyImport_ImportModule("sys");
if (!sys) goto bad;
default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
Py_DECREF(sys);
if (!default_encoding) goto bad;
default_encoding_c = PyBytes_AsString(default_encoding);
if (!default_encoding_c) goto bad;
if (strcmp(default_encoding_c, "ascii") == 0) {
__Pyx_sys_getdefaultencoding_not_ascii = 0;
} else {
char ascii_chars[128];
int c;
for (c = 0; c < 128; c++) {
ascii_chars[c] = (char) c;
}
__Pyx_sys_getdefaultencoding_not_ascii = 1;
ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
if (!ascii_chars_u) goto bad;
ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
PyErr_Format(
PyExc_ValueError,
"This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
default_encoding_c);
goto bad;
}
Py_DECREF(ascii_chars_u);
Py_DECREF(ascii_chars_b);
}
Py_DECREF(default_encoding);
return 0;
bad:
Py_XDECREF(default_encoding);
Py_XDECREF(ascii_chars_u);
Py_XDECREF(ascii_chars_b);
return -1;
}
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#else
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
#include
static char* __PYX_DEFAULT_STRING_ENCODING;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
PyObject* sys;
PyObject* default_encoding = NULL;
char* default_encoding_c;
sys = PyImport_ImportModule("sys");
if (!sys) goto bad;
default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
Py_DECREF(sys);
if (!default_encoding) goto bad;
default_encoding_c = PyBytes_AsString(default_encoding);
if (!default_encoding_c) goto bad;
__PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
Py_DECREF(default_encoding);
return 0;
bad:
Py_XDECREF(default_encoding);
return -1;
}
#endif
#endif
/* Test for GCC > 2.95 */
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
#define likely(x) (x)
#define unlikely(x) (x)
#endif /* __GNUC__ */
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_m = NULL;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;
/* #### Code section: filename_table ### */
static const char *__pyx_f[] = {
"pyreadstat/_readstat_parser.pyx",
"",
"datetime.pxd",
"type.pxd",
};
/* #### Code section: utility_code_proto_before_types ### */
/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
#define __PYX_FORCE_INIT_THREADS 0
#endif
/* #### Code section: numeric_typedefs ### */
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */
/*--- Type declarations ---*/
struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container;
struct __pyx_opt_args_7cpython_8datetime_time_new;
struct __pyx_opt_args_7cpython_8datetime_datetime_new;
struct __pyx_opt_args_7cpython_8datetime_timezone_new;
struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp;
/* "cpython/datetime.pxd":292
* # Create time object using DateTime CAPI factory function
* # Note, there are no range checks for any of the arguments.
* cdef inline time time_new(int hour, int minute, int second, int microsecond, object tz, int fold=0): # <<<<<<<<<<<<<<
* return __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)
*
*/
struct __pyx_opt_args_7cpython_8datetime_time_new {
int __pyx_n;
int fold;
};
/* "cpython/datetime.pxd":297
* # Create datetime object using DateTime CAPI factory function.
* # Note, there are no range checks for any of the arguments.
* cdef inline datetime datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz, int fold=0): # <<<<<<<<<<<<<<
* return __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)
*
*/
struct __pyx_opt_args_7cpython_8datetime_datetime_new {
int __pyx_n;
int fold;
};
/* "cpython/datetime.pxd":306
*
* # Create timedelta object using DateTime CAPI factory function.
* cdef inline object timezone_new(object offset, object name=None): # <<<<<<<<<<<<<<
* if PY_VERSION_HEX < 0x030700b1:
* raise RuntimeError('Time zones are not available from the C-API.')
*/
struct __pyx_opt_args_7cpython_8datetime_timezone_new {
int __pyx_n;
PyObject *name;
};
/* "cpython/datetime.pxd":312
*
* # Create datetime object using DB API constructor.
* cdef inline datetime datetime_from_timestamp(timestamp, tz=None): # <<<<<<<<<<<<<<
* return PyDateTimeAPI.DateTime_FromTimestamp(
* PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
*/
struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp {
int __pyx_n;
PyObject *tz;
};
/* "pyreadstat/_readstat_parser.pxd":22
*
* # Definitions of enum types
* ctypedef enum py_file_extension: # <<<<<<<<<<<<<<
* FILE_EXT_SAV
* FILE_EXT_SAS7BDAT
*/
enum __pyx_t_10pyreadstat_16_readstat_parser_py_file_extension {
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_SAV,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_SAS7BDAT,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_DTA,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_XPORT,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_POR,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_EXT_SAS7BCAT
};
typedef enum __pyx_t_10pyreadstat_16_readstat_parser_py_file_extension __pyx_t_10pyreadstat_16_readstat_parser_py_file_extension;
/* "pyreadstat/_readstat_parser.pxd":30
* FILE_EXT_SAS7BCAT
*
* ctypedef enum py_file_format: # <<<<<<<<<<<<<<
* FILE_FORMAT_SAS
* FILE_FORMAT_SPSS
*/
enum __pyx_t_10pyreadstat_16_readstat_parser_py_file_format {
__pyx_e_10pyreadstat_16_readstat_parser_FILE_FORMAT_SAS,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_FORMAT_SPSS,
__pyx_e_10pyreadstat_16_readstat_parser_FILE_FORMAT_STATA
};
typedef enum __pyx_t_10pyreadstat_16_readstat_parser_py_file_format __pyx_t_10pyreadstat_16_readstat_parser_py_file_format;
/* "pyreadstat/_readstat_parser.pxd":35
* FILE_FORMAT_STATA
*
* ctypedef enum py_datetime_format: # <<<<<<<<<<<<<<
* DATE_FORMAT_NOTADATE
* DATE_FORMAT_DATE
*/
enum __pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format {
__pyx_e_10pyreadstat_16_readstat_parser_DATE_FORMAT_NOTADATE,
__pyx_e_10pyreadstat_16_readstat_parser_DATE_FORMAT_DATE,
__pyx_e_10pyreadstat_16_readstat_parser_DATE_FORMAT_DATETIME,
__pyx_e_10pyreadstat_16_readstat_parser_DATE_FORMAT_TIME
};
typedef enum __pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format __pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format;
/* "pyreadstat/_readstat_parser.pxd":41
* DATE_FORMAT_TIME
*
* ctypedef enum py_variable_format: # <<<<<<<<<<<<<<
* VAR_FORMAT_STRING
* VAR_FORMAT_LONG
*/
enum __pyx_t_10pyreadstat_16_readstat_parser_py_variable_format {
__pyx_e_10pyreadstat_16_readstat_parser_VAR_FORMAT_STRING,
__pyx_e_10pyreadstat_16_readstat_parser_VAR_FORMAT_LONG,
__pyx_e_10pyreadstat_16_readstat_parser_VAR_FORMAT_FLOAT,
__pyx_e_10pyreadstat_16_readstat_parser_VAR_FORMAT_MISSING
};
typedef enum __pyx_t_10pyreadstat_16_readstat_parser_py_variable_format __pyx_t_10pyreadstat_16_readstat_parser_py_variable_format;
/* "pyreadstat/_readstat_parser.pxd":49
* # Definitions of extension types
*
* cdef class data_container: # <<<<<<<<<<<<<<
* """
* This extension type holds all the data we need to get from our file from
*/
struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container {
PyObject_HEAD
int n_obs;
int n_vars;
int max_n_obs;
PyObject *col_data;
PyObject *col_data_len;
PyObject *col_names;
PyObject *col_labels;
PyObject *col_dtypes;
PyObject *col_numpy_dtypes;
PyObject *col_dtypes_isobject;
PyObject *col_dytpes_isfloat;
PyObject *col_formats;
PyObject *col_formats_original;
PyObject *origin;
__pyx_t_10pyreadstat_16_readstat_parser_py_file_format file_format;
int is_unkown_number_rows;
PyObject *file_label;
PyObject *file_encoding;
int metaonly;
int dates_as_pandas;
PyObject *label_to_var_name;
PyObject *labels_raw;
PyObject *notes;
PyObject *user_encoding;
PyObject *table_name;
int filter_cols;
PyObject *use_cols;
int usernan;
PyObject *missing_ranges;
PyObject *missing_user_values;
PyObject *variable_storage_width;
PyObject *variable_display_width;
PyObject *variable_alignment;
PyObject *variable_measure;
int no_datetime_conversion;
int ctime;
int mtime;
};
/* #### Code section: utility_code_proto ### */
/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
#define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
typedef struct {
void (*INCREF)(void*, PyObject*, Py_ssize_t);
void (*DECREF)(void*, PyObject*, Py_ssize_t);
void (*GOTREF)(void*, PyObject*, Py_ssize_t);
void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
void* (*SetupContext)(const char*, Py_ssize_t, const char*);
void (*FinishContext)(void**);
} __Pyx_RefNannyAPIStruct;
static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
#define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
#ifdef WITH_THREAD
#define __Pyx_RefNannySetupContext(name, acquire_gil)\
if (acquire_gil) {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
PyGILState_Release(__pyx_gilstate_save);\
} else {\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
}
#define __Pyx_RefNannyFinishContextNogil() {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__Pyx_RefNannyFinishContext();\
PyGILState_Release(__pyx_gilstate_save);\
}
#else
#define __Pyx_RefNannySetupContext(name, acquire_gil)\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__))
#define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext()
#endif
#define __Pyx_RefNannyFinishContextNogil() {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__Pyx_RefNannyFinishContext();\
PyGILState_Release(__pyx_gilstate_save);\
}
#define __Pyx_RefNannyFinishContext()\
__Pyx_RefNanny->FinishContext(&__pyx_refnanny)
#define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0)
#define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
#define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
#define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
#else
#define __Pyx_RefNannyDeclarations
#define __Pyx_RefNannySetupContext(name, acquire_gil)
#define __Pyx_RefNannyFinishContextNogil()
#define __Pyx_RefNannyFinishContext()
#define __Pyx_INCREF(r) Py_INCREF(r)
#define __Pyx_DECREF(r) Py_DECREF(r)
#define __Pyx_GOTREF(r)
#define __Pyx_GIVEREF(r)
#define __Pyx_XINCREF(r) Py_XINCREF(r)
#define __Pyx_XDECREF(r) Py_XDECREF(r)
#define __Pyx_XGOTREF(r)
#define __Pyx_XGIVEREF(r)
#endif
#define __Pyx_Py_XDECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; Py_XDECREF(tmp);\
} while (0)
#define __Pyx_XDECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; __Pyx_XDECREF(tmp);\
} while (0)
#define __Pyx_DECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; __Pyx_DECREF(tmp);\
} while (0)
#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
/* PyErrExceptionMatches.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
#endif
/* PyThreadStateGet.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
#if PY_VERSION_HEX >= 0x030C00A6
#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL)
#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
#else
#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL)
#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type)
#endif
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL)
#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred()
#endif
/* PyErrFetchRestore.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
#endif
/* PyObjectGetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif
/* PyObjectGetAttrStrNoError.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);
/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif
/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
/* TupleAndListFromArray.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#endif
/* IncludeStringH.proto */
#include
/* BytesEquals.proto */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
/* UnicodeEquals.proto */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
/* fastcall.proto */
#if CYTHON_AVOID_BORROWED_REFS
#define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i)
#elif CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i)
#else
#define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i)
#endif
#if CYTHON_AVOID_BORROWED_REFS
#define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg)
#define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg)
#else
#define __Pyx_Arg_NewRef_VARARGS(arg) arg
#define __Pyx_Arg_XDECREF_VARARGS(arg)
#endif
#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
#define __Pyx_KwValues_VARARGS(args, nargs) NULL
#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
#if CYTHON_METH_FASTCALL
#define __Pyx_Arg_FASTCALL(args, i) args[i]
#define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds)
#define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
#else
#define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
#endif
#define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs
to have the same reference counting */
#define __Pyx_Arg_XDECREF_FASTCALL(arg)
#else
#define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS
#define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
#define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
#define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
#define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
#define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg)
#define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start)
#else
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
#endif
/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
/* KeywordStringCheck.proto */
static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed);
/* RaiseDoubleKeywords.proto */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
/* ParseKeywords.proto */
static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues,
PyObject **argnames[],
PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,
const char* function_name);
/* PyObjectSetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
#else
#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif
/* PySequenceContains.proto */
static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
int result = PySequence_Contains(seq, item);
return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}
/* ModFloat[double].proto */
static CYTHON_INLINE double __Pyx_mod_double(double, double);
/* PyFunctionFastCall.proto */
#if CYTHON_FAST_PYCALL
#if !CYTHON_VECTORCALL
#define __Pyx_PyFunction_FastCall(func, args, nargs)\
__Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
#endif
#define __Pyx_BUILD_ASSERT_EXPR(cond)\
(sizeof(char [1 - 2*!(cond)]) - 1)
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
#if !CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03080000
#include "frameobject.h"
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
#ifndef Py_BUILD_CORE
#define Py_BUILD_CORE 1
#endif
#include "internal/pycore_frame.h"
#endif
#define __Pxy_PyFrame_Initialize_Offsets()
#define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus)
#else
static size_t __pyx_pyframe_localsplus_offset = 0;
#include "frameobject.h"
#define __Pxy_PyFrame_Initialize_Offsets()\
((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
(void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
#define __Pyx_PyFrame_GetLocalsplus(frame)\
(assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
#endif
#endif
#endif
/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif
/* PyObjectFastCall.proto */
#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);
/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
(is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
__Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
(PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
(PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
int wraparound, int boundscheck);
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
int is_list, int wraparound, int boundscheck);
/* PyDictVersioning.proto */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
(version_var) = __PYX_GET_DICT_VERSION(dict);\
(cache_var) = (value);
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
static PY_UINT64_T __pyx_dict_version = 0;\
static PyObject *__pyx_dict_cached_value = NULL;\
if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
(VAR) = __pyx_dict_cached_value;\
} else {\
(VAR) = __pyx_dict_cached_value = (LOOKUP);\
__pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
}\
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
#else
#define __PYX_GET_DICT_VERSION(dict) (0)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
#endif
/* GetModuleGlobalName.proto */
#if CYTHON_USE_DICT_VERSIONS
#define __Pyx_GetModuleGlobalName(var, name) do {\
static PY_UINT64_T __pyx_dict_version = 0;\
static PyObject *__pyx_dict_cached_value = NULL;\
(var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
(likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
__Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\
PY_UINT64_T __pyx_dict_version;\
PyObject *__pyx_dict_cached_value;\
(var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
#else
#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
#endif
/* RaiseUnboundLocalError.proto */
static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
/* UnicodeConcatInPlace.proto */
# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
#if CYTHON_REFNANNY
#define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny)
#else
#define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right)
#endif
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right
#if CYTHON_REFNANNY
, void* __pyx_refnanny
#endif
);
#else
#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat
#endif
#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right))
/* StrConcatInPlace.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyStr_Concat __Pyx_PyUnicode_Concat
#define __Pyx_PyStr_ConcatInPlace __Pyx_PyUnicode_ConcatInPlace
#else
#define __Pyx_PyStr_Concat PyNumber_Add
#define __Pyx_PyStr_ConcatInPlace PyNumber_InPlaceAdd
#endif
#define __Pyx_PyStr_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
PyNumber_Add(a, b) : __Pyx_PyStr_Concat(a, b))
#define __Pyx_PyStr_ConcatInPlaceSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
PyNumber_InPlaceAdd(a, b) : __Pyx_PyStr_ConcatInPlace(a, b))
/* PyObject_Str.proto */
#define __Pyx_PyObject_Str(obj)\
(likely(PyString_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj))
/* RaiseUnexpectedTypeError.proto */
static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);
/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
PyListObject* L = (PyListObject*) list;
Py_ssize_t len = Py_SIZE(list);
if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
Py_INCREF(x);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
L->ob_item[len] = x;
#else
PyList_SET_ITEM(list, len, x);
#endif
__Pyx_SET_SIZE(list, len + 1);
return 0;
}
return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif
/* DictGetItem.proto */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
#define __Pyx_PyObject_Dict_GetItem(obj, name)\
(likely(PyDict_CheckExact(obj)) ?\
__Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
#else
#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name)
#endif
/* SetItemInt.proto */
#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
(is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
__Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
int is_list, int wraparound, int boundscheck);
/* SliceObject.proto */
#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)\
__Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)
static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
int has_cstart, int has_cstop, int wraparound);
/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
/* dict_getitem_default.proto */
static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value);
/* UnpackUnboundCMethod.proto */
typedef struct {
PyObject *type;
PyObject **method_name;
PyCFunction func;
PyObject *method;
int flag;
} __Pyx_CachedCFunction;
/* CallUnboundCMethod1.proto */
static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#else
#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg)
#endif
/* CallUnboundCMethod2.proto */
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2);
#else
#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
#endif
/* PyObjectCall2Args.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
/* PyObjectGetMethod.proto */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
/* PyObjectCallMethod1.proto */
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
/* append.proto */
static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);
/* StrEquals.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
#else
#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
#endif
/* SliceObject.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
int has_cstart, int has_cstop, int wraparound);
/* RaiseTooManyValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
/* RaiseNeedMoreValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
/* IterFinish.proto */
static CYTHON_INLINE int __Pyx_IterFinish(void);
/* UnpackItemEndCheck.proto */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
/* ObjectGetItem.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key);
#else
#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
#endif
/* py_dict_items.proto */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d);
/* CallUnboundCMethod0.proto */
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CallUnboundCMethod0(cfunc, self)\
(likely((cfunc)->func) ?\
(likely((cfunc)->flag == METH_NOARGS) ? (*((cfunc)->func))(self, NULL) :\
(PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\
(PY_VERSION_HEX >= 0x030700A0 ?\
(*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\
(*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\
(PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\
(*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\
(likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ? ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
((cfunc)->flag == METH_VARARGS ? (*((cfunc)->func))(self, __pyx_empty_tuple) :\
__Pyx__CallUnboundCMethod0(cfunc, self)))))) :\
__Pyx__CallUnboundCMethod0(cfunc, self))
#else
#define __Pyx_CallUnboundCMethod0(cfunc, self) __Pyx__CallUnboundCMethod0(cfunc, self)
#endif
/* GetAttr.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
/* HasAttr.proto */
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n)
#else
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
#endif
/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif
/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb)
#endif
/* GetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif
/* pyfrozenset_new.proto */
static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it);
/* PySetContains.proto */
static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq);
/* ListExtend.proto */
static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000
PyObject* none = _PyList_Extend((PyListObject*)L, v);
if (unlikely(!none))
return -1;
Py_DECREF(none);
return 0;
#else
return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v);
#endif
}
/* PyObjectCallNoArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
/* IncludeStructmemberH.proto */
#include
/* FixUpExtensionType.proto */
#if CYTHON_USE_TYPE_SPECS
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
#endif
/* PyObjectCallMethod0.proto */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
/* ValidateBasesTuple.proto */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
#endif
/* PyType_Ready.proto */
CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);
/* PyObject_GenericGetAttrNoDict.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
#endif
/* PyObject_GenericGetAttr.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
#endif
/* SetupReduce.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_setup_reduce(PyObject* type_obj);
#endif
/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_9
#define __PYX_HAVE_RT_ImportType_proto_3_0_9
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#include
#endif
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
#define __PYX_GET_STRUCT_ALIGNMENT_3_0_9(s) alignof(s)
#else
#define __PYX_GET_STRUCT_ALIGNMENT_3_0_9(s) sizeof(void*)
#endif
enum __Pyx_ImportType_CheckSize_3_0_9 {
__Pyx_ImportType_CheckSize_Error_3_0_9 = 0,
__Pyx_ImportType_CheckSize_Warn_3_0_9 = 1,
__Pyx_ImportType_CheckSize_Ignore_3_0_9 = 2
};
static PyTypeObject *__Pyx_ImportType_3_0_9(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_9 check_size);
#endif
/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
/* ImportDottedModule.proto */
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);
#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple);
#endif
/* ImportDottedModuleRelFirst.proto */
static PyObject *__Pyx_ImportDottedModuleRelFirst(PyObject *name, PyObject *parts_tuple);
/* FetchSharedCythonModule.proto */
static PyObject *__Pyx_FetchSharedCythonABIModule(void);
/* FetchCommonType.proto */
#if !CYTHON_USE_TYPE_SPECS
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
#else
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
#endif
/* PyMethodNew.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
PyObject *typesModule=NULL, *methodType=NULL, *result=NULL;
CYTHON_UNUSED_VAR(typ);
if (!self)
return __Pyx_NewRef(func);
typesModule = PyImport_ImportModule("types");
if (!typesModule) return NULL;
methodType = PyObject_GetAttrString(typesModule, "MethodType");
Py_DECREF(typesModule);
if (!methodType) return NULL;
result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL);
Py_DECREF(methodType);
return result;
}
#elif PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
CYTHON_UNUSED_VAR(typ);
if (!self)
return __Pyx_NewRef(func);
return PyMethod_New(func, self);
}
#else
#define __Pyx_PyMethod_New PyMethod_New
#endif
/* PyVectorcallFastCallDict.proto */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
#endif
/* CythonFunctionShared.proto */
#define __Pyx_CyFunction_USED
#define __Pyx_CYFUNCTION_STATICMETHOD 0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02
#define __Pyx_CYFUNCTION_CCLASS 0x04
#define __Pyx_CYFUNCTION_COROUTINE 0x08
#define __Pyx_CyFunction_GetClosure(f)\
(((__pyx_CyFunctionObject *) (f))->func_closure)
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_GetClassObj(f)\
(((__pyx_CyFunctionObject *) (f))->func_classobj)
#else
#define __Pyx_CyFunction_GetClassObj(f)\
((PyObject*) ((PyCMethodObject *) (f))->mm_class)
#endif
#define __Pyx_CyFunction_SetClassObj(f, classobj)\
__Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
#define __Pyx_CyFunction_Defaults(type, f)\
((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
#if CYTHON_COMPILING_IN_LIMITED_API
PyObject_HEAD
PyObject *func;
#elif PY_VERSION_HEX < 0x030900B1
PyCFunctionObject func;
#else
PyCMethodObject func;
#endif
#if CYTHON_BACKPORT_VECTORCALL
__pyx_vectorcallfunc func_vectorcall;
#endif
#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API
PyObject *func_weakreflist;
#endif
PyObject *func_dict;
PyObject *func_name;
PyObject *func_qualname;
PyObject *func_doc;
PyObject *func_globals;
PyObject *func_code;
PyObject *func_closure;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
PyObject *func_classobj;
#endif
void *defaults;
int defaults_pyobjects;
size_t defaults_size;
int flags;
PyObject *defaults_tuple;
PyObject *defaults_kwdict;
PyObject *(*defaults_getter)(PyObject *);
PyObject *func_annotations;
PyObject *func_is_coroutine;
} __pyx_CyFunctionObject;
#undef __Pyx_CyOrPyCFunction_Check
#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType)
#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type)
#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType)
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc);
#undef __Pyx_IsSameCFunction
#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc)
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
int flags, PyObject* qualname,
PyObject *closure,
PyObject *module, PyObject *globals,
PyObject* code);
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
size_t size,
int pyobjects);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
PyObject *dict);
static int __pyx_CyFunction_init(PyObject *module);
#if CYTHON_METH_FASTCALL
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#if CYTHON_BACKPORT_VECTORCALL
#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
#else
#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
#endif
#endif
/* CythonFunction.proto */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
int flags, PyObject* qualname,
PyObject *closure,
PyObject *module, PyObject *globals,
PyObject* code);
/* SetNameInClass.proto */
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000
#define __Pyx_SetNameInClass(ns, name, value)\
(likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value))
#elif CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_SetNameInClass(ns, name, value)\
(likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value))
#else
#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value)
#endif
/* CalculateMetaclass.proto */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
/* PyObjectLookupSpecial.proto */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0)
#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1)
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error);
#else
#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n)
#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
#endif
/* Py3ClassCreate.proto */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
PyObject *mkw, PyObject *modname, PyObject *doc);
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
/* Py3UpdateBases.proto */
static PyObject* __Pyx_PEP560_update_bases(PyObject *bases);
/* CLineInTraceback.proto */
#ifdef CYTHON_CLINE_IN_TRACEBACK
#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#else
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#endif
/* CodeObjectCache.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
typedef struct {
PyCodeObject* code_object;
int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
int count;
int max_count;
__Pyx_CodeObjectCacheEntry* entries;
};
static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static PyCodeObject *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
#endif
/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
int py_line, const char *filename);
/* GCCDiagnostics.proto */
#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#define __Pyx_HAS_GCC_DIAGNOSTIC
#endif
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_readstat_type_t(readstat_type_t value);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
/* CIntFromPy.proto */
static CYTHON_INLINE readstat_type_t __Pyx_PyInt_As_readstat_type_t(PyObject *);
/* CIntFromPy.proto */
static CYTHON_INLINE __pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format __Pyx_PyInt_As___pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format(PyObject *);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From___pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format(__pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format value);
/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#else
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif
/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
#endif
#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
/* CheckBinaryVersion.proto */
static unsigned long __Pyx_get_runtime_version(void);
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);
/* VoidPtrExport.proto */
static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig);
/* FunctionExport.proto */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);
/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
/* #### Code section: module_declarations ### */
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_4year_year(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_5month_month(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_3day_day(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4hour_hour(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6minute_minute(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6second_second(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4fold_fold(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4year_year(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_5month_month(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_3day_day(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4hour_hour(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6minute_minute(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6second_second(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4fold_fold(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_3day_day(PyDateTime_Delta *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_6second_second(PyDateTime_Delta *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(PyDateTime_Delta *__pyx_v_self); /* proto*/
/* Module declarations from "libc.stddef" */
/* Module declarations from "pyreadstat.readstat_api" */
/* Module declarations from "libc.string" */
/* Module declarations from "libc.stdio" */
/* Module declarations from "__builtin__" */
/* Module declarations from "cpython.type" */
/* Module declarations from "cpython" */
/* Module declarations from "cpython.object" */
/* Module declarations from "cpython.version" */
/* Module declarations from "datetime" */
/* Module declarations from "cpython.datetime" */
static CYTHON_INLINE void __pyx_f_7cpython_8datetime_import_datetime(void); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cpython_8datetime_datetime_new(int, int, int, int, int, int, int, PyObject *, struct __pyx_opt_args_7cpython_8datetime_datetime_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cpython_8datetime_timedelta_new(int, int, int); /*proto*/
/* Module declarations from "cpython.exc" */
/* Module declarations from "libc.math" */
/* Module declarations from "pyreadstat._readstat_parser" */
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_readstat_to_numpy_types = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_sas_date_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_sas_datetime_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_sas_time_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_sas_all_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_sas_origin = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_spss_datetime_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_spss_date_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_spss_time_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_spss_all_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_spss_origin = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_stata_datetime_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_stata_date_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_stata_time_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_stata_all_formats = 0;
static PyObject *__pyx_v_10pyreadstat_16_readstat_parser_stata_origin = 0;
static __pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format __pyx_f_10pyreadstat_16_readstat_parser_transform_variable_format(PyObject *, __pyx_t_10pyreadstat_16_readstat_parser_py_file_format); /*proto*/
static PyObject *__pyx_f_10pyreadstat_16_readstat_parser_transform_datetime(__pyx_t_10pyreadstat_16_readstat_parser_py_datetime_format, double, __pyx_t_10pyreadstat_16_readstat_parser_py_file_format, PyObject *, int); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_metadata(readstat_metadata_t *, void *); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_variable(int, readstat_variable_t *, char *, void *); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_value(int, readstat_variable_t *, readstat_value_t, void *); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_value_label(char *, readstat_value_t, char *, void *); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_note(int, char *, void *); /*proto*/
static void __pyx_f_10pyreadstat_16_readstat_parser_check_exit_status(readstat_error_t); /*proto*/
static void __pyx_f_10pyreadstat_16_readstat_parser_run_readstat_parser(char *, struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *, __pyx_t_10pyreadstat_16_readstat_parser_py_file_extension, long, long); /*proto*/
static PyObject *__pyx_f_10pyreadstat_16_readstat_parser_data_container_to_dict(struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *); /*proto*/
static PyObject *__pyx_f_10pyreadstat_16_readstat_parser_dict_to_pandas_dataframe(PyObject *, struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *); /*proto*/
static PyObject *__pyx_f_10pyreadstat_16_readstat_parser_data_container_extract_metadata(struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *); /*proto*/
static PyObject *__pyx_f_10pyreadstat_16_readstat_parser_convert_readstat_to_python_value(readstat_value_t, int, struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *); /*proto*/
static int __pyx_f_10pyreadstat_16_readstat_parser_handle_open(char const *, void *); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "pyreadstat._readstat_parser"
extern int __pyx_module_is_main_pyreadstat___readstat_parser;
int __pyx_module_is_main_pyreadstat___readstat_parser = 0;
/* Implementation of "pyreadstat._readstat_parser" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_object;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_chr;
static PyObject *__pyx_builtin_enumerate;
static PyObject *__pyx_builtin_zip;
static PyObject *__pyx_builtin_UnicodeError;
static PyObject *__pyx_builtin_RuntimeError;
/* #### Code section: string_decls ### */
static const char __pyx_k_d[] = "%d";
static const char __pyx_k__2[] = "";
static const char __pyx_k__8[] = ".";
static const char __pyx_k__9[] = "*";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_hi[] = "hi";
static const char __pyx_k_lo[] = "lo";
static const char __pyx_k_np[] = "np";
static const char __pyx_k_nt[] = "nt";
static const char __pyx_k_os[] = "os";
static const char __pyx_k_pd[] = "pd";
static const char __pyx_k_tC[] = "%tC";
static const char __pyx_k_tc[] = "%tc";
static const char __pyx_k_td[] = "%td";
static const char __pyx_k_TOD[] = "TOD";
static const char __pyx_k__15[] = "?";
static const char __pyx_k_chr[] = "chr";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_get[] = "get";
static const char __pyx_k_nan[] = "nan";
static const char __pyx_k_sys[] = "sys";
static const char __pyx_k_zip[] = "zip";
static const char __pyx_k_DATE[] = "DATE";
static const char __pyx_k_HHMM[] = "HHMM";
static const char __pyx_k_NULL[] = "NULL";
static const char __pyx_k_TIME[] = "TIME";
static const char __pyx_k_copy[] = "copy";
static const char __pyx_k_date[] = "date";
static const char __pyx_k_dict[] = "dict";
static const char __pyx_k_fill[] = "fill";
static const char __pyx_k_init[] = "__init__";
static const char __pyx_k_int8[] = "int8";
static const char __pyx_k_left[] = "left";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_path[] = "path";
static const char __pyx_k_self[] = "self";
static const char __pyx_k_spec[] = "__spec__";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_time[] = "time";
static const char __pyx_k_warn[] = "warn";
static const char __pyx_k_ADATE[] = "ADATE";
static const char __pyx_k_DATE8[] = "DATE8";
static const char __pyx_k_DATE9[] = "DATE9";
static const char __pyx_k_DTIME[] = "DTIME";
static const char __pyx_k_EDATE[] = "EDATE";
static const char __pyx_k_JDATE[] = "JDATE";
static const char __pyx_k_M8_ns[] = "";
static const char __pyx_k_tdCCYY_NN_DD[] = "%tdCCYY-NN-DD";
static const char __pyx_k_undetermined[] = "undetermined";
static const char __pyx_k_value_labels[] = "value_labels";
static const char __pyx_k_ReadstatError[] = "ReadstatError";
static const char __pyx_k_class_getitem[] = "__class_getitem__";
static const char __pyx_k_column_labels[] = "column_labels";
static const char __pyx_k_creation_time[] = "creation_time";
static const char __pyx_k_file_encoding[] = "file_encoding";
static const char __pyx_k_fromtimestamp[] = "fromtimestamp";
static const char __pyx_k_init_subclass[] = "__init_subclass__";
static const char __pyx_k_output_format[] = "output_format";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_data_container[] = "data_container";
static const char __pyx_k_missing_ranges[] = "missing_ranges";
static const char __pyx_k_number_columns[] = "number_columns";
static const char __pyx_k_PyreadstatError[] = "PyreadstatError";
static const char __pyx_k_allowed_formats[] = "allowed_formats";
static const char __pyx_k_sas_all_formats[] = "sas_all_formats";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_surrogateescape[] = "surrogateescape";
static const char __pyx_k_Unkown_data_type[] = "Unkown data type";
static const char __pyx_k_sas_date_formats[] = "sas_date_formats";
static const char __pyx_k_sas_time_formats[] = "sas_time_formats";
static const char __pyx_k_spss_all_formats[] = "spss_all_formats";
static const char __pyx_k_variable_measure[] = "variable_measure";
static const char __pyx_k_modification_time[] = "modification_time";
static const char __pyx_k_spss_date_formats[] = "spss_date_formats";
static const char __pyx_k_spss_time_formats[] = "spss_time_formats";
static const char __pyx_k_stata_all_formats[] = "stata_all_formats";
static const char __pyx_k_variable_to_label[] = "variable_to_label";
static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_metadata_container[] = "metadata_container";
static const char __pyx_k_stata_date_formats[] = "stata_date_formats";
static const char __pyx_k_stata_time_formats[] = "stata_time_formats";
static const char __pyx_k_variable_alignment[] = "variable_alignment";
static const char __pyx_k_Unknown_file_format[] = "Unknown file format";
static const char __pyx_k_missing_user_values[] = "missing_user_values";
static const char __pyx_k_sas_datetime_formats[] = "sas_datetime_formats";
static const char __pyx_k_File_0_does_not_exist[] = "File {0} does not exist!";
static const char __pyx_k_getfilesystemencoding[] = "getfilesystemencoding";
static const char __pyx_k_spss_datetime_formats[] = "spss_datetime_formats";
static const char __pyx_k_variable_value_labels[] = "variable_value_labels";
static const char __pyx_k_column_names_to_labels[] = "column_names_to_labels";
static const char __pyx_k_stata_datetime_formats[] = "stata_datetime_formats";
static const char __pyx_k_variable_display_width[] = "variable_display_width";
static const char __pyx_k_variable_storage_width[] = "variable_storage_width";
static const char __pyx_k_original_variable_types[] = "original_variable_types";
static const char __pyx_k_readstat_to_numpy_types[] = "readstat_to_numpy_types";
static const char __pyx_k_readstat_variable_types[] = "readstat_variable_types";
static const char __pyx_k_metadata_container___init[] = "metadata_container.__init__";
static const char __pyx_k_pyreadstat__readstat_parser[] = "pyreadstat._readstat_parser";
static const char __pyx_k_data_container___reduce_cython[] = "data_container.__reduce_cython__";
static const char __pyx_k_Just_defining_a_custom_exceptio[] = "\n Just defining a custom exception to raise when readstat gives an error return code.\n ";
static const char __pyx_k_This_class_holds_metadata_we_wa[] = "\n This class holds metadata we want to give back to python\n ";
static const char __pyx_k_pyreadstat__readstat_parser_pyx[] = "pyreadstat/_readstat_parser.pyx";
static const char __pyx_k_Failed_convert_C_to_python_value[] = "Failed convert C to python value";
static const char __pyx_k_Failed_to_read_number_of_variabl[] = "Failed to read number of variables";
static const char __pyx_k_STRING_type_with_value_s_with_da[] = "STRING type with value '%s' with date type in column '%s'";
static const char __pyx_k_Time_zones_are_not_available_fro[] = "Time zones are not available from the C-API.";
static const char __pyx_k_column_0_is_duplicated_renamed_t[] = "column '{0}' is duplicated, renamed to '{1}'";
static const char __pyx_k_data_container___setstate_cython[] = "data_container.__setstate_cython__";
static const char __pyx_k_file_path_could_not_be_encoded_w[] = "file path could not be encoded with %s which is set as your system encoding, trying to encode it as utf-8. Please set your system encoding correctly.";
static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
static const char __pyx_k_output_format_must_be_one_of_all[] = "output format must be one of {allowed_formats}, '{output_format}' was given";
static const char __pyx_k_path_must_be_either_str_or_bytes[] = "path must be either str or bytes";
static const char __pyx_k_path_must_be_str_bytes_or_unicod[] = "path must be str, bytes or unicode";
static const char __pyx_k_Just_defining_a_custom_exceptio_2[] = "\n Just defining a custom exception to raise when pyreadstat raises an exception.\n ";
/* #### Code section: decls ### */
static int __pyx_pf_10pyreadstat_16_readstat_parser_14data_container___cinit__(struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_10pyreadstat_16_readstat_parser_14data_container_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_10pyreadstat_16_readstat_parser_14data_container_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_10pyreadstat_16_readstat_parser_data_container *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_10pyreadstat_16_readstat_parser_18metadata_container___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_tp_new_10pyreadstat_16_readstat_parser_data_container(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, 0, 0, 0, 0};
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items = {0, 0, 0, 0, 0};
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
typedef struct {
PyObject *__pyx_d;
PyObject *__pyx_b;
PyObject *__pyx_cython_runtime;
PyObject *__pyx_empty_tuple;
PyObject *__pyx_empty_bytes;
PyObject *__pyx_empty_unicode;
#ifdef __Pyx_CyFunction_USED
PyTypeObject *__pyx_CyFunctionType;
#endif
#ifdef __Pyx_FusedFunction_USED
PyTypeObject *__pyx_FusedFunctionType;
#endif
#ifdef __Pyx_Generator_USED
PyTypeObject *__pyx_GeneratorType;
#endif
#ifdef __Pyx_IterableCoroutine_USED
PyTypeObject *__pyx_IterableCoroutineType;
#endif
#ifdef __Pyx_Coroutine_USED
PyTypeObject *__pyx_CoroutineAwaitType;
#endif
#ifdef __Pyx_Coroutine_USED
PyTypeObject *__pyx_CoroutineType;
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
PyTypeObject *__pyx_ptype_7cpython_4type_type;
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
PyTypeObject *__pyx_ptype_7cpython_8datetime_date;
PyTypeObject *__pyx_ptype_7cpython_8datetime_time;
PyTypeObject *__pyx_ptype_7cpython_8datetime_datetime;
PyTypeObject *__pyx_ptype_7cpython_8datetime_timedelta;
PyTypeObject *__pyx_ptype_7cpython_8datetime_tzinfo;
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
PyObject *__pyx_type_10pyreadstat_16_readstat_parser_data_container;
#endif
PyTypeObject *__pyx_ptype_10pyreadstat_16_readstat_parser_data_container;
PyObject *__pyx_n_s_ADATE;
PyObject *__pyx_n_s_ADATE10;
PyObject *__pyx_n_s_ADATE8;
PyObject *__pyx_n_s_B8601DA;
PyObject *__pyx_n_s_B8601DN;
PyObject *__pyx_n_s_B8601DT;
PyObject *__pyx_n_s_B8601TM;
PyObject *__pyx_n_s_DATE;
PyObject *__pyx_n_s_DATE11;
PyObject *__pyx_n_s_DATE12;
PyObject *__pyx_n_s_DATE8;
PyObject *__pyx_n_s_DATE9;
PyObject *__pyx_n_s_DATEAMPM;
PyObject *__pyx_n_s_DATETIME;
PyObject *__pyx_n_s_DATETIME17;
PyObject *__pyx_n_s_DATETIME18;
PyObject *__pyx_n_s_DATETIME19;
PyObject *__pyx_n_s_DATETIME20;
PyObject *__pyx_n_s_DATETIME21;
PyObject *__pyx_n_s_DATETIME22;
PyObject *__pyx_kp_s_DATETIME23_2;
PyObject *__pyx_n_s_DATETIME8;
PyObject *__pyx_n_s_DDMMYY;
PyObject *__pyx_n_s_DDMMYYB;
PyObject *__pyx_n_s_DDMMYYB10;
PyObject *__pyx_n_s_DDMMYYC;
PyObject *__pyx_n_s_DDMMYYC10;
PyObject *__pyx_n_s_DDMMYYD;
PyObject *__pyx_n_s_DDMMYYD10;
PyObject *__pyx_n_s_DDMMYYN6;
PyObject *__pyx_n_s_DDMMYYN8;
PyObject *__pyx_n_s_DDMMYYP;
PyObject *__pyx_n_s_DDMMYYP10;
PyObject *__pyx_n_s_DDMMYYS;
PyObject *__pyx_n_s_DDMMYYS10;
PyObject *__pyx_n_s_DTDATE;
PyObject *__pyx_n_s_DTIME;
PyObject *__pyx_n_s_DataFrame;
PyObject *__pyx_n_s_E8601DA;
PyObject *__pyx_n_s_E8601DT;
PyObject *__pyx_n_s_E8601TM;
PyObject *__pyx_n_s_EDATE;
PyObject *__pyx_n_s_EDATE10;
PyObject *__pyx_n_s_EDATE8;
PyObject *__pyx_kp_s_Failed_convert_C_to_python_value;
PyObject *__pyx_kp_s_Failed_to_read_number_of_variabl;
PyObject *__pyx_kp_s_File_0_does_not_exist;
PyObject *__pyx_n_s_HHMM;
PyObject *__pyx_n_s_IS8601DA;
PyObject *__pyx_n_s_IS8601DT;
PyObject *__pyx_n_s_IS8601TM;
PyObject *__pyx_n_s_JDATE;
PyObject *__pyx_n_s_JDATE5;
PyObject *__pyx_n_s_JDATE7;
PyObject *__pyx_kp_s_Just_defining_a_custom_exceptio;
PyObject *__pyx_kp_s_Just_defining_a_custom_exceptio_2;
PyObject *__pyx_kp_s_M8_ns;
PyObject *__pyx_n_s_MDYAMPM;
PyObject *__pyx_n_s_MMDDYY;
PyObject *__pyx_n_s_MMDDYYB;
PyObject *__pyx_n_s_MMDDYYB10;
PyObject *__pyx_n_s_MMDDYYC;
PyObject *__pyx_n_s_MMDDYYC10;
PyObject *__pyx_n_s_MMDDYYD;
PyObject *__pyx_n_s_MMDDYYD10;
PyObject *__pyx_n_s_MMDDYYN6;
PyObject *__pyx_n_s_MMDDYYN8;
PyObject *__pyx_n_s_MMDDYYP;
PyObject *__pyx_n_s_MMDDYYP10;
PyObject *__pyx_n_s_MMDDYYS;
PyObject *__pyx_n_s_MMDDYYS10;
PyObject *__pyx_n_s_NULL;
PyObject *__pyx_n_s_OrderedDict;
PyObject *__pyx_n_s_PyreadstatError;
PyObject *__pyx_n_s_ReadstatError;
PyObject *__pyx_n_s_RuntimeError;
PyObject *__pyx_n_s_SDATE;
PyObject *__pyx_n_s_SDATE10;
PyObject *__pyx_n_s_SDATE8;
PyObject *__pyx_kp_s_STRING_type_with_value_s_with_da;
PyObject *__pyx_n_s_TIME;
PyObject *__pyx_kp_s_TIME11_2;
PyObject *__pyx_n_s_TIME20;
PyObject *__pyx_kp_s_TIME20_3;
PyObject *__pyx_n_s_TIME5;
PyObject *__pyx_n_s_TIME8;
PyObject *__pyx_n_s_TIMEAMPM;
PyObject *__pyx_n_s_TOD;
PyObject *__pyx_kp_s_This_class_holds_metadata_we_wa;
PyObject *__pyx_kp_s_Time_zones_are_not_available_fro;
PyObject *__pyx_n_s_TypeError;
PyObject *__pyx_n_s_UnicodeError;
PyObject *__pyx_kp_s_Unknown_file_format;
PyObject *__pyx_kp_s_Unkown_data_type;
PyObject *__pyx_n_s_WEEKDATE;
PyObject *__pyx_n_s_WEEKDATX;
PyObject *__pyx_n_s_YMDHMS16;
PyObject *__pyx_n_s_YMDHMS19;
PyObject *__pyx_kp_s_YMDHMS19_2;
PyObject *__pyx_n_s_YMDHMS20;
PyObject *__pyx_n_s_YYMMDD;
PyObject *__pyx_n_s_YYMMDD10;
PyObject *__pyx_n_s_YYMMDDB;
PyObject *__pyx_n_s_YYMMDDD;
PyObject *__pyx_n_s_YYMMDDN;
PyObject *__pyx_n_s_YYMMDDP;
PyObject *__pyx_n_s_YYMMDDS;
PyObject *__pyx_n_s__15;
PyObject *__pyx_kp_s__2;
PyObject *__pyx_kp_u__8;
PyObject *__pyx_n_s__9;
PyObject *__pyx_n_s_allowed_formats;
PyObject *__pyx_n_s_append;
PyObject *__pyx_n_s_astype;
PyObject *__pyx_n_s_asyncio_coroutines;
PyObject *__pyx_n_s_center;
PyObject *__pyx_n_s_chr;
PyObject *__pyx_n_s_class_getitem;
PyObject *__pyx_n_s_cline_in_traceback;
PyObject *__pyx_n_s_collections;
PyObject *__pyx_kp_s_column_0_is_duplicated_renamed_t;
PyObject *__pyx_n_s_column_labels;
PyObject *__pyx_n_s_column_names;
PyObject *__pyx_n_s_column_names_to_labels;
PyObject *__pyx_n_s_columns;
PyObject *__pyx_n_s_copy;
PyObject *__pyx_n_s_creation_time;
PyObject *__pyx_kp_s_d;
PyObject *__pyx_n_s_data_container;
PyObject *__pyx_n_s_data_container___reduce_cython;
PyObject *__pyx_n_s_data_container___setstate_cython;
PyObject *__pyx_n_s_date;
PyObject *__pyx_n_s_datetime;
PyObject *__pyx_n_s_dict;
PyObject *__pyx_n_s_dict_2;
PyObject *__pyx_kp_u_disable;
PyObject *__pyx_n_s_doc;
PyObject *__pyx_n_s_double;
PyObject *__pyx_n_s_dtype;
PyObject *__pyx_n_s_dtypes;
PyObject *__pyx_n_s_duplicated;
PyObject *__pyx_n_s_empty;
PyObject *__pyx_kp_u_enable;
PyObject *__pyx_n_s_encode;
PyObject *__pyx_n_s_enumerate;
PyObject *__pyx_n_s_expanduser;
PyObject *__pyx_n_s_file_encoding;
PyObject *__pyx_n_s_file_label;
PyObject *__pyx_kp_s_file_path_could_not_be_encoded_w;
PyObject *__pyx_n_s_fill;
PyObject *__pyx_n_s_float;
PyObject *__pyx_n_s_float64;
PyObject *__pyx_n_s_format;
PyObject *__pyx_n_s_from_dict;
PyObject *__pyx_n_s_fromtimestamp;
PyObject *__pyx_n_s_fsdecode;
PyObject *__pyx_n_s_fsencode;
PyObject *__pyx_kp_u_gc;
PyObject *__pyx_n_s_get;
PyObject *__pyx_n_s_getfilesystemencoding;
PyObject *__pyx_n_s_getstate;
PyObject *__pyx_n_s_hi;
PyObject *__pyx_n_s_import;
PyObject *__pyx_n_s_init;
PyObject *__pyx_n_s_init_subclass;
PyObject *__pyx_n_s_initializing;
PyObject *__pyx_n_s_int16;
PyObject *__pyx_n_s_int32;
PyObject *__pyx_n_s_int64;
PyObject *__pyx_n_s_int8;
PyObject *__pyx_n_s_is_coroutine;
PyObject *__pyx_kp_u_isenabled;
PyObject *__pyx_n_s_isfile;
PyObject *__pyx_n_s_items;
PyObject *__pyx_n_s_left;
PyObject *__pyx_n_s_lo;
PyObject *__pyx_n_s_main;
PyObject *__pyx_n_s_metaclass;
PyObject *__pyx_n_s_metadata_container;
PyObject *__pyx_n_s_metadata_container___init;
PyObject *__pyx_n_s_missing_ranges;
PyObject *__pyx_n_s_missing_user_values;
PyObject *__pyx_n_s_modification_time;
PyObject *__pyx_n_s_module;
PyObject *__pyx_n_s_mro_entries;
PyObject *__pyx_n_s_name;
PyObject *__pyx_n_s_name_2;
PyObject *__pyx_n_s_nan;
PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
PyObject *__pyx_n_s_nominal;
PyObject *__pyx_n_s_notes;
PyObject *__pyx_n_s_np;
PyObject *__pyx_n_s_nt;
PyObject *__pyx_n_s_number_columns;
PyObject *__pyx_n_s_number_rows;
PyObject *__pyx_n_s_numpy;
PyObject *__pyx_n_s_object;
PyObject *__pyx_n_s_ordinal;
PyObject *__pyx_n_s_original_variable_types;
PyObject *__pyx_n_s_os;
PyObject *__pyx_n_s_output_format;
PyObject *__pyx_kp_s_output_format_must_be_one_of_all;
PyObject *__pyx_n_s_pandas;
PyObject *__pyx_n_s_path;
PyObject *__pyx_kp_s_path_must_be_either_str_or_bytes;
PyObject *__pyx_kp_s_path_must_be_str_bytes_or_unicod;
PyObject *__pyx_n_s_pd;
PyObject *__pyx_n_s_prepare;
PyObject *__pyx_n_s_pyreadstat__readstat_parser;
PyObject *__pyx_kp_s_pyreadstat__readstat_parser_pyx;
PyObject *__pyx_n_s_pyx_capi;
PyObject *__pyx_n_s_pyx_state;
PyObject *__pyx_n_s_qualname;
PyObject *__pyx_n_s_range;
PyObject *__pyx_n_s_readstat_to_numpy_types;
PyObject *__pyx_n_s_readstat_variable_types;
PyObject *__pyx_n_s_reduce;
PyObject *__pyx_n_s_reduce_cython;
PyObject *__pyx_n_s_reduce_ex;
PyObject *__pyx_n_s_right;
PyObject *__pyx_n_s_sas_all_formats;
PyObject *__pyx_n_s_sas_date_formats;
PyObject *__pyx_n_s_sas_datetime_formats;
PyObject *__pyx_n_s_sas_origin;
PyObject *__pyx_n_s_sas_time_formats;
PyObject *__pyx_n_s_scale;
PyObject *__pyx_n_s_self;
PyObject *__pyx_n_s_set_name;
PyObject *__pyx_n_s_setstate;
PyObject *__pyx_n_s_setstate_cython;
PyObject *__pyx_n_s_spec;
PyObject *__pyx_n_s_spss_all_formats;
PyObject *__pyx_n_s_spss_date_formats;
PyObject *__pyx_n_s_spss_datetime_formats;
PyObject *__pyx_n_s_spss_origin;
PyObject *__pyx_n_s_spss_time_formats;
PyObject *__pyx_n_s_stata_all_formats;
PyObject *__pyx_n_s_stata_date_formats;
PyObject *__pyx_n_s_stata_datetime_formats;
PyObject *__pyx_n_s_stata_origin;
PyObject *__pyx_n_s_stata_time_formats;
PyObject *__pyx_n_s_string;
PyObject *__pyx_kp_s_stringsource;
PyObject *__pyx_n_s_super;
PyObject *__pyx_n_s_surrogateescape;
PyObject *__pyx_n_s_sys;
PyObject *__pyx_kp_s_tC;
PyObject *__pyx_n_s_table_name;
PyObject *__pyx_kp_s_tc;
PyObject *__pyx_kp_s_tcHH_MM;
PyObject *__pyx_kp_s_tcHH_MM_SS;
PyObject *__pyx_kp_s_td;
PyObject *__pyx_kp_s_tdCCYY_NN_DD;
PyObject *__pyx_kp_s_tdD_m_Y;
PyObject *__pyx_n_s_test;
PyObject *__pyx_n_s_time;
PyObject *__pyx_n_s_to_datetime;
PyObject *__pyx_n_s_tolist;
PyObject *__pyx_n_s_undetermined;
PyObject *__pyx_n_s_unknown;
PyObject *__pyx_kp_s_utf_8;
PyObject *__pyx_n_s_value_labels;
PyObject *__pyx_n_s_variable_alignment;
PyObject *__pyx_n_s_variable_display_width;
PyObject *__pyx_n_s_variable_measure;
PyObject *__pyx_n_s_variable_storage_width;
PyObject *__pyx_n_s_variable_to_label;
PyObject *__pyx_n_s_variable_value_labels;
PyObject *__pyx_n_s_warn;
PyObject *__pyx_n_s_warnings;
PyObject *__pyx_n_s_zip;
PyObject *__pyx_int_0;
PyObject *__pyx_int_1;
PyObject *__pyx_int_100000;
PyObject *__pyx_tuple_;
PyObject *__pyx_tuple__3;
PyObject *__pyx_tuple__4;
PyObject *__pyx_tuple__5;
PyObject *__pyx_tuple__6;
PyObject *__pyx_tuple__7;
PyObject *__pyx_tuple__10;
PyObject *__pyx_tuple__12;
PyObject *__pyx_codeobj__11;
PyObject *__pyx_codeobj__13;
PyObject *__pyx_codeobj__14;
} __pyx_mstate;
#if CYTHON_USE_MODULE_STATE
#ifdef __cplusplus
namespace {
extern struct PyModuleDef __pyx_moduledef;
} /* anonymous namespace */
#else
static struct PyModuleDef __pyx_moduledef;
#endif
#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o))
#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef)))
#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
#else
static __pyx_mstate __pyx_mstate_global_static =
#ifdef __cplusplus
{};
#else
{0};
#endif
static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static;
#endif
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static int __pyx_m_clear(PyObject *m) {
__pyx_mstate *clear_module_state = __pyx_mstate(m);
if (!clear_module_state) return 0;
Py_CLEAR(clear_module_state->__pyx_d);
Py_CLEAR(clear_module_state->__pyx_b);
Py_CLEAR(clear_module_state->__pyx_cython_runtime);
Py_CLEAR(clear_module_state->__pyx_empty_tuple);
Py_CLEAR(clear_module_state->__pyx_empty_bytes);
Py_CLEAR(clear_module_state->__pyx_empty_unicode);
#ifdef __Pyx_CyFunction_USED
Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
#endif
#ifdef __Pyx_FusedFunction_USED
Py_CLEAR(clear_module_state->__pyx_FusedFunctionType);
#endif
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type);
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_date);
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_time);
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_datetime);
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_timedelta);
Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_tzinfo);
Py_CLEAR(clear_module_state->__pyx_ptype_10pyreadstat_16_readstat_parser_data_container);
Py_CLEAR(clear_module_state->__pyx_type_10pyreadstat_16_readstat_parser_data_container);
Py_CLEAR(clear_module_state->__pyx_n_s_ADATE);
Py_CLEAR(clear_module_state->__pyx_n_s_ADATE10);
Py_CLEAR(clear_module_state->__pyx_n_s_ADATE8);
Py_CLEAR(clear_module_state->__pyx_n_s_B8601DA);
Py_CLEAR(clear_module_state->__pyx_n_s_B8601DN);
Py_CLEAR(clear_module_state->__pyx_n_s_B8601DT);
Py_CLEAR(clear_module_state->__pyx_n_s_B8601TM);
Py_CLEAR(clear_module_state->__pyx_n_s_DATE);
Py_CLEAR(clear_module_state->__pyx_n_s_DATE11);
Py_CLEAR(clear_module_state->__pyx_n_s_DATE12);
Py_CLEAR(clear_module_state->__pyx_n_s_DATE8);
Py_CLEAR(clear_module_state->__pyx_n_s_DATE9);
Py_CLEAR(clear_module_state->__pyx_n_s_DATEAMPM);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME17);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME18);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME19);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME20);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME21);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME22);
Py_CLEAR(clear_module_state->__pyx_kp_s_DATETIME23_2);
Py_CLEAR(clear_module_state->__pyx_n_s_DATETIME8);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYY);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYB);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYB10);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYC);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYC10);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYD);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYD10);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYN6);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYN8);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYP);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYP10);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYS);
Py_CLEAR(clear_module_state->__pyx_n_s_DDMMYYS10);
Py_CLEAR(clear_module_state->__pyx_n_s_DTDATE);
Py_CLEAR(clear_module_state->__pyx_n_s_DTIME);
Py_CLEAR(clear_module_state->__pyx_n_s_DataFrame);
Py_CLEAR(clear_module_state->__pyx_n_s_E8601DA);
Py_CLEAR(clear_module_state->__pyx_n_s_E8601DT);
Py_CLEAR(clear_module_state->__pyx_n_s_E8601TM);
Py_CLEAR(clear_module_state->__pyx_n_s_EDATE);
Py_CLEAR(clear_module_state->__pyx_n_s_EDATE10);
Py_CLEAR(clear_module_state->__pyx_n_s_EDATE8);
Py_CLEAR(clear_module_state->__pyx_kp_s_Failed_convert_C_to_python_value);
Py_CLEAR(clear_module_state->__pyx_kp_s_Failed_to_read_number_of_variabl);
Py_CLEAR(clear_module_state->__pyx_kp_s_File_0_does_not_exist);
Py_CLEAR(clear_module_state->__pyx_n_s_HHMM);
Py_CLEAR(clear_module_state->__pyx_n_s_IS8601DA);
Py_CLEAR(clear_module_state->__pyx_n_s_IS8601DT);
Py_CLEAR(clear_module_state->__pyx_n_s_IS8601TM);
Py_CLEAR(clear_module_state->__pyx_n_s_JDATE);
Py_CLEAR(clear_module_state->__pyx_n_s_JDATE5);
Py_CLEAR(clear_module_state->__pyx_n_s_JDATE7);
Py_CLEAR(clear_module_state->__pyx_kp_s_Just_defining_a_custom_exceptio);
Py_CLEAR(clear_module_state->__pyx_kp_s_Just_defining_a_custom_exceptio_2);
Py_CLEAR(clear_module_state->__pyx_kp_s_M8_ns);
Py_CLEAR(clear_module_state->__pyx_n_s_MDYAMPM);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYY);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYB);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYB10);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYC);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYC10);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYD);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYD10);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYN6);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYN8);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYP);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYP10);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYS);
Py_CLEAR(clear_module_state->__pyx_n_s_MMDDYYS10);
Py_CLEAR(clear_module_state->__pyx_n_s_NULL);
Py_CLEAR(clear_module_state->__pyx_n_s_OrderedDict);
Py_CLEAR(clear_module_state->__pyx_n_s_PyreadstatError);
Py_CLEAR(clear_module_state->__pyx_n_s_ReadstatError);
Py_CLEAR(clear_module_state->__pyx_n_s_RuntimeError);
Py_CLEAR(clear_module_state->__pyx_n_s_SDATE);
Py_CLEAR(clear_module_state->__pyx_n_s_SDATE10);
Py_CLEAR(clear_module_state->__pyx_n_s_SDATE8);
Py_CLEAR(clear_module_state->__pyx_kp_s_STRING_type_with_value_s_with_da);
Py_CLEAR(clear_module_state->__pyx_n_s_TIME);
Py_CLEAR(clear_module_state->__pyx_kp_s_TIME11_2);
Py_CLEAR(clear_module_state->__pyx_n_s_TIME20);
Py_CLEAR(clear_module_state->__pyx_kp_s_TIME20_3);
Py_CLEAR(clear_module_state->__pyx_n_s_TIME5);
Py_CLEAR(clear_module_state->__pyx_n_s_TIME8);
Py_CLEAR(clear_module_state->__pyx_n_s_TIMEAMPM);
Py_CLEAR(clear_module_state->__pyx_n_s_TOD);
Py_CLEAR(clear_module_state->__pyx_kp_s_This_class_holds_metadata_we_wa);
Py_CLEAR(clear_module_state->__pyx_kp_s_Time_zones_are_not_available_fro);
Py_CLEAR(clear_module_state->__pyx_n_s_TypeError);
Py_CLEAR(clear_module_state->__pyx_n_s_UnicodeError);
Py_CLEAR(clear_module_state->__pyx_kp_s_Unknown_file_format);
Py_CLEAR(clear_module_state->__pyx_kp_s_Unkown_data_type);
Py_CLEAR(clear_module_state->__pyx_n_s_WEEKDATE);
Py_CLEAR(clear_module_state->__pyx_n_s_WEEKDATX);
Py_CLEAR(clear_module_state->__pyx_n_s_YMDHMS16);
Py_CLEAR(clear_module_state->__pyx_n_s_YMDHMS19);
Py_CLEAR(clear_module_state->__pyx_kp_s_YMDHMS19_2);
Py_CLEAR(clear_module_state->__pyx_n_s_YMDHMS20);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDD);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDD10);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDDB);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDDD);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDDN);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDDP);
Py_CLEAR(clear_module_state->__pyx_n_s_YYMMDDS);
Py_CLEAR(clear_module_state->__pyx_n_s__15);
Py_CLEAR(clear_module_state->__pyx_kp_s__2);
Py_CLEAR(clear_module_state->__pyx_kp_u__8);
Py_CLEAR(clear_module_state->__pyx_n_s__9);
Py_CLEAR(clear_module_state->__pyx_n_s_allowed_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_append);
Py_CLEAR(clear_module_state->__pyx_n_s_astype);
Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines);
Py_CLEAR(clear_module_state->__pyx_n_s_center);
Py_CLEAR(clear_module_state->__pyx_n_s_chr);
Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem);
Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback);
Py_CLEAR(clear_module_state->__pyx_n_s_collections);
Py_CLEAR(clear_module_state->__pyx_kp_s_column_0_is_duplicated_renamed_t);
Py_CLEAR(clear_module_state->__pyx_n_s_column_labels);
Py_CLEAR(clear_module_state->__pyx_n_s_column_names);
Py_CLEAR(clear_module_state->__pyx_n_s_column_names_to_labels);
Py_CLEAR(clear_module_state->__pyx_n_s_columns);
Py_CLEAR(clear_module_state->__pyx_n_s_copy);
Py_CLEAR(clear_module_state->__pyx_n_s_creation_time);
Py_CLEAR(clear_module_state->__pyx_kp_s_d);
Py_CLEAR(clear_module_state->__pyx_n_s_data_container);
Py_CLEAR(clear_module_state->__pyx_n_s_data_container___reduce_cython);
Py_CLEAR(clear_module_state->__pyx_n_s_data_container___setstate_cython);
Py_CLEAR(clear_module_state->__pyx_n_s_date);
Py_CLEAR(clear_module_state->__pyx_n_s_datetime);
Py_CLEAR(clear_module_state->__pyx_n_s_dict);
Py_CLEAR(clear_module_state->__pyx_n_s_dict_2);
Py_CLEAR(clear_module_state->__pyx_kp_u_disable);
Py_CLEAR(clear_module_state->__pyx_n_s_doc);
Py_CLEAR(clear_module_state->__pyx_n_s_double);
Py_CLEAR(clear_module_state->__pyx_n_s_dtype);
Py_CLEAR(clear_module_state->__pyx_n_s_dtypes);
Py_CLEAR(clear_module_state->__pyx_n_s_duplicated);
Py_CLEAR(clear_module_state->__pyx_n_s_empty);
Py_CLEAR(clear_module_state->__pyx_kp_u_enable);
Py_CLEAR(clear_module_state->__pyx_n_s_encode);
Py_CLEAR(clear_module_state->__pyx_n_s_enumerate);
Py_CLEAR(clear_module_state->__pyx_n_s_expanduser);
Py_CLEAR(clear_module_state->__pyx_n_s_file_encoding);
Py_CLEAR(clear_module_state->__pyx_n_s_file_label);
Py_CLEAR(clear_module_state->__pyx_kp_s_file_path_could_not_be_encoded_w);
Py_CLEAR(clear_module_state->__pyx_n_s_fill);
Py_CLEAR(clear_module_state->__pyx_n_s_float);
Py_CLEAR(clear_module_state->__pyx_n_s_float64);
Py_CLEAR(clear_module_state->__pyx_n_s_format);
Py_CLEAR(clear_module_state->__pyx_n_s_from_dict);
Py_CLEAR(clear_module_state->__pyx_n_s_fromtimestamp);
Py_CLEAR(clear_module_state->__pyx_n_s_fsdecode);
Py_CLEAR(clear_module_state->__pyx_n_s_fsencode);
Py_CLEAR(clear_module_state->__pyx_kp_u_gc);
Py_CLEAR(clear_module_state->__pyx_n_s_get);
Py_CLEAR(clear_module_state->__pyx_n_s_getfilesystemencoding);
Py_CLEAR(clear_module_state->__pyx_n_s_getstate);
Py_CLEAR(clear_module_state->__pyx_n_s_hi);
Py_CLEAR(clear_module_state->__pyx_n_s_import);
Py_CLEAR(clear_module_state->__pyx_n_s_init);
Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass);
Py_CLEAR(clear_module_state->__pyx_n_s_initializing);
Py_CLEAR(clear_module_state->__pyx_n_s_int16);
Py_CLEAR(clear_module_state->__pyx_n_s_int32);
Py_CLEAR(clear_module_state->__pyx_n_s_int64);
Py_CLEAR(clear_module_state->__pyx_n_s_int8);
Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine);
Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled);
Py_CLEAR(clear_module_state->__pyx_n_s_isfile);
Py_CLEAR(clear_module_state->__pyx_n_s_items);
Py_CLEAR(clear_module_state->__pyx_n_s_left);
Py_CLEAR(clear_module_state->__pyx_n_s_lo);
Py_CLEAR(clear_module_state->__pyx_n_s_main);
Py_CLEAR(clear_module_state->__pyx_n_s_metaclass);
Py_CLEAR(clear_module_state->__pyx_n_s_metadata_container);
Py_CLEAR(clear_module_state->__pyx_n_s_metadata_container___init);
Py_CLEAR(clear_module_state->__pyx_n_s_missing_ranges);
Py_CLEAR(clear_module_state->__pyx_n_s_missing_user_values);
Py_CLEAR(clear_module_state->__pyx_n_s_modification_time);
Py_CLEAR(clear_module_state->__pyx_n_s_module);
Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries);
Py_CLEAR(clear_module_state->__pyx_n_s_name);
Py_CLEAR(clear_module_state->__pyx_n_s_name_2);
Py_CLEAR(clear_module_state->__pyx_n_s_nan);
Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
Py_CLEAR(clear_module_state->__pyx_n_s_nominal);
Py_CLEAR(clear_module_state->__pyx_n_s_notes);
Py_CLEAR(clear_module_state->__pyx_n_s_np);
Py_CLEAR(clear_module_state->__pyx_n_s_nt);
Py_CLEAR(clear_module_state->__pyx_n_s_number_columns);
Py_CLEAR(clear_module_state->__pyx_n_s_number_rows);
Py_CLEAR(clear_module_state->__pyx_n_s_numpy);
Py_CLEAR(clear_module_state->__pyx_n_s_object);
Py_CLEAR(clear_module_state->__pyx_n_s_ordinal);
Py_CLEAR(clear_module_state->__pyx_n_s_original_variable_types);
Py_CLEAR(clear_module_state->__pyx_n_s_os);
Py_CLEAR(clear_module_state->__pyx_n_s_output_format);
Py_CLEAR(clear_module_state->__pyx_kp_s_output_format_must_be_one_of_all);
Py_CLEAR(clear_module_state->__pyx_n_s_pandas);
Py_CLEAR(clear_module_state->__pyx_n_s_path);
Py_CLEAR(clear_module_state->__pyx_kp_s_path_must_be_either_str_or_bytes);
Py_CLEAR(clear_module_state->__pyx_kp_s_path_must_be_str_bytes_or_unicod);
Py_CLEAR(clear_module_state->__pyx_n_s_pd);
Py_CLEAR(clear_module_state->__pyx_n_s_prepare);
Py_CLEAR(clear_module_state->__pyx_n_s_pyreadstat__readstat_parser);
Py_CLEAR(clear_module_state->__pyx_kp_s_pyreadstat__readstat_parser_pyx);
Py_CLEAR(clear_module_state->__pyx_n_s_pyx_capi);
Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state);
Py_CLEAR(clear_module_state->__pyx_n_s_qualname);
Py_CLEAR(clear_module_state->__pyx_n_s_range);
Py_CLEAR(clear_module_state->__pyx_n_s_readstat_to_numpy_types);
Py_CLEAR(clear_module_state->__pyx_n_s_readstat_variable_types);
Py_CLEAR(clear_module_state->__pyx_n_s_reduce);
Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython);
Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex);
Py_CLEAR(clear_module_state->__pyx_n_s_right);
Py_CLEAR(clear_module_state->__pyx_n_s_sas_all_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_sas_date_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_sas_datetime_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_sas_origin);
Py_CLEAR(clear_module_state->__pyx_n_s_sas_time_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_scale);
Py_CLEAR(clear_module_state->__pyx_n_s_self);
Py_CLEAR(clear_module_state->__pyx_n_s_set_name);
Py_CLEAR(clear_module_state->__pyx_n_s_setstate);
Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython);
Py_CLEAR(clear_module_state->__pyx_n_s_spec);
Py_CLEAR(clear_module_state->__pyx_n_s_spss_all_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_spss_date_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_spss_datetime_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_spss_origin);
Py_CLEAR(clear_module_state->__pyx_n_s_spss_time_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_stata_all_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_stata_date_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_stata_datetime_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_stata_origin);
Py_CLEAR(clear_module_state->__pyx_n_s_stata_time_formats);
Py_CLEAR(clear_module_state->__pyx_n_s_string);
Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource);
Py_CLEAR(clear_module_state->__pyx_n_s_super);
Py_CLEAR(clear_module_state->__pyx_n_s_surrogateescape);
Py_CLEAR(clear_module_state->__pyx_n_s_sys);
Py_CLEAR(clear_module_state->__pyx_kp_s_tC);
Py_CLEAR(clear_module_state->__pyx_n_s_table_name);
Py_CLEAR(clear_module_state->__pyx_kp_s_tc);
Py_CLEAR(clear_module_state->__pyx_kp_s_tcHH_MM);
Py_CLEAR(clear_module_state->__pyx_kp_s_tcHH_MM_SS);
Py_CLEAR(clear_module_state->__pyx_kp_s_td);
Py_CLEAR(clear_module_state->__pyx_kp_s_tdCCYY_NN_DD);
Py_CLEAR(clear_module_state->__pyx_kp_s_tdD_m_Y);
Py_CLEAR(clear_module_state->__pyx_n_s_test);
Py_CLEAR(clear_module_state->__pyx_n_s_time);
Py_CLEAR(clear_module_state->__pyx_n_s_to_datetime);
Py_CLEAR(clear_module_state->__pyx_n_s_tolist);
Py_CLEAR(clear_module_state->__pyx_n_s_undetermined);
Py_CLEAR(clear_module_state->__pyx_n_s_unknown);
Py_CLEAR(clear_module_state->__pyx_kp_s_utf_8);
Py_CLEAR(clear_module_state->__pyx_n_s_value_labels);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_alignment);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_display_width);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_measure);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_storage_width);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_to_label);
Py_CLEAR(clear_module_state->__pyx_n_s_variable_value_labels);
Py_CLEAR(clear_module_state->__pyx_n_s_warn);
Py_CLEAR(clear_module_state->__pyx_n_s_warnings);
Py_CLEAR(clear_module_state->__pyx_n_s_zip);
Py_CLEAR(clear_module_state->__pyx_int_0);
Py_CLEAR(clear_module_state->__pyx_int_1);
Py_CLEAR(clear_module_state->__pyx_int_100000);
Py_CLEAR(clear_module_state->__pyx_tuple_);
Py_CLEAR(clear_module_state->__pyx_tuple__3);
Py_CLEAR(clear_module_state->__pyx_tuple__4);
Py_CLEAR(clear_module_state->__pyx_tuple__5);
Py_CLEAR(clear_module_state->__pyx_tuple__6);
Py_CLEAR(clear_module_state->__pyx_tuple__7);
Py_CLEAR(clear_module_state->__pyx_tuple__10);
Py_CLEAR(clear_module_state->__pyx_tuple__12);
Py_CLEAR(clear_module_state->__pyx_codeobj__11);
Py_CLEAR(clear_module_state->__pyx_codeobj__13);
Py_CLEAR(clear_module_state->__pyx_codeobj__14);
return 0;
}
#endif
/* #### Code section: module_state_traverse ### */
#if CYTHON_USE_MODULE_STATE
static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
__pyx_mstate *traverse_module_state = __pyx_mstate(m);
if (!traverse_module_state) return 0;
Py_VISIT(traverse_module_state->__pyx_d);
Py_VISIT(traverse_module_state->__pyx_b);
Py_VISIT(traverse_module_state->__pyx_cython_runtime);
Py_VISIT(traverse_module_state->__pyx_empty_tuple);
Py_VISIT(traverse_module_state->__pyx_empty_bytes);
Py_VISIT(traverse_module_state->__pyx_empty_unicode);
#ifdef __Pyx_CyFunction_USED
Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
#endif
#ifdef __Pyx_FusedFunction_USED
Py_VISIT(traverse_module_state->__pyx_FusedFunctionType);
#endif
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type);
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_date);
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_time);
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_datetime);
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_timedelta);
Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_tzinfo);
Py_VISIT(traverse_module_state->__pyx_ptype_10pyreadstat_16_readstat_parser_data_container);
Py_VISIT(traverse_module_state->__pyx_type_10pyreadstat_16_readstat_parser_data_container);
Py_VISIT(traverse_module_state->__pyx_n_s_ADATE);
Py_VISIT(traverse_module_state->__pyx_n_s_ADATE10);
Py_VISIT(traverse_module_state->__pyx_n_s_ADATE8);
Py_VISIT(traverse_module_state->__pyx_n_s_B8601DA);
Py_VISIT(traverse_module_state->__pyx_n_s_B8601DN);
Py_VISIT(traverse_module_state->__pyx_n_s_B8601DT);
Py_VISIT(traverse_module_state->__pyx_n_s_B8601TM);
Py_VISIT(traverse_module_state->__pyx_n_s_DATE);
Py_VISIT(traverse_module_state->__pyx_n_s_DATE11);
Py_VISIT(traverse_module_state->__pyx_n_s_DATE12);
Py_VISIT(traverse_module_state->__pyx_n_s_DATE8);
Py_VISIT(traverse_module_state->__pyx_n_s_DATE9);
Py_VISIT(traverse_module_state->__pyx_n_s_DATEAMPM);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME17);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME18);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME19);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME20);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME21);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME22);
Py_VISIT(traverse_module_state->__pyx_kp_s_DATETIME23_2);
Py_VISIT(traverse_module_state->__pyx_n_s_DATETIME8);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYY);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYB);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYB10);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYC);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYC10);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYD);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYD10);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYN6);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYN8);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYP);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYP10);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYS);
Py_VISIT(traverse_module_state->__pyx_n_s_DDMMYYS10);
Py_VISIT(traverse_module_state->__pyx_n_s_DTDATE);
Py_VISIT(traverse_module_state->__pyx_n_s_DTIME);
Py_VISIT(traverse_module_state->__pyx_n_s_DataFrame);
Py_VISIT(traverse_module_state->__pyx_n_s_E8601DA);
Py_VISIT(traverse_module_state->__pyx_n_s_E8601DT);
Py_VISIT(traverse_module_state->__pyx_n_s_E8601TM);
Py_VISIT(traverse_module_state->__pyx_n_s_EDATE);
Py_VISIT(traverse_module_state->__pyx_n_s_EDATE10);
Py_VISIT(traverse_module_state->__pyx_n_s_EDATE8);
Py_VISIT(traverse_module_state->__pyx_kp_s_Failed_convert_C_to_python_value);
Py_VISIT(traverse_module_state->__pyx_kp_s_Failed_to_read_number_of_variabl);
Py_VISIT(traverse_module_state->__pyx_kp_s_File_0_does_not_exist);
Py_VISIT(traverse_module_state->__pyx_n_s_HHMM);
Py_VISIT(traverse_module_state->__pyx_n_s_IS8601DA);
Py_VISIT(traverse_module_state->__pyx_n_s_IS8601DT);
Py_VISIT(traverse_module_state->__pyx_n_s_IS8601TM);
Py_VISIT(traverse_module_state->__pyx_n_s_JDATE);
Py_VISIT(traverse_module_state->__pyx_n_s_JDATE5);
Py_VISIT(traverse_module_state->__pyx_n_s_JDATE7);
Py_VISIT(traverse_module_state->__pyx_kp_s_Just_defining_a_custom_exceptio);
Py_VISIT(traverse_module_state->__pyx_kp_s_Just_defining_a_custom_exceptio_2);
Py_VISIT(traverse_module_state->__pyx_kp_s_M8_ns);
Py_VISIT(traverse_module_state->__pyx_n_s_MDYAMPM);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYY);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYB);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYB10);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYC);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYC10);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYD);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYD10);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYN6);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYN8);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYP);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYP10);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYS);
Py_VISIT(traverse_module_state->__pyx_n_s_MMDDYYS10);
Py_VISIT(traverse_module_state->__pyx_n_s_NULL);
Py_VISIT(traverse_module_state->__pyx_n_s_OrderedDict);
Py_VISIT(traverse_module_state->__pyx_n_s_PyreadstatError);
Py_VISIT(traverse_module_state->__pyx_n_s_ReadstatError);
Py_VISIT(traverse_module_state->__pyx_n_s_RuntimeError);
Py_VISIT(traverse_module_state->__pyx_n_s_SDATE);
Py_VISIT(traverse_module_state->__pyx_n_s_SDATE10);
Py_VISIT(traverse_module_state->__pyx_n_s_SDATE8);
Py_VISIT(traverse_module_state->__pyx_kp_s_STRING_type_with_value_s_with_da);
Py_VISIT(traverse_module_state->__pyx_n_s_TIME);
Py_VISIT(traverse_module_state->__pyx_kp_s_TIME11_2);
Py_VISIT(traverse_module_state->__pyx_n_s_TIME20);
Py_VISIT(traverse_module_state->__pyx_kp_s_TIME20_3);
Py_VISIT(traverse_module_state->__pyx_n_s_TIME5);
Py_VISIT(traverse_module_state->__pyx_n_s_TIME8);
Py_VISIT(traverse_module_state->__pyx_n_s_TIMEAMPM);
Py_VISIT(traverse_module_state->__pyx_n_s_TOD);
Py_VISIT(traverse_module_state->__pyx_kp_s_This_class_holds_metadata_we_wa);
Py_VISIT(traverse_module_state->__pyx_kp_s_Time_zones_are_not_available_fro);
Py_VISIT(traverse_module_state->__pyx_n_s_TypeError);
Py_VISIT(traverse_module_state->__pyx_n_s_UnicodeError);
Py_VISIT(traverse_module_state->__pyx_kp_s_Unknown_file_format);
Py_VISIT(traverse_module_state->__pyx_kp_s_Unkown_data_type);
Py_VISIT(traverse_module_state->__pyx_n_s_WEEKDATE);
Py_VISIT(traverse_module_state->__pyx_n_s_WEEKDATX);
Py_VISIT(traverse_module_state->__pyx_n_s_YMDHMS16);
Py_VISIT(traverse_module_state->__pyx_n_s_YMDHMS19);
Py_VISIT(traverse_module_state->__pyx_kp_s_YMDHMS19_2);
Py_VISIT(traverse_module_state->__pyx_n_s_YMDHMS20);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDD);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDD10);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDDB);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDDD);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDDN);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDDP);
Py_VISIT(traverse_module_state->__pyx_n_s_YYMMDDS);
Py_VISIT(traverse_module_state->__pyx_n_s__15);
Py_VISIT(traverse_module_state->__pyx_kp_s__2);
Py_VISIT(traverse_module_state->__pyx_kp_u__8);
Py_VISIT(traverse_module_state->__pyx_n_s__9);
Py_VISIT(traverse_module_state->__pyx_n_s_allowed_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_append);
Py_VISIT(traverse_module_state->__pyx_n_s_astype);
Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines);
Py_VISIT(traverse_module_state->__pyx_n_s_center);
Py_VISIT(traverse_module_state->__pyx_n_s_chr);
Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem);
Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback);
Py_VISIT(traverse_module_state->__pyx_n_s_collections);
Py_VISIT(traverse_module_state->__pyx_kp_s_column_0_is_duplicated_renamed_t);
Py_VISIT(traverse_module_state->__pyx_n_s_column_labels);
Py_VISIT(traverse_module_state->__pyx_n_s_column_names);
Py_VISIT(traverse_module_state->__pyx_n_s_column_names_to_labels);
Py_VISIT(traverse_module_state->__pyx_n_s_columns);
Py_VISIT(traverse_module_state->__pyx_n_s_copy);
Py_VISIT(traverse_module_state->__pyx_n_s_creation_time);
Py_VISIT(traverse_module_state->__pyx_kp_s_d);
Py_VISIT(traverse_module_state->__pyx_n_s_data_container);
Py_VISIT(traverse_module_state->__pyx_n_s_data_container___reduce_cython);
Py_VISIT(traverse_module_state->__pyx_n_s_data_container___setstate_cython);
Py_VISIT(traverse_module_state->__pyx_n_s_date);
Py_VISIT(traverse_module_state->__pyx_n_s_datetime);
Py_VISIT(traverse_module_state->__pyx_n_s_dict);
Py_VISIT(traverse_module_state->__pyx_n_s_dict_2);
Py_VISIT(traverse_module_state->__pyx_kp_u_disable);
Py_VISIT(traverse_module_state->__pyx_n_s_doc);
Py_VISIT(traverse_module_state->__pyx_n_s_double);
Py_VISIT(traverse_module_state->__pyx_n_s_dtype);
Py_VISIT(traverse_module_state->__pyx_n_s_dtypes);
Py_VISIT(traverse_module_state->__pyx_n_s_duplicated);
Py_VISIT(traverse_module_state->__pyx_n_s_empty);
Py_VISIT(traverse_module_state->__pyx_kp_u_enable);
Py_VISIT(traverse_module_state->__pyx_n_s_encode);
Py_VISIT(traverse_module_state->__pyx_n_s_enumerate);
Py_VISIT(traverse_module_state->__pyx_n_s_expanduser);
Py_VISIT(traverse_module_state->__pyx_n_s_file_encoding);
Py_VISIT(traverse_module_state->__pyx_n_s_file_label);
Py_VISIT(traverse_module_state->__pyx_kp_s_file_path_could_not_be_encoded_w);
Py_VISIT(traverse_module_state->__pyx_n_s_fill);
Py_VISIT(traverse_module_state->__pyx_n_s_float);
Py_VISIT(traverse_module_state->__pyx_n_s_float64);
Py_VISIT(traverse_module_state->__pyx_n_s_format);
Py_VISIT(traverse_module_state->__pyx_n_s_from_dict);
Py_VISIT(traverse_module_state->__pyx_n_s_fromtimestamp);
Py_VISIT(traverse_module_state->__pyx_n_s_fsdecode);
Py_VISIT(traverse_module_state->__pyx_n_s_fsencode);
Py_VISIT(traverse_module_state->__pyx_kp_u_gc);
Py_VISIT(traverse_module_state->__pyx_n_s_get);
Py_VISIT(traverse_module_state->__pyx_n_s_getfilesystemencoding);
Py_VISIT(traverse_module_state->__pyx_n_s_getstate);
Py_VISIT(traverse_module_state->__pyx_n_s_hi);
Py_VISIT(traverse_module_state->__pyx_n_s_import);
Py_VISIT(traverse_module_state->__pyx_n_s_init);
Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass);
Py_VISIT(traverse_module_state->__pyx_n_s_initializing);
Py_VISIT(traverse_module_state->__pyx_n_s_int16);
Py_VISIT(traverse_module_state->__pyx_n_s_int32);
Py_VISIT(traverse_module_state->__pyx_n_s_int64);
Py_VISIT(traverse_module_state->__pyx_n_s_int8);
Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine);
Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled);
Py_VISIT(traverse_module_state->__pyx_n_s_isfile);
Py_VISIT(traverse_module_state->__pyx_n_s_items);
Py_VISIT(traverse_module_state->__pyx_n_s_left);
Py_VISIT(traverse_module_state->__pyx_n_s_lo);
Py_VISIT(traverse_module_state->__pyx_n_s_main);
Py_VISIT(traverse_module_state->__pyx_n_s_metaclass);
Py_VISIT(traverse_module_state->__pyx_n_s_metadata_container);
Py_VISIT(traverse_module_state->__pyx_n_s_metadata_container___init);
Py_VISIT(traverse_module_state->__pyx_n_s_missing_ranges);
Py_VISIT(traverse_module_state->__pyx_n_s_missing_user_values);
Py_VISIT(traverse_module_state->__pyx_n_s_modification_time);
Py_VISIT(traverse_module_state->__pyx_n_s_module);
Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries);
Py_VISIT(traverse_module_state->__pyx_n_s_name);
Py_VISIT(traverse_module_state->__pyx_n_s_name_2);
Py_VISIT(traverse_module_state->__pyx_n_s_nan);
Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
Py_VISIT(traverse_module_state->__pyx_n_s_nominal);
Py_VISIT(traverse_module_state->__pyx_n_s_notes);
Py_VISIT(traverse_module_state->__pyx_n_s_np);
Py_VISIT(traverse_module_state->__pyx_n_s_nt);
Py_VISIT(traverse_module_state->__pyx_n_s_number_columns);
Py_VISIT(traverse_module_state->__pyx_n_s_number_rows);
Py_VISIT(traverse_module_state->__pyx_n_s_numpy);
Py_VISIT(traverse_module_state->__pyx_n_s_object);
Py_VISIT(traverse_module_state->__pyx_n_s_ordinal);
Py_VISIT(traverse_module_state->__pyx_n_s_original_variable_types);
Py_VISIT(traverse_module_state->__pyx_n_s_os);
Py_VISIT(traverse_module_state->__pyx_n_s_output_format);
Py_VISIT(traverse_module_state->__pyx_kp_s_output_format_must_be_one_of_all);
Py_VISIT(traverse_module_state->__pyx_n_s_pandas);
Py_VISIT(traverse_module_state->__pyx_n_s_path);
Py_VISIT(traverse_module_state->__pyx_kp_s_path_must_be_either_str_or_bytes);
Py_VISIT(traverse_module_state->__pyx_kp_s_path_must_be_str_bytes_or_unicod);
Py_VISIT(traverse_module_state->__pyx_n_s_pd);
Py_VISIT(traverse_module_state->__pyx_n_s_prepare);
Py_VISIT(traverse_module_state->__pyx_n_s_pyreadstat__readstat_parser);
Py_VISIT(traverse_module_state->__pyx_kp_s_pyreadstat__readstat_parser_pyx);
Py_VISIT(traverse_module_state->__pyx_n_s_pyx_capi);
Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state);
Py_VISIT(traverse_module_state->__pyx_n_s_qualname);
Py_VISIT(traverse_module_state->__pyx_n_s_range);
Py_VISIT(traverse_module_state->__pyx_n_s_readstat_to_numpy_types);
Py_VISIT(traverse_module_state->__pyx_n_s_readstat_variable_types);
Py_VISIT(traverse_module_state->__pyx_n_s_reduce);
Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython);
Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex);
Py_VISIT(traverse_module_state->__pyx_n_s_right);
Py_VISIT(traverse_module_state->__pyx_n_s_sas_all_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_sas_date_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_sas_datetime_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_sas_origin);
Py_VISIT(traverse_module_state->__pyx_n_s_sas_time_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_scale);
Py_VISIT(traverse_module_state->__pyx_n_s_self);
Py_VISIT(traverse_module_state->__pyx_n_s_set_name);
Py_VISIT(traverse_module_state->__pyx_n_s_setstate);
Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython);
Py_VISIT(traverse_module_state->__pyx_n_s_spec);
Py_VISIT(traverse_module_state->__pyx_n_s_spss_all_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_spss_date_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_spss_datetime_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_spss_origin);
Py_VISIT(traverse_module_state->__pyx_n_s_spss_time_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_stata_all_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_stata_date_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_stata_datetime_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_stata_origin);
Py_VISIT(traverse_module_state->__pyx_n_s_stata_time_formats);
Py_VISIT(traverse_module_state->__pyx_n_s_string);
Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource);
Py_VISIT(traverse_module_state->__pyx_n_s_super);
Py_VISIT(traverse_module_state->__pyx_n_s_surrogateescape);
Py_VISIT(traverse_module_state->__pyx_n_s_sys);
Py_VISIT(traverse_module_state->__pyx_kp_s_tC);
Py_VISIT(traverse_module_state->__pyx_n_s_table_name);
Py_VISIT(traverse_module_state->__pyx_kp_s_tc);
Py_VISIT(traverse_module_state->__pyx_kp_s_tcHH_MM);
Py_VISIT(traverse_module_state->__pyx_kp_s_tcHH_MM_SS);
Py_VISIT(traverse_module_state->__pyx_kp_s_td);
Py_VISIT(traverse_module_state->__pyx_kp_s_tdCCYY_NN_DD);
Py_VISIT(traverse_module_state->__pyx_kp_s_tdD_m_Y);
Py_VISIT(traverse_module_state->__pyx_n_s_test);
Py_VISIT(traverse_module_state->__pyx_n_s_time);
Py_VISIT(traverse_module_state->__pyx_n_s_to_datetime);
Py_VISIT(traverse_module_state->__pyx_n_s_tolist);
Py_VISIT(traverse_module_state->__pyx_n_s_undetermined);
Py_VISIT(traverse_module_state->__pyx_n_s_unknown);
Py_VISIT(traverse_module_state->__pyx_kp_s_utf_8);
Py_VISIT(traverse_module_state->__pyx_n_s_value_labels);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_alignment);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_display_width);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_measure);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_storage_width);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_to_label);
Py_VISIT(traverse_module_state->__pyx_n_s_variable_value_labels);
Py_VISIT(traverse_module_state->__pyx_n_s_warn);
Py_VISIT(traverse_module_state->__pyx_n_s_warnings);
Py_VISIT(traverse_module_state->__pyx_n_s_zip);
Py_VISIT(traverse_module_state->__pyx_int_0);
Py_VISIT(traverse_module_state->__pyx_int_1);
Py_VISIT(traverse_module_state->__pyx_int_100000);
Py_VISIT(traverse_module_state->__pyx_tuple_);
Py_VISIT(traverse_module_state->__pyx_tuple__3);
Py_VISIT(traverse_module_state->__pyx_tuple__4);
Py_VISIT(traverse_module_state->__pyx_tuple__5);
Py_VISIT(traverse_module_state->__pyx_tuple__6);
Py_VISIT(traverse_module_state->__pyx_tuple__7);
Py_VISIT(traverse_module_state->__pyx_tuple__10);
Py_VISIT(traverse_module_state->__pyx_tuple__12);
Py_VISIT(traverse_module_state->__pyx_codeobj__11);
Py_VISIT(traverse_module_state->__pyx_codeobj__13);
Py_VISIT(traverse_module_state->__pyx_codeobj__14);
return 0;
}
#endif
/* #### Code section: module_state_defines ### */
#define __pyx_d __pyx_mstate_global->__pyx_d
#define __pyx_b __pyx_mstate_global->__pyx_b
#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime
#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple
#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes
#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode
#ifdef __Pyx_CyFunction_USED
#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType
#endif
#ifdef __Pyx_FusedFunction_USED
#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType
#endif
#ifdef __Pyx_Generator_USED
#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType
#endif
#ifdef __Pyx_IterableCoroutine_USED
#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType
#endif
#ifdef __Pyx_Coroutine_USED
#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType
#endif
#ifdef __Pyx_Coroutine_USED
#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#define __pyx_ptype_7cpython_8datetime_date __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date
#define __pyx_ptype_7cpython_8datetime_time __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_time
#define __pyx_ptype_7cpython_8datetime_datetime __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime
#define __pyx_ptype_7cpython_8datetime_timedelta __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta
#define __pyx_ptype_7cpython_8datetime_tzinfo __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_tzinfo
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#define __pyx_type_10pyreadstat_16_readstat_parser_data_container __pyx_mstate_global->__pyx_type_10pyreadstat_16_readstat_parser_data_container
#endif
#define __pyx_ptype_10pyreadstat_16_readstat_parser_data_container __pyx_mstate_global->__pyx_ptype_10pyreadstat_16_readstat_parser_data_container
#define __pyx_n_s_ADATE __pyx_mstate_global->__pyx_n_s_ADATE
#define __pyx_n_s_ADATE10 __pyx_mstate_global->__pyx_n_s_ADATE10
#define __pyx_n_s_ADATE8 __pyx_mstate_global->__pyx_n_s_ADATE8
#define __pyx_n_s_B8601DA __pyx_mstate_global->__pyx_n_s_B8601DA
#define __pyx_n_s_B8601DN __pyx_mstate_global->__pyx_n_s_B8601DN
#define __pyx_n_s_B8601DT __pyx_mstate_global->__pyx_n_s_B8601DT
#define __pyx_n_s_B8601TM __pyx_mstate_global->__pyx_n_s_B8601TM
#define __pyx_n_s_DATE __pyx_mstate_global->__pyx_n_s_DATE
#define __pyx_n_s_DATE11 __pyx_mstate_global->__pyx_n_s_DATE11
#define __pyx_n_s_DATE12 __pyx_mstate_global->__pyx_n_s_DATE12
#define __pyx_n_s_DATE8 __pyx_mstate_global->__pyx_n_s_DATE8
#define __pyx_n_s_DATE9 __pyx_mstate_global->__pyx_n_s_DATE9
#define __pyx_n_s_DATEAMPM __pyx_mstate_global->__pyx_n_s_DATEAMPM
#define __pyx_n_s_DATETIME __pyx_mstate_global->__pyx_n_s_DATETIME
#define __pyx_n_s_DATETIME17 __pyx_mstate_global->__pyx_n_s_DATETIME17
#define __pyx_n_s_DATETIME18 __pyx_mstate_global->__pyx_n_s_DATETIME18
#define __pyx_n_s_DATETIME19 __pyx_mstate_global->__pyx_n_s_DATETIME19
#define __pyx_n_s_DATETIME20 __pyx_mstate_global->__pyx_n_s_DATETIME20
#define __pyx_n_s_DATETIME21 __pyx_mstate_global->__pyx_n_s_DATETIME21
#define __pyx_n_s_DATETIME22 __pyx_mstate_global->__pyx_n_s_DATETIME22
#define __pyx_kp_s_DATETIME23_2 __pyx_mstate_global->__pyx_kp_s_DATETIME23_2
#define __pyx_n_s_DATETIME8 __pyx_mstate_global->__pyx_n_s_DATETIME8
#define __pyx_n_s_DDMMYY __pyx_mstate_global->__pyx_n_s_DDMMYY
#define __pyx_n_s_DDMMYYB __pyx_mstate_global->__pyx_n_s_DDMMYYB
#define __pyx_n_s_DDMMYYB10 __pyx_mstate_global->__pyx_n_s_DDMMYYB10
#define __pyx_n_s_DDMMYYC __pyx_mstate_global->__pyx_n_s_DDMMYYC
#define __pyx_n_s_DDMMYYC10 __pyx_mstate_global->__pyx_n_s_DDMMYYC10
#define __pyx_n_s_DDMMYYD __pyx_mstate_global->__pyx_n_s_DDMMYYD
#define __pyx_n_s_DDMMYYD10 __pyx_mstate_global->__pyx_n_s_DDMMYYD10
#define __pyx_n_s_DDMMYYN6 __pyx_mstate_global->__pyx_n_s_DDMMYYN6
#define __pyx_n_s_DDMMYYN8 __pyx_mstate_global->__pyx_n_s_DDMMYYN8
#define __pyx_n_s_DDMMYYP __pyx_mstate_global->__pyx_n_s_DDMMYYP
#define __pyx_n_s_DDMMYYP10 __pyx_mstate_global->__pyx_n_s_DDMMYYP10
#define __pyx_n_s_DDMMYYS __pyx_mstate_global->__pyx_n_s_DDMMYYS
#define __pyx_n_s_DDMMYYS10 __pyx_mstate_global->__pyx_n_s_DDMMYYS10
#define __pyx_n_s_DTDATE __pyx_mstate_global->__pyx_n_s_DTDATE
#define __pyx_n_s_DTIME __pyx_mstate_global->__pyx_n_s_DTIME
#define __pyx_n_s_DataFrame __pyx_mstate_global->__pyx_n_s_DataFrame
#define __pyx_n_s_E8601DA __pyx_mstate_global->__pyx_n_s_E8601DA
#define __pyx_n_s_E8601DT __pyx_mstate_global->__pyx_n_s_E8601DT
#define __pyx_n_s_E8601TM __pyx_mstate_global->__pyx_n_s_E8601TM
#define __pyx_n_s_EDATE __pyx_mstate_global->__pyx_n_s_EDATE
#define __pyx_n_s_EDATE10 __pyx_mstate_global->__pyx_n_s_EDATE10
#define __pyx_n_s_EDATE8 __pyx_mstate_global->__pyx_n_s_EDATE8
#define __pyx_kp_s_Failed_convert_C_to_python_value __pyx_mstate_global->__pyx_kp_s_Failed_convert_C_to_python_value
#define __pyx_kp_s_Failed_to_read_number_of_variabl __pyx_mstate_global->__pyx_kp_s_Failed_to_read_number_of_variabl
#define __pyx_kp_s_File_0_does_not_exist __pyx_mstate_global->__pyx_kp_s_File_0_does_not_exist
#define __pyx_n_s_HHMM __pyx_mstate_global->__pyx_n_s_HHMM
#define __pyx_n_s_IS8601DA __pyx_mstate_global->__pyx_n_s_IS8601DA
#define __pyx_n_s_IS8601DT __pyx_mstate_global->__pyx_n_s_IS8601DT
#define __pyx_n_s_IS8601TM __pyx_mstate_global->__pyx_n_s_IS8601TM
#define __pyx_n_s_JDATE __pyx_mstate_global->__pyx_n_s_JDATE
#define __pyx_n_s_JDATE5 __pyx_mstate_global->__pyx_n_s_JDATE5
#define __pyx_n_s_JDATE7 __pyx_mstate_global->__pyx_n_s_JDATE7
#define __pyx_kp_s_Just_defining_a_custom_exceptio __pyx_mstate_global->__pyx_kp_s_Just_defining_a_custom_exceptio
#define __pyx_kp_s_Just_defining_a_custom_exceptio_2 __pyx_mstate_global->__pyx_kp_s_Just_defining_a_custom_exceptio_2
#define __pyx_kp_s_M8_ns __pyx_mstate_global->__pyx_kp_s_M8_ns
#define __pyx_n_s_MDYAMPM __pyx_mstate_global->__pyx_n_s_MDYAMPM
#define __pyx_n_s_MMDDYY __pyx_mstate_global->__pyx_n_s_MMDDYY
#define __pyx_n_s_MMDDYYB __pyx_mstate_global->__pyx_n_s_MMDDYYB
#define __pyx_n_s_MMDDYYB10 __pyx_mstate_global->__pyx_n_s_MMDDYYB10
#define __pyx_n_s_MMDDYYC __pyx_mstate_global->__pyx_n_s_MMDDYYC
#define __pyx_n_s_MMDDYYC10 __pyx_mstate_global->__pyx_n_s_MMDDYYC10
#define __pyx_n_s_MMDDYYD __pyx_mstate_global->__pyx_n_s_MMDDYYD
#define __pyx_n_s_MMDDYYD10 __pyx_mstate_global->__pyx_n_s_MMDDYYD10
#define __pyx_n_s_MMDDYYN6 __pyx_mstate_global->__pyx_n_s_MMDDYYN6
#define __pyx_n_s_MMDDYYN8 __pyx_mstate_global->__pyx_n_s_MMDDYYN8
#define __pyx_n_s_MMDDYYP __pyx_mstate_global->__pyx_n_s_MMDDYYP
#define __pyx_n_s_MMDDYYP10 __pyx_mstate_global->__pyx_n_s_MMDDYYP10
#define __pyx_n_s_MMDDYYS __pyx_mstate_global->__pyx_n_s_MMDDYYS
#define __pyx_n_s_MMDDYYS10 __pyx_mstate_global->__pyx_n_s_MMDDYYS10
#define __pyx_n_s_NULL __pyx_mstate_global->__pyx_n_s_NULL
#define __pyx_n_s_OrderedDict __pyx_mstate_global->__pyx_n_s_OrderedDict
#define __pyx_n_s_PyreadstatError __pyx_mstate_global->__pyx_n_s_PyreadstatError
#define __pyx_n_s_ReadstatError __pyx_mstate_global->__pyx_n_s_ReadstatError
#define __pyx_n_s_RuntimeError __pyx_mstate_global->__pyx_n_s_RuntimeError
#define __pyx_n_s_SDATE __pyx_mstate_global->__pyx_n_s_SDATE
#define __pyx_n_s_SDATE10 __pyx_mstate_global->__pyx_n_s_SDATE10
#define __pyx_n_s_SDATE8 __pyx_mstate_global->__pyx_n_s_SDATE8
#define __pyx_kp_s_STRING_type_with_value_s_with_da __pyx_mstate_global->__pyx_kp_s_STRING_type_with_value_s_with_da
#define __pyx_n_s_TIME __pyx_mstate_global->__pyx_n_s_TIME
#define __pyx_kp_s_TIME11_2 __pyx_mstate_global->__pyx_kp_s_TIME11_2
#define __pyx_n_s_TIME20 __pyx_mstate_global->__pyx_n_s_TIME20
#define __pyx_kp_s_TIME20_3 __pyx_mstate_global->__pyx_kp_s_TIME20_3
#define __pyx_n_s_TIME5 __pyx_mstate_global->__pyx_n_s_TIME5
#define __pyx_n_s_TIME8 __pyx_mstate_global->__pyx_n_s_TIME8
#define __pyx_n_s_TIMEAMPM __pyx_mstate_global->__pyx_n_s_TIMEAMPM
#define __pyx_n_s_TOD __pyx_mstate_global->__pyx_n_s_TOD
#define __pyx_kp_s_This_class_holds_metadata_we_wa __pyx_mstate_global->__pyx_kp_s_This_class_holds_metadata_we_wa
#define __pyx_kp_s_Time_zones_are_not_available_fro __pyx_mstate_global->__pyx_kp_s_Time_zones_are_not_available_fro
#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError
#define __pyx_n_s_UnicodeError __pyx_mstate_global->__pyx_n_s_UnicodeError
#define __pyx_kp_s_Unknown_file_format __pyx_mstate_global->__pyx_kp_s_Unknown_file_format
#define __pyx_kp_s_Unkown_data_type __pyx_mstate_global->__pyx_kp_s_Unkown_data_type
#define __pyx_n_s_WEEKDATE __pyx_mstate_global->__pyx_n_s_WEEKDATE
#define __pyx_n_s_WEEKDATX __pyx_mstate_global->__pyx_n_s_WEEKDATX
#define __pyx_n_s_YMDHMS16 __pyx_mstate_global->__pyx_n_s_YMDHMS16
#define __pyx_n_s_YMDHMS19 __pyx_mstate_global->__pyx_n_s_YMDHMS19
#define __pyx_kp_s_YMDHMS19_2 __pyx_mstate_global->__pyx_kp_s_YMDHMS19_2
#define __pyx_n_s_YMDHMS20 __pyx_mstate_global->__pyx_n_s_YMDHMS20
#define __pyx_n_s_YYMMDD __pyx_mstate_global->__pyx_n_s_YYMMDD
#define __pyx_n_s_YYMMDD10 __pyx_mstate_global->__pyx_n_s_YYMMDD10
#define __pyx_n_s_YYMMDDB __pyx_mstate_global->__pyx_n_s_YYMMDDB
#define __pyx_n_s_YYMMDDD __pyx_mstate_global->__pyx_n_s_YYMMDDD
#define __pyx_n_s_YYMMDDN __pyx_mstate_global->__pyx_n_s_YYMMDDN
#define __pyx_n_s_YYMMDDP __pyx_mstate_global->__pyx_n_s_YYMMDDP
#define __pyx_n_s_YYMMDDS __pyx_mstate_global->__pyx_n_s_YYMMDDS
#define __pyx_n_s__15 __pyx_mstate_global->__pyx_n_s__15
#define __pyx_kp_s__2 __pyx_mstate_global->__pyx_kp_s__2
#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8
#define __pyx_n_s__9 __pyx_mstate_global->__pyx_n_s__9
#define __pyx_n_s_allowed_formats __pyx_mstate_global->__pyx_n_s_allowed_formats
#define __pyx_n_s_append __pyx_mstate_global->__pyx_n_s_append
#define __pyx_n_s_astype __pyx_mstate_global->__pyx_n_s_astype
#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines
#define __pyx_n_s_center __pyx_mstate_global->__pyx_n_s_center
#define __pyx_n_s_chr __pyx_mstate_global->__pyx_n_s_chr
#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem
#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback
#define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections
#define __pyx_kp_s_column_0_is_duplicated_renamed_t __pyx_mstate_global->__pyx_kp_s_column_0_is_duplicated_renamed_t
#define __pyx_n_s_column_labels __pyx_mstate_global->__pyx_n_s_column_labels
#define __pyx_n_s_column_names __pyx_mstate_global->__pyx_n_s_column_names
#define __pyx_n_s_column_names_to_labels __pyx_mstate_global->__pyx_n_s_column_names_to_labels
#define __pyx_n_s_columns __pyx_mstate_global->__pyx_n_s_columns
#define __pyx_n_s_copy __pyx_mstate_global->__pyx_n_s_copy
#define __pyx_n_s_creation_time __pyx_mstate_global->__pyx_n_s_creation_time
#define __pyx_kp_s_d __pyx_mstate_global->__pyx_kp_s_d
#define __pyx_n_s_data_container __pyx_mstate_global->__pyx_n_s_data_container
#define __pyx_n_s_data_container___reduce_cython __pyx_mstate_global->__pyx_n_s_data_container___reduce_cython
#define __pyx_n_s_data_container___setstate_cython __pyx_mstate_global->__pyx_n_s_data_container___setstate_cython
#define __pyx_n_s_date __pyx_mstate_global->__pyx_n_s_date
#define __pyx_n_s_datetime __pyx_mstate_global->__pyx_n_s_datetime
#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict
#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2
#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable
#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc
#define __pyx_n_s_double __pyx_mstate_global->__pyx_n_s_double
#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype
#define __pyx_n_s_dtypes __pyx_mstate_global->__pyx_n_s_dtypes
#define __pyx_n_s_duplicated __pyx_mstate_global->__pyx_n_s_duplicated
#define __pyx_n_s_empty __pyx_mstate_global->__pyx_n_s_empty
#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable
#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode
#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate
#define __pyx_n_s_expanduser __pyx_mstate_global->__pyx_n_s_expanduser
#define __pyx_n_s_file_encoding __pyx_mstate_global->__pyx_n_s_file_encoding
#define __pyx_n_s_file_label __pyx_mstate_global->__pyx_n_s_file_label
#define __pyx_kp_s_file_path_could_not_be_encoded_w __pyx_mstate_global->__pyx_kp_s_file_path_could_not_be_encoded_w
#define __pyx_n_s_fill __pyx_mstate_global->__pyx_n_s_fill
#define __pyx_n_s_float __pyx_mstate_global->__pyx_n_s_float
#define __pyx_n_s_float64 __pyx_mstate_global->__pyx_n_s_float64
#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format
#define __pyx_n_s_from_dict __pyx_mstate_global->__pyx_n_s_from_dict
#define __pyx_n_s_fromtimestamp __pyx_mstate_global->__pyx_n_s_fromtimestamp
#define __pyx_n_s_fsdecode __pyx_mstate_global->__pyx_n_s_fsdecode
#define __pyx_n_s_fsencode __pyx_mstate_global->__pyx_n_s_fsencode
#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc
#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get
#define __pyx_n_s_getfilesystemencoding __pyx_mstate_global->__pyx_n_s_getfilesystemencoding
#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate
#define __pyx_n_s_hi __pyx_mstate_global->__pyx_n_s_hi
#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import
#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init
#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass
#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing
#define __pyx_n_s_int16 __pyx_mstate_global->__pyx_n_s_int16
#define __pyx_n_s_int32 __pyx_mstate_global->__pyx_n_s_int32
#define __pyx_n_s_int64 __pyx_mstate_global->__pyx_n_s_int64
#define __pyx_n_s_int8 __pyx_mstate_global->__pyx_n_s_int8
#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine
#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled
#define __pyx_n_s_isfile __pyx_mstate_global->__pyx_n_s_isfile
#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items
#define __pyx_n_s_left __pyx_mstate_global->__pyx_n_s_left
#define __pyx_n_s_lo __pyx_mstate_global->__pyx_n_s_lo
#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main
#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass
#define __pyx_n_s_metadata_container __pyx_mstate_global->__pyx_n_s_metadata_container
#define __pyx_n_s_metadata_container___init __pyx_mstate_global->__pyx_n_s_metadata_container___init
#define __pyx_n_s_missing_ranges __pyx_mstate_global->__pyx_n_s_missing_ranges
#define __pyx_n_s_missing_user_values __pyx_mstate_global->__pyx_n_s_missing_user_values
#define __pyx_n_s_modification_time __pyx_mstate_global->__pyx_n_s_modification_time
#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module
#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries
#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name
#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2
#define __pyx_n_s_nan __pyx_mstate_global->__pyx_n_s_nan
#define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non
#define __pyx_n_s_nominal __pyx_mstate_global->__pyx_n_s_nominal
#define __pyx_n_s_notes __pyx_mstate_global->__pyx_n_s_notes
#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np
#define __pyx_n_s_nt __pyx_mstate_global->__pyx_n_s_nt
#define __pyx_n_s_number_columns __pyx_mstate_global->__pyx_n_s_number_columns
#define __pyx_n_s_number_rows __pyx_mstate_global->__pyx_n_s_number_rows
#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy
#define __pyx_n_s_object __pyx_mstate_global->__pyx_n_s_object
#define __pyx_n_s_ordinal __pyx_mstate_global->__pyx_n_s_ordinal
#define __pyx_n_s_original_variable_types __pyx_mstate_global->__pyx_n_s_original_variable_types
#define __pyx_n_s_os __pyx_mstate_global->__pyx_n_s_os
#define __pyx_n_s_output_format __pyx_mstate_global->__pyx_n_s_output_format
#define __pyx_kp_s_output_format_must_be_one_of_all __pyx_mstate_global->__pyx_kp_s_output_format_must_be_one_of_all
#define __pyx_n_s_pandas __pyx_mstate_global->__pyx_n_s_pandas
#define __pyx_n_s_path __pyx_mstate_global->__pyx_n_s_path
#define __pyx_kp_s_path_must_be_either_str_or_bytes __pyx_mstate_global->__pyx_kp_s_path_must_be_either_str_or_bytes
#define __pyx_kp_s_path_must_be_str_bytes_or_unicod __pyx_mstate_global->__pyx_kp_s_path_must_be_str_bytes_or_unicod
#define __pyx_n_s_pd __pyx_mstate_global->__pyx_n_s_pd
#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare
#define __pyx_n_s_pyreadstat__readstat_parser __pyx_mstate_global->__pyx_n_s_pyreadstat__readstat_parser
#define __pyx_kp_s_pyreadstat__readstat_parser_pyx __pyx_mstate_global->__pyx_kp_s_pyreadstat__readstat_parser_pyx
#define __pyx_n_s_pyx_capi __pyx_mstate_global->__pyx_n_s_pyx_capi
#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state
#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname
#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range
#define __pyx_n_s_readstat_to_numpy_types __pyx_mstate_global->__pyx_n_s_readstat_to_numpy_types
#define __pyx_n_s_readstat_variable_types __pyx_mstate_global->__pyx_n_s_readstat_variable_types
#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce
#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython
#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex
#define __pyx_n_s_right __pyx_mstate_global->__pyx_n_s_right
#define __pyx_n_s_sas_all_formats __pyx_mstate_global->__pyx_n_s_sas_all_formats
#define __pyx_n_s_sas_date_formats __pyx_mstate_global->__pyx_n_s_sas_date_formats
#define __pyx_n_s_sas_datetime_formats __pyx_mstate_global->__pyx_n_s_sas_datetime_formats
#define __pyx_n_s_sas_origin __pyx_mstate_global->__pyx_n_s_sas_origin
#define __pyx_n_s_sas_time_formats __pyx_mstate_global->__pyx_n_s_sas_time_formats
#define __pyx_n_s_scale __pyx_mstate_global->__pyx_n_s_scale
#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self
#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name
#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate
#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython
#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec
#define __pyx_n_s_spss_all_formats __pyx_mstate_global->__pyx_n_s_spss_all_formats
#define __pyx_n_s_spss_date_formats __pyx_mstate_global->__pyx_n_s_spss_date_formats
#define __pyx_n_s_spss_datetime_formats __pyx_mstate_global->__pyx_n_s_spss_datetime_formats
#define __pyx_n_s_spss_origin __pyx_mstate_global->__pyx_n_s_spss_origin
#define __pyx_n_s_spss_time_formats __pyx_mstate_global->__pyx_n_s_spss_time_formats
#define __pyx_n_s_stata_all_formats __pyx_mstate_global->__pyx_n_s_stata_all_formats
#define __pyx_n_s_stata_date_formats __pyx_mstate_global->__pyx_n_s_stata_date_formats
#define __pyx_n_s_stata_datetime_formats __pyx_mstate_global->__pyx_n_s_stata_datetime_formats
#define __pyx_n_s_stata_origin __pyx_mstate_global->__pyx_n_s_stata_origin
#define __pyx_n_s_stata_time_formats __pyx_mstate_global->__pyx_n_s_stata_time_formats
#define __pyx_n_s_string __pyx_mstate_global->__pyx_n_s_string
#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource
#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super
#define __pyx_n_s_surrogateescape __pyx_mstate_global->__pyx_n_s_surrogateescape
#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys
#define __pyx_kp_s_tC __pyx_mstate_global->__pyx_kp_s_tC
#define __pyx_n_s_table_name __pyx_mstate_global->__pyx_n_s_table_name
#define __pyx_kp_s_tc __pyx_mstate_global->__pyx_kp_s_tc
#define __pyx_kp_s_tcHH_MM __pyx_mstate_global->__pyx_kp_s_tcHH_MM
#define __pyx_kp_s_tcHH_MM_SS __pyx_mstate_global->__pyx_kp_s_tcHH_MM_SS
#define __pyx_kp_s_td __pyx_mstate_global->__pyx_kp_s_td
#define __pyx_kp_s_tdCCYY_NN_DD __pyx_mstate_global->__pyx_kp_s_tdCCYY_NN_DD
#define __pyx_kp_s_tdD_m_Y __pyx_mstate_global->__pyx_kp_s_tdD_m_Y
#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test
#define __pyx_n_s_time __pyx_mstate_global->__pyx_n_s_time
#define __pyx_n_s_to_datetime __pyx_mstate_global->__pyx_n_s_to_datetime
#define __pyx_n_s_tolist __pyx_mstate_global->__pyx_n_s_tolist
#define __pyx_n_s_undetermined __pyx_mstate_global->__pyx_n_s_undetermined
#define __pyx_n_s_unknown __pyx_mstate_global->__pyx_n_s_unknown
#define __pyx_kp_s_utf_8 __pyx_mstate_global->__pyx_kp_s_utf_8
#define __pyx_n_s_value_labels __pyx_mstate_global->__pyx_n_s_value_labels
#define __pyx_n_s_variable_alignment __pyx_mstate_global->__pyx_n_s_variable_alignment
#define __pyx_n_s_variable_display_width __pyx_mstate_global->__pyx_n_s_variable_display_width
#define __pyx_n_s_variable_measure __pyx_mstate_global->__pyx_n_s_variable_measure
#define __pyx_n_s_variable_storage_width __pyx_mstate_global->__pyx_n_s_variable_storage_width
#define __pyx_n_s_variable_to_label __pyx_mstate_global->__pyx_n_s_variable_to_label
#define __pyx_n_s_variable_value_labels __pyx_mstate_global->__pyx_n_s_variable_value_labels
#define __pyx_n_s_warn __pyx_mstate_global->__pyx_n_s_warn
#define __pyx_n_s_warnings __pyx_mstate_global->__pyx_n_s_warnings
#define __pyx_n_s_zip __pyx_mstate_global->__pyx_n_s_zip
#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0
#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1
#define __pyx_int_100000 __pyx_mstate_global->__pyx_int_100000
#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_
#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3
#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4
#define __pyx_tuple__5 __pyx_mstate_global->__pyx_tuple__5
#define __pyx_tuple__6 __pyx_mstate_global->__pyx_tuple__6
#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7
#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10
#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12
#define __pyx_codeobj__11 __pyx_mstate_global->__pyx_codeobj__11
#define __pyx_codeobj__13 __pyx_mstate_global->__pyx_codeobj__13
#define __pyx_codeobj__14 __pyx_mstate_global->__pyx_codeobj__14
/* #### Code section: module_code ### */
/* "cpython/datetime.pxd":72
* ctypedef extern class datetime.date[object PyDateTime_Date]:
* @property
* cdef inline int year(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_YEAR(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_4year_year(PyDateTime_Date *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":73
* @property
* cdef inline int year(self):
* return PyDateTime_GET_YEAR(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_GET_YEAR(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":72
* ctypedef extern class datetime.date[object PyDateTime_Date]:
* @property
* cdef inline int year(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_YEAR(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":76
*
* @property
* cdef inline int month(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_MONTH(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_5month_month(PyDateTime_Date *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":77
* @property
* cdef inline int month(self):
* return PyDateTime_GET_MONTH(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_GET_MONTH(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":76
*
* @property
* cdef inline int month(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_MONTH(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":80
*
* @property
* cdef inline int day(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_DAY(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_3day_day(PyDateTime_Date *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":81
* @property
* cdef inline int day(self):
* return PyDateTime_GET_DAY(self) # <<<<<<<<<<<<<<
*
* ctypedef extern class datetime.time[object PyDateTime_Time]:
*/
__pyx_r = PyDateTime_GET_DAY(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":80
*
* @property
* cdef inline int day(self): # <<<<<<<<<<<<<<
* return PyDateTime_GET_DAY(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":85
* ctypedef extern class datetime.time[object PyDateTime_Time]:
* @property
* cdef inline int hour(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_HOUR(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4hour_hour(PyDateTime_Time *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":86
* @property
* cdef inline int hour(self):
* return PyDateTime_TIME_GET_HOUR(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_TIME_GET_HOUR(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":85
* ctypedef extern class datetime.time[object PyDateTime_Time]:
* @property
* cdef inline int hour(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_HOUR(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":89
*
* @property
* cdef inline int minute(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_MINUTE(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6minute_minute(PyDateTime_Time *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":90
* @property
* cdef inline int minute(self):
* return PyDateTime_TIME_GET_MINUTE(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_TIME_GET_MINUTE(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":89
*
* @property
* cdef inline int minute(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_MINUTE(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":93
*
* @property
* cdef inline int second(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_SECOND(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6second_second(PyDateTime_Time *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":94
* @property
* cdef inline int second(self):
* return PyDateTime_TIME_GET_SECOND(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_TIME_GET_SECOND(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":93
*
* @property
* cdef inline int second(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_SECOND(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":97
*
* @property
* cdef inline int microsecond(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_MICROSECOND(self)
*
*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(PyDateTime_Time *__pyx_v_self) {
int __pyx_r;
/* "cpython/datetime.pxd":98
* @property
* cdef inline int microsecond(self):
* return PyDateTime_TIME_GET_MICROSECOND(self) # <<<<<<<<<<<<<<
*
* @property
*/
__pyx_r = PyDateTime_TIME_GET_MICROSECOND(((PyObject *)__pyx_v_self));
goto __pyx_L0;
/* "cpython/datetime.pxd":97
*
* @property
* cdef inline int microsecond(self): # <<<<<<<<<<<<<<
* return PyDateTime_TIME_GET_MICROSECOND(self)
*
*/
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
/* "cpython/datetime.pxd":101
*
* @property
* cdef inline object tzinfo(self): # <<<<<<<<<<<<<<
* return