summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-15 08:16:53 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-15 08:16:53 +0000
commite7a3185c14d529cec6fff1d8f25618adf7468d75 (patch)
tree17cc95f3f9630b5cc3bdac5957cbc7b0bf6d7e2c
parent7bd18e95b9208fbbf7bc74d164b140e8dd1f5b25 (diff)
automatic import of python-tidypolars
-rw-r--r--.gitignore1
-rw-r--r--python-tidypolars.spec641
-rw-r--r--sources1
3 files changed, 643 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..63a4583 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/tidypolars-0.2.19.tar.gz
diff --git a/python-tidypolars.spec b/python-tidypolars.spec
new file mode 100644
index 0000000..4158808
--- /dev/null
+++ b/python-tidypolars.spec
@@ -0,0 +1,641 @@
+%global _empty_manifest_terminate_build 0
+Name: python-tidypolars
+Version: 0.2.19
+Release: 1
+Summary: Tidy interface to polars
+License: MIT
+URL: https://pypi.org/project/tidypolars/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/7a/26/78d70e0372243270d8fdac4d5fbf970052f6212259bddf487e76493f217e/tidypolars-0.2.19.tar.gz
+BuildArch: noarch
+
+Requires: python3-numpy
+Requires: python3-polars
+
+%description
+# tidypolars
+[![PyPI Latest Release](https://img.shields.io/pypi/v/tidypolars.svg)](https://pypi.org/project/tidypolars/)
+[![conda-forge](https://anaconda.org/conda-forge/tidypolars/badges/version.svg)](https://anaconda.org/conda-forge/tidypolars)
+
+tidypolars is a data frame library built on top of the blazingly fast [polars](https://github.com/pola-rs/polars) library that gives access to methods and functions familiar to R tidyverse users.
+
+## Installation
+You can install tidypolars with `pip`:
+
+```bash
+$ pip3 install tidypolars
+```
+
+Or through `conda`:
+```bash
+$ conda install -c conda-forge tidypolars
+```
+
+### General syntax
+
+tidypolars methods are designed to work like tidyverse functions:
+
+```python
+import tidypolars as tp
+from tidypolars import col, desc
+
+df = tp.Tibble(x = range(3), y = range(3, 6), z = ['a', 'a', 'b'])
+
+(
+ df
+ .select('x', 'y', 'z')
+ .filter(col('x') < 4, col('y') > 1)
+ .arrange(desc('z'), 'x')
+ .mutate(double_x = col('x') * 2,
+ x_plus_y = col('x') + col('y'))
+)
+┌─────┬─────┬─────┬──────────┬──────────┐
+│ x ┆ y ┆ z ┆ double_x ┆ x_plus_y │
+│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ str ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╪══════════╪══════════╡
+│ 2 ┆ 5 ┆ b ┆ 4 ┆ 7 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 0 ┆ 3 ┆ a ┆ 0 ┆ 3 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 1 ┆ 4 ┆ a ┆ 2 ┆ 5 │
+└─────┴─────┴─────┴──────────┴──────────┘
+```
+
+The key difference from R is that column names must be wrapped in `col()` in the following methods:
+* `.filter()`
+* `.mutate()`
+* `.summarize()`
+
+The general idea - when doing calculations on a column you need to wrap it in `col()`. When doing simple column selections (like in `.select()`) you can pass the column names as strings.
+
+A full list of functions can be found [here](https://tidypolars.readthedocs.io/en/latest/reference.html).
+
+### Group by syntax
+
+Methods operate by group by calling the `by` arg.
+
+* A single column can be passed with `by = 'z'`
+* Multiple columns can be passed with `by = ['y', 'z']`
+
+```python
+(
+ df
+ .summarize(avg_x = tp.mean(col('x')),
+ by = 'z')
+)
+┌─────┬───────┐
+│ z ┆ avg_x │
+│ --- ┆ --- │
+│ str ┆ f64 │
+╞═════╪═══════╡
+│ a ┆ 0.5 │
+├╌╌╌╌╌┼╌╌╌╌╌╌╌┤
+│ b ┆ 2 │
+└─────┴───────┘
+```
+
+### Selecting/dropping columns
+
+tidyselect functions can be mixed with normal selection when selecting columns:
+
+```python
+df = tp.Tibble(x1 = range(3), x2 = range(3), y = range(3), z = range(3))
+
+df.select(tp.starts_with('x'), 'z')
+┌─────┬─────┬─────┐
+│ x1 ┆ x2 ┆ z │
+│ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╡
+│ 0 ┆ 0 ┆ 0 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 1 ┆ 1 ┆ 1 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 2 ┆ 2 ┆ 2 │
+└─────┴─────┴─────┘
+```
+
+To drop columns use the `.drop()` method:
+
+```python
+df.drop(tp.starts_with('x'), 'z')
+┌─────┐
+│ y │
+│ --- │
+│ i64 │
+╞═════╡
+│ 0 │
+├╌╌╌╌╌┤
+│ 1 │
+├╌╌╌╌╌┤
+│ 2 │
+└─────┘
+```
+
+### Converting to/from pandas data frames
+
+If you need to use a package that requires pandas data frames, you can convert from a tidypolars `Tibble` to
+a pandas `DataFrame`.
+
+To do this you'll first need to install pyarrow:
+
+```bash
+pip3 install pyarrow
+```
+
+To convert to a pandas `DataFrame`:
+
+```python
+df = df.to_pandas()
+```
+
+To convert from a pandas `DataFrame` to a tidypolars `Tibble`:
+
+```python
+df = tp.from_pandas(df)
+```
+
+## Speed Comparisons
+
+A few notes:
+
+* Comparing times from separate functions typically isn't very useful. For example - the `.summarize()` tests
+ were performed on a different dataset from `.pivot_wider()`.
+* All tests are run 5 times. The times shown are the median of those 5 runs.
+* All timings are in milliseconds.
+* All tests can be found in the source code
+ [here](https://github.com/markfairbanks/tidypolars/blob/main/benchmarks/benchmarks.ipynb).
+* FAQ - Why are some `tidypolars` functions faster than their `polars` counterpart?
+ + Short answer - they're not! After all they're just using `polars` in the background.
+ + Long answer - All python functions have some slight natural variation in their execution time.
+ By chance the `tidypolars` runs were slightly shorter on those specific functions on this
+ iteration of the tests. However one goal of these tests is to show that the "time cost" of
+ translating syntax to `polars` is very negligible to the
+ user (especially on medium-to-large datasets).
+* Lastly I'd like to mention that these tests were not rigorously created to cover all angles equally. They are just meant to be used as general insight into the performance of these packages.
+
+```python
+┌─────────────┬────────────┬─────────┬──────────┐
+│ func_tested ┆ tidypolars ┆ polars ┆ pandas │
+│ --- ┆ --- ┆ --- ┆ --- │
+│ str ┆ f64 ┆ f64 ┆ f64 │
+╞═════════════╪════════════╪═════════╪══════════╡
+│ arrange ┆ 752.298 ┆ 750.386 ┆ 768.677 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ case_when ┆ 134.716 ┆ 135.721 ┆ 84.105 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ distinct ┆ 40.683 ┆ 42.03 ┆ 270.724 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ filter ┆ 30.346 ┆ 30.163 ┆ 216.383 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ left_join ┆ 889.414 ┆ 900.966 ┆ 2723.635 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ mutate ┆ 15.976 ┆ 8.513 ┆ 78.746 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ pivot_wider ┆ 40.915 ┆ 42.768 ┆ 144.66 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ summarize ┆ 78.795 ┆ 68.275 ┆ 300.896 │
+└─────────────┴────────────┴─────────┴──────────┘
+```
+
+## Contributing
+
+Interested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.
+
+
+%package -n python3-tidypolars
+Summary: Tidy interface to polars
+Provides: python-tidypolars
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-tidypolars
+# tidypolars
+[![PyPI Latest Release](https://img.shields.io/pypi/v/tidypolars.svg)](https://pypi.org/project/tidypolars/)
+[![conda-forge](https://anaconda.org/conda-forge/tidypolars/badges/version.svg)](https://anaconda.org/conda-forge/tidypolars)
+
+tidypolars is a data frame library built on top of the blazingly fast [polars](https://github.com/pola-rs/polars) library that gives access to methods and functions familiar to R tidyverse users.
+
+## Installation
+You can install tidypolars with `pip`:
+
+```bash
+$ pip3 install tidypolars
+```
+
+Or through `conda`:
+```bash
+$ conda install -c conda-forge tidypolars
+```
+
+### General syntax
+
+tidypolars methods are designed to work like tidyverse functions:
+
+```python
+import tidypolars as tp
+from tidypolars import col, desc
+
+df = tp.Tibble(x = range(3), y = range(3, 6), z = ['a', 'a', 'b'])
+
+(
+ df
+ .select('x', 'y', 'z')
+ .filter(col('x') < 4, col('y') > 1)
+ .arrange(desc('z'), 'x')
+ .mutate(double_x = col('x') * 2,
+ x_plus_y = col('x') + col('y'))
+)
+┌─────┬─────┬─────┬──────────┬──────────┐
+│ x ┆ y ┆ z ┆ double_x ┆ x_plus_y │
+│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ str ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╪══════════╪══════════╡
+│ 2 ┆ 5 ┆ b ┆ 4 ┆ 7 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 0 ┆ 3 ┆ a ┆ 0 ┆ 3 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 1 ┆ 4 ┆ a ┆ 2 ┆ 5 │
+└─────┴─────┴─────┴──────────┴──────────┘
+```
+
+The key difference from R is that column names must be wrapped in `col()` in the following methods:
+* `.filter()`
+* `.mutate()`
+* `.summarize()`
+
+The general idea - when doing calculations on a column you need to wrap it in `col()`. When doing simple column selections (like in `.select()`) you can pass the column names as strings.
+
+A full list of functions can be found [here](https://tidypolars.readthedocs.io/en/latest/reference.html).
+
+### Group by syntax
+
+Methods operate by group by calling the `by` arg.
+
+* A single column can be passed with `by = 'z'`
+* Multiple columns can be passed with `by = ['y', 'z']`
+
+```python
+(
+ df
+ .summarize(avg_x = tp.mean(col('x')),
+ by = 'z')
+)
+┌─────┬───────┐
+│ z ┆ avg_x │
+│ --- ┆ --- │
+│ str ┆ f64 │
+╞═════╪═══════╡
+│ a ┆ 0.5 │
+├╌╌╌╌╌┼╌╌╌╌╌╌╌┤
+│ b ┆ 2 │
+└─────┴───────┘
+```
+
+### Selecting/dropping columns
+
+tidyselect functions can be mixed with normal selection when selecting columns:
+
+```python
+df = tp.Tibble(x1 = range(3), x2 = range(3), y = range(3), z = range(3))
+
+df.select(tp.starts_with('x'), 'z')
+┌─────┬─────┬─────┐
+│ x1 ┆ x2 ┆ z │
+│ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╡
+│ 0 ┆ 0 ┆ 0 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 1 ┆ 1 ┆ 1 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 2 ┆ 2 ┆ 2 │
+└─────┴─────┴─────┘
+```
+
+To drop columns use the `.drop()` method:
+
+```python
+df.drop(tp.starts_with('x'), 'z')
+┌─────┐
+│ y │
+│ --- │
+│ i64 │
+╞═════╡
+│ 0 │
+├╌╌╌╌╌┤
+│ 1 │
+├╌╌╌╌╌┤
+│ 2 │
+└─────┘
+```
+
+### Converting to/from pandas data frames
+
+If you need to use a package that requires pandas data frames, you can convert from a tidypolars `Tibble` to
+a pandas `DataFrame`.
+
+To do this you'll first need to install pyarrow:
+
+```bash
+pip3 install pyarrow
+```
+
+To convert to a pandas `DataFrame`:
+
+```python
+df = df.to_pandas()
+```
+
+To convert from a pandas `DataFrame` to a tidypolars `Tibble`:
+
+```python
+df = tp.from_pandas(df)
+```
+
+## Speed Comparisons
+
+A few notes:
+
+* Comparing times from separate functions typically isn't very useful. For example - the `.summarize()` tests
+ were performed on a different dataset from `.pivot_wider()`.
+* All tests are run 5 times. The times shown are the median of those 5 runs.
+* All timings are in milliseconds.
+* All tests can be found in the source code
+ [here](https://github.com/markfairbanks/tidypolars/blob/main/benchmarks/benchmarks.ipynb).
+* FAQ - Why are some `tidypolars` functions faster than their `polars` counterpart?
+ + Short answer - they're not! After all they're just using `polars` in the background.
+ + Long answer - All python functions have some slight natural variation in their execution time.
+ By chance the `tidypolars` runs were slightly shorter on those specific functions on this
+ iteration of the tests. However one goal of these tests is to show that the "time cost" of
+ translating syntax to `polars` is very negligible to the
+ user (especially on medium-to-large datasets).
+* Lastly I'd like to mention that these tests were not rigorously created to cover all angles equally. They are just meant to be used as general insight into the performance of these packages.
+
+```python
+┌─────────────┬────────────┬─────────┬──────────┐
+│ func_tested ┆ tidypolars ┆ polars ┆ pandas │
+│ --- ┆ --- ┆ --- ┆ --- │
+│ str ┆ f64 ┆ f64 ┆ f64 │
+╞═════════════╪════════════╪═════════╪══════════╡
+│ arrange ┆ 752.298 ┆ 750.386 ┆ 768.677 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ case_when ┆ 134.716 ┆ 135.721 ┆ 84.105 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ distinct ┆ 40.683 ┆ 42.03 ┆ 270.724 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ filter ┆ 30.346 ┆ 30.163 ┆ 216.383 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ left_join ┆ 889.414 ┆ 900.966 ┆ 2723.635 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ mutate ┆ 15.976 ┆ 8.513 ┆ 78.746 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ pivot_wider ┆ 40.915 ┆ 42.768 ┆ 144.66 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ summarize ┆ 78.795 ┆ 68.275 ┆ 300.896 │
+└─────────────┴────────────┴─────────┴──────────┘
+```
+
+## Contributing
+
+Interested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.
+
+
+%package help
+Summary: Development documents and examples for tidypolars
+Provides: python3-tidypolars-doc
+%description help
+# tidypolars
+[![PyPI Latest Release](https://img.shields.io/pypi/v/tidypolars.svg)](https://pypi.org/project/tidypolars/)
+[![conda-forge](https://anaconda.org/conda-forge/tidypolars/badges/version.svg)](https://anaconda.org/conda-forge/tidypolars)
+
+tidypolars is a data frame library built on top of the blazingly fast [polars](https://github.com/pola-rs/polars) library that gives access to methods and functions familiar to R tidyverse users.
+
+## Installation
+You can install tidypolars with `pip`:
+
+```bash
+$ pip3 install tidypolars
+```
+
+Or through `conda`:
+```bash
+$ conda install -c conda-forge tidypolars
+```
+
+### General syntax
+
+tidypolars methods are designed to work like tidyverse functions:
+
+```python
+import tidypolars as tp
+from tidypolars import col, desc
+
+df = tp.Tibble(x = range(3), y = range(3, 6), z = ['a', 'a', 'b'])
+
+(
+ df
+ .select('x', 'y', 'z')
+ .filter(col('x') < 4, col('y') > 1)
+ .arrange(desc('z'), 'x')
+ .mutate(double_x = col('x') * 2,
+ x_plus_y = col('x') + col('y'))
+)
+┌─────┬─────┬─────┬──────────┬──────────┐
+│ x ┆ y ┆ z ┆ double_x ┆ x_plus_y │
+│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ str ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╪══════════╪══════════╡
+│ 2 ┆ 5 ┆ b ┆ 4 ┆ 7 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 0 ┆ 3 ┆ a ┆ 0 ┆ 3 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ 1 ┆ 4 ┆ a ┆ 2 ┆ 5 │
+└─────┴─────┴─────┴──────────┴──────────┘
+```
+
+The key difference from R is that column names must be wrapped in `col()` in the following methods:
+* `.filter()`
+* `.mutate()`
+* `.summarize()`
+
+The general idea - when doing calculations on a column you need to wrap it in `col()`. When doing simple column selections (like in `.select()`) you can pass the column names as strings.
+
+A full list of functions can be found [here](https://tidypolars.readthedocs.io/en/latest/reference.html).
+
+### Group by syntax
+
+Methods operate by group by calling the `by` arg.
+
+* A single column can be passed with `by = 'z'`
+* Multiple columns can be passed with `by = ['y', 'z']`
+
+```python
+(
+ df
+ .summarize(avg_x = tp.mean(col('x')),
+ by = 'z')
+)
+┌─────┬───────┐
+│ z ┆ avg_x │
+│ --- ┆ --- │
+│ str ┆ f64 │
+╞═════╪═══════╡
+│ a ┆ 0.5 │
+├╌╌╌╌╌┼╌╌╌╌╌╌╌┤
+│ b ┆ 2 │
+└─────┴───────┘
+```
+
+### Selecting/dropping columns
+
+tidyselect functions can be mixed with normal selection when selecting columns:
+
+```python
+df = tp.Tibble(x1 = range(3), x2 = range(3), y = range(3), z = range(3))
+
+df.select(tp.starts_with('x'), 'z')
+┌─────┬─────┬─────┐
+│ x1 ┆ x2 ┆ z │
+│ --- ┆ --- ┆ --- │
+│ i64 ┆ i64 ┆ i64 │
+╞═════╪═════╪═════╡
+│ 0 ┆ 0 ┆ 0 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 1 ┆ 1 ┆ 1 │
+├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
+│ 2 ┆ 2 ┆ 2 │
+└─────┴─────┴─────┘
+```
+
+To drop columns use the `.drop()` method:
+
+```python
+df.drop(tp.starts_with('x'), 'z')
+┌─────┐
+│ y │
+│ --- │
+│ i64 │
+╞═════╡
+│ 0 │
+├╌╌╌╌╌┤
+│ 1 │
+├╌╌╌╌╌┤
+│ 2 │
+└─────┘
+```
+
+### Converting to/from pandas data frames
+
+If you need to use a package that requires pandas data frames, you can convert from a tidypolars `Tibble` to
+a pandas `DataFrame`.
+
+To do this you'll first need to install pyarrow:
+
+```bash
+pip3 install pyarrow
+```
+
+To convert to a pandas `DataFrame`:
+
+```python
+df = df.to_pandas()
+```
+
+To convert from a pandas `DataFrame` to a tidypolars `Tibble`:
+
+```python
+df = tp.from_pandas(df)
+```
+
+## Speed Comparisons
+
+A few notes:
+
+* Comparing times from separate functions typically isn't very useful. For example - the `.summarize()` tests
+ were performed on a different dataset from `.pivot_wider()`.
+* All tests are run 5 times. The times shown are the median of those 5 runs.
+* All timings are in milliseconds.
+* All tests can be found in the source code
+ [here](https://github.com/markfairbanks/tidypolars/blob/main/benchmarks/benchmarks.ipynb).
+* FAQ - Why are some `tidypolars` functions faster than their `polars` counterpart?
+ + Short answer - they're not! After all they're just using `polars` in the background.
+ + Long answer - All python functions have some slight natural variation in their execution time.
+ By chance the `tidypolars` runs were slightly shorter on those specific functions on this
+ iteration of the tests. However one goal of these tests is to show that the "time cost" of
+ translating syntax to `polars` is very negligible to the
+ user (especially on medium-to-large datasets).
+* Lastly I'd like to mention that these tests were not rigorously created to cover all angles equally. They are just meant to be used as general insight into the performance of these packages.
+
+```python
+┌─────────────┬────────────┬─────────┬──────────┐
+│ func_tested ┆ tidypolars ┆ polars ┆ pandas │
+│ --- ┆ --- ┆ --- ┆ --- │
+│ str ┆ f64 ┆ f64 ┆ f64 │
+╞═════════════╪════════════╪═════════╪══════════╡
+│ arrange ┆ 752.298 ┆ 750.386 ┆ 768.677 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ case_when ┆ 134.716 ┆ 135.721 ┆ 84.105 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ distinct ┆ 40.683 ┆ 42.03 ┆ 270.724 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ filter ┆ 30.346 ┆ 30.163 ┆ 216.383 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ left_join ┆ 889.414 ┆ 900.966 ┆ 2723.635 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ mutate ┆ 15.976 ┆ 8.513 ┆ 78.746 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ pivot_wider ┆ 40.915 ┆ 42.768 ┆ 144.66 │
+├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
+│ summarize ┆ 78.795 ┆ 68.275 ┆ 300.896 │
+└─────────────┴────────────┴─────────┴──────────┘
+```
+
+## Contributing
+
+Interested in contributing? Check out the contributing guidelines. Please note that this project is released with a Code of Conduct. By contributing to this project, you agree to abide by its terms.
+
+
+%prep
+%autosetup -n tidypolars-0.2.19
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-tidypolars -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.19-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..93bf215
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+158109024ba62a878f04ce91fdcf642d tidypolars-0.2.19.tar.gz