From 7357907430b2fa782ceed954bbe83447a05e382c Mon Sep 17 00:00:00 2001 From: pwwang <1188067+pwwang@users.noreply.github.com> Date: Wed, 23 Mar 2022 12:31:44 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=96=200.6.4=20(#95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔥 Remove unused code * 🩹 Change dtypes of `base.letters/LETTERS/month_abb/month_name` * 📝 Update reference maps * 📝 Add environment.yml for binder to work * Update environment.yml * 📝 Update styles for docs * 🐛 Fix order_by argument for `dplyr.lead-lag` * 📝 Update notebooks * 📝 Update README * 🔖 0.6.4 --- .gitignore | 2 +- README.md | 54 +- datar/__init__.py | 2 +- datar/base/constants.py | 8 +- datar/base/seq.py | 2 +- datar/base/string.py | 26 - datar/core/broadcast.py | 6 +- datar/dplyr/across.py | 20 +- datar/dplyr/lead_lag.py | 4 +- docs/CHANGELOG.md | 24 + docs/notebooks/across.ipynb | 33 +- docs/notebooks/add_column.ipynb | 4 +- docs/notebooks/add_row.ipynb | 4 +- docs/notebooks/arrange.ipynb | 22 +- docs/notebooks/base-arithmetic.ipynb | 172 +++---- docs/notebooks/base-funs.ipynb | 44 +- docs/notebooks/base.ipynb | 182 +++---- docs/notebooks/between.ipynb | 67 ++- docs/notebooks/bind.ipynb | 94 ++-- docs/notebooks/case_when.ipynb | 27 +- docs/notebooks/chop.ipynb | 47 +- docs/notebooks/coalesce.ipynb | 24 +- docs/notebooks/complete.ipynb | 22 +- docs/notebooks/context.ipynb | 238 ++++----- docs/notebooks/count.ipynb | 30 +- docs/notebooks/cumall.ipynb | 63 +-- docs/notebooks/datar.ipynb | 26 +- docs/notebooks/desc.ipynb | 18 +- docs/notebooks/distinct.ipynb | 322 ++++++------ docs/notebooks/drop_na.ipynb | 22 +- docs/notebooks/enframe.ipynb | 8 +- docs/notebooks/expand.ipynb | 74 ++- docs/notebooks/expand_grid.ipynb | 22 +- docs/notebooks/extract.ipynb | 22 +- docs/notebooks/fill.ipynb | 22 +- docs/notebooks/filter-joins.ipynb | 24 +- docs/notebooks/filter.ipynb | 22 +- docs/notebooks/forcats_fct_multi.ipynb | 25 +- docs/notebooks/forcats_lvl_addrm.ipynb | 35 +- docs/notebooks/forcats_lvl_order.ipynb | 64 +-- docs/notebooks/forcats_lvl_value.ipynb | 471 ++++++++--------- docs/notebooks/forcats_misc.ipynb | 599 ++++++++++------------ docs/notebooks/full_seq.ipynb | 22 +- docs/notebooks/group_by.ipynb | 27 +- docs/notebooks/group_map.ipynb | 22 +- docs/notebooks/group_split.ipynb | 37 +- docs/notebooks/group_trim.ipynb | 30 +- docs/notebooks/lead-lag.ipynb | 125 ++--- docs/notebooks/mutate-joins.ipynb | 29 +- docs/notebooks/mutate.ipynb | 57 +-- docs/notebooks/n_distinct.ipynb | 8 +- docs/notebooks/na_if.ipynb | 30 +- docs/notebooks/nb_helpers.py | 48 +- docs/notebooks/near.ipynb | 25 +- docs/notebooks/nest-join.ipynb | 26 +- docs/notebooks/nest.ipynb | 130 +---- docs/notebooks/nth.ipynb | 14 +- docs/notebooks/pack.ipynb | 121 ++--- docs/notebooks/pivot_longer.ipynb | 22 +- docs/notebooks/pivot_wider.ipynb | 22 +- docs/notebooks/pull.ipynb | 34 +- docs/notebooks/ranking.ipynb | 92 ++-- docs/notebooks/recode.ipynb | 82 +-- docs/notebooks/relocate.ipynb | 22 +- docs/notebooks/rename.ipynb | 28 +- docs/notebooks/replace_na.ipynb | 22 +- docs/notebooks/rownames.ipynb | 40 +- docs/notebooks/rows.ipynb | 46 +- docs/notebooks/rowwise.ipynb | 355 +++++++------ docs/notebooks/select.ipynb | 27 +- docs/notebooks/separate.ipynb | 122 +---- docs/notebooks/setops.ipynb | 30 +- docs/notebooks/slice.ipynb | 364 +++++++------- docs/notebooks/summarise.ipynb | 66 +-- docs/notebooks/tibble.ipynb | 174 +++---- docs/notebooks/uncount.ipynb | 22 +- docs/notebooks/unite.ipynb | 24 +- docs/notebooks/with_groups.ipynb | 132 +++-- docs/reference-maps/base.md | 240 ++++----- docs/reference-maps/datar.md | 7 +- docs/reference-maps/tibble.md | 5 +- docs/reference-maps/tidyr.md | 6 +- docs/style.css | 14 +- environment.yml | 9 + mkdocs.yml | 19 +- poetry.lock | 670 +++++++++++++++++++++++++ pyproject.toml | 2 +- tests/__init__.py | 4 +- tests/dplyr/test_funs.py | 7 +- 89 files changed, 2959 insertions(+), 3498 deletions(-) create mode 100644 environment.yml create mode 100644 poetry.lock diff --git a/.gitignore b/.gitignore index 66e18286..d6c72971 100644 --- a/.gitignore +++ b/.gitignore @@ -101,7 +101,7 @@ export/ site/ # poetry -poetry.lock +# poetry.lock # backup files *.bak diff --git a/README.md b/README.md index 7f40cb2f..37a9207b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # datar -Port of [dplyr][2] and other related R packages in python, using [pipda][3]. +A Grammar of Data Manipulation in python [![Pypi][6]][7] [![Github][8]][9] ![Building][10] [![Docs and API][11]][5] [![Codacy][12]][13] [![Codacy coverage][14]][13] @@ -9,18 +9,20 @@ Port of [dplyr][2] and other related R packages in python, using [pipda][3]. -Unlike other similar packages in python that just mimic the piping syntax, `datar` follows the API designs from the original packages as much as possible, and is tested thoroughly with the cases from the original packages. So that minimal effort is needed for those who are familar with those R packages to transition to python. +`datar` is a re-imagining of APIs of data manipulation libraries in python (currently only `pandas` supported) so that you can manipulate your data with it like with `dplyr` in `R`. +`datar` is an in-depth port of `tidyverse` packages, such as `dplyr`, `tidyr`, `forcats` and `tibble`, as well as some functions from `R` itself. ## Installtion ```shell pip install -U datar -# to make sure dependencies to be up-to-date -# pip install -U varname pipda datar ``` - -`datar` requires python 3.7.1+ and is backended by `pandas (1.3+)`. +or +```shell +conda install -c conda-forge datar +# mamba install -c conda-forge datar +``` ## Example usage @@ -103,6 +105,46 @@ iris >> pull(f.Sepal_Length) >> dist_plot() ![example](./example2.png) +See also some advanced examples from my answers on StackOverflow: + +- [Compare 2 DataFrames and drop rows that do not contain corresponding ID variables](https://stackoverflow.com/a/71532167/5088165) +- [count by id with dynamic criteria](https://stackoverflow.com/a/71519157/5088165) +- [counting the frequency in python size vs count](https://stackoverflow.com/a/71516503/5088165) +- [Pandas equivalent of R/dplyr group_by summarise concatenation](https://stackoverflow.com/a/71490832/5088165) +- [ntiles over columns in python using R's "mutate(across(cols = ..."](https://stackoverflow.com/a/71490501/5088165) +- [Replicate R Solution in Python for Calculating Monthly CRR](https://stackoverflow.com/a/71490194/5088165) +- [Best/Concise Way to Conditionally Concat two Columns in Pandas DataFrame](https://stackoverflow.com/a/71443587/5088165) +- [how to transform R dataframe to rows of indicator values](https://stackoverflow.com/a/71443515/5088165) +- [Left join on multiple columns](https://stackoverflow.com/a/71443441/5088165) +- [Python: change column of strings with None to 0/1](https://stackoverflow.com/a/71429016/5088165) +- [Comparing 2 data frames and finding values are not in 2nd data frame](https://stackoverflow.com/a/71415818/5088165) +- [How to compare two Pandas DataFrames based on specific columns in Python?](https://stackoverflow.com/a/71413499/5088165) +- [expand.grid equivalent to get pandas data frame for prediction in Python](https://stackoverflow.com/a/71376414/5088165) +- [Python pandas equivalent to R's group_by, mutate, and ifelse](https://stackoverflow.com/a/70387267/5088165) +- [How to convert a list of dictionaries to a Pandas Dataframe with one of the values as column name?](https://stackoverflow.com/a/69094005/5088165) +- [Moving window on a Standard Deviation & Mean calculation](https://stackoverflow.com/a/69093067/5088165) +- [Python: creating new "interpolated" rows based on a specific field in Pandas](https://stackoverflow.com/a/69092696/5088165) +- [How would I extend a Pandas DataFrame such as this?](https://stackoverflow.com/a/69092067/5088165) +- [How to define new variable based on multiple conditions in Pandas - dplyr case_when equivalent](https://stackoverflow.com/a/69080870/5088165) +- [What is the Pandas equivalent of top_n() in dplyr?](https://stackoverflow.com/a/69080806/5088165) +- [Equivalent of fct_lump in pandas](https://stackoverflow.com/a/69080727/5088165) +- [pandas equivalent of fct_reorder](https://stackoverflow.com/a/69080638/5088165) +- [Is there a way to find out the 2 X 2 contingency table consisting of the count of values by applying a condition from two dataframe](https://stackoverflow.com/a/68674345/5088165) +- [Count if array in pandas](https://stackoverflow.com/a/68659334/5088165) +- [How to create a new column for transposed data](https://stackoverflow.com/a/68642891/5088165) +- [How to create new DataFrame based on conditions from another DataFrame](https://stackoverflow.com/a/68640494/5088165) +- [Refer to column of a data frame that is being defined](https://stackoverflow.com/a/68308077/5088165) +- [How to use regex in mutate dplython to add new column](https://stackoverflow.com/a/68308033/5088165) +- [Multiplying a row by the previous row (with a certain name) in Pandas](https://stackoverflow.com/a/68137136/5088165) +- [Create dataframe from rows under a row with a certain condition](https://stackoverflow.com/a/68137089/5088165) +- [pandas data frame, group by multiple cols and put other columns' contents in one](https://stackoverflow.com/a/68136982/5088165) +- [Pandas custom aggregate function with condition on group, is it possible?](https://stackoverflow.com/a/68136704/5088165) +- [multiply different values to pandas column with combination of other columns](https://stackoverflow.com/a/68136300/5088165) +- [Vectorized column-wise regex matching in pandas](https://stackoverflow.com/a/68124082/5088165) +- [Iterate through and conditionally append string values in a Pandas dataframe](https://stackoverflow.com/a/68123912/5088165) +- [Groupby mutate equivalent in pandas/python using tidydata principles](https://stackoverflow.com/a/68123753/5088165) +- [More ...](https://stackoverflow.com/search?q=user%3A5088165+and+%5Bpandas%5D) + [1]: https://tidyr.tidyverse.org/index.html [2]: https://dplyr.tidyverse.org/index.html diff --git a/datar/__init__.py b/datar/__init__.py index ea32249b..147b2da1 100644 --- a/datar/__init__.py +++ b/datar/__init__.py @@ -30,7 +30,7 @@ ) __all__ = ("f", "get_versions") -__version__ = "0.6.3" +__version__ = "0.6.4" def get_versions(prnt: bool = True) -> _VersionsTuple: diff --git a/datar/base/constants.py b/datar/base/constants.py index d8385066..81ef4157 100644 --- a/datar/base/constants.py +++ b/datar/base/constants.py @@ -7,8 +7,8 @@ pi = math.pi -letters = np.array(list(ascii_letters[:26]), dtype=object) -LETTERS = np.array(list(ascii_letters[26:]), dtype=object) +letters = np.array(list(ascii_letters[:26]), dtype=' 0 and size % value.size != 0: - raise ValueError( - f"Cannot recycle {name} (size={value.size}) to size {size}." - ) - - if value.size == size == 0: - return np.array([], dtype=object) - - if value.size == 0: - value = np.array([np.nan], dtype=object) - - return value.repeat(size // value.size) - - @register_func(None, context=Context.EVAL) def as_character( x, diff --git a/datar/core/broadcast.py b/datar/core/broadcast.py index 6ed093d3..29218a36 100644 --- a/datar/core/broadcast.py +++ b/datar/core/broadcast.py @@ -525,7 +525,10 @@ def _( if isinstance(value, DataFrame) and value.index.size == 0: value.index = index - if not value.index.equals(index): + # if not value.index.equals(index): + if not value.index.equals(index) and frozenset( + value.index + ) != frozenset(index): raise ValueError("Value has incompatible index.") if isinstance(value, Series): @@ -716,6 +719,7 @@ def _(value: SeriesGroupBy, name: str) -> Tibble: @init_tibble_from.register(DataFrameGroupBy) def _(value: Union[DataFrame, DataFrameGroupBy], name: str) -> Tibble: from ..tibble import as_tibble + result = regcall(as_tibble, value) if name: diff --git a/datar/dplyr/across.py b/datar/dplyr/across.py index 3427270c..29635de1 100644 --- a/datar/dplyr/across.py +++ b/datar/dplyr/across.py @@ -165,6 +165,24 @@ def across( The original API: https://dplyr.tidyverse.org/reference/across.html + Examples: + # + >>> iris >> mutate(across(c(f.Sepal_Length, f.Sepal_Width), round)) + Sepal_Length Sepal_Width Petal_Length Petal_Width Species + + 0 5.0 4.0 1.4 0.2 setosa + 1 5.0 3.0 1.4 0.2 setosa + .. ... ... ... ... ... + + >>> iris >> group_by(f.Species) >> summarise( + >>> across(starts_with("Sepal"), mean) + >>> ) + Species Sepal_Length Sepal_Width + + 0 setosa 5.006 3.428 + 1 versicolor 5.936 2.770 + 2 virginica 6.588 2.974 + Args: _data: The dataframe. *args: If given, the first 2 elements should be columns and functions @@ -218,7 +236,7 @@ def c_across( _cols: The columns Returns: - A series + A rowwise tibble """ _data = _context.meta.get("input_data", _data) diff --git a/datar/dplyr/lead_lag.py b/datar/dplyr/lead_lag.py index a78939e2..bc6f524f 100644 --- a/datar/dplyr/lead_lag.py +++ b/datar/dplyr/lead_lag.py @@ -28,12 +28,12 @@ def _shift(x, n, default=None, order_by=None): newx = Series(x) if order_by is not None: - newx = newx.reset_index(drop=True) + # newx = newx.reset_index(drop=True) out = with_order(order_by, Series.shift, newx, n, fill_value=default) else: out = newx.shift(n, fill_value=default) - return out + return out if isinstance(x, Series) else out.values @register_func(None, context=Context.EVAL) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 56c3cb89..50c600c1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,3 +1,27 @@ +## 0.6.4 + +### Breaking changes + +- 🩹 Make `base.ntile()` labels 1-based (#92) + +### Fixes + +- 🐛 Fix `order_by` argument for `dplyr.lead-lag` + +### Enhancements + +- 🚑 Allow `base.paste/paste0()` to work with grouped data +- 🩹 Change dtypes of `base.letters/LETTERS/month_abb/month_name` + +### Housekeeping + +- 📝 Update and fix reference maps +- 📝 Add `environment.yml` for binder to work +- 📝 Update styles for docs +- 📝 Update styles for API doc in notebooks +- 📝 Update README for new description about the project and add examples from StackOverflow + + ## 0.6.3 - ✨ Allow `base.c()` to handle groupby data diff --git a/docs/notebooks/across.ipynb b/docs/notebooks/across.ipynb index df49b8ce..141b5cd7 100644 --- a/docs/notebooks/across.ipynb +++ b/docs/notebooks/across.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:57.831736Z", @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:17:06][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # across " + "###
★ across
" ], "text/plain": [ "" @@ -94,7 +78,7 @@ { "data": { "text/markdown": [ - "### # if_any " + "###
★ if_any
" ], "text/plain": [ "" @@ -122,7 +106,7 @@ { "data": { "text/markdown": [ - "### # if_all " + "###
★ if_all
" ], "text/plain": [ "" @@ -150,7 +134,7 @@ { "data": { "text/markdown": [ - "### # c_across " + "###
★ c_across
" ], "text/plain": [ "" @@ -169,7 +153,7 @@ "  `_cols`: The columns \n", "\n", "##### Returns:\n", - "  A series \n" + "  A rowwise tibble \n" ], "text/plain": [ "" @@ -180,10 +164,11 @@ } ], "source": [ + "%run nb_helpers.py\n", + "\n", "from datar.datasets import iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(across, if_any, if_all, c_across)" ] }, diff --git a/docs/notebooks/add_column.ipynb b/docs/notebooks/add_column.ipynb index d7033309..877f0b41 100644 --- a/docs/notebooks/add_column.ipynb +++ b/docs/notebooks/add_column.ipynb @@ -15,7 +15,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -27,7 +27,7 @@ { "data": { "text/markdown": [ - "### # add_column " + "###
★ add_column
" ], "text/plain": [ "" diff --git a/docs/notebooks/add_row.ipynb b/docs/notebooks/add_row.ipynb index 288fb0cd..edc98b0a 100644 --- a/docs/notebooks/add_row.ipynb +++ b/docs/notebooks/add_row.ipynb @@ -15,7 +15,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -27,7 +27,7 @@ { "data": { "text/markdown": [ - "### # add_row " + "###
★ add_row
" ], "text/plain": [ "" diff --git a/docs/notebooks/arrange.ipynb b/docs/notebooks/arrange.ipynb index cf03f644..03a853fa 100644 --- a/docs/notebooks/arrange.ipynb +++ b/docs/notebooks/arrange.ipynb @@ -13,26 +13,10 @@ "tags": [] }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:29:30][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # arrange " + "###
★ arrange
" ], "text/plain": [ "" @@ -88,10 +72,10 @@ } ], "source": [ + "%run nb_helpers.py\n", "from datar.datasets import mtcars, iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(arrange)" ] }, diff --git a/docs/notebooks/base-arithmetic.ipynb b/docs/notebooks/base-arithmetic.ipynb index bd5d2e8c..f0d5252b 100644 --- a/docs/notebooks/base-arithmetic.ipynb +++ b/docs/notebooks/base-arithmetic.ipynb @@ -2,23 +2,13 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ - { - "data": { - "text/plain": [ - "Diot({'warn_builtin_names': False}, diot_transform= at 0x7fad66f3b790>)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -30,7 +20,7 @@ { "data": { "text/markdown": [ - "### # sum " + "###
★ sum
" ], "text/plain": [ "" @@ -65,7 +55,7 @@ { "data": { "text/markdown": [ - "### # prod " + "###
★ prod
" ], "text/plain": [ "" @@ -100,7 +90,7 @@ { "data": { "text/markdown": [ - "### # mean " + "###
★ mean
" ], "text/plain": [ "" @@ -134,7 +124,7 @@ { "data": { "text/markdown": [ - "### # median " + "###
★ median
" ], "text/plain": [ "" @@ -168,7 +158,7 @@ { "data": { "text/markdown": [ - "### # min " + "###
★ min
" ], "text/plain": [ "" @@ -203,7 +193,7 @@ { "data": { "text/markdown": [ - "### # max " + "###
★ max
" ], "text/plain": [ "" @@ -238,7 +228,7 @@ { "data": { "text/markdown": [ - "### # var " + "###
★ var
" ], "text/plain": [ "" @@ -274,7 +264,7 @@ { "data": { "text/markdown": [ - "### # pmin " + "###
★ pmin
" ], "text/plain": [ "" @@ -305,7 +295,7 @@ { "data": { "text/markdown": [ - "### # pmax " + "###
★ pmax
" ], "text/plain": [ "" @@ -336,7 +326,7 @@ { "data": { "text/markdown": [ - "### # round_ " + "###
★ round_
" ], "text/plain": [ "" @@ -367,7 +357,7 @@ { "data": { "text/markdown": [ - "### # sqrt " + "###
★ sqrt
" ], "text/plain": [ "" @@ -397,7 +387,7 @@ { "data": { "text/markdown": [ - "### # absolute " + "###
★ absolute
" ], "text/plain": [ "" @@ -427,7 +417,7 @@ { "data": { "text/markdown": [ - "### # sign " + "###
★ sign
" ], "text/plain": [ "" @@ -457,7 +447,7 @@ { "data": { "text/markdown": [ - "### # trunc " + "###
★ trunc
" ], "text/plain": [ "" @@ -488,7 +478,7 @@ { "data": { "text/markdown": [ - "### # ceiling " + "###
★ ceiling
" ], "text/plain": [ "" @@ -518,7 +508,7 @@ { "data": { "text/markdown": [ - "### # floor " + "###
★ floor
" ], "text/plain": [ "" @@ -548,7 +538,7 @@ { "data": { "text/markdown": [ - "### # signif " + "###
★ signif
" ], "text/plain": [ "" @@ -580,7 +570,7 @@ { "data": { "text/markdown": [ - "### # log " + "###
★ log
" ], "text/plain": [ "" @@ -612,7 +602,7 @@ { "data": { "text/markdown": [ - "### # exp " + "###
★ exp
" ], "text/plain": [ "" @@ -642,7 +632,7 @@ { "data": { "text/markdown": [ - "### # log2 " + "###
★ log2
" ], "text/plain": [ "" @@ -673,7 +663,7 @@ { "data": { "text/markdown": [ - "### # log10 " + "###
★ log10
" ], "text/plain": [ "" @@ -704,7 +694,7 @@ { "data": { "text/markdown": [ - "### # log1p " + "###
★ log1p
" ], "text/plain": [ "" @@ -735,7 +725,7 @@ { "data": { "text/markdown": [ - "### # cov " + "###
★ cov
" ], "text/plain": [ "" @@ -760,7 +750,7 @@ { "data": { "text/markdown": [ - "### # _scale " + "###
★ _scale
" ], "text/plain": [ "" @@ -797,7 +787,7 @@ { "data": { "text/markdown": [ - "### # col_sums " + "###
★ col_sums
" ], "text/plain": [ "" @@ -828,7 +818,7 @@ { "data": { "text/markdown": [ - "### # row_sums " + "###
★ row_sums
" ], "text/plain": [ "" @@ -859,7 +849,7 @@ { "data": { "text/markdown": [ - "### # col_means " + "###
★ col_means
" ], "text/plain": [ "" @@ -890,7 +880,7 @@ { "data": { "text/markdown": [ - "### # row_means " + "###
★ row_means
" ], "text/plain": [ "" @@ -921,7 +911,7 @@ { "data": { "text/markdown": [ - "### # col_sds " + "###
★ col_sds
" ], "text/plain": [ "" @@ -953,7 +943,7 @@ { "data": { "text/markdown": [ - "### # row_sds " + "###
★ row_sds
" ], "text/plain": [ "" @@ -985,7 +975,7 @@ { "data": { "text/markdown": [ - "### # col_medians " + "###
★ col_medians
" ], "text/plain": [ "" @@ -1016,7 +1006,7 @@ { "data": { "text/markdown": [ - "### # row_medians " + "###
★ row_medians
" ], "text/plain": [ "" @@ -1047,7 +1037,7 @@ { "data": { "text/markdown": [ - "### # quantile " + "###
★ quantile
" ], "text/plain": [ "" @@ -1093,7 +1083,7 @@ { "data": { "text/markdown": [ - "### # std " + "###
★ std
" ], "text/plain": [ "" @@ -1117,7 +1107,7 @@ { "data": { "text/markdown": [ - "### # weighted_mean " + "###
★ weighted_mean
" ], "text/plain": [ "" @@ -1140,12 +1130,10 @@ } ], "source": [ - "from datar import options\n", - "options(warn_builtin_names=False)\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "debug_kwargs = {'prefix': '\\n', 'sep': f'\\n{\"-\" * 20}\\n'}\n", "nb_header(\n", " sum, prod, mean, median, min, max, var, pmin, pmax,\n", @@ -1158,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -1226,7 +1214,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -1284,7 +1272,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -1340,7 +1328,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -1352,74 +1340,74 @@ "--------------------\n", " v1 v2 v3\n", " \n", - "0 -0.527205 -0.563083 -1.030619\n", - "1 -0.652748 -0.620141 -0.410482\n", - "2 -1.464778 1.274939 0.505686\n", - "3 0.505498 -0.103748 0.805596\n", - "4 1.431942 -0.759830 -0.755049\n", + "0 -0.562974 0.260601 0.021010\n", + "1 -0.880938 -0.658334 0.716204\n", + "2 0.354143 -0.313041 -1.183404\n", + "3 -1.073970 -0.394479 -0.337136\n", + "4 1.063941 1.128986 -0.747481\n", "\n", "col_sums(df)\n", "--------------------\n", - "v1 -0.707291\n", - "v2 -0.771863\n", - "v3 -0.884868\n", + "v1 -1.099799\n", + "v2 0.023733\n", + "v3 -1.530807\n", "dtype: float64\n", "\n", "row_sums(df)\n", "--------------------\n", - "0 -2.120907\n", - "1 -1.683371\n", - "2 0.315848\n", - "3 1.207346\n", - "4 -0.082938\n", + "0 -0.281364\n", + "1 -0.823068\n", + "2 -1.142302\n", + "3 -1.805586\n", + "4 1.445446\n", "dtype: float64\n", "\n", "col_means(df)\n", "--------------------\n", - "v1 -0.141458\n", - "v2 -0.154373\n", - "v3 -0.176974\n", + "v1 -0.219960\n", + "v2 0.004747\n", + "v3 -0.306161\n", "dtype: float64\n", "\n", "row_means(df)\n", "--------------------\n", - "0 -0.706969\n", - "1 -0.561124\n", - "2 0.105283\n", - "3 0.402449\n", - "4 -0.027646\n", + "0 -0.093788\n", + "1 -0.274356\n", + "2 -0.380767\n", + "3 -0.601862\n", + "4 0.481815\n", "dtype: float64\n", "\n", "col_sds(df)\n", "--------------------\n", - "v1 1.124226\n", - "v2 0.836071\n", - "v3 0.798260\n", + "v1 0.903034\n", + "v2 0.712289\n", + "v3 0.727590\n", "dtype: float64\n", "\n", "row_sds(df)\n", "--------------------\n", - "0 0.280863\n", - "1 0.131475\n", - "2 1.413066\n", - "3 0.463348\n", - "4 1.264042\n", + "0 0.423619\n", + "1 0.865041\n", + "2 0.771008\n", + "3 0.409862\n", + "4 1.065098\n", "dtype: float64\n", "\n", "col_medians(df)\n", "--------------------\n", - "v1 -0.527205\n", - "v2 -0.563083\n", - "v3 -0.410482\n", + "v1 -0.562974\n", + "v2 -0.313041\n", + "v3 -0.337136\n", "dtype: float64\n", "\n", "row_medians(df)\n", "--------------------\n", - "0 -0.563083\n", - "1 -0.620141\n", - "2 0.505686\n", - "3 0.505498\n", - "4 -0.755049\n", + "0 0.021010\n", + "1 -0.658334\n", + "2 -0.313041\n", + "3 -0.394479\n", + "4 1.063941\n", "dtype: float64\n" ] } @@ -1444,7 +1432,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 6, "metadata": {}, "outputs": [ { diff --git a/docs/notebooks/base-funs.ipynb b/docs/notebooks/base-funs.ipynb index 6b8dd737..f6ade545 100644 --- a/docs/notebooks/base-funs.ipynb +++ b/docs/notebooks/base-funs.ipynb @@ -8,7 +8,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -20,7 +20,7 @@ { "data": { "text/markdown": [ - "### # cut " + "###
★ cut
" ], "text/plain": [ "" @@ -71,7 +71,7 @@ { "data": { "text/markdown": [ - "### # diff " + "###
★ diff
" ], "text/plain": [ "" @@ -89,14 +89,6 @@ "result is equal to the successive differences \n", "`x[lag:] – x[:-lag]`. \n", "\n", - "##### Examples:\n", - "  >>> rv = [52, 21, 10, 11, 19] \n", - "  >>> data = diff(rv) \n", - "  >>> # -31 -11 1 8 \n", - "  >>> # rv[1:] - rv[:-1] \n", - "  >>> # rv[1:] [21, 10, 11, 19] \n", - "  >>> # rv[:-1] [52, 21, 10, 11] \n", - "\n", "##### Args:\n", "  `x`: The data \n", "  `lag`: The lag to use. Could be negative. \n", @@ -118,7 +110,7 @@ { "data": { "text/markdown": [ - "### # identity " + "###
★ identity
" ], "text/plain": [ "" @@ -144,7 +136,7 @@ { "data": { "text/markdown": [ - "### # expandgrid " + "###
★ expandgrid
" ], "text/plain": [ "" @@ -168,7 +160,7 @@ { "data": { "text/markdown": [ - "### # outer " + "###
★ outer
" ], "text/plain": [ "" @@ -203,7 +195,7 @@ { "data": { "text/markdown": [ - "### # make_names " + "###
★ make_names
" ], "text/plain": [ "" @@ -244,7 +236,7 @@ { "data": { "text/markdown": [ - "### # make_unique " + "###
★ make_unique
" ], "text/plain": [ "" @@ -278,7 +270,7 @@ { "data": { "text/markdown": [ - "### # rank " + "###
★ rank
" ], "text/plain": [ "" @@ -317,7 +309,7 @@ { "data": { "text/markdown": [ - "### # data_context " + "###
★ data_context
" ], "text/plain": [ "" @@ -356,12 +348,10 @@ } ], "source": [ - "from datar import options\n", - "options(warn_builtin_names=False)\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "debug_kwargs = {'prefix': '\\n', 'sep': f'\\n{\"-\" * 20}\\n'}\n", "nb_header(\n", " cut, diff, identity, expandgrid, outer, \n", @@ -371,17 +361,17 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-11 21:23:06][datar][WARNING] New names:\n", - "[2022-03-11 21:23:06][datar][WARNING] * '_1' -> '__0'\n", - "[2022-03-11 21:23:06][datar][WARNING] * '_1' -> '__1'\n", - "[2022-03-11 21:23:06][datar][WARNING] * '_1' -> '__2'\n" + "[2022-03-18 17:15:21][datar][WARNING] New names:\n", + "[2022-03-18 17:15:21][datar][WARNING] * '_1' -> '__0'\n", + "[2022-03-18 17:15:21][datar][WARNING] * '_1' -> '__1'\n", + "[2022-03-18 17:15:21][datar][WARNING] * '_1' -> '__2'\n" ] }, { @@ -495,7 +485,7 @@ "3 2 4" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/base.ipynb b/docs/notebooks/base.ipynb index 47c5727c..edb60d51 100644 --- a/docs/notebooks/base.ipynb +++ b/docs/notebooks/base.ipynb @@ -12,29 +12,14 @@ "shell.execute_reply": "2021-07-16T22:27:46.079498Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:29:39][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n" - ] - } - ], + "outputs": [], "source": [ + "%run nb_helpers.py\n", "import numpy\n", "from datar import f\n", "from datar.base import *\n", "from datar.tibble import tibble\n", "\n", - "%run nb_helpers.py\n", "debug_kwargs = {'prefix': '\\n', 'sep': f'\\n{\"-\" * 20}\\n'}" ] }, @@ -68,24 +53,23 @@ "--------------------\n", "array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',\n", " 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],\n", - " dtype=object)\n", + " dtype='Try this notebook on binder." + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # between " + "###
★ between
" ], "text/plain": [ "" @@ -66,17 +66,17 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/between.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(between)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "6b3effe3", "metadata": { "execution": { @@ -90,22 +90,11 @@ { "data": { "text/plain": [ - "0 False\n", - "1 False\n", - "2 False\n", - "3 False\n", - "4 False\n", - "5 False\n", - "6 True\n", - "7 True\n", - "8 True\n", - "9 False\n", - "10 False\n", - "11 False\n", - "Name: x, dtype: bool" + "array([False, False, False, False, False, False, True, True, True,\n", + " False, False, False])" ] }, - "execution_count": 7, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -116,7 +105,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "id": "302aa8fc", "metadata": { "execution": { @@ -130,23 +119,23 @@ { "data": { "text/plain": [ - "array([-0.62317072, 0.65948569, -0.54024359, -0.82184473, -0.1764757 ,\n", - " 0.18213228, 0.79855673, -0.24855138, 0.01262424, -0.84894048,\n", - " 0.37285632, 0.22835416, 0.42217402, -0.87096832, -0.66171351,\n", - " 0.66683691, -0.45817378, 0.70713136, 0.47549812, 0.76217418,\n", - " -0.0998089 , -0.40394027, -0.47139879, 0.23089977, -0.90173509,\n", - " -0.42211495, -0.47364465, -0.53518737, 0.11029949, 0.63746745,\n", - " 0.18128595, 0.4488157 , -0.94351625, 0.16476352, -0.02417968,\n", - " 0.13975003, 0.98128978, 0.03124932, 0.42528095, -0.44302586,\n", - " -0.26502179, -0.22858774, -0.93915892, -0.60314281, -0.35186847,\n", - " -0.07903075, -0.41372665, -0.32182693, -0.70112294, -0.99253387,\n", - " -0.576679 , -0.05485442, 0.30572563, -0.53975388, 0.01075027,\n", - " 0.13986945, 0.19666611, -0.11363934, -0.44002343, -0.36146865,\n", - " -0.13858168, 0.1501186 , 0.11285687, 0.60659002, 0.5742983 ,\n", - " 0.65033481, 0.94642001, 0.64107236, -0.86960338])" + "array([-0.65386489, 0.18885862, -0.61516756, -0.69568368, -0.70885902,\n", + " 0.26602314, -0.35391689, -0.52768408, -0.73553316, -0.79054691,\n", + " 0.08399462, 0.07164568, 0.09310497, 0.86196196, 0.4187352 ,\n", + " -0.17829678, 0.55933483, -0.43936161, -0.4501368 , -0.07061945,\n", + " -0.68175617, -0.39724819, -0.33263432, 0.3349741 , -0.08515872,\n", + " -0.68384246, -0.53988212, -0.35831946, -0.97737568, -0.53775482,\n", + " -0.23827599, -0.51523472, 0.0303137 , 0.40593 , 0.61505644,\n", + " 0.67219774, 0.4803338 , -0.80846003, -0.04245792, 0.30025567,\n", + " 0.68137426, -0.86946604, 0.69392051, 0.91926884, -0.92290023,\n", + " 0.38203131, 0.01162034, -0.2835221 , 0.02245063, 0.42526291,\n", + " 0.15444326, 0.59198204, -0.17717905, -0.4154278 , 0.27511335,\n", + " -0.3062066 , -0.18671645, 0.2090275 , 0.15432189, -0.42519021,\n", + " -0.86684503, 0.02594608, 0.68585011, 0.99557676, 0.571366 ,\n", + " -0.81727091, -0.18650605, 0.27366826])" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -158,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "d1b79572", "metadata": { "execution": { @@ -310,7 +299,7 @@ "45 NaN male masculine Troiken Xexto " ] }, - "execution_count": 9, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -321,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "id": "1e52d002", "metadata": { "execution": { @@ -585,7 +574,7 @@ "72 red, blue NaN none feminine NaN Droid " ] }, - "execution_count": 10, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/bind.ipynb b/docs/notebooks/bind.ipynb index 4f8d119e..9d4205f2 100644 --- a/docs/notebooks/bind.ipynb +++ b/docs/notebooks/bind.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:30:01][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # bind_rows " + "###
★ bind_rows
" ], "text/plain": [ "" @@ -85,7 +69,7 @@ { "data": { "text/markdown": [ - "### # bind_cols " + "###
★ bind_cols
" ], "text/plain": [ "" @@ -136,11 +120,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/bind.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(bind_rows, bind_cols, book='bind')" ] }, @@ -1213,7 +1197,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "fd18f54b", "metadata": { "execution": { @@ -1406,7 +1390,7 @@ "6 blue 64.0 male masculine Eriadu Human " ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1418,7 +1402,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "85f9ae65", "metadata": { "execution": { @@ -1611,7 +1595,7 @@ "6 blue 64.0 male masculine Eriadu Human " ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1622,7 +1606,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "203c53a8", "metadata": { "execution": { @@ -1715,7 +1699,7 @@ "6 NaN 3.0" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1728,7 +1712,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "0aeecbc1", "metadata": { "execution": { @@ -1797,7 +1781,7 @@ "2 2 NaN" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1811,7 +1795,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "655c5124", "metadata": { "execution": { @@ -1875,7 +1859,7 @@ "2 2" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1886,7 +1870,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "id": "f9281c6c", "metadata": { "execution": { @@ -1901,29 +1885,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 00:38:01][datar][WARNING] New names:\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'name' -> 'name__0'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'height' -> 'height__1'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'mass' -> 'mass__2'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'hair_color' -> 'hair_color__3'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'skin_color' -> 'skin_color__4'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'eye_color' -> 'eye_color__5'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'birth_year' -> 'birth_year__6'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'sex' -> 'sex__7'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'gender' -> 'gender__8'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'homeworld' -> 'homeworld__9'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'species' -> 'species__10'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'name' -> 'name__11'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'height' -> 'height__12'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'mass' -> 'mass__13'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'hair_color' -> 'hair_color__14'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'skin_color' -> 'skin_color__15'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'eye_color' -> 'eye_color__16'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'birth_year' -> 'birth_year__17'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'sex' -> 'sex__18'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'gender' -> 'gender__19'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'homeworld' -> 'homeworld__20'\n", - "[2022-03-06 00:38:01][datar][WARNING] * 'species' -> 'species__21'\n" + "[2022-03-18 17:26:56][datar][WARNING] New names:\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'name' -> 'name__0'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'height' -> 'height__1'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'mass' -> 'mass__2'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'hair_color' -> 'hair_color__3'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'skin_color' -> 'skin_color__4'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'eye_color' -> 'eye_color__5'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'birth_year' -> 'birth_year__6'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'sex' -> 'sex__7'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'gender' -> 'gender__8'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'homeworld' -> 'homeworld__9'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'species' -> 'species__10'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'name' -> 'name__11'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'height' -> 'height__12'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'mass' -> 'mass__13'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'hair_color' -> 'hair_color__14'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'skin_color' -> 'skin_color__15'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'eye_color' -> 'eye_color__16'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'birth_year' -> 'birth_year__17'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'sex' -> 'sex__18'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'gender' -> 'gender__19'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'homeworld' -> 'homeworld__20'\n", + "[2022-03-18 17:26:56][datar][WARNING] * 'species' -> 'species__21'\n" ] }, { @@ -2212,7 +2196,7 @@ "[7 rows x 22 columns]" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/case_when.ipynb b/docs/notebooks/case_when.ipynb index 686bb74d..c22ad4c2 100644 --- a/docs/notebooks/case_when.ipynb +++ b/docs/notebooks/case_when.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-10 12:56:17][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # case_when " + "###
★ case_when
" ], "text/plain": [ "" @@ -77,10 +61,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/case_when.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import starwars \n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(case_when)" ] }, @@ -356,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "intermediate-edmonton", "metadata": { "execution": { @@ -528,7 +513,7 @@ "[87 rows x 6 columns]" ] }, - "execution_count": 11, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/chop.ipynb b/docs/notebooks/chop.ipynb index ad5f73f6..48af88f5 100644 --- a/docs/notebooks/chop.ipynb +++ b/docs/notebooks/chop.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:13:18][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # chop " + "###
★ chop
" ], "text/plain": [ "" @@ -75,7 +59,7 @@ { "data": { "text/markdown": [ - "### # unchop " + "###
★ unchop
" ], "text/plain": [ "" @@ -130,10 +114,9 @@ } ], "source": [ - "from datar.datasets import iris, fish_encounters\n", + "%run nb_helpers.py\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(chop, unchop)" ] }, @@ -303,7 +286,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.135078Z", @@ -389,7 +372,7 @@ "5 4 3.0" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -402,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.195709Z", @@ -488,7 +471,7 @@ "5 4 3" ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -499,7 +482,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.210591Z", @@ -573,7 +556,7 @@ "3 1 3" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -585,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.251668Z", @@ -610,7 +593,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.265947Z", @@ -683,7 +666,7 @@ "2 3 NaN 2.0" ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -695,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:29.376449Z", @@ -775,7 +758,7 @@ "3 3 NaN 2.0" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/coalesce.ipynb b/docs/notebooks/coalesce.ipynb index 2a8f2c05..504a555a 100644 --- a/docs/notebooks/coalesce.ipynb +++ b/docs/notebooks/coalesce.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:31:06][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # coalesce " + "###
★ coalesce
" ], "text/plain": [ "" @@ -78,10 +62,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/coalesce.html\n", - "from datar.datasets import starwars \n", + "%run nb_helpers.py\n", + "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(coalesce)" ] }, diff --git a/docs/notebooks/complete.ipynb b/docs/notebooks/complete.ipynb index a9182ef4..f3521729 100644 --- a/docs/notebooks/complete.ipynb +++ b/docs/notebooks/complete.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:44:34][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # complete " + "###
★ complete
" ], "text/plain": [ "" @@ -84,9 +68,9 @@ } ], "source": [ + "%run nb_helpers.py\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(complete)" ] }, diff --git a/docs/notebooks/context.ipynb b/docs/notebooks/context.ipynb index e16bec7f..9c2b0842 100644 --- a/docs/notebooks/context.ipynb +++ b/docs/notebooks/context.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 00:31:25][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # cur_group_id " + "###
★ cur_group_id
" ], "text/plain": [ "" @@ -68,7 +52,7 @@ { "data": { "text/markdown": [ - "### # cur_group_rows " + "###
★ cur_group_rows
" ], "text/plain": [ "" @@ -98,7 +82,7 @@ { "data": { "text/markdown": [ - "### # cur_data " + "###
★ cur_data
" ], "text/plain": [ "" @@ -123,7 +107,7 @@ { "data": { "text/markdown": [ - "### # cur_data_all " + "###
★ cur_data_all
" ], "text/plain": [ "" @@ -148,7 +132,7 @@ { "data": { "text/markdown": [ - "### # cur_column " + "###
★ cur_column
" ], "text/plain": [ "" @@ -172,9 +156,9 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/context.html\n", + "%run nb_helpers.py\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(cur_group_id, cur_group_rows, cur_data, cur_data_all, cur_column, book='context')" ] }, @@ -314,38 +298,38 @@ " \n", " 0\n", " a\n", - " 0.006538\n", - " 0.421710\n", + " 0.276842\n", + " 0.639718\n", " \n", " \n", " 1\n", " b\n", - " 0.480888\n", - " 0.103287\n", + " 0.333175\n", + " 0.149536\n", " \n", " \n", " 2\n", " b\n", - " 0.763029\n", - " 0.543031\n", + " 0.728975\n", + " 0.400257\n", " \n", " \n", " 3\n", " c\n", - " 0.201200\n", - " 0.207406\n", + " 0.116262\n", + " 0.087035\n", " \n", " \n", " 4\n", " c\n", - " 0.508855\n", - " 0.315907\n", + " 0.541848\n", + " 0.312297\n", " \n", " \n", " 5\n", " c\n", - " 0.610592\n", - " 0.650160\n", + " 0.495865\n", + " 0.114572\n", " \n", " \n", "\n", @@ -355,12 +339,12 @@ "text/plain": [ " g x y\n", " \n", - "0 a 0.006538 0.421710\n", - "1 b 0.480888 0.103287\n", - "2 b 0.763029 0.543031\n", - "3 c 0.201200 0.207406\n", - "4 c 0.508855 0.315907\n", - "5 c 0.610592 0.650160\n", + "0 a 0.276842 0.639718\n", + "1 b 0.333175 0.149536\n", + "2 b 0.728975 0.400257\n", + "3 c 0.116262 0.087035\n", + "4 c 0.541848 0.312297\n", + "5 c 0.495865 0.114572\n", "[TibbleGrouped: g (n=3)]" ] }, @@ -424,43 +408,43 @@ " \n", " 0\n", " a\n", - " 0.006538\n", - " 0.421710\n", + " 0.276842\n", + " 0.639718\n", " 0\n", " \n", " \n", " 1\n", " b\n", - " 0.480888\n", - " 0.103287\n", + " 0.333175\n", + " 0.149536\n", " 1\n", " \n", " \n", " 2\n", " b\n", - " 0.763029\n", - " 0.543031\n", + " 0.728975\n", + " 0.400257\n", " 1\n", " \n", " \n", " 3\n", " c\n", - " 0.201200\n", - " 0.207406\n", + " 0.116262\n", + " 0.087035\n", " 2\n", " \n", " \n", " 4\n", " c\n", - " 0.508855\n", - " 0.315907\n", + " 0.541848\n", + " 0.312297\n", " 2\n", " \n", " \n", " 5\n", " c\n", - " 0.610592\n", - " 0.650160\n", + " 0.495865\n", + " 0.114572\n", " 2\n", " \n", " \n", @@ -471,12 +455,12 @@ "text/plain": [ " g x y id\n", " \n", - "0 a 0.006538 0.421710 0\n", - "1 b 0.480888 0.103287 1\n", - "2 b 0.763029 0.543031 1\n", - "3 c 0.201200 0.207406 2\n", - "4 c 0.508855 0.315907 2\n", - "5 c 0.610592 0.650160 2\n", + "0 a 0.276842 0.639718 0\n", + "1 b 0.333175 0.149536 1\n", + "2 b 0.728975 0.400257 1\n", + "3 c 0.116262 0.087035 2\n", + "4 c 0.541848 0.312297 2\n", + "5 c 0.495865 0.114572 2\n", "[TibbleGrouped: g (n=3)]" ] }, @@ -571,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "id": "cb760a8a", "metadata": { "execution": { @@ -640,7 +624,7 @@ "2 c " ] }, - "execution_count": 9, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -652,7 +636,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "id": "4c25f162", "metadata": { "execution": { @@ -672,7 +656,7 @@ "Name: data, dtype: object" ] }, - "execution_count": 10, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -683,7 +667,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "id": "71996f23", "metadata": { "execution": { @@ -752,7 +736,7 @@ "2 c " ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -764,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "9b37d097", "metadata": { "execution": { @@ -780,19 +764,19 @@ "text/plain": [ "[ x y\n", " \n", - " 0 0.355023 0.000239,\n", + " 0 0.276842 0.639718,\n", " x y\n", " \n", - " 0 0.880160 0.685917\n", - " 1 0.346984 0.925864,\n", + " 1 0.333175 0.149536\n", + " 2 0.728975 0.400257,\n", " x y\n", " \n", - " 0 0.235711 0.701329\n", - " 1 0.320924 0.903383\n", - " 2 0.517224 0.223750]" + " 3 0.116262 0.087035\n", + " 4 0.541848 0.312297\n", + " 5 0.495865 0.114572]" ] }, - "execution_count": 1, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -803,7 +787,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "03c07299", "metadata": { "execution": { @@ -872,7 +856,7 @@ "2 c " ] }, - "execution_count": 12, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -884,7 +868,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "4cc41680", "metadata": { "execution": { @@ -900,19 +884,19 @@ "text/plain": [ "[ g x y\n", " \n", - " 0 a 0.006538 0.42171,\n", + " 0 a 0.276842 0.639718,\n", " g x y\n", " \n", - " 1 b 0.480888 0.103287\n", - " 2 b 0.763029 0.543031,\n", + " 1 b 0.333175 0.149536\n", + " 2 b 0.728975 0.400257,\n", " g x y\n", " \n", - " 3 c 0.201200 0.207406\n", - " 4 c 0.508855 0.315907\n", - " 5 c 0.610592 0.650160]" + " 3 c 0.116262 0.087035\n", + " 4 c 0.541848 0.312297\n", + " 5 c 0.495865 0.114572]" ] }, - "execution_count": 13, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -923,7 +907,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "fe4097d2", "metadata": { "execution": { @@ -967,50 +951,50 @@ " \n", " \n", " 0\n", - " x 4.275181839861608e-05\n", - " y 0.17783898820060154\n", + " x 0.07664148433958724\n", + " y 0.4092387034410027\n", " \n", " \n", " 1\n", - " x 0.2312531724845601\n", - " y 0.01066819823473873\n", + " x 0.11100534084266422\n", + " y 0.02236109719928575\n", " \n", " \n", " 2\n", - " x 0.5822139970696143\n", - " y 0.2948830834486957\n", + " x 0.5314038334653144\n", + " y 0.16020604530995483\n", " \n", " \n", " 3\n", - " x 0.04048149826262316\n", - " y 0.04301741953459272\n", + " x 0.013516938415598222\n", + " y 0.007575071702234481\n", " \n", " \n", " 4\n", - " x 0.25893300858833146\n", - " y 0.09979740403309767\n", + " x 0.2935994793280256\n", + " y 0.0975293132771369\n", " \n", " \n", " 5\n", - " x 0.37282240541087586\n", - " y 0.4227077348376767\n", + " x 0.24588211859358594\n", + " y 0.013126717677172012\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " x y\n", - " \n", - "0 x 4.275181839861608e-05 y 0.17783898820060154\n", - "1 x 0.2312531724845601 y 0.01066819823473873\n", - "2 x 0.5822139970696143 y 0.2948830834486957\n", - "3 x 0.04048149826262316 y 0.04301741953459272\n", - "4 x 0.25893300858833146 y 0.09979740403309767\n", - "5 x 0.37282240541087586 y 0.4227077348376767" + " x y\n", + " \n", + "0 x 0.07664148433958724 y 0.4092387034410027\n", + "1 x 0.11100534084266422 y 0.02236109719928575\n", + "2 x 0.5314038334653144 y 0.16020604530995483\n", + "3 x 0.013516938415598222 y 0.007575071702234481\n", + "4 x 0.2935994793280256 y 0.0975293132771369\n", + "5 x 0.24588211859358594 y 0.013126717677172012" ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1026,7 +1010,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "c99b8dee", "metadata": { "execution": { @@ -1073,55 +1057,55 @@ " \n", " 0\n", " a\n", - " x 4.275181839861608e-05\n", - " y 0.17783898820060154\n", + " x 0.07664148433958724\n", + " y 0.4092387034410027\n", " \n", " \n", " 1\n", " b\n", - " x 0.2312531724845601\n", - " y 0.01066819823473873\n", + " x 0.11100534084266422\n", + " y 0.02236109719928575\n", " \n", " \n", " 2\n", " b\n", - " x 0.5822139970696143\n", - " y 0.2948830834486957\n", + " x 0.5314038334653144\n", + " y 0.16020604530995483\n", " \n", " \n", " 3\n", " c\n", - " x 0.04048149826262316\n", - " y 0.04301741953459272\n", + " x 0.013516938415598222\n", + " y 0.007575071702234481\n", " \n", " \n", " 4\n", " c\n", - " x 0.25893300858833146\n", - " y 0.09979740403309767\n", + " x 0.2935994793280256\n", + " y 0.0975293132771369\n", " \n", " \n", " 5\n", " c\n", - " x 0.37282240541087586\n", - " y 0.4227077348376767\n", + " x 0.24588211859358594\n", + " y 0.013126717677172012\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " g x y\n", - " \n", - "0 a x 4.275181839861608e-05 y 0.17783898820060154\n", - "1 b x 0.2312531724845601 y 0.01066819823473873\n", - "2 b x 0.5822139970696143 y 0.2948830834486957\n", - "3 c x 0.04048149826262316 y 0.04301741953459272\n", - "4 c x 0.25893300858833146 y 0.09979740403309767\n", - "5 c x 0.37282240541087586 y 0.4227077348376767" + " g x y\n", + " \n", + "0 a x 0.07664148433958724 y 0.4092387034410027\n", + "1 b x 0.11100534084266422 y 0.02236109719928575\n", + "2 b x 0.5314038334653144 y 0.16020604530995483\n", + "3 c x 0.013516938415598222 y 0.007575071702234481\n", + "4 c x 0.2935994793280256 y 0.0975293132771369\n", + "5 c x 0.24588211859358594 y 0.013126717677172012" ] }, - "execution_count": 15, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/count.ipynb b/docs/notebooks/count.ipynb index 87bbbaee..b38b5192 100644 --- a/docs/notebooks/count.ipynb +++ b/docs/notebooks/count.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:34:00][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # count " + "###
★ count
" ], "text/plain": [ "" @@ -84,7 +68,7 @@ { "data": { "text/markdown": [ - "### # tally " + "###
★ tally
" ], "text/plain": [ "" @@ -110,7 +94,7 @@ { "data": { "text/markdown": [ - "### # add_count " + "###
★ add_count
" ], "text/plain": [ "" @@ -136,7 +120,7 @@ { "data": { "text/markdown": [ - "### # add_tally " + "###
★ add_tally
" ], "text/plain": [ "" @@ -162,11 +146,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/count.html\n", - "from pandas import DataFrame\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(count, tally, add_count, add_tally)" ] }, diff --git a/docs/notebooks/cumall.ipynb b/docs/notebooks/cumall.ipynb index 889a23a3..589d2873 100644 --- a/docs/notebooks/cumall.ipynb +++ b/docs/notebooks/cumall.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:35:10][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # cummean " + "###
★ cummean
" ], "text/plain": [ "" @@ -68,7 +52,7 @@ { "data": { "text/markdown": [ - "### # cumsum " + "###
★ cumsum
" ], "text/plain": [ "" @@ -98,7 +82,7 @@ { "data": { "text/markdown": [ - "### # cumall " + "###
★ cumall
" ], "text/plain": [ "" @@ -122,7 +106,7 @@ { "data": { "text/markdown": [ - "### # cumany " + "###
★ cumany
" ], "text/plain": [ "" @@ -146,7 +130,7 @@ { "data": { "text/markdown": [ - "### # cumany " + "###
★ cumany
" ], "text/plain": [ "" @@ -170,11 +154,12 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/cumall.html\n", + "%run nb_helpers.py\n", + "\n", "import numpy\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(cummean, cumsum, cumall, cumany, cumany, book='cumall')" ] }, @@ -194,12 +179,7 @@ { "data": { "text/plain": [ - "0 1.00\n", - "1 2.00\n", - "2 3.00\n", - "3 2.75\n", - "4 2.60\n", - "Name: x, dtype: float64" + "array([1. , 2. , 3. , 2.75, 2.6 ])" ] }, "execution_count": 2, @@ -214,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "id": "religious-voltage", "metadata": { "execution": { @@ -228,15 +208,10 @@ { "data": { "text/plain": [ - "0 1.00\n", - "1 2.00\n", - "2 3.00\n", - "3 2.75\n", - "4 2.60\n", - "Name: x, dtype: float64" + "array([1. , 2. , 3. , 2.75, 2.6 ])" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -261,12 +236,7 @@ { "data": { "text/plain": [ - "0 True\n", - "1 True\n", - "2 False\n", - "3 False\n", - "4 False\n", - "Name: x, dtype: bool" + "array([ True, True, False, False, False])" ] }, "execution_count": 4, @@ -294,12 +264,7 @@ { "data": { "text/plain": [ - "0 False\n", - "1 True\n", - "2 True\n", - "3 True\n", - "4 True\n", - "Name: x, dtype: bool" + "array([False, True, True, True, True])" ] }, "execution_count": 5, diff --git a/docs/notebooks/datar.ipynb b/docs/notebooks/datar.ipynb index df8c1bee..9e7e2dd1 100644 --- a/docs/notebooks/datar.ipynb +++ b/docs/notebooks/datar.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 15, + "execution_count": 1, "id": "5ddd5613", "metadata": { "execution": { @@ -16,7 +16,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # get " + "###
★ get
" ], "text/plain": [ "" @@ -63,7 +63,7 @@ { "data": { "text/markdown": [ - "### # flatten " + "###
★ flatten
" ], "text/plain": [ "" @@ -93,7 +93,7 @@ { "data": { "text/markdown": [ - "### # itemgetter " + "###
★ itemgetter
" ], "text/plain": [ "" @@ -128,7 +128,7 @@ { "data": { "text/markdown": [ - "### # attrgetter " + "###
★ attrgetter
" ], "text/plain": [ "" @@ -155,7 +155,7 @@ { "data": { "text/markdown": [ - "### # pd_str " + "###
★ pd_str
" ], "text/plain": [ "" @@ -181,7 +181,7 @@ { "data": { "text/markdown": [ - "### # pd_cat " + "###
★ pd_cat
" ], "text/plain": [ "" @@ -207,7 +207,7 @@ { "data": { "text/markdown": [ - "### # pd_dt " + "###
★ pd_dt
" ], "text/plain": [ "" @@ -976,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "081a9d1e", "metadata": {}, "outputs": [ @@ -1038,7 +1038,7 @@ "[TibbleGrouped: g (n=2)]" ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1054,7 +1054,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "id": "b2aaa7f0", "metadata": {}, "outputs": [ @@ -1116,7 +1116,7 @@ "[TibbleGrouped: g (n=2)]" ] }, - "execution_count": 16, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/desc.ipynb b/docs/notebooks/desc.ipynb index c2093807..33099551 100644 --- a/docs/notebooks/desc.ipynb +++ b/docs/notebooks/desc.ipynb @@ -16,7 +16,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # desc " + "###
★ desc
" ], "text/plain": [ "" @@ -62,10 +62,10 @@ } ], "source": [ + "%run nb_helpers.py\n", "from datar.base import factor, letters\n", "from datar.dplyr import desc\n", "\n", - "%run nb_helpers.py\n", "nb_header(desc)" ] }, @@ -85,17 +85,7 @@ { "data": { "text/plain": [ - "0 -1\n", - "1 -2\n", - "2 -3\n", - "3 -4\n", - "4 -5\n", - "5 -6\n", - "6 -7\n", - "7 -8\n", - "8 -9\n", - "9 -10\n", - "dtype: int64" + "array([ -1, -2, -3, -4, -5, -6, -7, -8, -9, -10])" ] }, "execution_count": 2, diff --git a/docs/notebooks/distinct.ipynb b/docs/notebooks/distinct.ipynb index 0cd322e2..ff7a1cdc 100644 --- a/docs/notebooks/distinct.ipynb +++ b/docs/notebooks/distinct.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:35:44][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # distinct " + "###
★ distinct
" ], "text/plain": [ "" @@ -82,7 +66,7 @@ { "data": { "text/markdown": [ - "### # n_distinct " + "###
★ n_distinct
" ], "text/plain": [ "" @@ -106,10 +90,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/distinct.html\n", + "%run nb_helpers.py\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(distinct, n_distinct, book='distinct')" ] }, @@ -161,7 +145,7 @@ { "data": { "text/plain": [ - "60" + "61" ] }, "execution_count": 3, @@ -189,7 +173,7 @@ { "data": { "text/plain": [ - "60" + "61" ] }, "execution_count": 4, @@ -245,43 +229,43 @@ " \n", " \n", " 0\n", - " 0\n", + " 8\n", " \n", " \n", - " 2\n", - " 2\n", + " 1\n", + " 5\n", " \n", " \n", " 3\n", - " 3\n", + " 4\n", " \n", " \n", " 4\n", - " 4\n", + " 0\n", " \n", " \n", - " 7\n", - " 1\n", + " 6\n", + " 7\n", " \n", " \n", - " 8\n", - " 6\n", + " 12\n", + " 2\n", " \n", " \n", - " 11\n", - " 5\n", + " 13\n", + " 1\n", " \n", " \n", - " 13\n", - " 8\n", + " 14\n", + " 3\n", " \n", " \n", " 15\n", - " 9\n", + " 6\n", " \n", " \n", - " 27\n", - " 7\n", + " 21\n", + " 9\n", " \n", " \n", "\n", @@ -290,16 +274,16 @@ "text/plain": [ " x\n", " \n", - "0 0\n", - "2 2\n", - "3 3\n", - "4 4\n", - "7 1\n", - "8 6\n", - "11 5\n", - "13 8\n", - "15 9\n", - "27 7" + "0 8\n", + "1 5\n", + "3 4\n", + "4 0\n", + "6 7\n", + "12 2\n", + "13 1\n", + "14 3\n", + "15 6\n", + "21 9" ] }, "execution_count": 5, @@ -355,43 +339,43 @@ " \n", " \n", " 0\n", - " 1\n", + " 5\n", " \n", " \n", " 1\n", - " 5\n", + " 7\n", " \n", " \n", - " 4\n", - " 2\n", + " 2\n", + " 9\n", " \n", " \n", - " 5\n", - " 7\n", + " 3\n", + " 4\n", " \n", " \n", - " 6\n", - " 0\n", + " 4\n", + " 6\n", " \n", " \n", - " 9\n", - " 8\n", + " 5\n", + " 1\n", " \n", " \n", - " 12\n", - " 6\n", + " 13\n", + " 0\n", " \n", " \n", - " 13\n", - " 3\n", + " 14\n", + " 2\n", " \n", " \n", - " 15\n", - " 9\n", + " 17\n", + " 3\n", " \n", " \n", - " 25\n", - " 4\n", + " 18\n", + " 8\n", " \n", " \n", "\n", @@ -400,16 +384,16 @@ "text/plain": [ " y\n", " \n", - "0 1\n", - "1 5\n", - "4 2\n", - "5 7\n", - "6 0\n", - "9 8\n", - "12 6\n", - "13 3\n", - "15 9\n", - "25 4" + "0 5\n", + "1 7\n", + "2 9\n", + "3 4\n", + "4 6\n", + "5 1\n", + "13 0\n", + "14 2\n", + "17 3\n", + "18 8" ] }, "execution_count": 6, @@ -467,53 +451,53 @@ " \n", " \n", " 0\n", - " 0\n", - " 1\n", + " 8\n", + " 5\n", " \n", " \n", - " 2\n", - " 2\n", - " 1\n", + " 1\n", + " 5\n", + " 7\n", " \n", " \n", " 3\n", - " 3\n", - " 5\n", + " 4\n", + " 4\n", " \n", " \n", " 4\n", - " 4\n", - " 2\n", + " 0\n", + " 6\n", " \n", " \n", - " 7\n", - " 1\n", + " 6\n", " 7\n", + " 4\n", " \n", " \n", - " 8\n", - " 6\n", - " 7\n", + " 12\n", + " 2\n", + " 5\n", " \n", " \n", - " 11\n", - " 5\n", + " 13\n", + " 1\n", " 0\n", " \n", " \n", - " 13\n", - " 8\n", + " 14\n", " 3\n", + " 2\n", " \n", " \n", " 15\n", - " 9\n", - " 9\n", + " 6\n", + " 0\n", " \n", " \n", - " 27\n", - " 7\n", - " 8\n", + " 21\n", + " 9\n", + " 6\n", " \n", " \n", "\n", @@ -522,16 +506,16 @@ "text/plain": [ " x y\n", " \n", - "0 0 1\n", - "2 2 1\n", - "3 3 5\n", - "4 4 2\n", - "7 1 7\n", - "8 6 7\n", - "11 5 0\n", - "13 8 3\n", - "15 9 9\n", - "27 7 8" + "0 8 5\n", + "1 5 7\n", + "3 4 4\n", + "4 0 6\n", + "6 7 4\n", + "12 2 5\n", + "13 1 0\n", + "14 3 2\n", + "15 6 0\n", + "21 9 6" ] }, "execution_count": 7, @@ -589,53 +573,53 @@ " \n", " \n", " 0\n", - " 0\n", - " 1\n", + " 8\n", + " 5\n", " \n", " \n", " 1\n", - " 0\n", " 5\n", + " 7\n", " \n", " \n", - " 4\n", - " 4\n", - " 2\n", + " 2\n", + " 5\n", + " 9\n", " \n", " \n", - " 5\n", - " 0\n", - " 7\n", + " 3\n", + " 4\n", + " 4\n", " \n", " \n", - " 6\n", - " 0\n", + " 4\n", " 0\n", - " \n", - " \n", - " 9\n", " 6\n", - " 8\n", " \n", " \n", - " 12\n", - " 2\n", - " 6\n", + " 5\n", + " 5\n", + " 1\n", " \n", " \n", " 13\n", - " 8\n", + " 1\n", + " 0\n", + " \n", + " \n", + " 14\n", " 3\n", + " 2\n", " \n", " \n", - " 15\n", - " 9\n", - " 9\n", + " 17\n", + " 7\n", + " 3\n", " \n", " \n", - " 25\n", - " 1\n", + " 18\n", " 4\n", + " 8\n", " \n", " \n", "\n", @@ -644,16 +628,16 @@ "text/plain": [ " x y\n", " \n", - "0 0 1\n", - "1 0 5\n", - "4 4 2\n", - "5 0 7\n", - "6 0 0\n", - "9 6 8\n", - "12 2 6\n", - "13 8 3\n", - "15 9 9\n", - "25 1 4" + "0 8 5\n", + "1 5 7\n", + "2 5 9\n", + "3 4 4\n", + "4 0 6\n", + "5 5 1\n", + "13 1 0\n", + "14 3 2\n", + "17 7 3\n", + "18 4 8" ] }, "execution_count": 8, @@ -709,44 +693,44 @@ " \n", " \n", " 0\n", - " 1\n", + " 3\n", " \n", " \n", " 1\n", - " 5\n", - " \n", - " \n", - " 3\n", " 2\n", " \n", " \n", - " 5\n", - " 7\n", + " 2\n", + " 4\n", " \n", " \n", - " 6\n", + " 3\n", " 0\n", " \n", " \n", - " 7\n", + " 4\n", " 6\n", " \n", " \n", - " 10\n", - " 4\n", + " 7\n", + " 7\n", " \n", " \n", - " 23\n", - " 3\n", + " 10\n", + " 1\n", " \n", " \n", - " 26\n", - " 9\n", + " 16\n", + " 5\n", " \n", " \n", - " 47\n", + " 44\n", " 8\n", " \n", + " \n", + " 53\n", + " 9\n", + " \n", " \n", "\n", "\n" @@ -754,16 +738,16 @@ "text/plain": [ " diff\n", " \n", - "0 1\n", - "1 5\n", - "3 2\n", - "5 7\n", - "6 0\n", - "7 6\n", - "10 4\n", - "23 3\n", - "26 9\n", - "47 8" + "0 3\n", + "1 2\n", + "2 4\n", + "3 0\n", + "4 6\n", + "7 7\n", + "10 1\n", + "16 5\n", + "44 8\n", + "53 9" ] }, "execution_count": 9, diff --git a/docs/notebooks/drop_na.ipynb b/docs/notebooks/drop_na.ipynb index 8cfa336f..49245d87 100644 --- a/docs/notebooks/drop_na.ipynb +++ b/docs/notebooks/drop_na.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:36:59][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # drop_na " + "###
★ drop_na
" ], "text/plain": [ "" @@ -83,10 +67,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/drop_na.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(drop_na)" ] }, diff --git a/docs/notebooks/enframe.ipynb b/docs/notebooks/enframe.ipynb index 05ff86f0..96551a5e 100644 --- a/docs/notebooks/enframe.ipynb +++ b/docs/notebooks/enframe.ipynb @@ -15,7 +15,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -27,7 +27,7 @@ { "data": { "text/markdown": [ - "### # enframe " + "###
★ enframe
" ], "text/plain": [ "" @@ -62,7 +62,7 @@ { "data": { "text/markdown": [ - "### # deframe " + "###
★ deframe
" ], "text/plain": [ "" @@ -94,11 +94,11 @@ ], "source": [ "# https://tibble.tidyverse.org/reference/enframe.html\n", + "%run nb_helpers.py\n", "\n", "from datar.tibble import *\n", "from datar.base import seq\n", "\n", - "%run nb_helpers.py\n", "nb_header(enframe, deframe, book='enframe')" ] }, diff --git a/docs/notebooks/expand.ipynb b/docs/notebooks/expand.ipynb index 9ef9d710..58055ecb 100644 --- a/docs/notebooks/expand.ipynb +++ b/docs/notebooks/expand.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:39:34][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # expand " + "###
★ expand
" ], "text/plain": [ "" @@ -99,7 +83,7 @@ { "data": { "text/markdown": [ - "### # nesting " + "###
★ nesting
" ], "text/plain": [ "" @@ -153,7 +137,7 @@ { "data": { "text/markdown": [ - "### # crossing " + "###
★ crossing
" ], "text/plain": [ "" @@ -209,10 +193,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/expand.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(expand, nesting, crossing)" ] }, @@ -269,42 +253,42 @@ " apple\n", " 2010\n", " XS\n", - " 0.110248\n", + " 0.834311\n", " \n", " \n", " 1\n", " orange\n", " 2010\n", " S\n", - " 0.032335\n", + " 0.611588\n", " \n", " \n", " 2\n", " apple\n", " 2012\n", " M\n", - " 0.096288\n", + " 1.153312\n", " \n", " \n", " 3\n", " orange\n", " 2010\n", " S\n", - " 0.850895\n", + " -0.929683\n", " \n", " \n", " 4\n", " orange\n", " 2010\n", " S\n", - " 0.277872\n", + " 0.908996\n", " \n", " \n", " 5\n", " orange\n", " 2012\n", " M\n", - " -1.816750\n", + " -0.228062\n", " \n", " \n", "\n", @@ -313,12 +297,12 @@ "text/plain": [ " type year size weights\n", " \n", - "0 apple 2010 XS 0.110248\n", - "1 orange 2010 S 0.032335\n", - "2 apple 2012 M 0.096288\n", - "3 orange 2010 S 0.850895\n", - "4 orange 2010 S 0.277872\n", - "5 orange 2012 M -1.816750" + "0 apple 2010 XS 0.834311\n", + "1 orange 2010 S 0.611588\n", + "2 apple 2012 M 1.153312\n", + "3 orange 2010 S -0.929683\n", + "4 orange 2010 S 0.908996\n", + "5 orange 2012 M -0.228062" ] }, "execution_count": 2, @@ -2018,7 +2002,7 @@ " apple\n", " 2010\n", " XS\n", - " 0.110248\n", + " 0.834311\n", " \n", " \n", " 1\n", @@ -2053,7 +2037,7 @@ " apple\n", " 2012\n", " M\n", - " 0.096288\n", + " 1.153312\n", " \n", " \n", " 6\n", @@ -2088,21 +2072,21 @@ " orange\n", " 2010\n", " S\n", - " 0.032335\n", + " 0.611588\n", " \n", " \n", " 11\n", " orange\n", " 2010\n", " S\n", - " 0.850895\n", + " -0.929683\n", " \n", " \n", " 12\n", " orange\n", " 2010\n", " S\n", - " 0.277872\n", + " 0.908996\n", " \n", " \n", " 13\n", @@ -2123,7 +2107,7 @@ " orange\n", " 2012\n", " M\n", - " -1.816750\n", + " -0.228062\n", " \n", " \n", " 16\n", @@ -2146,22 +2130,22 @@ "text/plain": [ " type year size weights\n", " \n", - "0 apple 2010 XS 0.110248\n", + "0 apple 2010 XS 0.834311\n", "1 apple 2012 XS NaN\n", "2 apple 2010 S NaN\n", "3 apple 2012 S NaN\n", "4 apple 2010 M NaN\n", - "5 apple 2012 M 0.096288\n", + "5 apple 2012 M 1.153312\n", "6 apple 2010 L NaN\n", "7 apple 2012 L NaN\n", "8 orange 2010 XS NaN\n", "9 orange 2012 XS NaN\n", - "10 orange 2010 S 0.032335\n", - "11 orange 2010 S 0.850895\n", - "12 orange 2010 S 0.277872\n", + "10 orange 2010 S 0.611588\n", + "11 orange 2010 S -0.929683\n", + "12 orange 2010 S 0.908996\n", "13 orange 2012 S NaN\n", "14 orange 2010 M NaN\n", - "15 orange 2012 M -1.816750\n", + "15 orange 2012 M -0.228062\n", "16 orange 2010 L NaN\n", "17 orange 2012 L NaN" ] diff --git a/docs/notebooks/expand_grid.ipynb b/docs/notebooks/expand_grid.ipynb index 46f36e8d..839a4a09 100644 --- a/docs/notebooks/expand_grid.ipynb +++ b/docs/notebooks/expand_grid.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:38:35][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # expand_grid " + "###
★ expand_grid
" ], "text/plain": [ "" @@ -93,10 +77,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/expand_grid.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(expand_grid)" ] }, diff --git a/docs/notebooks/extract.ipynb b/docs/notebooks/extract.ipynb index e92def06..a674d41b 100644 --- a/docs/notebooks/extract.ipynb +++ b/docs/notebooks/extract.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:39:44][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # extract " + "###
★ extract
" ], "text/plain": [ "" @@ -88,10 +72,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/extract.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(extract)" ] }, diff --git a/docs/notebooks/fill.ipynb b/docs/notebooks/fill.ipynb index 208106ae..35cf603b 100644 --- a/docs/notebooks/fill.ipynb +++ b/docs/notebooks/fill.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:39:59][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # fill " + "###
★ fill
" ], "text/plain": [ "" @@ -82,10 +66,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/fill.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(fill)" ] }, diff --git a/docs/notebooks/filter-joins.ipynb b/docs/notebooks/filter-joins.ipynb index b361864f..adb8fae0 100644 --- a/docs/notebooks/filter-joins.ipynb +++ b/docs/notebooks/filter-joins.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:40:07][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # semi_join " + "###
★ semi_join
" ], "text/plain": [ "" @@ -70,7 +54,7 @@ { "data": { "text/markdown": [ - "### # anti_join " + "###
★ anti_join
" ], "text/plain": [ "" @@ -97,11 +81,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/filter-joins.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import band_members, band_instruments\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(semi_join, anti_join, book='filter-joins')" ] }, diff --git a/docs/notebooks/filter.ipynb b/docs/notebooks/filter.ipynb index 78a53f05..24cffdf0 100644 --- a/docs/notebooks/filter.ipynb +++ b/docs/notebooks/filter.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:45:09][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # filter " + "###
★ filter
" ], "text/plain": [ "" @@ -75,10 +59,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/filter.html\n", + "%run nb_helpers.py\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(filter)" ] }, diff --git a/docs/notebooks/forcats_fct_multi.ipynb b/docs/notebooks/forcats_fct_multi.ipynb index ef32f183..7256146e 100644 --- a/docs/notebooks/forcats_fct_multi.ipynb +++ b/docs/notebooks/forcats_fct_multi.ipynb @@ -5,26 +5,10 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:45:24][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -36,7 +20,7 @@ { "data": { "text/markdown": [ - "### # fct_c " + "###
★ fct_c
" ], "text/plain": [ "" @@ -69,7 +53,7 @@ { "data": { "text/markdown": [ - "### # fct_cross " + "###
★ fct_cross
" ], "text/plain": [ "" @@ -103,9 +87,8 @@ } ], "source": [ - "from datar.all import *\n", - "\n", "%run nb_helpers.py\n", + "from datar.all import *\n", "\n", "nb_header(\n", " fct_c,\n", diff --git a/docs/notebooks/forcats_lvl_addrm.ipynb b/docs/notebooks/forcats_lvl_addrm.ipynb index 6d263272..2ce5153d 100644 --- a/docs/notebooks/forcats_lvl_addrm.ipynb +++ b/docs/notebooks/forcats_lvl_addrm.ipynb @@ -5,26 +5,10 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:45:37][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -36,7 +20,7 @@ { "data": { "text/markdown": [ - "### # fct_expand " + "###
★ fct_expand
" ], "text/plain": [ "" @@ -68,7 +52,7 @@ { "data": { "text/markdown": [ - "### # fct_explicit_na " + "###
★ fct_explicit_na
" ], "text/plain": [ "" @@ -103,7 +87,7 @@ { "data": { "text/markdown": [ - "### # fct_drop " + "###
★ fct_drop
" ], "text/plain": [ "" @@ -136,7 +120,7 @@ { "data": { "text/markdown": [ - "### # fct_unify " + "###
★ fct_unify
" ], "text/plain": [ "" @@ -167,9 +151,8 @@ } ], "source": [ - "from datar.all import *\n", - "\n", "%run nb_helpers.py\n", + "from datar.all import *\n", "\n", "nb_header(\n", " fct_expand,\n", @@ -195,7 +178,7 @@ { "data": { "text/plain": [ - "['b', 'b', 'c', 'a', 'c', ..., 'a', 'c', 'b', 'a', 'c']\n", + "['c', 'a', 'a', 'c', 'b', ..., 'c', 'a', 'c', 'a', 'b']\n", "Length: 20\n", "Categories (3, object): ['a', 'b', 'c']" ] @@ -218,7 +201,7 @@ { "data": { "text/plain": [ - "['b', 'b', 'c', 'a', 'c', ..., 'a', 'c', 'b', 'a', 'c']\n", + "['c', 'a', 'a', 'c', 'b', ..., 'c', 'a', 'c', 'a', 'b']\n", "Length: 20\n", "Categories (6, object): ['a', 'b', 'c', 'd', 'e', 'f']" ] @@ -240,7 +223,7 @@ { "data": { "text/plain": [ - "['b', 'b', 'c', 'a', 'c', ..., 'a', 'c', 'b', 'a', 'c']\n", + "['c', 'a', 'a', 'c', 'b', ..., 'c', 'a', 'c', 'a', 'b']\n", "Length: 20\n", "Categories (6, object): ['a', 'b', 'c', 'd', 'e', 'f']" ] diff --git a/docs/notebooks/forcats_lvl_order.ipynb b/docs/notebooks/forcats_lvl_order.ipynb index 7c9cdf84..f6c92c6c 100644 --- a/docs/notebooks/forcats_lvl_order.ipynb +++ b/docs/notebooks/forcats_lvl_order.ipynb @@ -5,26 +5,10 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:52:56][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -36,7 +20,7 @@ { "data": { "text/markdown": [ - "### # fct_relevel " + "###
★ fct_relevel
" ], "text/plain": [ "" @@ -75,7 +59,7 @@ { "data": { "text/markdown": [ - "### # fct_inorder " + "###
★ fct_inorder
" ], "text/plain": [ "" @@ -107,7 +91,7 @@ { "data": { "text/markdown": [ - "### # fct_infreq " + "###
★ fct_infreq
" ], "text/plain": [ "" @@ -139,7 +123,7 @@ { "data": { "text/markdown": [ - "### # fct_inseq " + "###
★ fct_inseq
" ], "text/plain": [ "" @@ -171,7 +155,7 @@ { "data": { "text/markdown": [ - "### # fct_reorder " + "###
★ fct_reorder
" ], "text/plain": [ "" @@ -208,7 +192,7 @@ { "data": { "text/markdown": [ - "### # fct_reorder2 " + "###
★ fct_reorder2
" ], "text/plain": [ "" @@ -246,7 +230,7 @@ { "data": { "text/markdown": [ - "### # fct_rev " + "###
★ fct_rev
" ], "text/plain": [ "" @@ -276,7 +260,7 @@ { "data": { "text/markdown": [ - "### # fct_shift " + "###
★ fct_shift
" ], "text/plain": [ "" @@ -308,7 +292,7 @@ { "data": { "text/markdown": [ - "### # fct_shuffle " + "###
★ fct_shuffle
" ], "text/plain": [ "" @@ -338,7 +322,7 @@ { "data": { "text/markdown": [ - "### # first2 " + "###
★ first2
" ], "text/plain": [ "" @@ -369,7 +353,7 @@ { "data": { "text/markdown": [ - "### # last2 " + "###
★ last2
" ], "text/plain": [ "" @@ -399,12 +383,12 @@ } ], "source": [ + "%run nb_helpers.py\n", + "\n", "import plotnine as p9\n", "from datar.all import *\n", "from datar.datasets import gss_cat, iris, ChickWeight\n", "\n", - "%run nb_helpers.py\n", - "\n", "nb_header(\n", " fct_relevel,\n", " fct_inorder,\n", @@ -586,7 +570,7 @@ "data": { "text/plain": [ "['a', 'b', 'c', 'd']\n", - "Categories (4, object): ['a', 'd', 'c', 'b']" + "Categories (4, object): ['a', 'd', 'b', 'c']" ] }, "execution_count": 9, @@ -773,7 +757,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 01:53:12][datar][WARNING] [fct_relevel] Unknown levels in `_f`: ['e']\n" + "[2022-03-18 17:46:13][datar][WARNING] [fct_relevel] Unknown levels in `_f`: ['e']\n" ] }, { @@ -961,7 +945,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 20, @@ -993,7 +977,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 21, @@ -1027,7 +1011,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 22, @@ -1050,7 +1034,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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ADRN44477uj0GA899BCaplFfX9/l81566aVMnjy5V21PFgmNQgghxACx88s45U+EKb7ITeoke383R+zyi1/8grPPPpvU1FTuv/9+3nnnHX7zm9+wZs0aLrjggi4f5/TTT2fp0qWkpaX1XWP7kPwKI4QQQgwAgdIEWx4IUnC6i8xjpHj3QPHaa6/x//7f/+PXv/41v//979tunzNnDpdddhmvvPJKl4+VlZVFVlZWXzTzoJCeRiGEEKKfRWpMNv09yLBjHOTOl8A4kPzv//4vOTk5/PrXv+7w/jPOOKPt75Zl8dvf/pacnBwyMzO57LLLCAaDbfd3NDwdjUb51a9+xahRo3A6nQwfPpxLL710v+2xLIsrrriCzMxMli1b1vsX2A3S0yiEEEL0o1iTxYZ7gvhKbBR92y3FuweQRCLBkiVLOPfcc7HbDzxd4O677+a4447j4YcfZsOGDdx0003k5OTw3//93/t9zrnnnsvChQu59dZbOeaYY6irq+O5557bb3suvvhi3n//fd5///2DPtdRQqMQQgjRT8ywYuPfgjjSNEZd4kHTJTAOJDt27CAajVJUVNSlx+fl5fHoo48CcMopp/DFF1/wzDPP7Dc0vv3227z66qs89thjfOc732m7fc+/7xaNRjn//PNZsWIFixcvZsyYMT14Rb0jw9NCCCFEP7ASik3/CKISipKrvOgOCYwDVVd7f0866aS9vp44cSKVlZX7ffy7776Lx+Phwgsv7PS44XCYM844g7Vr1/LBBx/0S2AECY1CCCHEQacsRdm/Q0RqTMZe68PmkY/jgWjYsGG4XC62bt3apcfvuyra4XAQjUb3+/gdO3aQl5d3wFBaV1fHokWLOP3007vc69kX5LtUCCGEOMgqX4zQtDrO2Gt8ONLlo3igstlszJo1i3fffZdEIpH04w8bNoyqqiqUUp0+rqioiMcee4y77rqLP/7xj0lvR1fJd6oQQghxENW8F6F2UZSSK32482W3l4HuxhtvpLq6er9h7bXXXuvxsU888URCoRBPPfXUAR973nnn8fDDD/Ob3/yGO++8s8fn7A1ZCCOEEEIcJA2fx6h4PsKoyzz4x8hH8GBw2mmncfPNN/Pb3/6WNWvWcOGFF5KZmUlpaSkPPPAATU1NnHbaaT069oknnshpp53G5ZdfzubNmzn66KNpaGjgmWee4cknn2z3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", "text/plain": [ "
" ] @@ -1061,7 +1045,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 23, @@ -1091,7 +1075,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAo0AAAGuCAYAAAD1fTxIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC2iElEQVR4nOzdd3xUdb7/8dc5Z3pJI5AChF4VEawIUiyoYO9l7Qp2cXf1rm5z7+797V6v9667lrWtiAWx64pdWUERVJSi0iEklCQQUqfPnPP9/RGIQEJImTBJ+Dx95CGZcs5n8k0y73zPt2hKKYUQQgghhBBN0FNdgBBCCCGE6PgkNAohhBBCiAOS0CiEEEIIIQ5IQqMQQgghhDggCY1CCCGEEOKAJDQKIYQQQogDktAohBBCCCEOSEKjEEIIIYQ4IFuqC0iF8vLydjmupmm43W7C4TBdac10h8NBLBZLdRlJ1VXbCqS9OhNpq86lq7VXZ2yr7OzsVJdwSJOexiTSdR2Px4Oud60vq9PpTHUJSddV2wqkvToTaavOpau1V1duK9E+5DtFCCGEEEIckIRGIYQQQghxQBIahRBCCCHEAUloFEIIIYQQByShUQghhBBCHJCERiGEEEIIcUASGoUQQgghxAFJaBRCCCGEEAckoVEIIYQQQhyQhEYhhBBCCHFAEhqFEEIIIcQBSWgUQgghhBAHZEt1AUIIIYTo/KxggPBbr2EWFaL5/LjOOAv7oCGpLkskkfQ0CiGEEKJNVDxO4NG/El+xFKtiJ2bxJoJPPkJiw/pUlyaSSEKjEEIIIdoksW41VvkOMM2fblSKyPxPUleUSDoJjUIIIYRoExWJgNYwUqhIOAXViPYioVEIIYQQbWIU9AXL3OdGA9tAGdPYlXSIiTCPPPIIS5YsIRwO4/f7mTx5MhdffDEARUVFPPzww2zatImcnBymTZvGyJEj65+7cOFCZs2aRUVFBUOHDuWOO+6gR48eqXopQgghxCEnvvw70LS6D0sBCtvQ4bhOPi3VpYkk6hCh8eyzz+bGG2/E6XSyY8cO7r//fvLz8zn++OP54x//yOTJk/nzn//M4sWL+fOf/8zjjz9ORkYGmzdv5m9/+xv33nsvw4cP5/nnn+eBBx7gwQcfTPVLEkIIIQ4JkU8/JPLRe3ivvhGjdx/MshJ0rw89Lx9N01JdnkiiDnF5uqCgAKfTWf+5pmls27aN77//nmg0yoUXXojdbufEE0+koKCAhQsXAvDZZ58xevRoRo0ahdPp5PLLL6ewsJDi4uJUvRQhhBDikFEfGK+6AfthI9DT0rAPGoKR31MCYxfUIXoaAWbNmsXcuXOJRqP06NGDSZMm8eWXX9K3b190/ads279/f4qKioC6S9eDBg2qv8/j8ZCbm0tRUREFBQUH/TUIIYQQh4p9A6Po+jpMaLz66qu56qqrWL9+PYsXL8br9RIOh/F6vXs9zuv1sn37dgAikUij94fDe8/WKikpoaSkpP5zp9NJfn5+0l+DYRh7/b+r0DSty72mrtpWIO3VmUhbdS5drb3a0lbhTz4g8tF7+K+ZhuPwI5JdmuigOkxohLofyEGDBvHtt9/y0ksvkZ2dTTAY3OsxwWAQt9sNgMvlIhQK7XV/KBSqv3+3J554gj/84Q/1n993333813/9Vzu9CkhLS2u3Y6eKw+FIdQntoiu2FUh7dSbSVp1LV2yvlrZVxdy3CH0wl7zbfo531FHtVJXoiDpUaNzNsixKSkoYPXo0r7/+OpZl1V+iLiwsZPz48QD06dOHjRs31j8vHA5TWlpKnz599jre9OnTOfvss+s/dzqdVFZWJr1uwzBIS0ujpqYG0zQP/IROwuv1NgjvnV1XbSuQ9upMpK06l67WXq1pq/AnHxD6YC7+a6YR69ufWDu8lzYlMzPzoJ5P7C3loTEQCPDNN99w3HHH4XK5WL16Ne+//z6XXHIJI0aMwOFw8MYbb3DOOefw1VdfUVRUxNixYwGYOHEiv/jFL1i2bBnDhw9n9uzZ9O3bt8F4xry8PPLy8uo/Ly8vb9dfZqZpdqlflkqpLvV69tTV2gqkvToTaavOpau2V3Pbas8xjMaww7rk10I0LeWhEeCTTz7hySefxLIssrKyOPfcc5k6dSqapvGb3/yGRx55hDlz5tCjRw/uvfdeMjIyAOjduzd33HEHjz76KJWVlQwZMoR77rkntS9GCCGE6GIi8z6SSS8CTSmlUl3EwVZeXt4uxzUMg8zMTCorK7vUX2B+v5/a2tpUl5FUXbWtQNqrM5G26ly6Wns1t60i8z4i8uG7HSIwZmdnp/T8h7oOsU6jEEIIITqejhQYRepJaBRCCCFEAxIYxb4kNAohhBBiLxIYRWMkNAohhBCingRGsT8SGoUQQggBSGAUTZPQKIQQQggJjOKAOsQ6jUIIIYQ4eFQ8Tmz1SmoNHbNbdyLLvpXAKA5IQqMQQghxCLGCAQKP/hWrfAe1ug6mCZqG9+obJTCKJkloFEIIIQ4h4bdew9pZDpZV97GL0bugiWcJIWMahRBCiEOKWbyprndx39vLSg9+MaJTkdAohBBCHEI0n7/hjUqhe70HvxjRqUhoFEIIIQ4h9iOO3PsGw8B22Aj0vJ4pqUd0HjKmUQghhDhEmNu2EPnofeyjj4FYDCMWRes/EMekU9E0LdXliQ5OQqMQQghxCDArdhJ4+jHshx+B59IrsdlsZGZmUllZidnIGEch9iWXp4UQQoguzgoGCD71GEZeTzwXXyG9iqJVJDQKIYQQXZiKxQg+8wSa04H3qhvQDCPVJYlOSkKjEEII0UUp0yT44kxUoBbv9TejOZ2pLkl0YhIahRBCiC5IKUX4zVcwNxXivfFWdH9aqksSnZyERiGEEKILin78AbFvv8F7/c0Y2d1TXY7oAiQ0CiGEEF1M9KsviXzyPt6rrsdW0CfV5YguQkKjEEII0YXEV35P+PU5uC+6HPuww1JdjuhCJDQKIYQQXUSiqJDg88/gOm0qzmOOT3U5oouR0CiEEEJ0Aeb2MoL/fBzHMcfjPGlyqssRXZCERiGEEKKTs2qqCT71GLYBA3Gfe5Es3i3ahYRGIYQQohNTkTDBp/+BlpGB5/Kr0XR5axftQ76zhBBCiE5KJRIEZz2NMhN4r52OZnekuiTRhUloFEIIITohZVmEXn4Bc3sZvhtvRfd4Ul2S6OIkNAohhBCdUOTdt4mv+hHfDbegZ2SmuhxxCJDQKIQQQnQykQX/JvrFfHzXTsPIy091OeIQIaFRCCGE6ERiy74lMvdNPJdfjW3AoFSXIw4hEhqFEEKITiK+fi2hl57Hffb5OEaOSnU54hAjoVEIIYToBMxtWwg++yTO8ZNwjpuY6nLEIUhCoxBCCNHBmRU7CTz9GPbDjsA15exUlyMOURIahRBCiA7MCgYIPvUYRl5PPBdfIbu9iJSR0CiEEEJ0UCoWI/jME2hOB96rbkAzjFSXJA5hEhqFEEKIDkiZJsEXZ6ICtXivvxnN6Ux1SeIQJ6FRCCGE6GCUUoTffAVzUyHeG29F96eluiQhJDQKIYQQHU304w+IffsN3utvxsjunupyhAAkNAohhBAdSvSrL4l88j7eq67HVtAn1eWIXf71r38xefJksrKycDgc9OvXj+nTp7N27VoANE3jwQcfbPIYzz77LJqmUV5e3uzzXnPNNRx++OFtqj1ZJDQKIYQQHUR85feEX5+D+6LLsQ87LNXliF1+9atfcc4555Cens5TTz3FJ598wu9+9ztWrlzJJZdc0uzjTJ06lUWLFpGRkdF+xbYjW6oLEEIIIQQkigoJPv8MrtOm4jzm+FSXI3Z57733+O///m9++9vf8p//+Z/1t48fP55rr72WuXPnNvtY3bt3p3v3zjvcQHoahRBCiBQzt5cR/OfjOI45HudJk1NdjtjD//7v/5KTk8Nvf/vbRu8/88wz6/9tWRb3338/OTk5ZGdnc+211xIMBuvvb+zydDQa5Te/+Q39+/fH6XTSq1cvrrnmmv3WY1kWN9xwA9nZ2SxZsqTtL7AFpKdRCCGESCGrpprgU49hGzAQ97kXyeLdHUgikWDhwoVccMEF2O32Az7+kUce4cQTT2TWrFmsXbuWu+++m5ycHP7yl7/s9zkXXHAB8+bN47777uP4449nx44dvPHGG/ut58orr+Szzz7js88+O+hjHSU0CiGEECmiImGCT/8DLSMDz+VXo+lyAbAj2blzJ9FolIKCgmY9Pi8vjxdffBGA008/ne+++47XXnttv6Hx448/5t1332X27Nlcdtll9bfv+e/dotEoF198McuWLWPBggUMGjSoFa+obeS7UwghhEgBlUgQnPU0ykzgvXY6mt2R6pLEfjS39/fUU0/d6/Phw4ezZcuW/T7+008/xePxcOmllzZ53HA4zJlnnsmqVav4/PPPUxIYQUKjEEIIcdApyyL08guY28vw3XgruseT6pJEI7p164bL5aK4uLhZj993VrTD4SAaje738Tt37iQvL++AoXTHjh3Mnz+fqVOnNrvXsz1IaBRCCCEOssi7bxNf9SO+G25Bz8hMdTliP2w2G2PHjuXTTz8lkUgk/fjdunWjpKQEpVSTjysoKGD27Nk8/PDD/Nd//VfS62guCY1CCCHEQRRZ8G+iX8zHd+00jLz8VJcjDuDnP/85paWl+w1r7733XquPfcoppxAKhXjllVcO+NgLL7yQWbNm8bvf/Y6HHnqo1edsC5kII4QQQhwksWXfEpn7Jp4rrsU2IDXj0kTLTJkyhXvuuYf777+flStXcumll5KdnU1hYSHPPPMM1dXVTJkypVXHPuWUU5gyZQrXXXcdGzZs4LjjjqOiooLXXnuNl19+ucHjr7jiCsLhMNOnT8ftdjN9+vS2vrwWkdAohBBCHATx9WsJvfQ87rPPxzFyVKrLES3w3//935xwwgk88sgjXHfddQSDQXr27Mlpp53GL3/5yzYd+/XXX+cPf/gDTzzxRP0aj5Mn73+tzhtuuIFIJMItt9yC2+3mqquuatP5W0JTB7qQ3gW1ZM/HljAMg8zMTCorKzFNs13OkQp+v5/a2tpUl5FUXbWtQNqrM5G26lza0l7mti3UPvYQzjEn4p56TpIra53O2FbZ2dmpLuGQJmMahRBCiHZkVVQQePox7IcdgWvK2akuR4hWk9AohBBCtBMrGCDw9KMYufl4Lr5CdnsRnZqERiGEEKIdqHiM4Mwn0RwOvFfdgGYYqS5JiDaRiTBCCCFEEqhEgsS6NahwCD2vJ5EP5qJqa/Dd9nM0lyvV5YkWaq/xxn6/v12OezBIaBRCCCHaSEXCBP7xd8xtW0HXwDTB6cR/16/Q/WmpLk+IpJDQKIQQQrRR+N1/YZZuA2XB7onITWwfJ0RnJGMahRBCiDZKFBXW9S7uyTAwS7ampiAh2sEh2dPocDhwOp1JP+7uWXFer/eA+0h2JjabrVOPwWhMV20rkPbqTKStOpem2iuckUl025a9bzQtvNndcXXQNu7KbSXaxyEZGmOxGLFYLOnHNQwDh8NBMBjsNAulNkdXXYC4K7YVSHt1JtJWncv+2ksphbVvR4RhYPTtTywnj3gHbePO2Fbt0eEjmu+QDI1CCCFEMijLIvz6HOIrf8B94WUk1qzECgSw9RuA69Qz0HQZBSYOzOfz7fV5JBJhypQp/Otf/0pRRY2T0CiEEEK0gjJNQi/NIrF2Db6b78DWqwDn8WNTXZbohAKBQP2/TdOkoKCAiy++OIUVNU5CoxBCCNFCKh4j+Nw/MbduxnfLDIzcvFSXJFJAxeOEF32BWb4DI7s77jHj0Oz2Nh3zgw8+IBAIcMEFFySpyuSR0CiEEEK0gIqECTzzBKqqEt+tP8folp3qkkQKqHicioceILF1c/1t4a8XkXXn3W0KjjNnzuTSSy/F7XYno8ykktAohBBCNJMVDBB8+h+oWBTfrXehp2ekuiTRTspuv7HFz0kUFbL957c0+Rj/s3P2e195eTnvvPMOCxYsaPG5DwYJjUIIIUQzmNVVBB77G5rdhu+WGehe34GfJEQLvPjiiwwcOJDjjjsu1aU0SkKjEEIIcQDmznLKnnoULS0d33XT0Vwd79Kh6PxmzpzJtddem+oy9ktCoxBCCNEEs6yUwJOP4OxdgPPya9AcjlSXJA6CnIefavL+xsY02noVtHpM43fffcePP/7IlVde2eLnHiwSGoUQQoj9SGzZTPCpR7ENGET29NsIhMOpLkl0EJrdTtaMe+pmT+8sx+iW3abZ0zNnzmTq1Knk5OQkudLkkdAohBBCNCJRuIHAP/+B44hRuC+8DM0mb5lib5rdjmf8pKQc6+GHH07KcdqT/AQIIYQQ+4ivWUnw2adwjhmH66zz6/dpFuJQJqFRCCGE2ENsxVJCLz6L6+TTcJ56hgRGIXaR0CiEEELsEv1mMeFXZ+M68zxcSbrsKERXIaFRCCGEAKKff0b4nTdwX3gZzmPHpLocITocCY1CCCEOaUopop98QOSTD/BccQ2OkaNTXZIQHZKERiGEEIcspRSRuW8SXfg53mumYR92WKpLEqLDktAohBDikKQsi/Drc4gt+w7fjbdiGzAw1SWJDsTv96e6hA5HQqMQQohDjjJNQi/NIrF2Db6bbsfWu0+qSxKiw5PQKIQQ4pCi4jGCz/0Tc+tmfLfMwMjNS3VJQnQKEhqFEEIcMlQkTOCZJ1BVlfhu/TlGt+xUlyQ6qNra2nY5bme+7C2hUQghxCHBCgYIPv0PVCyK79a70NMzUl2SEJ2KhEYhhBBdnlVTTeCJR9DsNny3zED3+lJdkhCdjoRGIYQQXZq5s5zgk4+gpWfgu246msud6pKE6JQkNAohhOiyzLJSAk8+gpGXj/eqG9AcjlSXJESnJaFRCCFEl5TYspngU49iGzAIz+VXo9nkLU+IttBTXYAQQgiRbInCDQQe/xv2w0bg+dm1EhhFh3bNNdfgcDjw+Xz1H8XFxakuqwEJjUIIIbqU+JqVBJ58BOexY3BfdDmaLm91ouP7+c9/TiAQqP8oKChIdUkNyJ9eQgghuozYiqWEXnwW18mn4Tz1DDRNS3VJogtTVpxw2ReYkR0Yru64c8ah6fZUl9Vu5M8vIYQQXUL0m8WEXpiJa+o5uCZPkcCYAla8hnjNWszQVpRSqS6nXSkrTsX3D1Bb+DKhknnUFr5Mxff/g7LirTrek08+SVZWFiNHjuSZZ55JcrXJIT2NQgghOr3o558RfucN3BdcivO4E1JdziEpVvEtocLnQJkA2DNG4ul/HZpupLiy1ilbeGOLn5MIFLJ90S1NPsZ/+pwGt91xxx08+OCDZGRk8Pnnn3PRRReRnp7OBRdc0OIa2pP0NAohhOi0lFJEPn6f8Nw38Vx+jQTGFDEjOwhtnFUfGAHi1T8QKf0ohVV1HqNHjyY7OxubzcakSZO49dZbefXVV1NdVgMSGoUQQnRKSikic98k8ulHeK+ZhuPI0aku6ZCjlMKKVRPb8WUjd5okalYf/KK6AF3XO+Tlfbk8LYQQotNRlkX49TnEln2H78ZbsA0YlOqSOhUrESRevpzKKo24kYfu6XvA5ygzihkuwQxvwwxvw9r1f5UIgGYAVoPnaEbn3X0nZ+xTTd6/e0xjIri5/jabt4CsEXe3eDLMK6+8whlnnIHX6+XLL7/kkUce4eGHH25V3e1JQqMQQohORZkmoZdmkVi7Gt9Nt2Pr3SfVJXUqVrSC2lUPoswgIU1HWXFcvS7AlTsJAKVMrMiOBuHQiu4EFLozG92dj+Hrj6P7OAx3PpojncCqB7Gi5XtcotZw5Z6cstfZ3jTdTtaIe3bNni7HcGW3evb0I488wrRp0zBNk4KCAv70pz9x6aWXtkPVbSOhUQghRKeh4jGCz/0Tc+tmfLfchZGbl+qSOp1Q8Wt1vYNYqF0BL7LldczABqzYTsxwKag4ms2L4c5Hd/fEmX44hjsfw52HZjgbPa5vyF2Ei18lESxEt/lx9TwTm79r9wBruh1P3qQ2H2fBggVJqKb9SWgUQgjRYcWWfUd47huoYBA9Nx8NUMEAvlt/jtEtO9XldUpWZBuNXUpWVhh71tG43Pl1vYf2tBYtW6TbfXgHXJvESkVHI6FRCCFEhxRfvZLQCz+tV2dtLgJdx/eLeyUwtpKyzP1OsHD3vgjDnXuQKxKdicyeFkII0SFFF33R6O1WaclBrqRrSNSup3blX8AMU/f2v7sXUceRPVYCozgg6WkUQgjRMcVjDW/TdUgkDn4tnZgVDxDZ+jax8sU4ssfg6nUOKl5LfOdC7LqJ5eyDLevY5JxLxQlbFdg1Lw7dl5Rjio5DQqMQQogOyX7YESTWNlznz+g3IAXVdD5KKWI7vyKy5U00ezq+oXdh8/Wvu9PmxdHnYjIzM6msrMQ0zaYP1gwV8TUsDz6FSQSAXo4JDHFfgKbJRc2uQkKjEEKIDklLz9j7BqcT75XXY2R1S0k9nYkZLiFU9DJmqBhX/hScPSa163Z+EauKZcHHsfhp3+Wtsc/xGN0pcE5st/OKg0tCoxBCiA7HLN9BaM7zuE6biuOEE+tmT2dmodlbvgbeoUSZMSIlHxAt+wRb+uGkHfYbdGdWu5+3KrEBi717KxUWO2LLO21o9Pv9qS6hw5HQKIQQokOpW4vxaWx9++E8+TQ0XQevjI87kHjVj4SLX0Fh4e1/A/bMI9r9nJYyqUisYUv0cxpbxkfXJOR3JRIahRBCdBhKKcKvv4wKh/HcdEddYBRNsmKVhDe/TrxyBc6cSbjyp+x3Ae5kUEpRY26iJPYNZfHvMFWELNswbHhIEAZ2L+mj0cs5rt3qEAefhEYhhBAdRuzrRcSWfovv9p+je7ypLqdDU8okun0Bka1zMdz5+If/B4anZ7udL2iW7gqKSwhbFWTZBjPIdQ7d7SOx6x5CZjk/hmZRa27BrnkY6D6H7vb27+1sL7W1te1y3M582VtCoxBCiA4hsWUz4TdfwX3ehdh6FaS6nA4tEdhEuHgOVrQCd+/zcWSPaZdZyhGrktLYt5TGlxAwt5BmFNDbMZEcx2icevpej/UY2Rzj/0XSaxAdh4RGIYQQKWeFgoRmPY39yKNwHDc21eV0WFYiRGTrO8R2fIG92zF4B92Kbm95z1XY3ElJ9CtsCYXb7EW2cUT9loFxK8j2+DJKYt9QZW7ArWeTaz+aEZ5r8Ro5yX5JohOR0CiEECKllGUReuk5cLnwnH9Ji/Y7PlQopYhXfEt48+toNg/ewbdjTxvcqmMFzBK+qX0QiwSEFQpFL8cEMm39KY0toTzxI3bNS47jKAa5zyPNKJA2EYCERiGEECkWnfcRicIN+Gf8B5rDkepyOhwzsp1w8SskajfgyjsNZ+7JaHrrZyWvDb+GSZw9ZztviX1GSWwRPRyjONJ7M1m2wbIot2hAQqMQQoiUia9dTeSj9/BedQNGdvdUl9OhKCtOtPQTIiUfYvMPxH/YfRiutn+NQlY5jS2Pc7jnWro7Dm/z8UXXJX9GCCGESAmrqpLQi8/iHH8S9sM77yzb9hCvWUPtj38muuNzPP2uwjvo1qQERkvF0VTjl5q9Rm6bjy9aJxqNcsMNN9CvXz/8fj+HHXYYs2fPTnVZDUhPoxBCiINOJRIEn/8nek4urjPOSnU5HYYVryG8+U3iFUtw9BiPO/9MNJs7KceuThSyMvQiCcLoOFBYaICFSX/nGXiM7DYdXynFivgPFJlb8GlejnccjUf3JKX2ri6RSJCfn8+nn35Kv379WLhwIVOnTqVfv36MGTMm1eXVk9AohBDioAvPfROrsgL/jF+hGe23J3JnoZRFbMdCwlv/heHMxjfsl9i8fZJybFNFWR+Zy+boZ+Q5jmOw63ws4pQllmBzgivRkyxjaJvP80r4TRbGFqGjo4B50fnc459Bmt551yU8EFPF2Rz+gpC5A4/Rnd7ucRit2AXH6/Xyn//5n/Wfjxs3jrFjx/Lll19KaBRCCHHoii1dQuzLz/HdfCd6Wlqqy0m5RGgL4aI5mOFS3D3PxNFjfNImoeyMr2ZV+CUARnlvoZt9WP19/dyTyczMpLKyEtM093eIZilMFPF57EuA+j2oa1WAuZH3udxzcZuO3VGZKs6iigeoSWyuv21LeBFjsu5uVXDcUzAYZMmSJdx5551tLTOpJDQKIYQ4aMzSEkKvzMZ15rnY+g1IdTkppcwIkW3vEi2bjz3zSLwDbkB3ZCTl2HErxNrIG5TEvqK3cyIDXWdiaO23teA2swQdHWuPCTYmJqXm9nY7Z3t7t+zGFj+nOlHIB9tvafIxl/rnNHm/ZVlcc801HHPMMUyePLnFNbQnCY1CCCEOChWJEHzuaezDDsN54qRUl5MySiniVSsIF7+KptvwDroJe/rwpB2/LLaUNeFXsWsejvH9nHRbv6Qde0+mMlmZWMOS2FKWx7/fFRizgL6AC51VZOvd2uXcXZVSiptuuolt27bx4Ycfdrj1MVMeGuPxOI8//jjLly+ntraW7OxsLr74YiZMmABAUVERDz/8MJs2bSInJ4dp06YxcuTI+ucvXLiQWbNmUVFRwdChQ7njjjvo0aNHql6OEEKIRiilCL06G5TCc/HlHe7N8GAxozsJF79KomYVztxTceVNRtOTszZl1KpmdfgVyuM/0Nc5mX6uyehtvEy6L0tZFJpFfBP7jqXx5cRUjBH2w7jGfQUvhXcSxA0YgIVFT4529E3q+bsypRS33nory5Yt45NPPsHn86W6pAZSHhpN0yQrK4s//elP5OTksGrVKv7zP/+TnJwcBg4cyB//+EcmT57Mn//8ZxYvXsyf//xnHn/8cTIyMti8eTN/+9vfuPfeexk+fDjPP/88DzzwAA8++GCqX5YQQog9xL74jPjKH/Df8Us0V3JmA3cmyjKJls0jUvIehqcP/uH3YriTs8SNUoptscWsi7yBR+/Bcf7/wGfkJ+XYu201S1gS+44lsaVUqxqG2AZxgfscjrAfhktzsSpeTYjoHs/Q0YAvY7UMt3fOrQen5jzV5P2NjWlMsxW0ekzjbbfdxuLFi/n0009J66BjfVMeGl0uF1dccUX958OHD2fYsGGsWrWKcDhMNBrlwgsvRNd1TjzxRN555536qeifffYZo0ePZtSoUQBcfvnlXHnllRQXF1NQIJvdCyFER5Ao3ED4nTfxXHolRl5yw0xnkKjdQKhoDipRi6fgUuzdjk1aT2vILGd1+CWqEoUMdJ1Fb+eE5E2iMStYEl/KkthSSqxS+hp9OMU1kVH2kfUzoqutGCvjFSyKlaP2eb4CaqxEUmrpiAzNzpise3bNni7HY2S3evZ0UVERjz32GE6nk969e9ffft9993Hfffcls+w2SXlo3FckEmH9+vWcddZZFBcX07dvX3T9px+A/v37U1RUBNR9kQcNGlR/n8fjITc3l6KiIgmNQgjRAVi1tQSffwbH8eNwjD4m1eW0q2j5IiJb56LMMIa3D+7eFxLb/hmx8sU4ssfg6nUOus2blHMpZVEc/YwNkblk2PpxvP++Zq+zqJRiQWwhH0Y+JVoRY4CtHz9zX0Ka7idgBfkuvowlsaVsNDeRo/fgGMdojraPopuexXYryg/xWjYkytlgBii3ong0g3y9Ye+xgUY/Izmvt6MyNDt9PW0fn9unTx+U2jd2dzwdKjRalsVDDz3EoEGDGDVqFGvXrsXr3fsbzuv1sn173WysSCTS6P3hcHiv20pKSigpKan/3Ol0kp+f/L92jV1rjRldbM0xTdO63Gvqqm0F0l6dSVdvK2WaBF6ciZGZie+8Czv9eoxNtVd057eEN82GXf1tZu16Aiv/guHOJW34L7D7kzdTvDaxlR+DLxA0yxjuvYR855gW9Vx+EVnMq+H5wDDAzsr4dv478RA9bXmsjq8lTfdztGM0F3kvQJHOhkSANyNVbEhsJqASZOkOBtr8nOrOY4DNT57hRtc05oVLeDVUjA0NC0Vvm4ezfL0xtM7d7uInHSY0KqV47LHHqKio4A9/+AOapuF2uwkGg3s9LhgM4nbX/UXjcrkIhUJ73R8Kherv3+2JJ57gD3/4Q/3n9913H//1X//VTq+EDjsWoS0cjuQM1O5oumJbgbRXZ9KV22rnay9hlZbQ+w9/xt6tdbuNKCtOcPu3mLEaHP6+uDMHJ7nSlrHbbSgzghkPYSXCWIkQViJETcl7sNcFWgVodB92Jb4eo5NyblMlWFnxJquq3yLfexQTu/8Hbltmi4/zyaYVwKlADbAS2Eq1gn42D5f6byOsfKyNVPHX2hLiaiu9HX6GejIZ7+rNEFcm2fbGx6RekJnJMdHebIrW4DccjPB0w5akS+WiY+gQoVEpxeOPP05hYSF//OMf60NfQUEBr7/+OpZl1V+iLiwsZPz48UBdd+7GjRvrjxMOhyktLaVPn71X0Z8+fTpnn312/edOp5PKysqkvw7DMEhLS6OmpqbNC6V2JF6vt0F47+y6aluBtFdn0pXbasfCBVS/+y/8024joBvQit+5yoxQvfL/MENbQTNAJXD3nIKn15mtqk0pC2VGUWZ410ek7v+J8B63hbESu+8L7bp/1+OsCCoRhn1G72m6C6XijZxRIxioIW5v+/tNVbyQH4PPE7OCjPBdR65zNJFaiNDyY1ckCoAS4FtgADAC8LE8rPFDeAd9bWEG2P1M9A2in82HV98VFRJAIEIlkf0e2w+MwAMm1MaqW1zbgWRmtjwki+TpEKHxiSeeYM2aNfzpT3/C4/lpn8oRI0bgcDh44403OOecc/jqq68oKipi7NixAEycOJFf/OIXLFu2jOHDhzN79mz69u3bYDxjXl4eeXl59Z+Xl5e36xuPaZpd6o1NKdWlXs+eulpbgbRXZ9JV2yq+vZSa52fimjwFY9CQVr/G0OZ3McPbAAtU3aLR4a3vgqM7hiPzp9Bn7hny9r3tp39jRtg38KG70AwXmuHe9eFCs9X9X7fn/nSb4cbjyyISY9fnHjB2PVfTCW/7kGjJe6D2eK26Dc1d0KY2NlWUDZG5FO/eAtB7Pnbd0+pjVpsxTMKADuze81sDFGe6cjjJ2RP7nr2Dii75PSpaJ+Whcfv27bz33nvY7Xauu+66+tsvvPBCLr74Yn7zm9/wyCOPMGfOHHr06MG9995LRkYGAL179+aOO+7g0UcfpbKykiFDhnDPPfek6JUIIYRQsRgljz6ErV9/nCef1qZjmaGivUPYLuHCZ+v+0VTgc2TsFfj2/dgz8DWX2+8nUVvb6H2uvFNRsXJi5YsA0AwP3oHT0O2tH1KxM76a1eGXUDTcArAlKq0Yy+OVLI1VsMEMAJlAnLqwWEdD41hHzt6BUYh9aKozTNdJsvLy8nY5rmEYSdvHsyPx+/3U7ucXZWfVVdsKpL06k67YVuFXZ2OuX4v/rl+hXK42HSu4cRbxiiXs2zvo6X8d9swjk7a0THM1p72seC3KDKE7stD01i2snYwtAHeYEZbHq1gWr2STGSRTs2NShFLFXOmZypxwLdUqhoaGieJSdx/GOru3qt6DKTu7dWNjW6O9fjb9fn+7HPdgSHlPoxBCiK4h+tWXRJd8Ta/f/IGw19vmgK/ZfOyeUAIKNAPD2y8lgbG5dLsf7K0PBdtjy1gdfqVVWwCWmGGWxStZFqtkqxUmR3dxpD2TCQ4Xb4VfINvI5Abv1aTpfu6zm/xo1qC5neTGdPK1tgX8rqgzh7v2IqFRCCFEmyW2bCb85it4z78YV78BhNsw2VApRWTbu8R2fI67z2WYwSKseA02bx+cuad02MDYFq3ZAlApxRYzxNJ4JcvjVZRZEXoZbkY5MrnW3p9cw823sWW8EHqZox2juNh9Pnat7m3fpRkc68wmM73r9eCL9iOhUQghRJtYoRChWU9jP/IonGPGtelYSikiW94mumM+3oHTsacPg+5jk1Rpx6OUoiS2mLXN3ALQUopNZpBl8UqWxyvZacXoa3gZ48hmpD2D7oZr1+Ms5oY/4KPoPM5znclE54mH7H7fInkkNAohhGg1ZVmEXnoOXC4851/SpmCilCK8+XVi5V/iHXgz9rTUrsnY3vbcAnCA60wKnBMb7UU1lWJDonZXUKyiRsUZYPiY5MxhpD2TTH3vtT6jKspzoZdYG1/PTd7rGW4fcrBeUpciYxobalVoXLBgAaNHj8bn8zW4LxAI8N1339WvpSiEEKLriv77YxKF6/HP+A+0NixUrpRFuPhlYju/xTfoVmxJ3EGlo1HKYnN0Pusj7+x3C8CEsli7KyiuiFcRUiaDbX7OcOUz0p6Bfz+TbHaaFTwRnEmCBL/030GO0eNgvCRxiGhVaJw0aRKLFi3i2GOPbXDfmjVrmDRpkoyPEEKILi6+djWRD9/Fc9X1GNmtn3mrlEV404vEq1bgG3wbNl/f5BXZwQTMElaGXiRklTHUfRF5juPre2djymJVvJpl8Up+iFcTx2KYLZ3z3L0YYcvAozf9lr0+sYGng8/Ry+jJdZ6f4dE9TT5eiJZqVWhsapWePbf5E0II0TVZVZWEXnwW5/iTcBw+stXHUcokVPgciZrVeIfcgc3TO4lVdhyWSrAp+hGFkQ/Jth/OSO+NOPV0Isrkx1hdUPwxXreDymH2dC719OEwezquZu7bvDC6mFfCbzLeOZZzXVNlv2fRLpodGhcvXsyXX35Z//ns2bP54osv9npMJBLh7bffZtiw1i1AKoQQouNTiQTB5/+JnpOL64yzDvyE/R3HShAqfJZE7QZ8Q+7EcO9/AkhnVp3YxMrQi8RVgMM91+C3jWBpooplsXWsTtRgR2eEPYOrPf0YZk/H0YLZ4aYyeT38LxbGFnOp+wLGOBteARQiWZodGj/88EP+8Ic/AKBpGn//+98bPMZutzNs2DAee+yx5FUohBCiQwnPfQursgL/jF+hGa3r0VJWnOCGf2KGincFxtwkV3nwLY2u5v3wFsLo9NIVl3mPojT2KcXRz0i3n0DMGM+rsSBrQ8vxaAZH2DOY5h3IYJsfWyuWEQpaIZ4JPc82s4Q7fDcxoAVrOgrRGs0Ojb///e/5/e9/D4Cu6yxevLjRMY1CCCG6rtjSJcS+XIDv5jvR01q3RZ6yYgTXP4UZKcU35C4MV8ffieRAlkZX889wDZAOaNitLXxU+1dq6MtO/VqK4xZpiXJG2jOY7M1lgM2P0YaZ5qVmGU8EZ+LAwd3+O8nSM5P2WkRqPPLIIzz77LN8//33nHfeecyZMyfVJTXQqjGNlmUluw4hhBAdnFlaQujV2bimnoOtX+tmNyszSnD9E1jRnfiGzMBwdktylanxfngLkI5BnBy2EcbLZ5yFDzjW3p0L7Jn0NbzoSVgr8cf4KmYGX2SofRBXei7F2cItBkXHlJ+fz29+8xs++eSTdtvuuK1avU6jaZp89dVXbNmyhUgk0uD+q666qk2FCSGE6DhUJELwuaexDxmOc/xJrTuGGSaw7nFUvAbf0Bnojq7TOxZBx0c1CexUsLvn1OQMu50J7uRM7lFK8Wl0Pv+KvMfprlM43XkKehfcHaczias4X4QXscMsp7uRzTj3GOwH2Mlnf84//3wAli1b1rVC43fffcf555/P5s2bG51JrWmahEYhhOgilFKEXp0NSuG55IpWLeBtJUIE1z2GMiP4hsxAd6S3Q6WpEbcSeAlSQQ7ZlFJBDyxsaFgMdOQl5xwqzkuh11gWX8G1nisY5Wj9jHWRHHEV54GKh9ic2Fp/26Lw19yddWerg2NH16rQePPNN5Oens6sWbMYPnw4jjYs6CqEEKJji30xn/jKH/Df8Us0V8uXVLMSAYJrH0UpC9+QO9HtnXdHjH1tjpfzdPBHgmTQm2I20wcNhYbF2Q6Nnva2h8Zqq4angrOotqr5ue82etl6JqFycSA3lt3e4ucUJoq4ZfvPm3zMHP+zrawo9VoVGn/88UdeffVVJkyYkOx6hBBCdCCJTRsJv/MGnkuvxMhr+ZI4VryWwNqH0TQD35Db0W0NdxLrjJRSfBj+gfdjQfIJcbt3NJnGCayIryNgRehvy6Wnve0zwosTW3gyOJMsPZO7/XeSpnedwC06n1aFxsGDB1NTU5PsWoQQQnQgVm0twef+ieP4sThGH9Py58eq6wKj4cI76BZ0W9fYoaTKjPDP4BKKLYOJtlrO9pyCsWtbv1HOoUk7z7exZbwQepmjHEdyifsC7FqrpyEIkRSt+g7861//yp133snIkSMZOjR5PyBCCCE6BmWahF6YiZ6egfvs81v8fDNaQWDNQ2j2NHyDbkYzXO1Q5cH3XXQzs8ObcRPiFnc+Q5xjkn4OS1m8F/mIj6LzONd1JpOcJ7ZqHKlom6dyHm7y/sbGNBbYerV6TGMikaj/sCyLSCSCYRjY7R1nfGSzQ+OIESP2+qYtKSnh8MMPJz8/n4yMjL0eq2kay5cvT1qRQgghDq7Ih+9ilmzFf9d/oNla9qYVD22nZtX/oTu64R04Hc3o/EvCxJTJY9u/4OtolCO0Mq7wTcRjJH/2d1RFeS70Emvj67nJez3D7UOSfg6RHHbNzj1ZM/givIhycyfZRrc2zZ7+05/+VL+JCsCrr77K1VdfzbPPPpukituu2aHxqKOOkr90hBDiEBD/8Xuin32C9/qb0TOzWvRcM7Kdrcv/juHKwTPgBjS980+U3JSo5unAj8SIconDZKz7HLR2WOpmp1nBE8GZxInzS/8d5Bg9kn4OkVx2zc4kz/ikHOv+++/n/vvvT8qx2kuzQ2NHSrpCCCHah7mznOBLz+E69QzsQ4a17LnhUgJrH8adMRBX36uxVOdeQ9BSivfC6/kwVkkfSrkx+zjSE+0zc3l9YgNPB5+jl9GT6zw/w6N3jfGfomuRUbVCCCEAUPEYoVlPY+vbD+fJp7XouWZoK4G1j2BPG0TeqLuoqq4F02ynSttfhRXlqcAKSq0Yk4ytnOWdSpY7l9ra2qSf68voV7wcfoPxzhM413Umhta6/byFaG+tCo3XXXfdfu/TdZ309HRGjRrF+eefj8cjfy0JIURnEH7zVaxwCP/029D05vcSJoKbCa59GFv6cHwDr0HTO3d/xFfRUl4OF5HOdm5wpTPceVG7DM8ylckb4Xf4IraIS90XMMZ5bNLPIUQyteone+nSpWzbto0dO3aQlZVFjx492L59OxUVFXTv3h2v18vf/vY3fv3rXzNv3jwGDGjdHqVCCCEOjuhXXxL79ht8t92F7m3+WoqJwCaC6x7FnnEE7r5XoHXiXrKQleCF0Gp+SAQZqa3lQs9E0u3J2QJwX0ErxDOh59lqbuMO300MsPVrl/MIkUytGnDyP//zP6SlpfH5559TXl7OypUrKS8vZ/78+aSlpfHoo4+yatUqnE4n99xzT7JrFkIIkUSJrZsJv/kK7vMuxNa7T/OfV7uh7pJ01uhdgbHzjmFcG6/hT7XfUZgo5QLbJq5Ou7jdAmOpWcaDgb8TsILc458hgVF0Gq3qafzlL3/J/fffz9ixY/e6/cQTT+R3v/sdd999Nz/88AP33nsvv/jFL5JSqBBCiORQlkViwzpUTTVaRibhl1/AfuRROI4be+An7xKvWUtw/eM4sk/A3fuCTru6RkJZ/Cu8iX/HdtKfdZzvHkgf5yntdr4f46uYGXyRofZBXOm5FKfW+ZcjEoeOVoXGNWvWNFibcbfMzEw2bNgAwIABAwiHw60uTgghRHIp0yT4z8dJrFsNug6miebz4zn/kmYHv3j1KoLrn8SZMwFXz3M6bWAsNcM8E1xNhRVkkr6S07zn4DVy2uVcSik+jc7nX5H3OM15Mme4TkXvxD2zhwK/X7Zs3FervmOHDh3Kgw8+SCgU2uv2YDDI//zP/zB8+HAAtm3bRk5O+/wACiGEaLnognkkNqwFpepnN6tALebWzc16frzqe4Lrn8CZe3KnDYxKKeZHyvhL7Q8oq5Cf2cs4x39tuwXGuIrzQuhl3o18yDWeK5jqPk0Co+iUWtXT+PDDD3PGGWfQq1cvJk2aRPfu3dmxYwfz5s0jkUjwwQcfALBixQouvPDCpBYshBCi9cziooZL4djsmFuKsfVretJirHIZoY0zceWdgSv/9Hassv3UWHGeD61jXaKWkXzHFM8J5DhGtuP5angyOItqq5qf+26jt6191nkUydceyytB5+7BbFVoHDduHOvWreP//u//WLJkCStXriQvL49p06Zx1113kZubC8D/+3//L6nFCiGEaCNfIzOjlYV2gBnTsYolhAqfw9XzHFy5J7dTce3r+3gVzwfX46SCs/UNnOC7FJeevK0Aq6xqvox9RcgK0cdWQI7enSeDz5KlZ3K3/07S9M4bFoSANizunZubywMPPJDMWoQQQrQjKxTCKi2p+0TT6i5RGwZ6dnfsI/bf2xYrX0xo02zcBRfg7DHhIFWbPDFl8nq4mC9j5QxmBac5chjonoaexOWBys2dPBB4iKiKoVCo2EI0NI51HMUl7guwa5177UohQHaEEUKIQ4K5vYzgzCfAZsd70+3EFn+JVVWJ0as37tPORLM3vkd0dMdCwkUv4+5zMc7u4w5y1W1XnAgyM7SOsFXLJL5iovcssuxDkn6etyLvElFRLKz62xSKE+0nSGAUXUazv5OPOOIIZs+ezeGHH86IESOaHPysaRrLly9PSoFCCCHaJr5mJcHnZ2IfOBjPZVehOZ3YBx44OEW3zydc/DqevpfjyD7+IFSaPJZSfBwt5d3IVnpRyOnGTkZ5p+Nop0vEO8zyvQIjgIFBhaqkD+2z3qMQB1uzQ+NRRx2F1+ut/3dnnDEnhBCHEqUU0c//TWTuWzhPmoxr8pRmbw8YKf2UyNa38fS/CkfW0e1caXJVWFFmBTeyxazhKL5gomskBc4L2m3xcVOZgGp4Oybd9W7tck4hUqHZoXHmzJn1/3722WfboxYhhBBJohJxwq+/TGzZt3guvwbHkaOb/dzItg+IlLyPp/91ODKPbL8i28E3sZ28HNpEOuWcrn3Hsd7LSLf1bbfzbUls5cXwK1SqKlw4iRNHQ8PEYpLjRHrJbGnRTNOmTePdd9+ltraWrKwspk2bxn333ZfqsvbS5oEWSilKSkro0aMHNpuM2xBCiFSzamsIznoaq7IC3613YetV0KznKaWIbHuXaOkneAfcgD1jRDtXmjwhK8HL4SKWxSsYzneMsdkZ7p2BTXO3y/niKs77kY/5JPoZo+wjucV7IxoaX8W+IajC9LUVcIT9sHY5t+iaZsyYwd/+9jfcbjebN2/mtNNOY+DAgVx88cWpLq1eq1Pehx9+yO9//3uWLl1KIpHgm2++YfTo0UybNo0JEyZwxRVXJLNOIYQQzZDYupngzCfR09Px33kPelpas56nlCKy9W2iZfPxDpyOPX1YO1eaPOsStTwX3Aiqlgl8ynHuU8l3jGm3YVQbEoW8GHqFmIpxo/dqRuwRDk92TWyXc4qOKa4svgiXscOM0N1wMc6dg72VwyB2b4yym67rrF+/PhllJk2rXtlLL73ElClT6NevH4899hhK/TSWY8CAAXtdyhZCCHFwxJYvJfDIX7ENGITvpjtbFBjDm18nun0B3kE3d5rAmFAWb4e38PfAGrqrNUzWPmeyfxo9nSe0S2AMW2FeDr3BQ4HHGGwbyK/TfrlXYBSHlriyeKDie16uLWReqISXawv5n4rviSvrwE/ej3vvvRev10tBQQHBYJCf/exnSay47VrV0/jHP/6RGTNm8L//+7+YpsmNN95Yf99hhx3GX//616QVKIQQomnKsoh8/D7RTz/ENeUcnBNOajI0mZHtRLa9hxWrRHf3QrOixCqX4Rt0KzZ/07vCdBSlZphZwY1UWEHGMI9Rjj4Mdv8CQ2t86aC2+jG+ipdL38BQBnf4bmKQrXN8nUTr3Vi2sMXPKUwEuGX7oiYfM8e//92U/vznP/P//t//Y8mSJbz11ltkZiZv8flkaFVo3LhxI1OmTGn0Pq/XS3V1dZuKEkII0TwqGiU053ni61bjvXY69mFN93yZkR3UrvxvsOKAhRnYCIB3yB0dMjBGlcl3sUoCKk4vw8NQWxqfx3bwZngzeVoFk/iMIz3nk+s4ql3OH7CCvB5+m2/jyzjDfyon6xNxaPZ2OZcQULds4THHHMMHH3zA73//e/7v//4v1SXVa1VozM3NZfXq1Zx8csOtpFasWEGfPn3aXJgQQoimWZUVBGc+iYpF8d/+S4yc3AM+J1o2rz4w1lGAjopVtWOlrROyEjwYWMVOK4oGJIBumoMaFWMk3zFMq2aE7y48RnbSz62U4tv4Ml4Lv0WGns7dvjsYnjGs3fYjFmJfiUSCDRs2pLqMvbQqNF5++eXcf//9DB06lIkTJwJ1yfiHH37ggQce4Oabb05mjUIIIfaRKNxA8NmnMPJ74r3pdnSPt1nPU/Fa2GcRajQDlQgkv8g2ejeylXIrjFU//F4RVJVM4EMOcx7LANd16O2w20qlVcXLoddZnVjHGa5TOcU5ESOJWw6KzuGpnLFN3r97TOPmRLD+tgKbl7uzRrR4MkxlZSVz587lnHPOwefzsWjRIv7xj3/w29/+tlW1t5dW/bTdf//9/Pjjj5x66ql061a3cOkZZ5zBjh07OPPMM/nVr36V1CKFEEL8JPr1IsKvz8ExZhzus85HM5oXaJQyUVa0kTsSGJ6Ot2vJxngJVv3blKI36xnOt/jsUxjkPinp57OUxcLYYt4Ov0u+kcev/D8n1+iR9POIrsGu6dyTNYIvwmWUmxGy2zB7WtM0Zs6cyR133EEikaBnz5784he/4LbbbmuHyluvVaHR4XDw9ttv8+9//5uPPvqInTt3kpWVxSmnnMIpp5yS7BqFEEIAyjSJzH2L6JcLcJ93Mc7jm+4J2ZMZLiW06XmsyA50dz5WuAQ0A1QCZ95p2PwD27Hy1tFVNZCFjsmx/BsDi/mcyXm6J+nn2m7uYHboVTabWznHPYVxjjHoLXzzLwmY/Ls4QiCm6J9hY1KBE0PvmLunfbsuynurI8Spoo9X5+oJbmxG++yY05XZNZ1Jnrw2HycjI4N58+YloaL21arQeNZZZzFhwgROPPFE/vSnP2E0869cIYQQrWOFQoReeAZz6xZ802/H1r95IU8pi2jZv4lsnYstfSj+gdPRbD4SNWtQ8Rp0dx42b/MW/z6YvoqVs5UM0tnJGD5hI8NYx3B6UMYAvXlLCTWHqUzmRRfwXuRDBu1aRidLb/mM1a21Jv/zTS2WVXfx/8edCdZXJZg+0tvhtt39cmWU2VvC4AR0k4qEyea5CX53lh+9mdtMikNTq0Kjz+fjoYce4p577sHr9XL88cdz4oknMn78eMaMGYPT6Ux2nUIIccgyt5cRnPkE2Oz47rwbI6t5+xmbkR2ENr2AGd6Gp8+l2LsdWx9gOupajFFl8nKomG/jOzmC7+nFcjYxlDBeDmcpQykl27H/JUtaYvcWgBVWJZd5LuIY++hWB7x3NoRJ7DFU1FTwQ3mCBVti9PR1rI6V1zaEwQFaBIiD8kG5V/H9pgQj+7fPkkWia9DUnitzt9D69etZsGABn3/+OQsWLGDTpk3Y7XaOOeYYPv/882TWmVTl5eXtclzDMMjMzKSyshLTNNvlHKng9/u73IzBrtpWIO3VmTSnreJrVhJ8fib2gYPwXHY1WjP+KFfKIrbjC8Jb3sLmG4Cn7+XojoOz3ltb2mpzIsQzoQ3EVZBR6gOGO4aQaRvCxsi7xFUAv9Gb4Z4rcLWiJ3BPdVsAfsIn0X8zyn4EF7rPwa/7D/g8v99PdU0N1VHF9pDJ9pDFjpDF9pDJ6p0JEo28m3aIPsYYaDWgVYNes+vftaAl6u5WgPKCMwN69jbo3ctgcF87g3obHe6SdXZ28mfK7097/R71+w/8vdZRtWna2cCBAxk4cCATJkzgs88+48UXX+Szzz7jyy+/TFZ9QghxSFJKEf3830TmvoXzpMm4Jk9Ba8alQytaQWjTiySCm3D3vgBHdvvsjpJMSinmx7bzZngzfbRSjlCLGem9mO72IwDIdYxO2rk2JAqZHXqFaCNbAO5ZTyCu6gPh7nBYHglSGogTt8DQINut092j08NjEIorNlWb+85L59dj/OR6D05PYyKuKCszKdlqUbLNpHSbSck2k5pqha5D9xydvHyDH+xxQoPAygDsdQFSrwZfTGdbocmmb00+j8dQBtgzIK27Tk6eTt/eNob1t5Gf3Xh02Lw9wT++DFDrACMBJ+c5OeuY9tn7W6RGq0LjqlWrWLBgAfPnz2fBggWUlpZy2GGHMX78eG6++WbGjx+f7DqFEOKQoRJxwq+/TGzZt3guvxrHkQdeuFopRax8EeHNb2Dz9sZ/2H0YzuZdxk6lgJXgxVAhqxNVjGIxIw2D4Z57cCZx3CJAREX4V/g9Po8t4gTHcZzrngqmi+KaxF49httDFttDFuGEQgOyXLuDoc7wXA9pepweHp0sl77XJJdg3OJ/vwmwM2yhaxC34LxBrnYJjJalqKywKNlm1QfDkm0m5dstLAvSMzTy8g3yehqMPsZBXk+DHj10bPa6erfsSPDAVwFwAApUJhydY+fKCd5dx7fYssNi9cY4RZtNykpN1i5LsHJ+gvctwAmuLI3MHJ38fJ0BfWz0zjV48KsApgfQIWGHD6uiuJbCqaMkOHYVrbo8res6brebq6++mjPOOINx48Z1uK1umiKXp1tGLnd2LtJenUdjbWXV1hCc9TRWZQXea6dh63XgSSpWrIpQ0Uskatfi7nkOjh7j0Vqx7EcytKSt1idqeTa4AV3VcBSfMNp9Mr0c4/fqGTUtxdrKBLUxRU+/0eLxgXFTsbh2PXOrvoFoFn3jRxKJeNkRsqiJ1b39pTk0euzqMdwdEHt4DLLdOnbjp1oO9LMVMxUrdsQJxRV90gz6pLd9DclgYHev4U+9h6UlJtEoOF2Ql2+Qm2fUh8TcfB2P58BtXxWw+GRFlAR2hubCkf0PXGssbrG2OMHaTQm2bDXZWWoR2qlQwZ8ucas0sHLA7AsoSAvC/zs3o61fhnpyeTq1WvUdPXXqVBYuXMg///lPVqxYwaJFi5gwYQJjx47F5/Mlu0YhhDgkJLZuJjjzSfT0dPx33oOe1nRvm1KKeMU3hItfRXfl4h9+L4ar468raCnFR9ES3otsoz8bOEYvYqT3ZnzG3kuXxEzFo0sDbKwyMXRI7Oq9O7mPa6/HmZaiImLV9xJuD5nsCFmUhhJURRTQHZsxmXyvA4/HoG+WwfhedeGwu8fAZUvO5XuHoTEyy044ovD5WnbM5l5aHj7CzsmnucjtaZCZqbV66EGGT+eSE30t+mPMYdc5fICDwwfsPVmmOmDx3MdB1u8w0WqB2K47tLpdfDqrzhzu2kurQuM777yDUooVK1awYMECFixYwDPPPENFRQUjR45kwoQJPPjgg8muVQghuqzY8qWE5jyP/Ygj8Vx4GZq96f2NrXgt4aI5xKt/xNXzTJw5J6Wsd7ElqqwYs4IbKTarOZr5jHEOZoDrLvRG9nP+sDDCpmoTBfUzk99cFyEUV8Qt6sNhedjCVODQqR9j6PCWE07/imxXjEszJzHE3bNdx3ZaluK9t8PMnxdDKUhL07h2upfefWwNHteWS8sdUbpPZ8pxLv76QxD2/Ba0oJ+nY80cF23TptnTu5WUlDB//nyeeOIJ5s+fj6ZpHfoSklyebhm53Nm5SHt1Hn6/n5rqaiIfv0/00w9xTTkH54STDhhuYhVLCRe/jO7IwtPvSgx32xcXTpam2urHeDXPhTbgUTs5jq851nsRWfbBDY5hKcX2kMXTywOUhhq+RaU5NArSDHp4jF2XkuuCYrpTo0pV83LoDVYn1iZ9C8CmfrYW/DvC3DcjWLvCraaB0wmXXumhqlIl9dJysiT75+rdJWHe3xmFXV/u7iGNX0/1J3UG9sG8PC0aalVPY2FhYX0P44IFC9i4cSN2u51Ro0Zx9913M2HChGTXKYQQXY4VjRJ6/hni61bjvXY69mENZ/Lu9fhEgHDxq8Qrl+LKm4Iz91Q0veP35CSUxTvhLcyLlTGYHxhvUwz33IVd96BU3aXlohqT4vqPBBET7I1kDQ24bJiHEd337pncvQXgW+F3yTdyD/oWgMu+jdcHRgClIBKBWf8M0SPJl5Y7qqlHuxlT62TdtjjdfDoDezbdW97RyZjGhloVGgcMGIDL5eLYY4/lsssuY8KECYwZMwaPJ/lbOwkhRFdkVVaw/bmnMcNh/Lf/EiMnt8nHx6u+J1T0EprNj2/YPdg8vQ5SpW1Tbkb5Z3At5VYt41jIKOMkIqERfFhmUlwToLjGJBBXeOwafdIM+qUbTOztpCC9bhmbB76uxbTqJloYGvT0GwzvtvdbVzK2AGwLpRSRSMMeUU2Dq2/wcPgRh86C2Vl+neOGyAYfXVWrQuOCBQs49thjcTgOnR8EIYRIlkThBoLPPoWjoA/uG29F93j3+1iVCBPe/Bqxnd/gzDsVV94ZaHrbZ+UeDF8GK3i1vARH0CQr7GNF6AY+j2o4jRC9/XWzi4/Lc9AnzaCbW2/Q85bhhLuP9fPBxgg1MYu+aQZTBrjrl7pJ1haAbbFpY4L3/hVmR9neKzTqOvj8GgMHde7eNiH21KrfPOPGjUt2HUIIcUiIfr2I8OtzcIwZR/fLryYQCu33sfHqVYQ2vYhmuPAN+wU2b5+DWGnLRBKKLbUmmwMxtqyMsGxHDdGIgabl0s0bZkBGJn3y7PRJrxuHqDfz0mxPn8H1RzQM1cncArA1SraZfPBOmJU/JBh1tJ17futm1Y8JPpwbIRaD3HyDK6/z4HJ3rUvQ4tDWOf5cFUKITk6ZJpG5bxH9cgHu8y7GefxYNKPx8YjKjBDe8iaxHV/izDkJV88z0fSO02MVNxVbA+aucYgJimpMyoIWmgbdvRo1nhpUTjXHe5cyJXs8WY7Wh92iRDFzIx9SY9XQx1bAVOdpzI8trN8C8BbvDc3aAjBZdpabfPRehO++iTN0uI27/sNPfq+6duzew8b4SS4sS6HrEhZF1yOhUQgh2pkVDhF6YSbmls34pt2ObcDA/T42UbuOUOELoGn4hszA5h+Q9HqiCcXikhjVUYt8n8HoHPt+e/5MS1ESrJugUrTrY1vARCno4dHpk2YwrqeTgjSdYkcFb8WKyaGIKQ6Lw90XY2itH9+2ObGF/w08gtr1X0msjK9jS/BqXm7wXs0RjWwB2F5qayzmvlXJ5/8OUNDX4JYZPvoNaPwtVAKj6KoOydDocDhwOpM/UHf3pRGv10sSVjLqMGw2W6ee7dWYrtpWIO3V0cRLSyh/7CE0m43c++7Hlt29/r4928oyo1RvfI3Alo/x9TyZ9AEXoxvJ/z0Vilv8z2dllIfqll22FKysdHPLMd1QQGkgQWFljMKqGIWVMYqq4sQtRXePQd9MB2ML3PTLdNA3w4F71/TmkJXgqZ3LWR6p5EhtOZflnEoPx8g2t9W/y7+oD4wAFhYWcFnmRYzxHtumYzdXOGTx4Xu1zPuolu45dm6+M5vDj3B1iZnPnfnnqqt6/fXX+f3vf09hYSHZ2dn89a9/5fzzz091WfUOydAYi8WIxWIHfmALGYaBw+EgGAx2ubXkuuK6f12xrUDaK9WUZaHpdWEqvmYlwednYh84CM9lVxN2OmGPttndVonARkKFL6BUHO/g27ClDSEYivHT1hrJ86/1YXYEE5h7ZISvt4bZUr2NirBFxKxbB7FPmsGQDBuTCzwUpBn4HHvORo6TiMSpjUBhPMA/Q6swVQ1nG8VMSLucXF/fpKz9VxWrqg+Mu9mwEYgEqLXa93s8HlN8sSDKvz+K4vZoXHiZm3ETsggGAwQCgXY998HSmX6udmuPDp+OYt68ecyYMYM5c+YwZswYysvLO9z32iEZGoUQItniP64g9NpLqEAALT0D+2FHEFv0Oc6TJuOaPKU+SO5JWXHCW94mWvoJjuwxuHufh2a426W+6mjdWojLt8f3CoxQt/ZhmkNjan8PfdJsZLgOvFyNpRQfR4qZG91OH9Zzviuffs5rsCVpZrepTNAa9n6ZmBQY7bfckGkqvlkU4+MP6hbqPv0sF8eOcWCzaXLZWTQQNxVfbA6zI2TS3WMwrrd7r/3KW+J3v/sdv/vd7xg7diwAPXr0oEePjrUtqIRGIYRoo8SmjQSffapuRWdAVVUSWzgf1zkX4DpxUuPPCRZTuupFzFgA76CbsKcnb3xeMG7Vj0EsrklQXGNSFVU4DXDbNDTYq/9O0+DEXk5G9mjeMmq1Vpx/Bn+gyIwwVlvNmb7TG+wb3Rbl5k6eC71EmbWdXno+W6xtGOhYKC5xn09+Es+1m2UpViyN88HcCMGAYtJkJ+MmOHE4JCiKxsVNxQOLKthc89MO24u2hLl7TFaLg6Npmnz99decddZZDB48mEAgwGmnncZDDz1Eenp6sktvNQmNQgjRRrFl39Ulrz3HhRkGNHLJT1kJIiUfEi39EE+P47HlnYtua/3GCLuXuinaNYu5uMakPGxh06GXz6AgzeCIAXVrIeZ4dUJxxX9/XUtNVGEp0DUYnGVrsMPK/qyKV/BscC12qrjCEWe0+2eN7hvdGkopvoov4bXQW/Sz9eU+/y/xaz42mcXUWgHyjVy6G8ndRk4pxZpVCd7/V4TtZSYnTnQy8VTnQd3OT3RMN75b1uLnFFYnuOWD7U0+Zs6lDcecl5WVEY/HmTNnDvPmzcPn83H55ZczY8YMZs6c2eI62ouERiGEaCvLZK895KAuRO5zmxnaSmjT81ixajz9r6dbwbgWjT9taqmbfG9dQDylj5M+aQZ5PgNbI5dTfQ6Ne4/zs2BLjJqoRZ7P4IR8xwHXTTSV4q3wGj6L1TKYQi7xjKaHY0izaz+QoBViTvg1vo+v5Fz3VMY7xtbv6tLf1jdp59nT7oW5N200OW6sg+tv9pKWLmFRHHy7d9S77bbb6NWrbvjFr3/9a84999wUVtWQhEYhhGgj24BBxL78fO8bTQv70OEAKGUSLf2EyLb3sGccgXfQbeh2X5PHrFvqxqoPh8U1JlsbXerGoJffwNGCy2Eeu87p/VzNfvxOM8KTgWXsUAlON0qY7D0Hu568bWPXxNfxfGgOXs3DPf472+Xy8572XJj7yKPs3PNbD9ndO/4e3qLrysjIoHfv3h1+Vr6ERiGEaAMrFCQ67yO0jExUTXVd76LdgefyqzHye2GGS+t6FyM78PS7CkfWUQ2PoRTbQ3XjEHeHxC21JnELurl0CtIMjsqxc94gF73TbLhtB++NZUl0C7PDW0hnJze5ujPIeWHS3tjiKsE7kff5d3QBk5zjOct1Bnat/d6WmlqYW4h9PTU1p8n7GxvTWJBma9WYRoAbbriBRx55hClTpuD1evnLX/7C2Wef3eLjtCcJjUII0UpWKEjwiYcBUNNv4cONpQRqY2RmODlt0ACs0nlEtr6DLX0o/oHT0e1pKKWoiNTNZC4tqmJ9eZjimsReS90M72bnjH6uRpa6OXjiyuKl4FK+SZgcqW3hUu9EvLbkjSfcZpYwKziboApxm3caQ+yDknbsfdXWWHzyQYTFC2P07tP0wtxCNJfd0LhnTBZfbA5THjLJbuPs6fvuu4/y8nKGDx+OzWZj6tSp/PWvf01y1W0jPzVCCNEKewZG82fX8JcVCUKqAAuD7JrtDFn2MD0dO0nkX06xMZLiYpPimgDFNSaBuMJj1+if6aRfusHE3nWXmZuz1M3BsC1RzZPB7wkqk4sdCca5z0fTklObpSzmxxbydvhdRtiHc6n7QrxJvNS9p3BY8dknET7/d5Ru3XWuvtHLsMNsHf4SoOg87IbGpL7J+f612Wz8/e9/5+9//3tSjtceJDQKIUQL7RkYvdNv5+01GwirfCx0hthWkW9s493wFHaE8glX2HEaIXr7DQrSbByXVzeTuZtbJy0trcMtxP5ZeDVvRavIoYrp3sPIs/dL2rGrrRpeCL3MxsQmLvVcwHH2o9slwDVcmNvDkUfZZZ1FIdpIQqMQQrTAvoFR93ipiYGJjlcLsj4xiC1mb0LKzXB/Fece1pccr37A2cmpFrZiPBP4ijWWg7FGBRd4T8GmN3+yzIEsj/3A7PAr5Og9uNf/c7KNbkk79m6mqfhmcYyP32+4MLcQou0kNAohRDPtGxhxe1hSGmNVKA8Di5GOZWyO92az1QcNi2O6m+T5Ot5EiyWRH3krsp0QDroR5iRnDu9EK7Ewud7lZ6RrStLOFVVRXg//i8WxbzjDdSqTnSdhaMn9mliWYsWyOB+8s2th7lOdjJ3gxOmUsChEMkloFEKIZtgzMLqn3cZ3NXbeX1ZLZdTihPQyjo2/yBvh8yix8tGwGO3bwui+h6e46oZ+iK5jViSIom7JnwjVvBQN0VcLcL3vBNKNjKSda1OiiFmhlwD4ue9W+tr6JO3YULcw99pVCd6ThbmFOCgkNAohxAHsDowWGmvPv4UPlltURkNM6OVkrPsrbGVv4h58PROq3YwIlZHjczO81+Hojew3nWqfRYpQpOEiiIswNWTRjRKGGjlJC4ymMnkv9BHvhj/keMcxXOA+G6fmbN2xTMX6tQkCtYr8ngZ5Pet6KfdamPsEB9fd5CU9o+N9vYXoSiQ0CiFEE6xQkNonHmFF+kA+G3IKlRtNJvRyclIfJ47KBYS3vIGn//U4Mo9gVGaqqz0wTdXQn61soT9xHLgIsZNcYlrDLQ9bY4dZzl+3PsrWaAnXe65kpGNEq48VjymefDTApo0mhgGJBIw/2cHO7VbdwtyjZWFuIQ4mCY1CCLEfiWCARS9/wLxBF1PtyWRCj7qw6HfoRHd8QXjzG3j6X4Mjc2SqSz2g6kQhq8OfEsDHZobhJkiQNEADLIbbc9t0/Pp9o8NvMdg1iN9k3I1fNb3rzYF88mGE4k11u+Akdq2fvODTGP0GGMz4Dx89e8lbmGg/fn/DPaIPdfITJ4QQ+7CU4tviAO99X051zwmML3By8gAf/l0LbUfLFxEuegVPv5/hyBqd4mr3TylFRWIVhZGPWGOGWc4EfJqbQVSxTtW9IWpYnOWAwY6+rT7PnvtGn+c5i/PyzqK6qhrTbFvvZVFhgn0PYRhw7BhHhwyM1SvjbJ0bIRFU+AYYFFzoxibjK0UX0vF+6oQQIkUspfiuLM77G0JUBuKMqdnE5KnHkJ7+U49ZbOc3hDe9hLvvZTi6HZvCavdPKYvt8WVsin5EpbmDjfoZrCaDk525THHlY9d0ShM7KDer6GXLIcNIa/W59t03urejF3qSFgL3+hrOflYKvN6OF8SqV8VZ948gqLrPK6sswttMhv3Sjy5L/oguQkKjEOKQtzssflAYoSJsMaZ0KePKl5Nzw43oHm/942IVSwkVPo+74CKc2WNSWHHjLBWnJPY1m6KfELOqsewns9DqiQ2DGb5+9Lf9FH5zbd3JtXVv9bnae9/o2lqL8u1qr9sMA/J6GgwZ3vHeuko/jtYHRgBlQnirRWBDgrQh9tQVJlqtvRbe78yXvTveT54QQhwke4XFiMX4XJ3jvnkWnxmpX7h7t3jlCkKFM3H1Pg9njxNTWHVDCRVha/QLiqLzUJjkOiay1BrEwngVExxZnO3uiSOJayOWmKU8G3yx3faN3rbFZOaTAXx+nem3eVm8MEZNjUVBX4PJU9wYrdzbN9kSQYvARpPAhgTBTYmGD1BQ+mkUMwr+QTZs7o5RtxCtJaFRCHHI2TcsTujlZGIPE/2ZRwAaBsbqHwlu/Ceu/LNw5UxKVdkNxKxaiqOfsSW2AAMnfV2nEtVHMju8FYsQd/iGMMiWvF4NS1ksiC3krXbcN/r75TFemhXi8JF2LrrMg92hMWho6nvqlFJEyhPsXB4jsCFB7cYEkRIL3QHefjY8vQwCm0yw9niSBioBhc8GseLg7WOQNtSGf7ANXz8bul1CpOhcJDQKIQ4ZjYXFk/o48SbCBJ/YT2CsWUNw/VO48k7HlXdqqkrfS9iqoCjyCdtii3DpWQx2XUA3+2jei5YxL7yRExzdOc/dC1cSexfbe99opRSffBDl4/cjnHGWi4mnONtlX+pm12MpwiUWgfUJAhsT1G5IEK+qxubX8A+w0f0EB77+Nty9DHRDw4or1j8ZpGZVAjTQDOh/rYfMkQ4sUxHcZFK7JkHNmjilH0XRDPANtJE2pO7D3dNAk72xRQcnoVEI0eXtLyz6HXqje0nvlqhdT3D94zhzTsKZd3qqyq8XMEvYFPmYsvgS/EZvDvdcQ3f7CIrNMP8TWEtEmdziHcQwe3pSz7t73+geevd22Tc6FlPMeT7EmpVxrrnRy/ARB79n0YorgkV1l5prNyQIFiYww+DsruMfaKPnVBc5R6ST8IQbDbO6XWPQLV7CW00SQYU7z8CeVjdhRzfqgqZ/gI38KS7MiKJ2fYLaNQl2fh1jy1sRbD4N/+CfQqQzW9aeFB2PhEYhRJfVVFiEhntJ7xUYAxsJrPsHzu4n4up5Vkp7vaoThRRGPqI88T1ZtiGM8t5Kpm0wJoq5kRI+jpZwjKMbF7h649GT92v9YOwbXVVpMfOJIJGI4vZf+snNOzhhac/xiLUbE4SKTZQFnt4G/v4/9STuDn4AHr+d2trIfo+paRqeZiwFZLg0Mg63k3G4HXATr7GoWZOgdm2Ckg8iFL2kcHTT6wLkrsvZdl/HmzEuDj0SGoUQXc6BwiIcIDAGiwisewxH9nG4ep2XksC45xqLVeYGethHcqzvbtJ27d+8xQzxfLCQWpXgRu9ARtgzknr+9t43Guq2Apz1VJAeeQbTbvPibadgpJQiVqkIbEgQWN9wPGL6UDs9p7rw9rVhOA9+W9vTdLod46DbMQ6UUkR37AqRaxIUzQljhhSeXgb+Xb2QvoE2DIdcyu6qysvLGTp0KAMHDmTx4sWpLmcvEhqFEF1Gc8IiHCAwhrYQXPsojszRuHtfeNAD455rLAbMEvIcxzLMcxleIwcAU1l8FC3lg0gJR9ozud1dgC+JvYumMvkoOo/3Ix9znONoLnSf0+p9o5vyzeIYr80JcdwYB+dcmNwZ0fXjETck6i83x6sUNr+Gr3/D8YgdiaZpuHoYuHoY9DjRibIUoc0mNWsS1KxJsH1+FABfP1t9iPQWGGgd7HWI1rv77rsZPnw4sVgs1aU0IKFRCNHpNTcsQtOB0QyXEFz7CLaMw3H3uRQtSYtUN+817L3GYk/nOEZ6p+PSf9rQusQM83yokAorxjWefoxyZCW1hnJzJ8+FXqLM2t7mfaP3x7IU774V4fPPopx7kZsTTmw6kIa3mWz7IEK82sLb1yB/irtBb2BT4xF9A+rGI/oG2HB211M6zKA1NF3D28eGt4+NvMlgxRSBwgQ1qxNUfR9n27sRDCe7xkPa8Q+x4crpfK+zs4rHFYu+CFO+wyS7u8GYcW7sbZgVP3/+fNatW8f111/PE088kcRKk0NCoxCi02pJWIQDBMZIGYE1f8eWNgRP358dtMC47xqLvZ0T6eU4EYf+00LcllLMi5YxN7KVw+zp3OwdhF9v/WSRuErwXXwZNVYNeUYuw42hfJ34ltdCb9HX1od7/b8gQ0/uZBqAcFjxwswgm4tMpt3mZeDgpl9DuMRk5QO1KBNQ1M1AXm8ycLqHUJHVcDxiL2Ovmc17jkfsKnSHRtoQe/2C4YmgRe26ul7IsvlRil8NY0/Xdo2HtOMfbMOR0fDrkAhalC+PU6VVYuTF8fTtel+r9haPKx56oIKtm39ao/PrRWHuvDurVcExFotx22238cILL7B06dJklpo0EhqFEB1abcyiKqbQ3T/9Ym5pWIQDBcYddYHR1x9P36sOSmCMWbWsrP6QDbWf1K+x2NNxAsY+l4K3mxFeCBVSYkW4wtOXo+1ZbepFiqoof619lBKrDB2NOAmytExqVC3nuqcy3jE2adsA7mnHdpNnnghi6HDn3T66NWN2cMmHkfrACHW7rISKTFbcV9thxiOmms2rk3mkg8wjHQBEKyxq18SpWZNg85thErUKV+6uSTVD7PgG2TDDilUP1mIGFZoewoorel3gIneSK8WvpmO5/cayFj+nqDDBz2/Z3uRjnp3T+Nqpf/nLXzjllFMYOXKkhEYhhGipTzZFeHt9BAVoVHPeIBdpTr1FYRGaDoxWtILA2r9jeHrj6X8tmt6+s3f3XGPRY8tmsOsCch1Ho++zBZ+lFAti23k7vJVBNh+/9h9Ghu5o8/k/iXxGiVWGiYm567YKVcml7gsY52yfrRHXrorz/DMh+g0wuPwaLy5X0+FOWYrQFpNAYWKvrfkA0CHvNCd5p7s63HjEjsCZpeMc4yR7jLNuQfISi5o1cWpWJ9i4KIiVAMMFZqju8cqs+wJveSNC5kgHzizpcUyF9evX8+yzz7Js2bJUl9IkCY1CiA5p1c54fWCEuuzwxroINh0m9W5eWIQDBMZYZV1gdOXgHXA9WhInlOyrsTUW+2edQCAQbPDYnWaUF8ObKE4EucjdmzGO7KSNUSuxSveIi3VsGMRVPCnH35NSii/mx3jnjTATT3Fy+pku9P0sYG1GFDVr4lT/kKD6xzjxGoUtTQONvYOjBZkj7RIYm0HTNNz5Bu58g5xJ1C8yvv6JIA3TOES3mxIaU+SLL76gtLSUwYMHAxAOhwmHw+Tm5rJ27VrS0tJSXGEdCY1CiA5pTUUCXQNzj/c2DRib7+CcQe5mHaPpwFhNYM3D6I4svAOmobVhjCBA1KphU+QjwlY5PiOPvq7J2DT3ftdY1DStwWVwpRQLY+W8Gd5MX5uX+9IOI0tP3szliIpQaVU3uN1CJX0MYyKheO2lMN9+E+PSKz2MPqZhL2lkh0n1DwmqfogTWJ9As0HaUDs9z3KRfpgdw6Wx5pEAwUITzajbkq/Xua5mrYUoGtq9yLi7p05gvbl3blRgb2Ts46Hs4adymry/sTGNvQpsrRrTeMkll3D66T9tIPDyyy/z3HPP8e677+L3J28r0LaSnzwhRIfkMDSsfTpDDA18zehdhAMExngtgbUPo9l9eAdORzPadtk3ZtXyVe2fiasQCpPyxEpKYt/g1rtRZW5ssMZiYyqtGLNDm9iQCHCuuxfjHN3Rk9S7aCmLRbGvmRv5EAMdF05ixLGwMDDoaxRwhP3wpJwLoKbG5B9/q6F8h8ktM3wU9Kl7q7ESdWslVv9YFxSj2y2c3XXSD7eTN9mJb4AN3bb3ax56p4+aNQkSAYU738DTS3ZKaave57tZ/b8BlEXdXtk6ZI9x4M6Vr21L2O0aM+7JYtEXYXaWm3TLbv3sabfbjdv90x/D6enp2O12cnNzk1lym0loFEJ0OKal2Bk29+oI0bW6j6NzD9wj2GRgTAQJrH0EzXDhG3QzmtH2nrzN0fn1gXHXWYiqKlxkMcb/m/o1FhujlOLr+E5eC20m33Bzr3843Y3kTUhYGV/Dm+F3qLSqOM11MhOd4wirCP+OLqDaqiHfyGWC88Sk7fSydUuCmU9sxuuDO+/249GhfHG07rLz6jgqXrfncvdxDjIOs+PKafq8mqGRPvzgbyvYlXl72xj+Kz87F8bRTTvOPhZZx0ocaA27XWP8JE/Sj3vNNddwzTXXJP24bSXfJUKIDqUmavHM90HKQhaXD3OzcGuM8rBFrt/BxUNcdPc0/Vd804ExRHDtI2iajnfQLWhG8y5zH0hU1ewRGOtoGHSzD2syMFaZUZ4ObmBVopqzXD2Z5MxJWu/iNrOEN8NzWZNYxzjH8Zzhmox/1zI+ds3OOe6pSTnPnr5fHuOlWSHGDHczKg+2PhUkVGRi82ukH2an3xUe0obaMdwyHjHV3LkGfS52kJmZSWVlJaZpHvhJ4pAnoVEI0WFsqk7w9IogGU6d/zjWT4ZL54SeTgzDaNabW1OBUZkRguseQykT35A70G3J6R0ImmVUJwobuUfh0/P3+7xvYxW8UlNMtubkV/7h5CYpwNZYNcyNfMii2NccZhvGff5fkmv0SMqx9ycRtvhiTpjt38Y51wn6sjC1lQbpw230udiNp7eBtp8JMEKIzkNCoxCiQ/hya5RXVoc5Nt/BRUPc2FsYMpoOjFEC6/6BMiP4htyJbvPt7zDNFrMCbIy8x9bYF2TaBmNoTmrNYjQMLBLk2o+hu/2IBs8LWHFeCRezPF7Feel9OZEsjCT0LsZUjHnRBXwc+TfdjW7c5p3GEPugNh93f3ZPYqn8Pk7NugROBYP6GRSMc9HnhO6EqZXeKyG6GAmNQoiUiluK19aE+WpbjIuGuhnbs+VjDJsMjFaM4PonUPEafENmoNvbNhPRUnGKo/PZFPkQp57BSO9NZNuHo5RFeeIHIlYlHr0HWbahDZbJWRGv5KVQEem6nXv8wxialkNtbW0b67FYEl/Kv8LvoVBc5D6XYx1HJX2B7sYmsdizdDbFFKV+jbNv9pLX24ZhGLgybYQrk3p6IUQHIKFRCJEyVVGLf64IUhGxuPNoH/3SW/4rqenAGCe4/mms6E58Q2egO1q/rIxSiu3xpayLvI2lYgx0n0O+Ywz6rgkkmqY32rMIELISvBbezJL4Tk5z5nGaKw9bEkLd2vh63oy8Q5m5g1NdEznJOQGn1rzQbcUViZDC7tf2e+k4XmNRvTJO9Y8JqlfFUTHwDaqbxBJM13nhtTA98g2uus6D1yfLtQjR1UloFEKkxIaqBP9cEaS7p278Ypqz5aGj6cCYILjxGcxISV0PoyOz1bVWJTayLvwmteYWCpwn0dd1KjateTOcV8areTG0Cbdm8AvfMPrYvAd+0gGUmTt4OzyX7xMrOd5xDDd5ryddb/7iv6XzImx5KwIWGG7of52X9GH2+p1Yqn9MUP1DnGCxic3XcBLLN4tjvPZ8iOPGODjnQjeGLLQtxCFBQqMQ4qBSSvH5lhivrQ1zYi8H5w9yY7RikkSTgVGZhAqfxQwW4RtyF4azW6tqDZvlrI/8i7L4UnLtxzDCex0uvfHwucUM8XpoMzutKHmGm7NcPVkQ286iWDknO3OZ6srH3sbexYAV5P3Ix3we+5LBtoH8yn8XPY39T7ZpTOXSGFvejNQv7GyGYd0/gmSOtBPYkCBeo/AUGKQfZqNgn0kslqV4540wn38W5dyL3JxwYvIWHheio+lIi2p3FBIahRAHTdxUzFkd5ruyGFcM83BcfusW1W46MFqECp8nUbsB35A7MVzdW16nFWJT9EOKo/NJN/ruWpi7YL+PLzMj/G/tKhIoFFCZiLEyUE2W7uAu31D6t3HiTVwlmB/9gg8jn5CupzPdey3DGxkzeSCWqdixONZwBzmrbmJLz7NcpA2340hvGG7DYcULM4NsLjKZdpuXgYNl7UQhDjUSGoUQB0VFxOKp5UECcYufH+2jd1rrfv0cKDCGN71IomZVXWB0t2w3BUuZbIl9TmHkfeyahxHe6+huG3HAcPZlbAcW7LVPtgac6OjepsColGJpfDlvR94jpmKc457KGMexB1yIWylFvEoR3mYS2mYS3vURKbNQiUaeYECPcU6yxzTec7hju8kzTwQxdLjzbh/dsmXnECEORRIahRDtbm1FnGe+D9HTb3DrKH+ztwKEugCkohGUUljBpgKjIlz8MvGqFXiH3IHhbv5lW6UUOxLfsz78FnEVoJ9rCr0c49C15v2KrLZimPt03xloJBp06TXfxsQm3gy/wxZzK5OcEzjVNQl3I+MozbAiXFIXCkNbdwXEEgszpNDt4MozcOcbZB/vwJ1vEA8oCmeGfjqABroN0g9vvOdw7ao4zz8Tot8Ag8uv8eJyyfhFcWho68oG+9OZL3tLaBRCtBulFPOKo7y9PsKkAidnD3C1aPxi/IcVhF5+HhUOU+l2o3m8aC5X44Fx8+vEdn6Lb/Bt2Dy9m32OmkQxa8NvUG1uordzPP2cp2PXm7fwd6kZ5pNoKd/FG64vY6Lob7S8l7Hc3Mm/Iu+xNL6Co+2juNb7M7L0TCxTEd5uEt66d+9hrEKBBs5sHXe+gX+wjZxJdUHRma03PjPaguJXw5ghhTNbp/81HhwZewd5pRRfzI/xzhthJp7i5PQzXeiyQLcQhzQJjUKIdhE1FbNXhvh+R5yrDvNwdG7Lxi8mthQTnPUUqLreOhUOo8JhvDc1DIyRLW8TK/+yLjD6+jbr+BGrkvXhdyiNf0MP+5GM8fwGj5HdrOcWJYJ8FC1hRbyKgTY/N3kG8mO8mvnxHWjUXZ4+x9WTwfbmz2gOWWE+in7KZ5HPGRwcyu0Vd+Evy6Jqm0nJtpr6S8s2v4Y7vy4UZo604843cOUZGI7mB7puxzjodowDZalGQ2UioXjzlTDffhPj0is9jD6mdWNPhRBdi4RGIUTSlYdMnloRJGrCL47x09Pf8jFw8e+Xg67DnruK6DqJdWuxDxxSf1Nk27tEd8zHN+gWbL7+BzxuQkXYFPmY4ug8/EZPjvbdRYbtwM9TSrE2UctH0RLWJGo5wpbBz31D6bdrzOJQLZ3RS7oRrEyQnmOn4LgD91YmwhbVG2L8ULyOzVt2kFnWn5+VnQBhnYAdEnnxvS4tu/MN7P7krYfYWGAM1FrMejrIznKLW2b4KOgjbxNCiDry20AIkVQrd8Z59vsQfdMNrjncg8feupCjlALL2vvGfSakRLZ9QLT0E7wDp2PzN71lnqVMtsUWsTHyLrrmYLjnZ+TYRx9wkoulFCviVXwcLWGzGeJoezd+7T+MvD32ijZjitX/V0ukpK7ecuJEvwsy6GYvmq5hmYroduunMYf1l5arUJoiluWhT34/eg3LxneKvelLy+1o2xaTmU8G8Pl17rzbT3qGLNgthPiJhEYhRFIopfhoU5R3N0Y4tY+TqQNc6K3cU9mqrsLcsK7+0vRPd1jYD6/bdSVS+gmRkvfxDpiGPX1Yk8fbGV/J2vCbRKxK+rlOp7dzAobW9JIxCWXxTayCT6KlVFgxTnBkc713AFl6wxnG2+dHiZRYqD06RWtWJ1j9UAArqoiU1t23+9KymRvix6Hfsbb7Ko7oNYjT/CfhaeY4ymSyLFU/TvH75TFemhXi8JF2LrrMg70Fl7uFEIcGCY1CiDaLJBTP/xhiTUWc60d4GNmjdWPglFLEv/uG8Fuvoufk4Tr/YiLvvQORMLrbg/eyKzF69yFa9hmRrf/C0/967BmH7fd4AXMb68JvUpFYQ0/HOPq7zsChNz1zMapMvoyW82m0lCgWExw9mODsgV/ff8iMbt87MNa9GLBi7HVpOeCt4Z3wO3wT/44j7SO4O/tmPOHm7SyTTEuXxHjr1TChkKJbtsagIXa++jLGGWe5mHiKs8XrPwoh2m7Tpk3ceuutLFq0CJvNxumnn86jjz7aoWZbS2gUQrRJWbBu/KJS8Mtj/eR6W7eGn1VbQ+i1OSTWrMR1+lk4x09C03WcY07ESCTIzM2lqqqKUOl8wpvfwNP/GhyZIxs9VtSqYWNkLltji8i2Hcbx/vvwGk2v2RiwEiyIbeezaBk2dE5y5jDW2R33AdZEDG1OENjYcPFDzYCciU6yj3cQURE+jHzKpzXz6WnkMcN3CwNs/fDb/NTSPst67M/a1XFefPanJXfKdyjKd8S45GdujjledngRIlWmTZtGTk4OW7duJRKJcMEFF/Db3/6Whx56KNWl1ZPQKIRotRU74jz3Q5DBWTauPMyL29a6HqrY8u8Iv/4yerds/Hf9CiOnLuApZRGvXEY8XkGAPkRqdhIuegVPv5/hyBrd4DimilEUnUdR5GM8RndGe28nyz64yXNXWjHmRctYGN1Bum7nHFcvjnV0O+CWf6HNCba9H6FqRYL04TbMmEWsxgJLQ9PB08dGxtEGC6OLmRv5EDs2rvBczFH2I1Pak/fVl9EGt+kGmI0t+i2EaJIVV5R9ESayw8TV3SBnnBvd3rqf78LCQmbMmIHb7cbtdnPBBRfwxhtvJLnitpHQKIRoMUsp3t8Y4YPCKFP7u5jcz9mq8YtWMED4zVeIf78c1+QpOCeegmbU9ewpZRJc9ziJmjWgGYQ2JwCFu89lOLodu9dxlLIoiX/DhvA7AAzxXESe/Vi0JoJfmRnhk2gpX8d2kme4+JmnL0faMw/4OvYMixkjbAz7Dx+OXvDYzqdxf9kDb3U61dk7iY7ZwRuhMJVWFae5Tmaicxz2A4yjTKZEXLG9zKJkm0nJNpPSXf+vrmq44LiugdX6dciFOCRZccX3D1QQ3PzTX1zbF4UZcXdWq4LjjBkzmD17NuPHjycSifDqq69y5plnJrPkNpPQKIRokVDcYtaPITZWJbjpSC+HZbcuCMV/XEHotZfQ/Gn477wbI7/XXvfHyr8iUbsWsEDtnkWt7fr4SUV8LesibxIyy+jjOpU+zpMxtP2PqSxKBPk4WsryeCUDDB/TvQMZZks7YO9fY2HR27vuV+inkflstBVijl+/13OG6oO5w3cTfr1te083RSlFZYVFyTarPhiWbDPZUWZhWZCWrpGXb5CbbzDqaAc1NRbvvhXZ5xgweKi8HQixp4U3lrX4OYHCBItu2d7kY06f0/gYxYkTJzJz5kzS09OxLIvJkydzxx13tLiG9iS/JYQQzVYSMHlyeRCbDvcc66e7p+XjF61wiPDbrxP/7hucJ03GdcrpaLaGv4qsSGnD2dOaXnc7EDTLWB9+mx2J78l3jOFI70049fRGz7nvGosjbBnc5RvarH2hmwqLu5WYpZjsPRPGwGCArW9SA2MotCscbt3Ve1hS14MYiYDTCbl5deFwzDhnXVDM0/H6Gva2ahq893YEywKXC668zkt2d9lPWohUMU2T008/neuuu44vvviCWCzGjBkz+NnPfsYrr7yS6vLqSWgUQjTL0rIYz68McXi2nSuGeXC2YvxifM1KQq/MRnO68N3+C2y9++z/wTY/NLJ3c8LuZk3oVbbEPifTNpjj/b/CZ/Rs9BDNWWNxf5oTFrcktrIo9g3fxpc1eox0rfEQeyBNXVrWdcjuoZOXbzB0uJ1Jp7jIzdfJzNKbvc3fxJNdjBvvJBhU+NM02R5QiBSrrKxky5Yt3H777bhcLlwuFzfffDOTJk1KdWl7kdAohGiSpRTvrI/waXGUswe4OLlPy5dkUZEI4blvEvvqS5wTTsZ12lQ0+/4va1vRCuIVS1AoFHUXpE2gNMtih+tTXIlMRnpvIts+vNHn773GYpQxju77XWNxXwcKi0ErxJL4dyyKfcMWcyuDbAM433UWH4Q/JbgmF1XlQ8uuImdwhGMcRzX9dVGKip1msy8t5+br9MgxsLdyoP2ebHaN9AwJi0Lsz9incpq8v7Exjd4CW6vGNGZnZ9O/f38ee+wxfvWrXxGPx3nyyScZObLxFSJSJeWhce7cucybN49NmzYxZswY7r777vr7ioqKePjhh9m0aRM5OTlMmzZtry/gwoULmTVrFhUVFQwdOpQ77riDHj16pOJlCNElBWIWz/4QorjW5JYjvQzt1vLxi/H1awm//CIYOr5b78LWt+kt++I1awltfIa4083KPhpZtQpThwo/mLqih20oh3uvRW9kKZx911gc7+jBxAOssbhbU2HRUharE+tYHPuaFfEf8Gk+jnccw/WeK+luZGOaih+ePowNay003UKZOn2Ps2G74qcaG720XFJNJKz2vrQ81klez/1fWhZCdAy6XWPEPVl1s6fLTVzZbZs9/eabb3LXXXfx0EMPoWkaxx9/PM8991ySq26blIfGrKwsLr74YpYtW0Zt7U/rlSUSCf74xz8yefJk/vznP7N48WL+/Oc/8/jjj5ORkcHmzZv529/+xr333svw4cN5/vnneeCBB3jwwQdT+GqE6Dq21CZ4ankIt13jP4710c3dsjFvKhYj/N6/iC2cj2PsBNxTzkZz7H+CilKKaNk8IlvexpkzibJuJrHYAkqz9rxEreMyshoExtausQhNh8UdZjlfxZawOPYNARXgCPsIpnmvY6htEPoeM7MXfR5j0zoFloay6s753Vcm0VCQRIL9XlqecpaP9Mxoiy4tCyE6Dt2ukTcpObs5HXHEEXz66adJOVZ7SXloPOGEEwDYuHHjXqHx+++/JxqNcuGFF6LrOieeeCLvvPMOCxcuZOrUqXz22WeMHj2aUaNGAXD55Zdz5ZVXUlxcTEFBQUpeixBdxTclMWavCjGqh51Lh3lwGC0LNIlNGwnNeR5MC+/027EPbHqtRGXGCBW9SLzqezz9r8ZM70NVaCaw997TGuAz8us/b+0ai7D/sBhTMb6Ofcui2NesS2ygl9GTU12TONo+Gu9+tvor2WZi7rMjjFJQUmJx+BF2jjzKQV7PhpeW/X43tbWyQGJXEfuujMjcDahQHKNfOp7LhqGndcwF02OLtxH5sJCqqIUxMAPXJUPRvQdvSSjROaU8NO5PcXExffv2Rdd/+uXfv39/ioqKgLpL14MGDaq/z+PxkJubS1FRkYRGIVrJtBRvrguzYEuM8we5mdDb0aLxiyoeJ/Lhu0Tnf4rjuBNwn3kemqvpbfLMaDnB9U+BFcU15FaK9BUU1z5PutEHrzGEb003QdLwUsPxdoM8+7GtXmMRGg+Lnl4Gm8xiFoe+4dvYUnRN5xj7UZzvO5vetsYn2UDd3s2rfkiwdnW8wX2GAZNOdnL8uI4ZGkRyxb/fQWjm9/VztxIrdxL427f4f3Ucmr1jzUyPfVNC6MWV9bWay7dj7gjh++UxaIYMiRD712FDYzgcxuv17nWb1+tl+/a69Y8ikUij94fD4QbHKikpoaSkpP5zp9NJfn5+g8e1lbFrUeLd/+8qNE3rcq+pq7YVtL69aqIWTy8PUBo0ufPoNAZntazXIVFcRGD2LFQkjP/GW3EM2/+e0LvFqlYSWP9PdF9fqnoPZmP0Seyal5H+60mzHc5/V/9IORFMFAYaO0wHS0OFrIhXMtDm5xb/YIbZ05sVbIObE2x9N0Tl8jgZR9g5/N50zF5hvop+yZeBrygztzPMPoSf+S7hCMfhTS7EHY0ovl4cYcG8CFWVFiNHOVgVjRGNgGnWBcZu2TrHjHFjNNFLKz9bnUtT7RWYV7z3ZH9TYZWFiLy+FqOHt9HnpEr406IGtZqbazE3VOEYmt2mHYsS2wKYm2vQfHbsQ7tJCO1iOmxodLvdBIPBvW4LBoO43XVLZbhcLkKh0F73h0Kh+vv39MQTT/CHP/yh/vP77ruP//qv/2qHquukpaW127FTxdHEWLTOrCu2FRy4vUxLUR01SXMY2AyN9Tsj/N9XpWS6Df5yei+6eZr/q0ElElT86w2q576Ff8w4si+/GsPb9JukUorKjW9Ts/5lEv2PZaOjmGjsE0Z0u5AB6adiaDberdrETiu6a/VDDRPYacVw2xz8oedxDHZnNqu+msIo61+vYPuSID2O8nLs/8tmY85a5tS8xdLKFXSzZTEp/URO9I8l296tyWPtLI/zyYfVzJ9Xg82mcfLkDCadmk5amkFVVYK5b1ayY3ucnr0cnHleJp5mrGMpP1udy+72MmuiRDZWEN2wk+jGShIbqxp9vLWhBsoijd6XMqGGPeMAgb9/h+Y0sHXzYu/uwdbNgy3biy277t/2bC+2bm40W+Pf11Xvr6H6uaVoho6yFM4BWfT89SR0V4eNGqKFOmxLFhQU8Prrr2NZVv0l6sLCQsaPHw9Anz592LhxY/3jw+EwpaWl9OnTcN236dOnc/bZZ9d/7nQ6qaysTHrNhmGQlpZGTU0N5r4DnDoxr9fbIMB3dl21reDA7bWsLMbM72uJmWBocHSug29LYxyX7+SS4V70aC2VDbcnblRi2xYCs2dh1dTgv3YajsNHUhOLQSy23+coM0JgwyyqwivZNiCPapbQx5hEf9/p2JWXmqq6sc1bApWY+6zTqANDdR/dI1AZafpneN+exdx7Enzb4yMejy4hXBJhtHMkd6TdxEBb/7pJLQGopPFjFhXGmf9phOVLY+TlG5x7oYdRRzmw2TVMs4bdv06mnmtj96/VaLSG6AG+jvKz1TlY4QRmcTV6SYTQuh0kimqwdobBrmPrnYatTxr2w7OJf79j72G4dh3fHaPRM5oeonGwBV5ZRXTBZjD3+Ply6qTdfjQqnMCqjGBVRIhUhLE2V2JVRLAqI3V7TWqgpTkxslzoWW70TBd6Vt3rC72yGgCVqPsiRDdWsO2FJXgvGJK02jMzm/fHomgfKQ+NpmlimiaWZWFZFrFYDF3XGTFiBA6HgzfeeINzzjmHr776iqKiIsaOHQvUbbfzi1/8gmXLljF8+HBmz55N3759Gx3PmJeXR15eXv3n5eXl7frLbPdr6iqUUl3q9eypq7UVNN1eW2tNnlpWW/++Zir4qiTGxN4OLhziBmU1mNDR6DlMk+i/Pyby8fvYR4zEO+02dK/vgF9LM1JGZeHjbE6rZWe3GD3sOYxxTcNjZIOqa49aK84XsR0sipaDpTj8xzhjvowQc+p8MNVDjwJnk+fZc8yif4RO7K5C3urxBZvMIvrG+zDVdRqjHUfi1ure6JSlGuzmAtQto7M8zoJ/RyneZDL8cBvTbvMyYJBt1+W75n2tmiI/Wx2PipmYW2oxi2tIFNdgFtVgbQ+BpmHvnY7Wy4vztL7YCtLQ87z1l1+VaRF69gfiS3dtIefQ8d4wEuW3d7ivg+usAZhlQRIrdwKguW14p49E71vXO9xYP6KyFKomWh8gdwfLRGkAa1U51o6GQ8MwFfGNlR3u9YvW05Tad5+ug2v27NnMmTNnr9tOOukkZsyYwaZNm3jkkUfYtGkTPXr0YPr06Xut0/jFF18wa9YsKisrGTJkCHfeeWez1mksLy9P+uuAur+wMzMzqazsWj8kfr9/r5ntXUFXbStour0+2hThvY0REntPSmZ8LwcXD23eshFmWSmhOc9j7SzHff4lOI4c3aznhau+ZWPlc5RlWPiM3gz2XECGbUD9/SVmmH9Hy/gmtpMM3cH4RCaDHliDO6QwLDB1MO0amb8+AXtWw2Eoe4ZF2+Ex1p70DYt6fIFLc3Kc42iOdxxDrtH0Yr0A4bDiqy+jLJwfJRhQHHO8g3ETnXTvkfwxevKzlVrKtDC3BTCLajCLd31sC4JS6DlejD5p2ArSMPqkYfT0kZaV0WR7KaWwdoZRwQRGDw+aO+X9MvullEKriOKzewi5Taw2LhgfX7WT4KNL975RA/vIHnhvOKJNx95TdnZ20o4lWi7loTEVJDS2jLyxdS5NtdfHhWHe2RDd6wqarsGJvRxcNKTp0Kgsi+iCfxP54B1sQ4bjufBSdP+Bx62ZVpz/3959R9d11vn+f+92+pF01GUVF9mSe4kTtxQnNgkphIRAQggwEAgwAxcGmMn8gLkzAwz3l8udsrIGMj8yc4cpMENPSAhhEqcQJ44T927Lli2rW72ettvz+0OOEsdF7pLt72straOzdXTO95ydrXz87P18n6auf6HR2IWhh5kevY/SwNVomoZSir3uIC9lO9jnDlJjxrkpWMIcMxf7uQYyv2s49hSaAaHbphG69e0G4e8Mi9k5fbx54wscLjvAXHMWy4JLmGPOxDiNfo3dXR6vvZJl43qbcETj2pVBlq4IEIlcuAv55di6eJSv8DuSeI1HRxCbBvFahsH10QvDGEfDoTk5B6MyjhY8PvBdbvvrfO4r5fkMP7oZr2lw5JjVAF0j9vASzIr4+SkYCY3jbeL+M0gIcV71ZXx2drvv6nw40k9wcckYE2e6u0j99Ed4R9qJ3PsA1lXXnNYMy67MVvYP/xjbylKlL2NK7ocxNAtb+WzIdvP7bAddfparrXy+FptNhTkSXL2uFM6+3mMDI4AHmTWNuA0D+LEIfa0BBlqCdM7s5dXPP4dV4bEssISHAh8mRx870CqlOFTv8erLWXbvdKicbHDvAxHmLbROOetZXFzKV+D4aMHTG+19a8TPaxx8OyQ2D0HWQ8sLYlblYM0rInRHNUZVjvQnPA80Qyf2xavIPHsIt2EAPSdA8L1Tz2tgvNgu1D8Q4vFL9zOR0CjEZU4pxRvtNr+qS1MRN3hwboSn6tP0ZhRxS+MjsyJMyzvxnwLl+9jrXyX9zFOY06rJ+dNvoOeNfSH6sNfG/uGf0usfojgTYUbBnxIOT6Hft1mbaWGd3Y0GXBco4oZgMXHNxG9Pktl2CHt7J37rMFoiOLru9Gg9gDZvEr0NGcyeAULmELkoKvYrFg1cQ2hSAmNSDKPcxp+UQUuceJ1s11Vs3+Kw9qUsba0e8xZafOErMaZMkz+JE03m5SYyT9WD66Plh4h+ej7m5GP/QeD3Z0auQTwaEr2mIVTKQYtaI6OH0xOEVk8eCYi50jfzQtECBuG7Z4z9QHHJkr+QQlzGBrI+P9mboq7X5f3TQ6ysDKJrGotLA/hKnbIZtt/bS+rnP8ZtbiR81wcJLF0x5uhi1h/kUOYZWrPryU3BQns2BVWfpkW5vJQ8xBanjyI9yF2hchZb+RgtSZxtjQxt68TvTGFUxglcVYL14DwOpwfg73op4AgKGAxaNEbKiGwqpmlmHb0PNDBv6nQWZGditNv4bcN4bcM4O7vIPHcYbA/CJkZZdCRIToph50fZ1BDg1fUetq1YuiLIJz4bJT//yuol57UOkX66Hr8/i1ERJ3z3DPT4xGv9Y286QuaJ/aM9BVVfhuF/2EzkIzPxu9KjE1XUoA0hY+T6w6ocAivKMSbnoOeHzqnnoBDiWBIahbgMKaXY3OHw831piiM6X1sapyR67Km9kwVGpRT2hvWkn34Cs6KK+J98AyP/1P0LPWXTmH2JxswaQl6AmiNQWHAX+8sX8+NUA/XeMLPNHP4wXM30FoW7rYvM9jpUbwZjai6Ba8uxFhRjFL49waXpyQYieikt8RCZaJaCtnL6Kg9Sv3Ivd950LUXG0pEHBoA4UJP/9nvwFX5veiRItg6TPDREZnMT4XSaRcCccJDQlBiWEcM4GMNLx9FLImjm5R8evSNJhv52I7g+KPCPJPEO9hP/+tITXsd3NpRSKMdDZV2U44Hroxx/5Nb1wXnX7Um22xvbj21CrYCsR+pHe0avQQwsKhkZQSyOoMn63UJcUBIahbjMDGY9/mVnil1dDrdXh1hdFcQ4zf+Z+gP9pH7xX7gHDxC+4y4CK25A008epJTyaXc2cjD9G8BnymA+kb4ku6Z8hh9qGgOpQyw18nmgPZfYjgGc7TtIDtmYM0ZOF1oLio7pYeemfIYOuAzWuYS2FGL4JpoXxA4O01nRTPHhSnImBykyTn0xvKZr6AVh6rss1jZEqNubz7TpBjdcb1FbaBM5MhImveYh7DfbR0aqdA29JDI6KmmUxzEmxU56ivtEvM4Ufl8Goygy2rtuIlC+QmVcVNol/czB0cAIjKxc0pMm9ZO9GGWx0RA3GvTGCHbHbXd9etzTmF9p6WDqI0HdetftW9szJ5icoUP4o7MJLik7/mdCiAtKQqMQl5FtnTY/2zdIblDjz5bGmRQ7+cQB5fujgVAphbNlI+lf/wK9pIz4V7+OUXTq9lW9zn4OZJ4k5XVQaSzFaD7EhpwaNk2eSsj1uaMpzKzdGuxsQmVc/Np8Qu+rxppXNHoq1HcUg/sdhupGgmKy0UMLKPqmHaHuhh34mk/N5oWUNUwZebzmU7ng1NdUOrZiyyabtS9n6erwWbjY4sv/T4yKyrf+3IXg3dfEDdt4bcOndYrbKI+jl0XRI29PnlBKkf7VfuzfN49uC909ndB7ppyy1tPxzsBH2h39fvQrc4LvMy4q9fZ9smPMjFXgHuzH78u+Hdqst2+1iHXs9ncGvnc91giYxPNzGU4n8XWOD4KWDoZ2WkHc3niE1H/sejvgakDAwJqZf6pfE0JcIBIahbgMJB2fX9al2dzh8P7aHG6apJ10dNFtOEjqv/4dv78PLRYjfMddOLt24OzbQ+jW9xG8YdUpRxeTXgf16afocncyKbCcqL2CF4Y7OVCwmiUHdb64T5Gzpw+8XsxZBVgfrMGcW4gesVC+ItXqMfRmhsF9LsMHXZQP0akGzEpTd9sbvFm6jjnBmbw/dDPd2zOk+2MA2KEMkY+mmD5t2gnrGhz0eX1tlvWv2Sgfll8XYMUXguTmjX3KWY8F0GvyT36K++hp7uwrzSONnhVoieBokFQZF/u11mOeM/NUPUblSPuWkwY+ZZDpTx4f+N7xmOMCnwaETLTw0a93fh+x0AvCx29/x/fZje1knzl47MolGkQ/NR9zau6Yn9VYDMMgnEiQ6TPPuY1L4JpS/MEsmd/Ug6vQ8kJEH5qHniOTWYQYD9Kn8TyaqP3JztXl1psMLq99tbvb4T/3pIhaGn8wJ8Ls8sRJ95fX3cXQ3/6/4B679qxeXEL0Dx7CKD35KT/bH6Yh8zta7FfJNWrImLewsaeT6EGNZbttKusVmqZhzSnEWliMNacALWiS7fYY3Dcykji038VNKsLlOjm1Fjm1Jv1TOnmONex0djPXnM3toZupNCtGX9f3fWzXZVJpKQMDA8ftr7YWj7UvZ9i62aGgQOf6m4IsXhIgELgw17cpx8M7khy9XtJrG8Y92A/Ou5sZnYAGWsiEowHOigbxAtopQ967vydonNO1e8pXpH64A2db18g6kp46b6OicGGOLeUrsL2R9z+OLre/hZfi38GL2afxYrfcOXDgAF/4whfYsGEDubm5/OVf/iWf/vSnL0gNZ0tGGoW4RKVdxRP707zRZvOeKUFunxbCGiNMOLu2w7vWc0bTMGbUnjQw+sqhOfsKDZnn0LQCMs4n6dxqU72zlT846KIHDALzSwg8WIw5Mx83ozG032XwVzaDdSnsHp9AvkZOrUXVvWHitSZWXKfZbeVn2bfD4p/F/viYsAjg+4od21z6emHy5CTVNWp0+97dLmtfznJwv0vNTJNPfiZK7SwT/QJPhtAsA7MyByrfPsWdfvIA2Zcbjx290yFwQyXBa8tHgx9B45jTsuMRQjRdI/Lp+SPL4w1kMUqjGCXRi1rDmdJ0DcY5MApxIsrxSL/WjNeVwiiKEL6uEs0689WjXNfl/e9/Pw888ADPPvss27dvZ/Xq1UyfPp2VK1degMrPjhyFQlyC9vWMjC4GDI2vXhNjau7pHcoqneZECyZrJzjhoJSi09nKgcxTpAYiWHXvJ2enx7yGXtyQhzF1gPhDS9GrK0ge9und5zL4TJJ0q48R0cipNSm7OUi81iRYqI+GpWa3ld8lTx0WYWTt53/5QZL6OhfdAN9PUT3dZM48k9desenv81m8JMAH7o1TWnb+l/g7E4EVk8iubQZ1dIKJPjJ6GHrv1AnZykbTNMwp534qWogrmXI8ev/PetzmwdFt6fUt5D+8/IyDY11dHYcPH+Yb3/gGhmGwePFiPvCBD/DDH/5QQqMQ4uxkXcWv69O81mJzY1WQO6tDBE5j5RKVyZBd+xLZtS+PLAHzLtacecfc73cPcajtGexdMQr33EBxoyKV4+LM1PGnr0dPLCY7eAddL/ok/+8Q6BCvNsm/OkDOx0wi5cefQm12W/ndGCOL77TpTZuD+118H/yjI3gH6lyaGl1uXB1i+XUBYvGJ0SLHKIkS+5NrSP+yDr83g1EaJXxf7YQMjEKI09Pxmd+e8e+4DQN0fv6/T/mY+E/vP26bUop3Xy2olGLHjh1nXMOFJKFRiEtEfZ/Lj/ekUMAfL44xPTH24asch+z618i++BwEAkTuuQ9vUCf7VAv4UdDSBFYlsGpnA5A60sqRTethZ4BprbPpydfpnhcneF0ZZmsT6XqDvm2fx7cNolU+8VqTSbeHiE010a0Th9czDYtvOdLmHZdvNQ2WLAtw820Tp53NW8yKOPEvXz3eZQghLkG1tbVUVFTw7W9/mz//8z9n69atPPnkk5SWlo53aceQ0CjEBGd7it8czPD7pizXVQS4e3qYoHnq0UXledibN5B5/llwHELvuZXA8mtRgy6p76xH+TlogFIxsi85eNkdpA+2E2g38IoT1FeHiM2ZRFFPAaGtPj2vgJVbQu7sKGW3xonPMDEjpx7lO9uw2N7msfENmzfX26MjjG/RdUhcYau3CCEuf5Zl8dRTT/GlL32JSZMmUVtbyyc/+Ul27do13qUdQ0KjEBPY4QGXH+1OYXuKLyyKMrPAOuXjlVKktmxi6Mmf4w8MELpxNcHrb0ILjYzMDW1oxLcVb8cuhaY0Og600VCawC5KUHSkkKL1OlaOhjUtTXTRC0SnDpO34CPoVs7JXnrU2YTFdFqxbbPNhvU2zY0eU6YZ3HFXmLUvZejvU3gemCbkF+gsvVbarQghLrySf77jlD8/0TWNZlXOWV3TCDBnzhxefPHF0fv3338/y5YtO+PnuZAkNAoxATm+4neHMrzQmGVpWYB7asKExxhddA7UkXn2abz2NoLXXk9w1S3o0dgxj2nd300pCoUiE9JoLI2Tykwi3hEn0Q+5MyxyrreI1xroxutkWn5FoOg6whUPoemn/iN4pmHR9xUHD7hsfMNmxzaHcFhj8ZIAH/l4hOLSkddafE2AtS9n6e3xqaiMsXSFwgpccV3ChBATkGYZ5P/Z8pHZ090pjMKznz0NsGPHDqZPn45hGPzkJz/hxRdf5LHHHjvPVZ8bCY1CTDDNgy4/2pNi2FZ8dkGUuYWnHl10mxrJ/O5p3IMHCFyzjOLP/zFp69gJGP5glsyaRkrqh8kEdTqMCux0IUl7iPz0INlJKZb8WS26oaF8h3TjT8n0biYy+QEChUtPXe8ZhsXeXp9Nb9psfMNmoM9n9jyLP/hUlNrZJsa7JvWEwhq33B66JPvJCSEuf5plELlpynl5rp/85Cc8/vjj2LbN1VdfzZo1aygoKDgvz32+SGgUYoLwfMVzh7P8d0OGq0os7q0NE7VOfv2e13mEzO+ewdm1HWveQuJ/+ucYxSWY8Tgc7f3nD2YZ+u+9eOu6yRoW/X41zblhhqceYe6hLcxogy6tnO6VCt3Q8O0+kvX/jO8OEZv5Vcxo5Ulf/0zCouModm132PiGzYE6l+ISnetuCHDVkgDxCTIDWgghxtMjjzzCI488Mt5lnJKERiEmgPZhj//YnaIv4/OpeREWFp+8VYvf10tmze+wN76BOaOW2B8/jFlRdcxj0n1d9D+xh+B2B0eF6DSnsH2hQXCpj755gKrXKxg2ihnUAnRXJ1l10yScwf2kDv0QI1xOfMbn0a3YCV//dMOiUorWZo8Nb9hs3eiglGLh4gBf/JMYlZON01p7WAghxMQhoVGIceQrxYuNWX57MMPcIovPL4oSD5x45M0fHiL70vNk172KUV5B9HNfxJpeM/pzV6VpP7wd78lhcg5p6ISoLy1i3fUa5Qstbo+Xkq8H8aZ77Jy+mewRGzPfZNWSq/B7XiXT8muCJTcRqng/mnb8NTmnGxaTwz5bNjpseCNLe6vP9BqTu+8NM2+hdcGW9hNCCHHhSWgUYpx0JD1+tCdFZ9LnY3MiLC6xTjj69lZj7swrL6LnJYh8/EGsOfPRNA1POXRldtG5sZXoCzESvR6OEWT7vDyev8VjYUmUT4RGwuJbsq1PMkX/PZSboFzSe3+L8pJEpn2CQP7i417/dMKi7yvq9o5Matm9wyGeo3HNsgCf/EyAgsLxXa1FCCHE+SGhUYiLzFeKV5qzPF2foSbf5BvL4+QFjx9dPK4x9933Yi1eAhr0unW0te4l9WqAoi2lVDhhnJDB+tUJ1lzvsDySw8PvCosATv8u7M5Xjr6Ae/R1+giW3XpcYDydsNjd5bFxvc2mDTbJYcXcBRaf/sMo02sv/BrQQgghLi4JjUJcRN0pjx/vSdEy5HHfzDDLygLHjS6eqDG3tWwFQ1o7hwaepmdLmsCGmRS2Tqdc68TNSfPyLQleneezPJTH/ymYTiDtnPD1vVQzoAPHzkBWztt9xsYKi9msYsfWkZ6KDQc9yisNVt0cYtHVFpGoTGoRQojLlYRGIS4CpRSvtdo8eSDNtFyTbyzPIT+kH/cYZ9d2Mr97Bn+gn9CNq/GunUszO+ja8+/4m6qJ7FpCOV3kej04RUFevCWPdbWK5aEC/vLoyGLcDDHE8aFRKYVv9/PuwIhmoJmxU4ZFpRSNDR4b1tts32JjmBqLr7H4wL0RJlXI6WchxOUnHo+PdwkTjoRGIS6wvozPf+5JcWjA5QMzwlxXfvzo4tuNuVvhpqX0L8+jc/Ag2TVDhLYsJdR7DcX5R4j4+3CKgrywOvdoWCwcDYun4iYbSTc/iZdswNZ0dOVjMhIfm4OK9Tlt7Bl+9biwODjgs3mDzYY3bLo7fWpnmdz3sQhz5lqYJ1lrWgghxOVJQqMQ51HWUwR00DQNpRRvttv8si5NRdzgG0vjFEaOHZV7qzF3pmU/Q7dOo6d2Csl9A4T+vRZj/zIS+TYleT1YgwdxAkFeuP/MwqJv95FueRqndxNWYhH7a+/il9n/5saeDKan8WbCoC2oU8LgaFj0PMWu7SOnn/ftcUnk6yxZHmDxkgB5CTn9LIQQVyoJjUKcBwf7XX64I8mAPRIa75gW4kC/S12vy/unh1hZGUR/x+ii13mE1HNP053dQd/1uQxqZQS3zsV6agExz6JgLiSu6kDtaMMJBFlz35mFReVlyLQ/T7bjZYxIObGZX8GMTeNw+mmSfQme8Q1UWSd63XQ0zad6bhFWVxlPr0+zeYONbSsWLArwuS/FmFYtPRWFEEJIaBTinPWmfb6/ZRjHH7lv+/BkfYaSiM7XlsYpib49uuj1ddOx+Wd0WHvpvyGCtXc54aeuJdaaR2y6QeFtGuHuNpzXW7ALg/z+TMOi8hhufZnBQ79C0wNEpn4cJ6+WN52dbBp+jgPOQTQtgb5nFsZPP4jeXYDCp644y5bOIaZMM7j9/SEWXBUgFJKgKIQQ4m0SGoU4R3t6HJQ6fntlXKckaqCUYmB4L62NT9Od24rKmUZ884PEn5yKFTUoWBqg4MMKtrWQfbqF1FmERQBnYA/p5idR7gB66Wr2JwrZ7Gxn9+DPiGgRFlsLKdv1Ht78ZQLNe/vQ19DICUT4wv+MUVwqk1qEEEKcmIRGIc6BrxQtQy6uUoBGPJUhlsrSXpiDaXVycOhF2pPrsNMBYpuuJl73CVQqTN58i8LPBIiVe9gvNZH9XgvOWYZFL9VKuuVJskP7aSqdx96CaWzOrEUb1qjpX8aq9tU4LQW0NPm0Nnto7w64msa0aZYERiGEEKckoVGIs5B1FW+02/y+KUtvxqO8e4irt8fIVTb2/F3Y5RvwCwboenku0c0fIdQzlfAkncL3Bsm/2sLwHbIvNDD0f88+LPrOIOnW33Bo6E12FBSxQ5+CXR+geF0txc030d8aYr8NnQmNyskwf5HFiusD/PInaXz/HU+kYN5C68J9WEIIIS4LEhqFOAN9GZ9XmrOsa7UxdbihIkjlkXUMtcex79zIYE0d1v6p5D19PaplLpppkr80ROG1ISIVBmrIJvt8PclXzyEsuln21j/Pa41HaOgrx257EKOtHJUJkBuHSdUhymZB5a0GFVUG8fixM55zc3X+899TpJKKQBA+dH+E6TUSGoUQQpyahEYhTsPhAZeXmrJs63Qoi+p8sCbMgmKbTncdDcYLqJUFRNYvIueX78WzC9DpQ490Mfd/zUW3NPzBLJknD5E9i7A4NOTT3Oix//Aw+w520NMWQyWvRwtlyK90qK2OM2NVhMrJJrl5Gjk5OQwNDZ30+WpnW3zrf+eQzUIwiMyMFkIIcVokNApxEp6v2N7l8HJTlsMDHnMKTb6wMEpJTist/W+wcV2SQN1MYnu/BE6QoNZCQOtAYTNMMbk5g5C2Sf+m8bTDYjrl09zk0dLk0dzo0dTkMNAHmuXgTWonUNZGzTyX62ZexcyysrMOfJqmEQqdj09JCCHElUJCoxDvknYVr7dmeaU5y7CtWDYpwEdmmdjde+hc30Xf3lLMpluIGlmiqo5Y8ZtoRxQRFUUpA412EvQSTIQZ/Kt1Jw2L2ayiocWludGl+WhI7O7yMUzILcvilbfSc+MeQmXtzAu1cbU1m+kl92EEcsf7IxJCCHEFktAoxFFdKY9XmrOsb7MJmxorSwPUDg/Rt7mZlh/H0furMQvyiLr7yIm+Qs6yckIrrsPvsRh+bCsaoDEyNTlAhmyby9qjYXGpWchDPcUM7tZZ0+jR3DhIx5GR2SilZTrlVQY1K/vJK9tJfcGb9Jgu8+wcbutqp8acQbT0TzEi5eP46QghhLjSSWgUVzSlFPV9I9cr7uxymGHo3J80CTUOkn3CoQNgiku8ajsF9gbCeTkEVlxPYOEfogWDKM+n9be7iQIGoIBsAF5aHGNjUR6lhxJUvhpiW5tis5ulqFincrLBkhUBKqoMvLI2trGVLc420irNHHMm9yVnMLVlO0HTI1z5Oazc2eP6GQkhhBAgoVFcoVxf8erhIZ7e1U+20WfxkM7V7Qq/w8fP62Oodj/R23ooOrCbSPMw1sKrCP6Pz6BXVKHaU2Rf78Dd14tb30c862HrGvtiUbZZBRwayEdbbxAxHErnRahcZFB5l0FFpUE4onPE62STvYX/cLbSY/cyw6zmztBtzEl6aIeeQ/k2ofK7CRQuR9Okd6IQQoiJQUKjuKIM2z6v12c5uCVLURvc2AlGVqFN6SC5YCtm9RGKetIk1rRitRYQWH4j5t2L8JoyZF/qxa17DTVko5dGyVTlsXXuZF5tCpPpCoNhUxof4PZ0A5Vuht/Om8InHioCoN8f4HV7KxuHttLitVJlVHBD4FquCiwgluohfegJvFQrgdJVhEpvRjNklooQQoiJRUKjuOwppWg55LD7jSz+fo+iXlgchMjcQYaXr2OwejsFToKpa5NE/60Xq3YRxvKbUYNh7Ff6yPxiC1puELM2QWrlNF4dDLC9Tie7wYQSm6J5HulDwyxtHKS0L8MQQX5MFTfd5PF69k02Oluodw9RqBdwtbWIByMfpcQoxst2k2n4JcN927AKriFa/Wn0QGK8Py4hhBDihCQ0isuSbysG9zsc3myT3OsSHIZwAkKzbAILNtBT9hKOHqGoPpfqf3GwMjpG0QpUfg7u9hTuvgHMGoPADRV0xXN5pVGxd7tHdoOBKs9QsshlxSKTZZMKOege5PtNz7D+1/eg9STw59bhrvw1T0QHiWdiLA4s5O7QHVQZlWiahu+mSDc/QbZzLUZ0CrFZD2NGq8b7IxNCCCFOSUKjuGzYfT79uxz6dzkM1Ln4CtoLQVukUb74MKGS/2bIa8EcmkTtbyqIbDXQg5NRmUWAhlach7UoH/3DCZqdCOt3ZNj7gkt2wMevylC4zOU9iyIsKy7EIU2n38UGu45NzlYoaMP59PeOqWeaMZU/jv0RujayIovyPbKdr5JpexbNjBGd9inMvHnSXFsIIcQlQUKjmLCUp+hca5NqdjFzdEpWBgkk3l4ST/mK4QaPgd0OA7sd0q0+XhwaiqFtGUxZ4DK57HWG1Ks4PVEmPVvF9C0VGKl8UBZWeRRjdhFGTQJtSi6HDis2bsuw+59d7GQSb0qa+A1pZs8bIi+3kwHVxQa/i98OdpEhi4ZGgZ5PkCAcbbXzFh2dSqMcXdNRSuH07yDT8muUlyI06XYCRdej6TLJRQghxKVDQqOYkJSvOPBPSYb2uSgPNAO6X7ep+VKMzJG3gqKLl1ZYkw1aK+HNmWAWaywu72K69QJ6fR8F6yYzpe5GjHQQzCzG1CjB5dMJzisjp7SYda+38frGQQ7+6wBeVsObnkZ7Ty/M2o0T2UsvSXwtl2K/kCK9iKuthRSHiijWiyjQ8zE1E1e5/N3w9/FTLRTaHklDpy0SYHXoRtxkE+nmJ/CShwkWryRY9l50MzLeH68QQghxxiQ0iglpsM5lcI8LSqHj4nsGXkpn7/8ewoho5Mw20W4NsCHksiflMTvm8j57D3mN9cReyiPcMR1l2GhaN9rUNKnVJXTXhGlL93JwbwNHftxLal8vytfxZ2Tw7+gjOrOZqmiWKUYuJcYsiowbKNILCGonXxcawNRMvjA4Fae9Hl/T0JWCaCmB3qcY7t2ElVhEZO7/xAgWXqRPTwghhDj/JDSKCUcpxfBBF4MsOgqHEAFS6Hh4FXH6PxLkmeYMkfYhlid7eX9nG5EWA2UohkvidERbaL55iMaFJj25Hj2ZNOwbxlo7G+3ALNA1vNok+ge7qZmluDZaxGxrHro2/6zqdYcO4ra/gAYY6uhp6mQjrj1IbOZXMGPTzt+HI4QQQowTCY1iQnjr+sT+bQ59223sXkUQhxh9xOgjGfLZNSmf4fAw1T8e4g+7BzFcRUdFPzun9rF3dReNk/vRNChUuRR4UzH31RDZWcbwgSh6UOHNTOLd38XcmUGWxQq5tnghQ/0DeJ53TrW7yUZAB459HiNaJYFRCCHEZUNCoxg3ylMM1bv0bXPo3+7gDCniM0xKV4fY27Ob4K52GnItQukQlV1w3aFOOvMdDs5oY/tN3QyXDJPfkqSk12K1PZec9EdpPVTKru0OB+s9zKiPPyuJ/Qdt1Ey3uCZcwHxrEiHNwDAMTE0fu8hT8NLt2L2bsLvW8e7ACDq6lXtOzy+EEEJMJBIaxUXlO4rB/S792xz6dzh4GUW81qTkVoN0TjPdhztJbfSoaVOE7SCRZIC2Ip+t17eQXrCdnKTJzPowy57sxJpWQ3LefeyNT+fV9S6HGzxCuSnUnCSZGwaYPNXgmlABV1k1xHXr/NRv92H3bsbp2YSXbsGITCZYupps1+souxeUB+igWwRLbjovrymEEEJMBBIaxQXn2YrBPQ592x0Gdjr4HsRrPMLXtJNx2nEbPYxfmeT6kMqN0FoS4cB1fRiVB4hPryM4ZDFtR4TCH7sEBrMML7qezcuvYdeBEC0/9YgWZtDmJMm+t4/cCo1rgvlcbc2g0Dj1BJbT5btJnL6t2D2b8IYPogcLCRRcQ6T6QYxQCQDBwutItz2Dl2pGDyQITbodI1R0Xl5fCCGEmAgkNIoLwksr+nc79G9zGNjjoJMlVNZNqKoDqy9D/m4L19RoTsQ5VBBjw3tczOomcgp+TzyQZnJbkNwdSXLXGAR7snR5Fbzpr2C3VkPv6wXklim02YM4d/XglqqRoBioplwPn5dm2cqzcQZ2Yvduwh3Yg2ZGCeQvJlz5AYxI1XGvoZlhIlX3nvPrCiGEEBOVhEZx3rjDPv07HXq32WT2DhEyBjHi3RRbSWJJg2SHorkwxqGSSXQsCBCY0kEibzOF8UNUpGLkNBrEXk5jNvi0mBUcTufRpipo9SsZIEFeuBOnNo13YzNDRS6LrAT3B6YyzYihn4+gqDzcwTrs3k04fdtB0wgkFhGd8XnM+Ay0c7wGUgghhLiUSWgU58QZ9OnekqL/zS6slgxBfZAEQ1g+9MU92gpiHMyZwqFEDmbpEIW5uyjOW8NSN01us0H49STJxhK6InPZb02jNV1IVzaAyiriaoBJ4SaiNS0MXNdFd6GP1RbmU5MnM8vMOeeJLDDS3scdbsDu3YjTuwXlZbDy5hKZ+nGs3Dlo5+laSCGEEOJSJ6FRnLH+5gE6XmlF35smNuAQJEkpPr0FisaKMI15FewK52PHoDSnnqLcV7gu0ERBs4PzYozB1ik0WbW0eeV0DEXxfI2imE5lucHyKpPKyQa78jp5vj5J1/QweS1ZqtYP0b6nlpKHHOZZeef8HtxUOz1dzzPQuhY/24sZryFUcRdW3gJZsUUIIYQ4AQmNVyjP8zCM01v7uKujjcOv7UXbliHergg7DoVoDObqtM4P0FRVwY5AHt1+kLxwF8W5e7gqXE9BQ5rM2hIGOqey21/FkXQ+jqeTyNeonGyyqMqgcrJBeaVJOKyhlOKAO8Rvs0fY6w6iV2sYryVIbY/TEHfxPtnLtdMmnfV7fvfM52DONEIlN2HmLUIPSHscIYQQ4lQkNF5hOttbGPjXLRS0h7EDHt23Bpl789utYTzPo6Otib4DTWh70uQdNohkNAoxSQZD9FZZdNfmsbMoysEhC6V8CuMHKWEHNU1p3M159PdNYXt6BRnPIh5TVE6xmDXZ5JYqg8oqg1j82NPKvlLscPp4PnOERi/JYiufr8dn4yrFP6+sp/+Gfkw07gqVc02g4Ize78lmPsdnPEThpJn09fWdc3NvIYQQ4kogofEKkkoNk/2HHRQMhdHRCGVNin6b5Q33N0RVBP1gkoLDQSJZA0O3yPolDOYF6b26gPrJsM336E5HCPv95LUfZnJnFlrD9PZXcdCZSTjoUVFpMGNFkFWTDSqqTHLztJPOZvaUzyanlzWZI3T7WZYHCvlkZNoxrXK+k7uAjPIIoJ/2ZJfTmfl8uqOsQgghhBghofEK0rb/ADkpgyNlg2SCLpG0RWF3jJpnQwxHwXUq6Mvm4VXESdYa7EoMsCcTxum1iO4eINhrk9flkUnnMWzEySv1qJwd4capASonGxQU6qfV7sZWHq/b3byY6SCtPK4PFnFTsISck0w6CWljB7wTznzOWygzn4UQQojzRELjZc7zPNobD9G3rwlt9yC5WoSSjji9uQ6uG6dDTSKj8jCLTNpL+9mmK44MGOj7faz+CNpQkJDuUZQwmTw5QtX1uVROsSgu0dH1M2tzk/Jd1tqd/D7biQbcFCzh+mARYe3k/xkqN42X7UQ34+jB/GN/phRe8rDMfBZCCCEuAk0ppca7iIttcHCQYPD8rBbyTpqmEQgEsG2b8fpYfd+no62Jtp11OHt6yT9gEE5b9Cc8knoEBgvIOMUodNKRIRryPOr0KOmBIPrwSM25uYNMK3WomVVM9YJCJk+NcPzayqevz8vy3FAzLw+3Edctbsup4vpIKQH91COIqa5N9Oz5AfgOANGylSRqP4mbOkKq43WSHW/gZboJJmYRKVlOpHAxuhU9rZomwr66UEzTxHXd8S7jvLpc95fsq0vL5ba/LsV9dSH+3y1O3xU50mjbNrZtn/fnNQyDQCBAMpm8qJMrBvp7ad+3H6euh9z9kDMQJBrxSUUSDJjFtJOHn7Tot5J0RKDV8+keNvBTuehGlrx4L1fP95g/t5zK2jwCgcQ7nt0GggwNDZ1xXZ1ehheyR9hg91Csh/hwuIqrrHwMpZFNpsie4ne9TBdDux4D/NFtyfa1pLq3oZwBjEgVVtENRBNXoQdyUUAy40Pm9Oocr311McTj8bPaXxPZ5bq/ZF9dWi63/XUp7isJjePrigyNl7pMJkVLXR2pfUeI7ncp6AiTsHyS4TzS2QJ6SWD7AfpshxYf2nSTQRt8M4IVT5IX62S+m2JKUxE5wxnS0d+z9CN/dN7qa3ZTrMm2s9XpY5oR46FoNXPM3NNe3k95GezuN0/0EzTNIjb3L0bXfBZCCCHExSGh8RLgug6thw4wsK+F4L4shc0h8jSwgnHsbD5N5DFkhOi0fVpdnU50kj4Q1YkW91Fa3MNN0xTzq2vY/Q9PMaWhF8cvQ9MyWOEGOm//9DnX+FaPxTVHeyzOMXP5cqyWajN+it/x8DOdeOm20S8/1YZv95z0d4xIuQRGIYQQYhxIaJyAfN+no7WRnr2H0fckKTocIMfVMKwwtjOJdnLoMiO02Todvk6XqcjENczCDLllR5gxqYN55SFmlM0las4AZow+9+Kvfobf//hZIt1HcKwYJas/y/z5tWdfq1LscvuP67FYbry9qopSCuUMHBcOvcwRUC6aGcMIT8IIl2PlzccIT0K38hja97coZxDUW6dNNALFN5x1rUIIIYQ4exIaJ4i+nk7ad+9H7Rwi/5BBOKtTqAfI+FV0aHFa9BitjkW37tOdp+EkFOGSPgoqD7O4qJtZhQmq8mYTMxaesr1MIBDglk/dfc71espns9PHmkw7Xe/osViAwku3kX0rIKba8NNtKC8FmoURLh0JhwVLCEUmHQ2IOSd8jfjMr5I6/J94qWY0M0a44m6snLMPuEIIIYQ4exIaz4Ok7/LTdCP17hDRwQC3BEpZYuWf+neGB2nZU4e7tZ/cgxBLaRRhkqaUbi1OIzm0+hbdMZfuQhMSHvHyJgrL67k2OkhNQQFl0ZnkGjegaxevtYytPNbbPbyYOUJKOaxQis+kOoh0b8JPtTFg9wAaerAQIzwJMz4Do2TlSDgMFp1Rv0Q9kCBW8z8u3JsRQgghxGmT0HiOPKX43sA+5v+zz9IjHraZ5ffvaUa7UR2z5J1tZ2nZU0dqYy/xAz45KZ9CdNIk6CXOFuK0Biw68hV9xQGs/BT55fUUJA4zP9LPtEQRxaFaEuZtmFr4rOtVysfuWoebPIxuRgkU34ARLDzF4xVutpeB/v286vTyqmGhKY/l/XtYOrCHsB487tSyESpFM2SGmxBCCHE5kdB4jpq9JLf9L5uqTC/JiEZdrcUNu3w2KUVBaR9Dr3UTO+yQSNskgBBRuslhtxnjcMyipcRgqDhAPK+Hgvz9VCYOcU20m6p4KYWBmSTM2wnpeeelVqUUqUP/jtO/FZQPmkG2ax3xWQ9jhEtRXuaY6w69VBv9di/r4tPYkFtLVINb0t0sMSKEiq7HqPrwSU8tCyGEEOLyIqHxHLW82sncTC8ArTkGXmcOsS6bDx3qw6SbMGG6tVz2RaPUFUZoKQ3gFGjkhbspyKmnNlFHcbydSeEKElYNBebtRPSS025PMxalfPBdlHJxhw/h9G1+xw89UB7Ddf+ApltHZy2PnFrui05hbcFVbDIjlJpBPhIo46pAAcZ5qksIIYQQlxYJjecoUN+HAjRAHzJYmByk24iyOV7M3vIYByfnoIU9IqEB9NxOrJwUKqroMwP0kYPF1eQpjYSjyLN9Ev4h8tR+8jyHPN8m18tiKhd8B3XMrQvKQR1z677rvjMyojgGpXxCk27FCE+izcrlBadntMfiZ0KlLEtUMDw8fME/SyGEEEJMXBIaz1Eg3jf6vVbUxbdXryJiDFMWaqQgvp3KvEbisXaijk9OCnKSEOsGD4v+QC6DVpx+K86AGaPfjLDfjDBghBkIxvGOThqJ+Q4J3yXPd8lTHgmlyEORrzTyNJ2YZqDpJppmgm6haRboJmgmmv7WNhPf7iV54P87pn6lGVh5s2nKm8vzmXb2puqP67F4vkY9hRBCCHHpktB4jiKzFel1w4RVnHwty23V3yOQ34E1bFKUM4d8Ywl5RjXBWB7km2i6BZoJmk7xKcKYrxRDyqHXt+nz7dHbPt+mQY3cJtXIGqgWGgk9QL4ePHobIKEFRr/P0wOYmo4KlbApfzGLezfjagZKKXbEpvJG/gI6hutO2GNRCCGEEAIkNJ6zotopNE3+JcUteZidhUx5LZfcxhSNK4uZs/IzZ/28uqaRqwXI1QNMPcljsso7LlD2+jb73aHR+x4ji9DHNZOwZtCZP4+X41NJuEMcCeST0QPkAn8Vn0ehzHgWQgghxElIaDxHOYEpDH4yS+qZJLlt3bhdFvU3RZi2ZNEFf+2gZlBqhCk1TtyC563RyrfC5G5ngC4/y4AVY8CKjT4uV7ckMAohhBDilCQ0niNDs7g6/0vs/OAPafM6MbQAU0O3UBlYOd6lHTNaOQWYasbY5PSOjj4CGGjUmNI2RwghhBCnJqHxPAjr+SyJ/ym6rpFI5NPf34/neWP/4kWW0AM8GJnGv6UO4aFQQI0Z547QpPEuTQghhBATnITG80jT9Ak/03hhIMG3zfm0e2mimskkI4w+wWsWQgghxPiT0HgFytEtcvSLt161EEIIIS59+ngXIIQQQgghJj4JjUIIIYQQYkwSGoUQQgghxJgkNAohhBBCiDFJaBRCCCGEEGOS0CiEEEIIIcYkoVEIIYQQQoxJQqMQQgghhBiThEYhhBBCCDEmCY1CCCGEEGJMEhqFEEIIIcSYJDQKIYQQQogxaUopNd5FXC7a29t5/PHH+dznPkdZWdl4lyNOQfbVpUX216VD9tWlQ/aVOFMy0ngetbe3861vfYv29vbxLkWMQfbVpUX216VD9tWlQ/aVOFMSGoUQQgghxJgkNAohhBBCiDFJaDyPysrK+Ku/+iu5NuQSIPvq0iL769Ih++rSIftKnCmZCCOEEEIIIcYkI41CCCGEEGJMEhqFEEIIIcSYzPEu4HIxPDzMY489xpYtWwiHw3zgAx/grrvuGu+yxLs8+uijrF27FtN8+z/9xx57jKKionGsSrzlmWee4aWXXuLw4cMsX76chx9+ePRnjY2NfO973+Pw4cOUlJTw2c9+lgULFoxjtVe2U+2rhx56iP7+fnR9ZFyiqKiIxx57bLxKveI5jsMPfvADtm/fztDQEIWFhdx3332sXLkSkGNLnD4JjefJ448/juM4/Ou//iudnZ38xV/8BRUVFSxevHi8SxPvctddd/GJT3xivMsQJ5Cfn899993Htm3bGBoaGt3uui5//dd/zS233MIjjzzCG2+8wSOPPMIPfvAD8vLyxq/gK9jJ9tVbvv71r8vfvwnC8zzy8/P5zne+Q0lJCXv37uXb3/42JSUlTJ8+XY4tcdrk9PR5kMlkWLduHR//+MeJRCJMmTKFW265hTVr1ox3aUJcUlasWMGyZcvIyck5ZvvOnTvJZrN86EMfwrIsrr/+eqqqqli3bt04VSpOtq/ExBMKhfjoRz9KaWkpmqYxe/ZsZs2axd69e+XYEmdERhrPg9bWVpRSTJ48eXTb1KlTWb9+/ThWJU7mueee47nnnqOwsJA777yTm2++ebxLEmNoampiypQpo6c7AaZNm0ZjY+M4ViVO5dFHH0UpRVVVFR/72MeYPXv2eJckjspkMtTX13PnnXfKsSXOiITG8yCTyRCJRI7ZFo1GSafT41SROJk777yTT33qU0SjUXbv3s13v/tdotEoK1asGO/SxCmk02mi0egx26LRKJ2dneNUkTiVr371q1RXVwPw4osv8q1vfYvvfe97FBcXj3Nlwvd9Hn30UWbMmMGiRYvYv3+/HFvitMnp6fMgFAodFxBTqRThcHicKhInU11dTU5ODoZhMH/+fO644w45DXMJCIfDJJPJY7Ylk0k5xiao2bNnEwwGCQaD3H777UybNo3NmzePd1lXPKUU//iP/0hvby8PP/wwmqbJsSXOiITG86C8vBwYOYX2loaGBqqqqsarJHGaNE1D+ttPfFVVVTQ2NuL7/ui2hoaGYy4JEROXrutynI0zpRQ/+MEPaGho4Jvf/OZoKJRjS5wJCY3nQSgU4tprr+VHP/oRqVSKxsZGnn/+eblWbgJ67bXXSKVS+L7Pnj17+O1vf8uyZcvGuyxxlOd52LaN7/v4vo9t27iuy7x58wgEAjzxxBM4jsNrr71GY2Mj11577XiXfMU62b7q6upi9+7dOI6D4zg899xzHDhwgEWLFo13yVe0xx9/nLq6Or71rW8dczmVHFviTMgygufJ8PAw3//+90f7NN5zzz3Sp3EC+trXvjb6r+q3JsLceuut412WOOq//uu/+OlPf3rMtlWrVvHlL3+Zw4cP8/3vf5/Dhw9TXFzM5z73OeklN45Otq/uuece/u7v/o729nZM06SyspKPfexjzJs3b5wqFZ2dnTz00ENYloVhGKPbP/ShD3HffffJsSVOm4RGIYQQQggxJjk9LYQQQgghxiShUQghhBBCjElCoxBCCCGEGJOERiGEEEIIMSYJjUIIIYQQYkwSGoUQQgghxJgkNAohhBBCiDFJaBRCCCGEEGOS0CiEEEIIIcYkoVEIccFpmjbm17/9279x44038r73vW+8yxVCCHEC5ngXIIS4/K1fv/6Y+8uXL+eLX/wiDzzwwOi26upqlixZcszauEIIISYOCY1CiAtu2bJlx22rqqo6bntRUdHFKkkIIcQZktPTQogJ492np7/5zW8Si8XYunUry5cvJxwOc9VVV7F161YymQx/9Ed/RCKRoKKigkcfffS451u/fj2rVq0iGo2Sm5vLAw88QGdn50V8R0IIcfmQ0CiEmNAcx+ETn/gEn/3sZ/nVr36F4zjcc889PPTQQ4TDYX7+859z991385WvfIXXX3999PfWr1/PjTfeSG5uLj/72c/4p3/6JzZu3Mhdd901ju9GCCEuXXJ6Wggxodm2zXe/+11uu+02AHzf584772Tp0qX8/d//PQCrVq3iF7/4Bb/4xS9YsWIFAF/72te4+uqreeKJJ9A0DYB58+Yxd+5cnn32WW6//fbxeUNCCHGJkpFGIcSEpus6q1evHr1fU1MDwHve857RbYZhUF1dTXNzMwCpVIp169Zx77334nkeruviui41NTVUVlaycePGi/smhBDiMiChUQgxoYXDYQKBwOj9t77Py8s75nGBQIBMJgNAX18fnufxla98BcuyjvlqamoaDZdCCCFOn5yeFkJcdvLy8tA0jW984xvcfffdx/28sLDw4hclhBCXOAmNQojLTjQaZfny5ezdu5fvfOc7412OEEJcFiQ0CiEuS3/zN3/DqlWr+PCHP8z9999PIpGgpaWFNWvW8OCDD3LjjTeOd4lCCHFJkWsahRCXpRUrVvDaa68xPDzMgw8+yO233863v/1tIpEI06dPH+/yhBDikqMppdR4FyGEEEIIISY2GWkUQgghhBBjktAohBBCCCHGJKFRCCGEEEKMSUKjEEIIIYQYk4RGIYQQQggxJgmNQgghhBBiTBIahRBCCCHEmCQ0CiGEEEKIMUloFEIIIYQQY5LQKIQQQgghxiShUQghhBBCjOn/ByeWuoWVZNmtAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1102,7 +1086,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -1160,7 +1144,7 @@ "data": { "text/plain": [ "['a', 'b', 'c']\n", - "Categories (3, object): ['b', 'c', 'a']" + "Categories (3, object): ['c', 'a', 'b']" ] }, "execution_count": 26, diff --git a/docs/notebooks/forcats_lvl_value.ipynb b/docs/notebooks/forcats_lvl_value.ipynb index 9724efb1..8718da5a 100644 --- a/docs/notebooks/forcats_lvl_value.ipynb +++ b/docs/notebooks/forcats_lvl_value.ipynb @@ -5,26 +5,10 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -36,7 +20,7 @@ { "data": { "text/markdown": [ - "### # fct_anon " + "###
★ fct_anon
" ], "text/plain": [ "" @@ -67,7 +51,7 @@ { "data": { "text/markdown": [ - "### # fct_collapse " + "###
★ fct_collapse
" ], "text/plain": [ "" @@ -103,7 +87,7 @@ { "data": { "text/markdown": [ - "### # fct_lump " + "###
★ fct_lump
" ], "text/plain": [ "" @@ -149,7 +133,7 @@ { "data": { "text/markdown": [ - "### # fct_lump_min " + "###
★ fct_lump_min
" ], "text/plain": [ "" @@ -185,7 +169,7 @@ { "data": { "text/markdown": [ - "### # fct_lump_prop " + "###
★ fct_lump_prop
" ], "text/plain": [ "" @@ -224,7 +208,7 @@ { "data": { "text/markdown": [ - "### # fct_lump_n " + "###
★ fct_lump_n
" ], "text/plain": [ "" @@ -266,7 +250,7 @@ { "data": { "text/markdown": [ - "### # fct_lump_lowfreq " + "###
★ fct_lump_lowfreq
" ], "text/plain": [ "" @@ -299,7 +283,7 @@ { "data": { "text/markdown": [ - "### # fct_other " + "###
★ fct_other
" ], "text/plain": [ "" @@ -339,7 +323,7 @@ { "data": { "text/markdown": [ - "### # fct_recode " + "###
★ fct_recode
" ], "text/plain": [ "" @@ -386,7 +370,7 @@ { "data": { "text/markdown": [ - "### # fct_relabel " + "###
★ fct_relabel
" ], "text/plain": [ "" @@ -421,13 +405,13 @@ } ], "source": [ + "%run nb_helpers.py\n", + "\n", "from datar.all import *\n", "from datar.datasets import gss_cat\n", "\n", "gss_cat >>= mutate(rincome=as_factor(f.rincome))\n", "\n", - "%run nb_helpers.py\n", - "\n", "nb_header(\n", " fct_anon,\n", " fct_collapse,\n", @@ -633,52 +617,52 @@ " \n", " 0\n", " 00\n", - " 95\n", + " 104\n", " \n", " \n", " 1\n", " 01\n", - " 15\n", + " 147\n", " \n", " \n", " 2\n", " 02\n", - " 689\n", + " 388\n", " \n", " \n", " 3\n", " 03\n", - " 388\n", + " 32\n", " \n", " \n", " 4\n", " 04\n", - " 5124\n", + " 689\n", " \n", " \n", " 5\n", " 05\n", - " 32\n", + " 109\n", " \n", " \n", " 6\n", " 06\n", - " 147\n", + " 5124\n", " \n", " \n", " 7\n", " 07\n", - " 23\n", + " 3523\n", " \n", " \n", " 8\n", " 08\n", - " 109\n", + " 23\n", " \n", " \n", " 9\n", " 09\n", - " 224\n", + " 10846\n", " \n", " \n", " 10\n", @@ -688,22 +672,22 @@ " \n", " 11\n", " 11\n", - " 104\n", + " 224\n", " \n", " \n", " 12\n", " 12\n", - " 71\n", + " 15\n", " \n", " \n", " 13\n", " 13\n", - " 3523\n", + " 71\n", " \n", " \n", " 14\n", " 14\n", - " 10846\n", + " 95\n", " \n", " \n", "\n", @@ -712,21 +696,21 @@ "text/plain": [ " f n\n", " \n", - "0 00 95\n", - "1 01 15\n", - "2 02 689\n", - "3 03 388\n", - "4 04 5124\n", - "5 05 32\n", - "6 06 147\n", - "7 07 23\n", - "8 08 109\n", - "9 09 224\n", + "0 00 104\n", + "1 01 147\n", + "2 02 388\n", + "3 03 32\n", + "4 04 689\n", + "5 05 109\n", + "6 06 5124\n", + "7 07 3523\n", + "8 08 23\n", + "9 09 10846\n", "10 10 93\n", - "11 11 104\n", - "12 12 71\n", - "13 13 3523\n", - "14 14 10846" + "11 11 224\n", + "12 12 15\n", + "13 13 71\n", + "14 14 95" ] }, "execution_count": 3, @@ -777,77 +761,77 @@ " \n", " 0\n", " X00\n", - " 388\n", + " 224\n", " \n", " \n", " 1\n", " X01\n", - " 5124\n", + " 71\n", " \n", " \n", " 2\n", " X02\n", - " 32\n", + " 104\n", " \n", " \n", " 3\n", " X03\n", - " 93\n", + " 109\n", " \n", " \n", " 4\n", " X04\n", - " 104\n", + " 689\n", " \n", " \n", " 5\n", " X05\n", - " 71\n", + " 147\n", " \n", " \n", " 6\n", " X06\n", - " 23\n", + " 3523\n", " \n", " \n", " 7\n", " X07\n", - " 147\n", + " 93\n", " \n", " \n", " 8\n", " X08\n", - " 10846\n", + " 15\n", " \n", " \n", " 9\n", " X09\n", - " 95\n", + " 10846\n", " \n", " \n", " 10\n", " X10\n", - " 109\n", + " 5124\n", " \n", " \n", " 11\n", " X11\n", - " 15\n", + " 95\n", " \n", " \n", " 12\n", " X12\n", - " 224\n", + " 23\n", " \n", " \n", " 13\n", " X13\n", - " 3523\n", + " 32\n", " \n", " \n", " 14\n", " X14\n", - " 689\n", + " 388\n", " \n", " \n", "\n", @@ -856,21 +840,21 @@ "text/plain": [ " f n\n", " \n", - "0 X00 388\n", - "1 X01 5124\n", - "2 X02 32\n", - "3 X03 93\n", - "4 X04 104\n", - "5 X05 71\n", - "6 X06 23\n", - "7 X07 147\n", - "8 X08 10846\n", - "9 X09 95\n", - "10 X10 109\n", - "11 X11 15\n", - "12 X12 224\n", - "13 X13 3523\n", - "14 X14 689" + "0 X00 224\n", + "1 X01 71\n", + "2 X02 104\n", + "3 X03 109\n", + "4 X04 689\n", + "5 X05 147\n", + "6 X06 3523\n", + "7 X07 93\n", + "8 X08 15\n", + "9 X09 10846\n", + "10 X10 5124\n", + "11 X11 95\n", + "12 X12 23\n", + "13 X13 32\n", + "14 X14 388" ] }, "execution_count": 4, @@ -1133,7 +1117,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 01:55:55][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\n" + "[2022-03-18 17:45:57][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\n" ] }, { @@ -1205,7 +1189,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1275,7 +1259,7 @@ "count 40 10 5 27 1 1 1 1 1" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1287,7 +1271,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -1298,7 +1282,7 @@ "Categories (4, object): ['A', 'B', 'D', 'Other']" ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, @@ -1323,38 +1307,29 @@ " \n", " \n", " \n", - " A\n", - " B\n", - " D\n", - " Other\n", + " warn_builtin_names\n", " \n", " \n", " \n", " \n", " \n", " <int64>\n", - " <int64>\n", - " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 40\n", - " 10\n", - " 27\n", - " 10\n", + " 1\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " A B D Other\n", - " \n", - "count 40 10 27 10" + " warn_builtin_names\n", + " \n", + "count 1" ] }, - "execution_count": 14, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1366,7 +1341,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1377,7 +1352,7 @@ "Categories (4, object): ['A', 'B', 'D', 'Other']" ] }, - "execution_count": 15, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, @@ -1402,38 +1377,29 @@ " \n", " \n", " \n", - " A\n", - " B\n", - " D\n", - " Other\n", + " warn_builtin_names\n", " \n", " \n", " \n", " \n", " \n", " <int64>\n", - " <int64>\n", - " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 40\n", - " 10\n", - " 27\n", - " 10\n", + " 1\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " A B D Other\n", - " \n", - "count 40 10 27 10" + " warn_builtin_names\n", + " \n", + "count 1" ] }, - "execution_count": 15, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1445,7 +1411,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1456,7 +1422,7 @@ "Categories (5, object): ['A', 'B', 'C', 'D', 'Other']" ] }, - "execution_count": 16, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, @@ -1481,41 +1447,29 @@ " \n", " \n", " \n", - " A\n", - " B\n", - " C\n", - " D\n", - " Other\n", + " warn_builtin_names\n", " \n", " \n", " \n", " \n", " \n", " <int64>\n", - " <int64>\n", - " <int64>\n", - " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 40\n", - " 10\n", - " 5\n", - " 27\n", - " 5\n", + " 1\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " A B C D Other\n", - " \n", - "count 40 10 5 27 5" + " warn_builtin_names\n", + " \n", + "count 1" ] }, - "execution_count": 16, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1527,7 +1481,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1538,7 +1492,7 @@ "Categories (3, object): ['A', 'D', 'Other']" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, @@ -1563,35 +1517,29 @@ " \n", " \n", " \n", - " A\n", - " D\n", - " Other\n", + " warn_builtin_names\n", " \n", " \n", " \n", " \n", " \n", " <int64>\n", - " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 40\n", - " 27\n", - " 20\n", + " 1\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " A D Other\n", - " \n", - "count 40 27 20" + " warn_builtin_names\n", + " \n", + "count 1" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1603,18 +1551,18 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['H', 'I', 'I', 'D', 'G', ..., 'E', 'H', 'I', 'F', 'E']\n", + "['F', 'F', 'D', 'G', 'K', ..., 'H', 'G', 'E', 'E', 'J']\n", "Length: 100\n", - "Categories (12, object): ['A', 'B', 'C', 'D', ..., 'I', 'J', 'K', 'L']" + "Categories (11, object): ['A', 'B', 'C', 'D', ..., 'H', 'I', 'J', 'K']" ] }, - "execution_count": 18, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1626,7 +1574,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -1661,7 +1609,6 @@ " I\n", " J\n", " K\n", - " L\n", " \n", " \n", " \n", @@ -1678,22 +1625,20 @@ " <int64>\n", " <int64>\n", " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 2\n", " 1\n", - " 9\n", - " 14\n", - " 14\n", - " 18\n", + " 4\n", " 12\n", + " 13\n", + " 27\n", " 12\n", + " 8\n", " 12\n", " 3\n", - " 1\n", - " 2\n", + " 4\n", + " 4\n", " \n", " \n", "\n", @@ -1702,14 +1647,14 @@ "text/plain": [ " A B C D E F G H I \\\n", " \n", - "count 2 1 9 14 14 18 12 12 12 \n", + "count 1 4 12 13 27 12 8 12 3 \n", "\n", - " J K L \n", - " \n", - "count 3 1 2 " + " J K \n", + " \n", + "count 4 4 " ] }, - "execution_count": 19, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1720,7 +1665,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1744,7 +1689,6 @@ " \n", " \n", " \n", - " A\n", " B\n", " C\n", " D\n", @@ -1755,7 +1699,7 @@ " I\n", " J\n", " K\n", - " L\n", + " Other\n", " \n", " \n", " \n", @@ -1772,38 +1716,36 @@ " <int64>\n", " <int64>\n", " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 2\n", - " 1\n", - " 9\n", - " 14\n", - " 14\n", - " 18\n", + " 4\n", " 12\n", + " 13\n", + " 27\n", " 12\n", + " 8\n", " 12\n", " 3\n", + " 4\n", + " 4\n", " 1\n", - " 2\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " A B C D E F G H I \\\n", + " B C D E F G H I J \\\n", " \n", - "count 2 1 9 14 14 18 12 12 12 \n", + "count 4 12 13 27 12 8 12 3 4 \n", "\n", - " J K L \n", - " \n", - "count 3 1 2 " + " K Other \n", + " \n", + "count 4 1 " ] }, - "execution_count": 20, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1814,18 +1756,18 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Other', 'Other', 'Other', 'D', 'Other', ..., 'E', 'Other', 'Other', 'F', 'E']\n", + "['F', 'F', 'D', 'Other', 'Other', ..., 'H', 'Other', 'E', 'E', 'Other']\n", "Length: 100\n", - "Categories (4, object): ['D', 'E', 'F', 'Other']" + "Categories (6, object): ['C', 'D', 'E', 'F', 'H', 'Other']" ] }, - "execution_count": 21, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1836,18 +1778,18 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['H', 'I', 'I', 'D', 'G', ..., 'E', 'H', 'I', 'F', 'E']\n", + "['F', 'F', 'D', 'Other', 'Other', ..., 'H', 'Other', 'E', 'E', 'Other']\n", "Length: 100\n", - "Categories (7, object): ['D', 'E', 'F', 'G', 'H', 'I', 'Other']" + "Categories (6, object): ['C', 'D', 'E', 'F', 'H', 'Other']" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1858,18 +1800,18 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Other', 'Other', 'Other', 'Other', 'Other', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\n", + "['Other', 'Other', 'Other', 'Other', 'K', ..., 'Other', 'Other', 'Other', 'Other', 'J']\n", "Length: 100\n", - "Categories (5, object): ['A', 'B', 'K', 'L', 'Other']" + "Categories (6, object): ['A', 'B', 'I', 'J', 'K', 'Other']" ] }, - "execution_count": 23, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1881,18 +1823,18 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Other', 'Other', 'Other', 'Other', 'Other', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\n", + "['Other', 'Other', 'Other', 'G', 'K', ..., 'Other', 'G', 'Other', 'Other', 'J']\n", "Length: 100\n", - "Categories (7, object): ['A', 'B', 'C', 'J', 'K', 'L', 'Other']" + "Categories (7, object): ['A', 'B', 'G', 'I', 'J', 'K', 'Other']" ] }, - "execution_count": 24, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1903,18 +1845,18 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['Other', 'I', 'I', 'D', 'G', ..., 'E', 'Other', 'I', 'F', 'E']\n", + "['F', 'F', 'D', 'Other', 'Other', ..., 'H', 'Other', 'E', 'E', 'Other']\n", "Length: 100\n", - "Categories (6, object): ['D', 'E', 'F', 'G', 'I', 'Other']" + "Categories (6, object): ['C', 'D', 'E', 'F', 'H', 'Other']" ] }, - "execution_count": 25, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1926,18 +1868,18 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['H', 'I', 'I', 'D', 'G', ..., 'E', 'H', 'I', 'F', 'E']\n", + "['F', 'F', 'D', 'G', 'Other', ..., 'H', 'G', 'E', 'E', 'Other']\n", "Length: 100\n", - "Categories (7, object): ['D', 'E', 'F', 'G', 'H', 'I', 'Other']" + "Categories (7, object): ['C', 'D', 'E', 'F', 'G', 'H', 'Other']" ] }, - "execution_count": 26, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1948,18 +1890,18 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['H', 'I', 'I', 'D', 'G', ..., 'E', 'H', 'I', 'F', 'E']\n", + "['F', 'F', 'D', 'G', 'Other', ..., 'H', 'G', 'E', 'E', 'Other']\n", "Length: 100\n", - "Categories (7, object): ['D', 'E', 'F', 'G', 'H', 'I', 'Other']" + "Categories (7, object): ['C', 'D', 'E', 'F', 'G', 'H', 'Other']" ] }, - "execution_count": 27, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1970,7 +1912,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -1994,12 +1936,11 @@ " \n", " \n", " \n", + " C\n", " D\n", " E\n", " F\n", - " G\n", " H\n", - " I\n", " Other\n", " \n", " \n", @@ -2012,29 +1953,27 @@ " <int64>\n", " <int64>\n", " <int64>\n", - " <int64>\n", " \n", " \n", " count\n", - " 14\n", - " 14\n", - " 18\n", " 12\n", + " 13\n", + " 27\n", " 12\n", " 12\n", - " 18\n", + " 24\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " D E F G H I Other\n", - " \n", - "count 14 14 18 12 12 12 18" + " C D E F H Other\n", + " \n", + "count 12 13 27 12 12 24" ] }, - "execution_count": 28, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -2046,7 +1985,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -2070,7 +2009,7 @@ " \n", " \n", " \n", - " F\n", + " E\n", " Other\n", " \n", " \n", @@ -2082,20 +2021,20 @@ " \n", " \n", " count\n", - " 18\n", - " 82\n", + " 27\n", + " 73\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " F Other\n", + " E Other\n", " \n", - "count 18 82" + "count 27 73" ] }, - "execution_count": 29, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -2113,7 +2052,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -2124,7 +2063,7 @@ "Categories (3, object): ['A', 'B', 'Other']" ] }, - "execution_count": 30, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -2135,18 +2074,18 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['I', 'J', 'J', 'E', 'H', ..., 'F', 'I', 'J', 'G', 'F']\n", + "['F', 'F', 'D', 'G', 'K', ..., 'H', 'G', 'E', 'E', 'J']\n", "Length: 100\n", - "Categories (11, object): ['C', 'D', 'E', 'F', ..., 'J', 'K', 'L', 'Other']" + "Categories (10, object): ['C', 'D', 'E', 'F', ..., 'I', 'J', 'K', 'Other']" ] }, - "execution_count": 31, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -2164,7 +2103,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -2174,7 +2113,7 @@ "Categories (3, object): ['fruit', 'bear', 'dear']" ] }, - "execution_count": 32, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -2186,14 +2125,14 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 01:59:10][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\n" + "[2022-03-18 17:46:03][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\n" ] }, { @@ -2203,7 +2142,7 @@ "Categories (4, object): ['fruit', 'banana', 'bear', 'dear']" ] }, - "execution_count": 33, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -2215,7 +2154,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -2225,7 +2164,7 @@ "Categories (3, object): ['fruit', 'bear', 'dear']" ] }, - "execution_count": 34, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -2237,7 +2176,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -2247,7 +2186,7 @@ "Categories (4, object): ['an apple', 'banana', 'a bear', 'dear']" ] }, - "execution_count": 35, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2265,7 +2204,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -2368,7 +2307,7 @@ "9 Strong republican 2314" ] }, - "execution_count": 36, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2379,7 +2318,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -2482,7 +2421,7 @@ "9 Strong republican 2314" ] }, - "execution_count": 37, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2493,7 +2432,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -2632,7 +2571,7 @@ "15 $4000 to 4999 226" ] }, - "execution_count": 38, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2643,7 +2582,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -2655,7 +2594,7 @@ " 'Gt $5000.0', 'Gt $0.0'], dtype=object)" ] }, - "execution_count": 39, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -2674,7 +2613,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -2777,7 +2716,7 @@ "9 No answer 183" ] }, - "execution_count": 40, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/forcats_misc.ipynb b/docs/notebooks/forcats_misc.ipynb index dad038d9..515445c9 100644 --- a/docs/notebooks/forcats_misc.ipynb +++ b/docs/notebooks/forcats_misc.ipynb @@ -5,26 +5,10 @@ "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:55:37][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -36,7 +20,7 @@ { "data": { "text/markdown": [ - "### # fct_inorder " + "###
★ fct_inorder
" ], "text/plain": [ "" @@ -68,7 +52,7 @@ { "data": { "text/markdown": [ - "### # fct_count " + "###
★ fct_count
" ], "text/plain": [ "" @@ -102,7 +86,7 @@ { "data": { "text/markdown": [ - "### # fct_match " + "###
★ fct_match
" ], "text/plain": [ "" @@ -135,7 +119,7 @@ { "data": { "text/markdown": [ - "### # fct_unique " + "###
★ fct_unique
" ], "text/plain": [ "" @@ -165,7 +149,7 @@ { "data": { "text/markdown": [ - "### # lvls_reorder " + "###
★ lvls_reorder
" ], "text/plain": [ "" @@ -200,7 +184,7 @@ { "data": { "text/markdown": [ - "### # lvls_revalue " + "###
★ lvls_revalue
" ], "text/plain": [ "" @@ -232,7 +216,7 @@ { "data": { "text/markdown": [ - "### # lvls_expand " + "###
★ lvls_expand
" ], "text/plain": [ "" @@ -264,7 +248,7 @@ { "data": { "text/markdown": [ - "### # lvls_union " + "###
★ lvls_union
" ], "text/plain": [ "" @@ -293,11 +277,12 @@ } ], "source": [ + "%run nb_helpers.py\n", + "\n", "import numpy\n", "from datar.all import *\n", "from datar.datasets import gss_cat\n", "\n", - "%run nb_helpers.py\n", "\n", "nb_header(\n", " as_factor,\n", @@ -372,7 +357,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/pwwang/miniconda3/lib/python3.9/site-packages/IPython/lib/pretty.py:700: FutureWarning: Index.ravel returning ndarray is deprecated; in a future version this will return a view on self.\n", + "/home/pwwang/miniconda3/lib/python3.9/site-packages/IPython/lib/pretty.py:778: FutureWarning: Index.ravel returning ndarray is deprecated; in a future version this will return a view on self.\n", " output = repr(obj)\n" ] }, @@ -427,25 +412,24 @@ " \n", " \n", " a\n", + " b\n", " c\n", " d\n", " e\n", " f\n", - " g\n", " h\n", - " i\n", " j\n", " k\n", - " ...\n", + " l\n", + " m\n", + " n\n", + " o\n", " p\n", - " q\n", " r\n", " s\n", " t\n", " u\n", - " v\n", - " w\n", - " y\n", + " x\n", " z\n", " \n", " \n", @@ -462,7 +446,6 @@ " <int64>\n", " <int64>\n", " <int64>\n", - " ...\n", " <int64>\n", " <int64>\n", " <int64>\n", @@ -476,47 +459,43 @@ " \n", " \n", " count\n", - " 22\n", - " 26\n", - " 4\n", - " 5\n", - " 1\n", - " 71\n", - " 41\n", - " 91\n", - " 12\n", - " 78\n", - " ...\n", - " 1\n", + " 113\n", + " 110\n", + " 19\n", + " 37\n", + " 76\n", + " 38\n", + " 11\n", + " 98\n", + " 14\n", " 2\n", - " 119\n", - " 90\n", - " 8\n", + " 101\n", + " 92\n", + " 6\n", + " 10\n", + " 84\n", + " 11\n", + " 49\n", + " 2\n", + " 126\n", " 1\n", - " 3\n", - " 25\n", - " 125\n", - " 99\n", " \n", " \n", "\n", - "

1 rows × 22 columns

\n", "\n" ], "text/plain": [ - " a c d e f g h i j \\\n", + " a b c d e f h j k \\\n", " \n", - "count 22 26 4 5 1 71 41 91 12 \n", - "\n", - " k ... p q r s t u v \\\n", - " ... \n", - "count 78 1 2 119 90 8 1 3 \n", + "count 113 110 19 37 76 38 11 98 14 \n", "\n", - " w y z \n", - " \n", - "count 25 125 99 \n", + " l m n o p r s t u \\\n", + " \n", + "count 2 101 92 6 10 84 11 49 2 \n", "\n", - "[1 rows x 22 columns]" + " x z \n", + " \n", + "count 126 1 " ] }, "execution_count": 5, @@ -568,112 +547,102 @@ " \n", " 0\n", " a\n", - " 22\n", + " 113\n", " \n", " \n", " 1\n", - " c\n", - " 26\n", + " b\n", + " 110\n", " \n", " \n", " 2\n", - " d\n", - " 4\n", + " c\n", + " 19\n", " \n", " \n", " 3\n", - " e\n", - " 5\n", + " d\n", + " 37\n", " \n", " \n", " 4\n", - " f\n", - " 1\n", + " e\n", + " 76\n", " \n", " \n", " 5\n", - " g\n", - " 71\n", + " f\n", + " 38\n", " \n", " \n", " 6\n", " h\n", - " 41\n", + " 11\n", " \n", " \n", " 7\n", - " i\n", - " 91\n", + " j\n", + " 98\n", " \n", " \n", " 8\n", - " j\n", - " 12\n", + " k\n", + " 14\n", " \n", " \n", " 9\n", - " k\n", - " 78\n", + " l\n", + " 2\n", " \n", " \n", " 10\n", " m\n", - " 125\n", + " 101\n", " \n", " \n", " 11\n", - " o\n", - " 51\n", + " n\n", + " 92\n", " \n", " \n", " 12\n", - " p\n", - " 1\n", + " o\n", + " 6\n", " \n", " \n", " 13\n", - " q\n", - " 2\n", + " p\n", + " 10\n", " \n", " \n", " 14\n", " r\n", - " 119\n", + " 84\n", " \n", " \n", " 15\n", " s\n", - " 90\n", + " 11\n", " \n", " \n", " 16\n", " t\n", - " 8\n", + " 49\n", " \n", " \n", " 17\n", " u\n", - " 1\n", + " 2\n", " \n", " \n", " 18\n", - " v\n", - " 3\n", + " x\n", + " 126\n", " \n", " \n", " 19\n", - " w\n", - " 25\n", - " \n", - " \n", - " 20\n", - " y\n", - " 125\n", - " \n", - " \n", - " 21\n", " z\n", - " 99\n", + " 1\n", " \n", " \n", "\n", @@ -682,28 +651,26 @@ "text/plain": [ " f n\n", " \n", - "0 a 22\n", - "1 c 26\n", - "2 d 4\n", - "3 e 5\n", - "4 f 1\n", - "5 g 71\n", - "6 h 41\n", - "7 i 91\n", - "8 j 12\n", - "9 k 78\n", - "10 m 125\n", - "11 o 51\n", - "12 p 1\n", - "13 q 2\n", - "14 r 119\n", - "15 s 90\n", - "16 t 8\n", - "17 u 1\n", - "18 v 3\n", - "19 w 25\n", - "20 y 125\n", - "21 z 99" + "0 a 113\n", + "1 b 110\n", + "2 c 19\n", + "3 d 37\n", + "4 e 76\n", + "5 f 38\n", + "6 h 11\n", + "7 j 98\n", + "8 k 14\n", + "9 l 2\n", + "10 m 101\n", + "11 n 92\n", + "12 o 6\n", + "13 p 10\n", + "14 r 84\n", + "15 s 11\n", + "16 t 49\n", + "17 u 2\n", + "18 x 126\n", + "19 z 1" ] }, "execution_count": 6, @@ -752,113 +719,103 @@ " <int64>\n", " \n", " \n", - " 10\n", - " m\n", - " 125\n", + " 18\n", + " x\n", + " 126\n", " \n", " \n", - " 20\n", - " y\n", - " 125\n", + " 0\n", + " a\n", + " 113\n", " \n", " \n", - " 14\n", - " r\n", - " 119\n", + " 1\n", + " b\n", + " 110\n", " \n", " \n", - " 21\n", - " z\n", - " 99\n", + " 10\n", + " m\n", + " 101\n", " \n", " \n", " 7\n", - " i\n", - " 91\n", - " \n", - " \n", - " 15\n", - " s\n", - " 90\n", + " j\n", + " 98\n", " \n", " \n", - " 9\n", - " k\n", - " 78\n", + " 11\n", + " n\n", + " 92\n", " \n", " \n", - " 5\n", - " g\n", - " 71\n", + " 14\n", + " r\n", + " 84\n", " \n", " \n", - " 11\n", - " o\n", - " 51\n", + " 4\n", + " e\n", + " 76\n", " \n", " \n", - " 6\n", - " h\n", - " 41\n", + " 16\n", + " t\n", + " 49\n", " \n", " \n", - " 1\n", - " c\n", - " 26\n", + " 5\n", + " f\n", + " 38\n", " \n", " \n", - " 19\n", - " w\n", - " 25\n", + " 3\n", + " d\n", + " 37\n", " \n", " \n", - " 0\n", - " a\n", - " 22\n", + " 2\n", + " c\n", + " 19\n", " \n", " \n", " 8\n", - " j\n", - " 12\n", + " k\n", + " 14\n", " \n", " \n", - " 16\n", - " t\n", - " 8\n", + " 6\n", + " h\n", + " 11\n", " \n", " \n", - " 3\n", - " e\n", - " 5\n", + " 15\n", + " s\n", + " 11\n", " \n", " \n", - " 2\n", - " d\n", - " 4\n", + " 13\n", + " p\n", + " 10\n", " \n", " \n", - " 18\n", - " v\n", - " 3\n", + " 12\n", + " o\n", + " 6\n", " \n", " \n", - " 13\n", - " q\n", + " 9\n", + " l\n", " 2\n", " \n", " \n", - " 4\n", - " f\n", - " 1\n", - " \n", - " \n", " 17\n", " u\n", - " 1\n", + " 2\n", " \n", " \n", - " 12\n", - " p\n", + " 19\n", + " z\n", " 1\n", " \n", " \n", @@ -868,28 +825,26 @@ "text/plain": [ " f n\n", " \n", - "10 m 125\n", - "20 y 125\n", - "14 r 119\n", - "21 z 99\n", - "7 i 91\n", - "15 s 90\n", - "9 k 78\n", - "5 g 71\n", - "11 o 51\n", - "6 h 41\n", - "1 c 26\n", - "19 w 25\n", - "0 a 22\n", - "8 j 12\n", - "16 t 8\n", - "3 e 5\n", - "2 d 4\n", - "18 v 3\n", - "13 q 2\n", - "4 f 1\n", - "17 u 1\n", - "12 p 1" + "18 x 126\n", + "0 a 113\n", + "1 b 110\n", + "10 m 101\n", + "7 j 98\n", + "11 n 92\n", + "14 r 84\n", + "4 e 76\n", + "16 t 49\n", + "5 f 38\n", + "3 d 37\n", + "2 c 19\n", + "8 k 14\n", + "6 h 11\n", + "15 s 11\n", + "13 p 10\n", + "12 o 6\n", + "9 l 2\n", + "17 u 2\n", + "19 z 1" ] }, "execution_count": 7, @@ -940,134 +895,122 @@ " <float64>\n", " \n", " \n", - " 10\n", - " m\n", - " 125\n", - " 0.125\n", + " 18\n", + " x\n", + " 126\n", + " 0.126\n", " \n", " \n", - " 20\n", - " y\n", - " 125\n", - " 0.125\n", + " 0\n", + " a\n", + " 113\n", + " 0.113\n", " \n", " \n", - " 14\n", - " r\n", - " 119\n", - " 0.119\n", + " 1\n", + " b\n", + " 110\n", + " 0.110\n", " \n", " \n", - " 21\n", - " z\n", - " 99\n", - " 0.099\n", + " 10\n", + " m\n", + " 101\n", + " 0.101\n", " \n", " \n", " 7\n", - " i\n", - " 91\n", - " 0.091\n", - " \n", - " \n", - " 15\n", - " s\n", - " 90\n", - " 0.090\n", + " j\n", + " 98\n", + " 0.098\n", " \n", " \n", - " 9\n", - " k\n", - " 78\n", - " 0.078\n", + " 11\n", + " n\n", + " 92\n", + " 0.092\n", " \n", " \n", - " 5\n", - " g\n", - " 71\n", - " 0.071\n", + " 14\n", + " r\n", + " 84\n", + " 0.084\n", " \n", " \n", - " 11\n", - " o\n", - " 51\n", - " 0.051\n", + " 4\n", + " e\n", + " 76\n", + " 0.076\n", " \n", " \n", - " 6\n", - " h\n", - " 41\n", - " 0.041\n", + " 16\n", + " t\n", + " 49\n", + " 0.049\n", " \n", " \n", - " 1\n", - " c\n", - " 26\n", - " 0.026\n", + " 5\n", + " f\n", + " 38\n", + " 0.038\n", " \n", " \n", - " 19\n", - " w\n", - " 25\n", - " 0.025\n", + " 3\n", + " d\n", + " 37\n", + " 0.037\n", " \n", " \n", - " 0\n", - " a\n", - " 22\n", - " 0.022\n", + " 2\n", + " c\n", + " 19\n", + " 0.019\n", " \n", " \n", " 8\n", - " j\n", - " 12\n", - " 0.012\n", + " k\n", + " 14\n", + " 0.014\n", " \n", " \n", - " 16\n", - " t\n", - " 8\n", - " 0.008\n", + " 6\n", + " h\n", + " 11\n", + " 0.011\n", " \n", " \n", - " 3\n", - " e\n", - " 5\n", - " 0.005\n", + " 15\n", + " s\n", + " 11\n", + " 0.011\n", " \n", " \n", - " 2\n", - " d\n", - " 4\n", - " 0.004\n", + " 13\n", + " p\n", + " 10\n", + " 0.010\n", " \n", " \n", - " 18\n", - " v\n", - " 3\n", - " 0.003\n", + " 12\n", + " o\n", + " 6\n", + " 0.006\n", " \n", " \n", - " 13\n", - " q\n", + " 9\n", + " l\n", " 2\n", " 0.002\n", " \n", " \n", - " 4\n", - " f\n", - " 1\n", - " 0.001\n", - " \n", - " \n", " 17\n", " u\n", - " 1\n", - " 0.001\n", + " 2\n", + " 0.002\n", " \n", " \n", - " 12\n", - " p\n", + " 19\n", + " z\n", " 1\n", " 0.001\n", " \n", @@ -1078,28 +1021,26 @@ "text/plain": [ " f n p\n", " \n", - "10 m 125 0.125\n", - "20 y 125 0.125\n", - "14 r 119 0.119\n", - "21 z 99 0.099\n", - "7 i 91 0.091\n", - "15 s 90 0.090\n", - "9 k 78 0.078\n", - "5 g 71 0.071\n", - "11 o 51 0.051\n", - "6 h 41 0.041\n", - "1 c 26 0.026\n", - "19 w 25 0.025\n", - "0 a 22 0.022\n", - "8 j 12 0.012\n", - "16 t 8 0.008\n", - "3 e 5 0.005\n", - "2 d 4 0.004\n", - "18 v 3 0.003\n", - "13 q 2 0.002\n", - "4 f 1 0.001\n", - "17 u 1 0.001\n", - "12 p 1 0.001" + "18 x 126 0.126\n", + "0 a 113 0.113\n", + "1 b 110 0.110\n", + "10 m 101 0.101\n", + "7 j 98 0.098\n", + "11 n 92 0.092\n", + "14 r 84 0.084\n", + "4 e 76 0.076\n", + "16 t 49 0.049\n", + "5 f 38 0.038\n", + "3 d 37 0.037\n", + "2 c 19 0.019\n", + "8 k 14 0.014\n", + "6 h 11 0.011\n", + "15 s 11 0.011\n", + "13 p 10 0.010\n", + "12 o 6 0.006\n", + "9 l 2 0.002\n", + "17 u 2 0.002\n", + "19 z 1 0.001" ] }, "execution_count": 8, @@ -1268,9 +1209,9 @@ { "data": { "text/plain": [ - "['g', 'i', 'f', 'k', 'd', ..., 'o', 'j', 'e', 'm', 'n']\n", - "Length: 13\n", - "Categories (13, object): ['d', 'e', 'f', 'g', ..., 'm', 'n', 'o', 'p']" + "['l', 'm', 'h', 'u', 'k', ..., 'n', 'd', 'q', 'p', 'e']\n", + "Length: 15\n", + "Categories (15, object): ['d', 'e', 'f', 'g', ..., 'o', 'p', 'q', 'u']" ] }, "execution_count": 12, @@ -1292,9 +1233,9 @@ { "data": { "text/plain": [ - "['d', 'e', 'f', 'g', 'h', ..., 'l', 'm', 'n', 'o', 'p']\n", - "Length: 13\n", - "Categories (13, object): ['d', 'e', 'f', 'g', ..., 'm', 'n', 'o', 'p']" + "['d', 'e', 'f', 'g', 'h', ..., 'n', 'o', 'p', 'q', 'u']\n", + "Length: 15\n", + "Categories (15, object): ['d', 'e', 'f', 'g', ..., 'o', 'p', 'q', 'u']" ] }, "execution_count": 13, @@ -1315,7 +1256,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -1325,7 +1266,7 @@ "Categories (3, object): ['c', 'b', 'a']" ] }, - "execution_count": 18, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/full_seq.ipynb b/docs/notebooks/full_seq.ipynb index 5441c317..c9cd29b7 100644 --- a/docs/notebooks/full_seq.ipynb +++ b/docs/notebooks/full_seq.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:55:17][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # full_seq " + "###
★ full_seq
" ], "text/plain": [ "" @@ -78,10 +62,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/full_seq.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(full_seq)" ] }, diff --git a/docs/notebooks/group_by.ipynb b/docs/notebooks/group_by.ipynb index bd79c355..55211cd9 100644 --- a/docs/notebooks/group_by.ipynb +++ b/docs/notebooks/group_by.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:54:51][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # group_by " + "###
★ group_by
" ], "text/plain": [ "" @@ -91,7 +75,7 @@ { "data": { "text/markdown": [ - "### # ungroup " + "###
★ ungroup
" ], "text/plain": [ "" @@ -124,10 +108,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/group_by.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(group_by, ungroup)" ] }, @@ -1077,7 +1062,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 01:55:14][datar][ INFO] `summarise()` has grouped output by ['vs'] (override with `_groups` argument)\n" + "[2022-03-18 17:45:11][datar][ INFO] `summarise()` has grouped output by ['vs'] (override with `_groups` argument)\n" ] }, { diff --git a/docs/notebooks/group_map.ipynb b/docs/notebooks/group_map.ipynb index 6a619752..9bb3cea5 100644 --- a/docs/notebooks/group_map.ipynb +++ b/docs/notebooks/group_map.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:54:27][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # group_map " + "###
★ group_map
" ], "text/plain": [ "" @@ -68,11 +52,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/group_map.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import mtcars, iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(group_map)" ] }, diff --git a/docs/notebooks/group_split.ipynb b/docs/notebooks/group_split.ipynb index 80366be3..98a717e9 100644 --- a/docs/notebooks/group_split.ipynb +++ b/docs/notebooks/group_split.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:54:16][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # group_split " + "###
★ group_split
" ], "text/plain": [ "" @@ -68,11 +52,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/group_split.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(group_split)" ] }, @@ -776,7 +760,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "65de8d54", "metadata": { "execution": { @@ -790,21 +774,22 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "iris >> group_by(f.Species) >> group_keys() >> rowwise() >> group_split()" + "out = iris >> group_by(f.Species) >> group_keys() >> rowwise() >> group_split()\n", + "out" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "264e6811", "metadata": { "execution": { @@ -829,13 +814,13 @@ " 0 virginica]" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "list(_)" + "list(out)" ] }, { diff --git a/docs/notebooks/group_trim.ipynb b/docs/notebooks/group_trim.ipynb index b6549e92..bc4b7545 100644 --- a/docs/notebooks/group_trim.ipynb +++ b/docs/notebooks/group_trim.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:01:31][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:01:31][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:01:31][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:01:32][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # group_trim " + "###
★ group_trim
" ], "text/plain": [ "" @@ -68,16 +52,16 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/group_trim.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(group_trim)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "d4c86c45", "metadata": { "execution": { @@ -146,7 +130,7 @@ "2 c []" ] }, - "execution_count": 9, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -158,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "id": "a11f49fc", "metadata": { "execution": { @@ -221,7 +205,7 @@ "1 b [1]" ] }, - "execution_count": 10, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/lead-lag.ipynb b/docs/notebooks/lead-lag.ipynb index c82c8fa5..5a0f3d29 100644 --- a/docs/notebooks/lead-lag.ipynb +++ b/docs/notebooks/lead-lag.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 16:46:16][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # lead " + "###
★ lead
" ], "text/plain": [ "" @@ -79,7 +63,7 @@ { "data": { "text/markdown": [ - "### # lag " + "###
★ lag
" ], "text/plain": [ "" @@ -105,11 +89,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/lead-lag.html\n", + "%run nb_helpers.py\n", "\n", - "from datar import f\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(lead, lag, book='lead-lag')" ] }, @@ -129,12 +112,7 @@ { "data": { "text/plain": [ - "0 NaN\n", - "1 1.0\n", - "2 2.0\n", - "3 3.0\n", - "4 4.0\n", - "dtype: float64" + "array([nan, 1., 2., 3., 4.])" ] }, "execution_count": 2, @@ -164,12 +142,7 @@ { "data": { "text/plain": [ - "0 2.0\n", - "1 3.0\n", - "2 4.0\n", - "3 5.0\n", - "4 NaN\n", - "dtype: float64" + "array([ 2., 3., 4., 5., nan])" ] }, "execution_count": 3, @@ -296,12 +269,7 @@ { "data": { "text/plain": [ - "0 NaN\n", - "1 1.0\n", - "2 2.0\n", - "3 3.0\n", - "4 4.0\n", - "dtype: float64" + "array([nan, 1., 2., 3., 4.])" ] }, "execution_count": 5, @@ -329,12 +297,7 @@ { "data": { "text/plain": [ - "0 NaN\n", - "1 NaN\n", - "2 1.0\n", - "3 2.0\n", - "4 3.0\n", - "dtype: float64" + "array([nan, nan, 1., 2., 3.])" ] }, "execution_count": 6, @@ -362,12 +325,7 @@ { "data": { "text/plain": [ - "0 2.0\n", - "1 3.0\n", - "2 4.0\n", - "3 5.0\n", - "4 NaN\n", - "dtype: float64" + "array([ 2., 3., 4., 5., nan])" ] }, "execution_count": 7, @@ -395,12 +353,7 @@ { "data": { "text/plain": [ - "0 3.0\n", - "1 4.0\n", - "2 5.0\n", - "3 NaN\n", - "4 NaN\n", - "dtype: float64" + "array([ 3., 4., 5., nan, nan])" ] }, "execution_count": 8, @@ -428,12 +381,7 @@ { "data": { "text/plain": [ - "0 0\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "dtype: int64" + "array([0, 1, 2, 3, 4])" ] }, "execution_count": 9, @@ -461,12 +409,7 @@ { "data": { "text/plain": [ - "0 2\n", - "1 3\n", - "2 4\n", - "3 5\n", - "4 6\n", - "dtype: int64" + "array([2, 3, 4, 5, 6])" ] }, "execution_count": 10, @@ -528,19 +471,19 @@ " 0\n", " 2000\n", " 0\n", - " 4.0\n", + " 1.0\n", " \n", " \n", " 1\n", " 2001\n", " 1\n", - " 0.0\n", + " 4.0\n", " \n", " \n", " 2\n", " 2002\n", " 4\n", - " NaN\n", + " 16.0\n", " \n", " \n", " 3\n", @@ -552,13 +495,13 @@ " 4\n", " 2004\n", " 16\n", - " 1.0\n", + " NaN\n", " \n", " \n", " 5\n", " 2005\n", " 25\n", - " 16.0\n", + " 0.0\n", " \n", " \n", "\n", @@ -567,12 +510,12 @@ "text/plain": [ " year value previous_year_value\n", " \n", - "0 2000 0 4.0\n", - "1 2001 1 0.0\n", - "2 2002 4 NaN\n", + "0 2000 0 1.0\n", + "1 2001 1 4.0\n", + "2 2002 4 16.0\n", "3 2003 9 25.0\n", - "4 2004 16 1.0\n", - "5 2005 25 16.0" + "4 2004 16 NaN\n", + "5 2005 25 0.0" ] }, "execution_count": 11, @@ -640,37 +583,37 @@ " 0\n", " 2000\n", " 0\n", - " 1.0\n", + " NaN\n", " \n", " \n", " 1\n", " 2001\n", " 1\n", - " NaN\n", + " 0.0\n", " \n", " \n", " 2\n", " 2002\n", " 4\n", - " 0.0\n", + " 1.0\n", " \n", " \n", " 3\n", " 2003\n", " 9\n", - " 9.0\n", + " 4.0\n", " \n", " \n", " 4\n", " 2004\n", " 16\n", - " 16.0\n", + " 9.0\n", " \n", " \n", " 5\n", " 2005\n", " 25\n", - " 4.0\n", + " 16.0\n", " \n", " \n", "\n", @@ -679,12 +622,12 @@ "text/plain": [ " year value previous_year_value\n", " \n", - "0 2000 0 1.0\n", - "1 2001 1 NaN\n", - "2 2002 4 0.0\n", - "3 2003 9 9.0\n", - "4 2004 16 16.0\n", - "5 2005 25 4.0" + "0 2000 0 NaN\n", + "1 2001 1 0.0\n", + "2 2002 4 1.0\n", + "3 2003 9 4.0\n", + "4 2004 16 9.0\n", + "5 2005 25 16.0" ] }, "execution_count": 12, diff --git a/docs/notebooks/mutate-joins.ipynb b/docs/notebooks/mutate-joins.ipynb index 9f07f956..389be7e1 100644 --- a/docs/notebooks/mutate-joins.ipynb +++ b/docs/notebooks/mutate-joins.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 01:43:32][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # inner_join " + "###
★ inner_join
" ], "text/plain": [ "" @@ -88,7 +72,7 @@ { "data": { "text/markdown": [ - "### # left_join " + "###
★ left_join
" ], "text/plain": [ "" @@ -115,7 +99,7 @@ { "data": { "text/markdown": [ - "### # right_join " + "###
★ right_join
" ], "text/plain": [ "" @@ -146,7 +130,7 @@ { "data": { "text/markdown": [ - "### # full_join " + "###
★ full_join
" ], "text/plain": [ "" @@ -173,10 +157,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/mutate-joins.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import band_members, band_instruments, band_instruments2\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(inner_join, left_join, right_join, full_join, book='mutate-joins')" ] }, diff --git a/docs/notebooks/mutate.ipynb b/docs/notebooks/mutate.ipynb index efe21dd5..15efc420 100644 --- a/docs/notebooks/mutate.ipynb +++ b/docs/notebooks/mutate.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:01:53][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:01:53][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:01:53][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:01:54][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # mutate " + "###
★ mutate
" ], "text/plain": [ "" @@ -117,7 +101,7 @@ { "data": { "text/markdown": [ - "### # transmute " + "###
★ transmute
" ], "text/plain": [ "" @@ -144,10 +128,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/mutate.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(mutate, transmute)" ] }, @@ -1070,7 +1055,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:33.853847Z", @@ -1129,7 +1114,7 @@ "0 1 6 2" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1141,7 +1126,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:33.903931Z", @@ -1206,7 +1191,7 @@ "0 1 2 a b 3" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1218,7 +1203,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:33.959501Z", @@ -1277,7 +1262,7 @@ "0 1 2 3" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1288,7 +1273,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:34.079819Z", @@ -1347,7 +1332,7 @@ "0 a b 3" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1358,7 +1343,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:34.156265Z", @@ -1411,7 +1396,7 @@ "0 3" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1422,7 +1407,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:34.225635Z", @@ -1567,7 +1552,7 @@ "[87 rows x 4 columns]" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1580,7 +1565,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:34.326340Z", @@ -1725,7 +1710,7 @@ "[87 rows x 4 columns]" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1740,7 +1725,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:34.629345Z", @@ -2003,7 +1988,7 @@ "[87 rows x 12 columns]" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/n_distinct.ipynb b/docs/notebooks/n_distinct.ipynb index d606dac2..fd1fc6e8 100644 --- a/docs/notebooks/n_distinct.ipynb +++ b/docs/notebooks/n_distinct.ipynb @@ -16,7 +16,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # sample " + "###
★ sample
" ], "text/plain": [ "" @@ -69,7 +69,7 @@ { "data": { "text/markdown": [ - "### # n_distinct " + "###
★ n_distinct
" ], "text/plain": [ "" @@ -93,10 +93,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/n_distinct.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import sample, n_distinct\n", "\n", - "%run nb_helpers.py\n", "nb_header(sample, n_distinct, book='n_distinct')" ] }, diff --git a/docs/notebooks/na_if.ipynb b/docs/notebooks/na_if.ipynb index 7369927e..ec9c436b 100644 --- a/docs/notebooks/na_if.ipynb +++ b/docs/notebooks/na_if.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:17:42][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # na_if " + "###
★ na_if
" ], "text/plain": [ "" @@ -75,10 +59,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/na_if.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(na_if)" ] }, @@ -98,12 +83,7 @@ { "data": { "text/plain": [ - "0 0.0\n", - "1 1.0\n", - "2 NaN\n", - "3 3.0\n", - "4 4.0\n", - "Name: x, dtype: float64" + "array([ 0., 1., nan, 3., 4.])" ] }, "execution_count": 2, diff --git a/docs/notebooks/nb_helpers.py b/docs/notebooks/nb_helpers.py index 3420582a..534c1ae8 100644 --- a/docs/notebooks/nb_helpers.py +++ b/docs/notebooks/nb_helpers.py @@ -4,38 +4,58 @@ from IPython.display import display, Markdown, HTML from IPython.core.interactiveshell import InteractiveShell import pardoc -from varname.helpers import debug +from varname.helpers import debug # noqa +from datar import options + +_ = options(warn_builtin_names=False) InteractiveShell.ast_node_interactivity = "all" BINDER_URL = ( - 'https://mybinder.org/v2/gh/pwwang/datar/' - '93d069f3ca36711fc811c61dcf60e9fc3d1460a5?filepath=docs%2Fnotebooks%2F' + "https://mybinder.org/v2/gh/pwwang/datar/" + "dev?filepath=docs%2Fnotebooks%2F" ) + def nb_header(*funcs, book=None): """Print the header of a notebooks, mostly the docs""" if book is None: book = funcs[0].__name__ - display(HTML( - '
Try this notebook ' - f'on ' - 'binder.
' - )) + display( + HTML( + '
' + 'Try this notebook on ' + f'' + "binder.
" + ) + ) for func in funcs: try: + parsed = pardoc.google_parser.parse(func.__doc__) + try: + del parsed["Examples"] + except KeyError: + pass + except Exception: + formatted = func.__doc__ + else: formatted = pardoc.google_parser.format( - func.__doc__, - to='markdown', + parsed, + to="markdown", heading=5, - indent_base='  ' + indent_base="  ", ) - except: - formatted = func.__doc__ - display(Markdown(f'{"#"*3} # {func.__name__} ')) + + display(Markdown( + f'{"#"*3} ' + '
' + f'★ {func.__name__}' + '
') + ) display(Markdown(formatted)) + @contextmanager def try_catch(): """Catch the error and print it out""" diff --git a/docs/notebooks/near.ipynb b/docs/notebooks/near.ipynb index 4bfb36f5..69196782 100644 --- a/docs/notebooks/near.ipynb +++ b/docs/notebooks/near.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:18:19][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # near " + "###
★ near
" ], "text/plain": [ "" @@ -80,10 +64,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/near.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(near)" ] }, @@ -103,8 +87,7 @@ { "data": { "text/plain": [ - "0 False\n", - "Name: x, dtype: bool" + "array([False])" ] }, "execution_count": 2, diff --git a/docs/notebooks/nest-join.ipynb b/docs/notebooks/nest-join.ipynb index 54329d16..c59cb87d 100644 --- a/docs/notebooks/nest-join.ipynb +++ b/docs/notebooks/nest-join.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:19:33][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # nest_join " + "###
★ nest_join
" ], "text/plain": [ "" @@ -72,11 +56,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/nest_join.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import band_members, band_instruments\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(nest_join, book='nest-join')" ] }, @@ -168,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "french-egyptian", "metadata": { "execution": { @@ -190,7 +174,7 @@ " 0 guitar]" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/nest.ipynb b/docs/notebooks/nest.ipynb index ecb9da7b..4348be36 100644 --- a/docs/notebooks/nest.ipynb +++ b/docs/notebooks/nest.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:23:01][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # nest " + "###
★ nest
" ], "text/plain": [ "" @@ -80,7 +64,7 @@ { "data": { "text/markdown": [ - "### # unnest " + "###
★ unnest
" ], "text/plain": [ "" @@ -141,10 +125,10 @@ } ], "source": [ + "%run nb_helpers.py\n", "from datar.datasets import iris, fish_encounters, mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(nest, unnest)" ] }, @@ -393,7 +377,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.142333Z", @@ -403,68 +387,6 @@ } }, "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Speciesdata
<object><object>
0setosa<DF 50x4>
1versicolor<DF 50x4>
2virginica<DF 50x4>
\n", - "
\n" - ], - "text/plain": [ - " Species data\n", - " \n", - "0 setosa \n", - "1 versicolor \n", - "2 virginica " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "text/html": [ @@ -909,19 +831,19 @@ "49 5.0 3.3 1.4 0.2" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "iris >> nest(data=~f.Species)\n", - "_.data[0]" + "out = iris >> nest(data=~f.Species)\n", + "out.data[0]" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.186712Z", @@ -989,7 +911,7 @@ "2 virginica " ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -1001,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.207533Z", @@ -1074,7 +996,7 @@ "2 virginica " ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1085,7 +1007,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.265853Z", @@ -1158,7 +1080,7 @@ "2 virginica " ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1169,7 +1091,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.333173Z", @@ -1335,7 +1257,7 @@ "[TibbleGrouped: fish (n=19)]" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1346,7 +1268,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.401063Z", @@ -1421,7 +1343,7 @@ "[TibbleGrouped: cyl (n=3)]" ] }, - "execution_count": 15, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1441,7 +1363,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.451681Z", @@ -1521,7 +1443,7 @@ "3 3 3 2" ] }, - "execution_count": 19, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1540,7 +1462,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.535876Z", @@ -1627,7 +1549,7 @@ "4 3 3.0 2.0" ] }, - "execution_count": 20, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1638,7 +1560,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.550880Z", @@ -1711,7 +1633,7 @@ "2 c 3 22" ] }, - "execution_count": 21, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1727,7 +1649,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:27.614822Z", @@ -1814,7 +1736,7 @@ "4 c 3 22" ] }, - "execution_count": 22, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/nth.ipynb b/docs/notebooks/nth.ipynb index 08406e32..fddcf97b 100644 --- a/docs/notebooks/nth.ipynb +++ b/docs/notebooks/nth.ipynb @@ -16,7 +16,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # nth " + "###
★ nth
" ], "text/plain": [ "" @@ -64,7 +64,7 @@ { "data": { "text/markdown": [ - "### # first " + "###
★ first
" ], "text/plain": [ "" @@ -88,7 +88,7 @@ { "data": { "text/markdown": [ - "### # last " + "###
★ last
" ], "text/plain": [ "" @@ -112,10 +112,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/nth.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import nth, first, last\n", "\n", - "%run nb_helpers.py\n", "nb_header(nth, first, last)" ] }, @@ -348,7 +348,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "advanced-stations", "metadata": { "execution": { @@ -363,7 +363,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ValueError] 'NoneType' object has no attribute 'iloc' (registered function: nth) (registered function: first)\n" + "[ValueError] 'NoneType' object has no attribute 'iloc' (registered function: first)\n" ] } ], diff --git a/docs/notebooks/pack.ipynb b/docs/notebooks/pack.ipynb index 92a8c9b3..07205e2b 100644 --- a/docs/notebooks/pack.ipynb +++ b/docs/notebooks/pack.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:20:43][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # pack " + "###
★ pack
" ], "text/plain": [ "" @@ -77,7 +61,7 @@ { "data": { "text/markdown": [ - "### # unpack " + "###
★ unpack
" ], "text/plain": [ "" @@ -127,10 +111,11 @@ } ], "source": [ + "%run nb_helpers.py\n", + "\n", "from datar.datasets import iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(pack, unpack)" ] }, @@ -553,7 +538,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.791974Z", @@ -608,7 +593,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -617,7 +602,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -626,7 +611,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -636,12 +621,12 @@ "text/plain": [ " x y$a y$b z$X z$Y z$Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -659,7 +644,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.848630Z", @@ -714,7 +699,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -723,7 +708,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -732,7 +717,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -742,12 +727,12 @@ "text/plain": [ " x a b z$X z$Y z$Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -758,7 +743,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.916193Z", @@ -813,7 +798,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -822,7 +807,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -831,7 +816,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -841,12 +826,12 @@ "text/plain": [ " x a b X Y Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -857,7 +842,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.947604Z", @@ -912,7 +897,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -921,7 +906,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -930,7 +915,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -940,12 +925,12 @@ "text/plain": [ " x y_a y_b z_X z_Y z_Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -956,7 +941,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.965059Z", @@ -1011,7 +996,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -1020,7 +1005,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -1029,7 +1014,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -1039,12 +1024,12 @@ "text/plain": [ " x a b X Y Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1057,7 +1042,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:11.981674Z", @@ -1112,7 +1097,7 @@ " 1\n", " 4\n", " a\n", - " 0.377095\n", + " 0.661364\n", " True\n", " \n", " \n", @@ -1121,7 +1106,7 @@ " 2\n", " 3\n", " b\n", - " 0.194955\n", + " 0.607962\n", " False\n", " \n", " \n", @@ -1130,7 +1115,7 @@ " 3\n", " 2\n", " c\n", - " 0.958411\n", + " 0.211850\n", " NaN\n", " \n", " \n", @@ -1140,12 +1125,12 @@ "text/plain": [ " x a b X Y Z\n", " \n", - "0 1 1 4 a 0.377095 True\n", - "1 2 2 3 b 0.194955 False\n", - "2 3 3 2 c 0.958411 NaN" + "0 1 1 4 a 0.661364 True\n", + "1 2 2 3 b 0.607962 False\n", + "2 3 3 2 c 0.211850 NaN" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/pivot_longer.ipynb b/docs/notebooks/pivot_longer.ipynb index 3db49483..ad4896dd 100644 --- a/docs/notebooks/pivot_longer.ipynb +++ b/docs/notebooks/pivot_longer.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:20:51][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # pivot_longer " + "###
★ pivot_longer
" ], "text/plain": [ "" @@ -154,11 +138,11 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/pivot_longer.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import relig_income, billboard, who, anscombe\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(pivot_longer)" ] }, diff --git a/docs/notebooks/pivot_wider.ipynb b/docs/notebooks/pivot_wider.ipynb index 819bfecf..1e41b10e 100644 --- a/docs/notebooks/pivot_wider.ipynb +++ b/docs/notebooks/pivot_wider.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:21:03][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # pivot_wider " + "###
★ pivot_wider
" ], "text/plain": [ "" @@ -103,11 +87,11 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/pivot_wider.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import fish_encounters, us_rent_income, warpbreaks \n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(pivot_wider)" ] }, diff --git a/docs/notebooks/pull.ipynb b/docs/notebooks/pull.ipynb index 0f0bc210..e3af6251 100644 --- a/docs/notebooks/pull.ipynb +++ b/docs/notebooks/pull.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:28:49][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # pull " + "###
★ pull
" ], "text/plain": [ "" @@ -106,11 +90,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/pull.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import starwars, mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(pull)" ] }, @@ -295,7 +279,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "suspended-cooler", "metadata": { "execution": { @@ -344,7 +328,7 @@ "Name: cyl, dtype: int64" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -355,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "iraqi-shaft", "metadata": { "execution": { @@ -382,7 +366,7 @@ "Name: z, dtype: int64" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -394,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "danish-assignment", "metadata": { "execution": { @@ -497,7 +481,7 @@ " 'Padmé Amidala': 165.0}" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/ranking.ipynb b/docs/notebooks/ranking.ipynb index f4a0e0d8..37335637 100644 --- a/docs/notebooks/ranking.ipynb +++ b/docs/notebooks/ranking.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:28:54][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # row_number " + "###
★ row_number
" ], "text/plain": [ "" @@ -77,7 +61,7 @@ { "data": { "text/markdown": [ - "### # min_rank " + "###
★ min_rank
" ], "text/plain": [ "" @@ -101,7 +85,7 @@ { "data": { "text/markdown": [ - "### # dense_rank " + "###
★ dense_rank
" ], "text/plain": [ "" @@ -125,7 +109,7 @@ { "data": { "text/markdown": [ - "### # percent_rank " + "###
★ percent_rank
" ], "text/plain": [ "" @@ -149,7 +133,7 @@ { "data": { "text/markdown": [ - "### # cume_dist " + "###
★ cume_dist
" ], "text/plain": [ "" @@ -173,7 +157,7 @@ { "data": { "text/markdown": [ - "### # ntile " + "###
★ ntile
" ], "text/plain": [ "" @@ -188,13 +172,13 @@ "##### A rough rank, which breaks the input vector into `n` buckets.\n", "\n", "##### Note:\n", - "  The output tiles are 0-based. \n", + "  The output tiles are 1-based. \n", "  The result is slightly different from dplyr's ntile. \n", "  >>> ntile(c(1,2,NA,1,0,NA), 2) # dplyr \n", "  >>> # 1 2 NA 2 1 NA \n", "  >>> ntile([1,2,NA,1,0,NA], n=2) # datar \n", - "  >>> # [0, 1, NA, 0, 0, NA] \n", - "  >>> # Categories (2, int64): [0 < 1] \n" + "  >>> # [1, 2, NA, 1, 1, NA] \n", + "  >>> # Categories (2, int64): [1 < 2] \n" ], "text/plain": [ "" @@ -206,13 +190,13 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/ranking.html\n", + "%run nb_helpers.py\n", + "\n", "import numpy\n", - "from pandas.core.series import Series\n", "\n", "from datar.datasets import mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(row_number, min_rank, dense_rank, percent_rank, cume_dist, ntile)" ] }, @@ -278,7 +262,7 @@ " 4.0\n", " 1.00\n", " 1.0\n", - " 1\n", + " 2\n", " \n", " \n", " 1\n", @@ -288,7 +272,7 @@ " 1.0\n", " 0.00\n", " 0.2\n", - " 0\n", + " 1\n", " \n", " \n", " 2\n", @@ -298,7 +282,7 @@ " 3.0\n", " 0.75\n", " 0.8\n", - " 0\n", + " 1\n", " \n", " \n", " 3\n", @@ -308,7 +292,7 @@ " 2.0\n", " 0.25\n", " 0.6\n", - " 0\n", + " 1\n", " \n", " \n", " 4\n", @@ -318,7 +302,7 @@ " 2.0\n", " 0.25\n", " 0.6\n", - " 0\n", + " 1\n", " \n", " \n", " 5\n", @@ -346,11 +330,11 @@ "\n", " ntile \n", " \n", - "0 1 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", + "0 2 \n", + "1 1 \n", + "2 1 \n", + "3 1 \n", + "4 1 \n", "5 NaN " ] }, @@ -418,42 +402,42 @@ " \n", " 0\n", " 0\n", - " 0\n", + " 1\n", " \n", " \n", " 1\n", " 1\n", - " 0\n", + " 1\n", " \n", " \n", " 2\n", " 2\n", - " 0\n", + " 1\n", " \n", " \n", " 3\n", " 3\n", - " 1\n", + " 2\n", " \n", " \n", " 4\n", " 4\n", - " 1\n", + " 2\n", " \n", " \n", " 5\n", " 5\n", - " 2\n", + " 3\n", " \n", " \n", " 6\n", " 6\n", - " 2\n", + " 3\n", " \n", " \n", " 7\n", " 7\n", - " 2\n", + " 3\n", " \n", " \n", "\n", @@ -462,14 +446,14 @@ "text/plain": [ " x ntile\n", " \n", - "0 0 0\n", - "1 1 0\n", - "2 2 0\n", - "3 3 1\n", - "4 4 1\n", - "5 5 2\n", - "6 6 2\n", - "7 7 2" + "0 0 1\n", + "1 1 1\n", + "2 2 1\n", + "3 3 2\n", + "4 4 2\n", + "5 5 3\n", + "6 6 3\n", + "7 7 3" ] }, "execution_count": 3, diff --git a/docs/notebooks/recode.ipynb b/docs/notebooks/recode.ipynb index 917300e3..22025927 100644 --- a/docs/notebooks/recode.ipynb +++ b/docs/notebooks/recode.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:29:14][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:29:15][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # recode " + "###
★ recode
" ], "text/plain": [ "" @@ -84,10 +68,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/recode.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(recode)" ] }, @@ -107,8 +91,8 @@ { "data": { "text/plain": [ - "array(['b', 'c', 'b', 'Apple', 'Apple', 'Apple', 'b', 'b', 'c', 'Apple'],\n", - " dtype='Try this notebook on binder." + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # relocate " + "###
★ relocate
" ], "text/plain": [ "" @@ -88,9 +72,9 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/relocate.html\n", + "%run nb_helpers.py\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(relocate)" ] }, diff --git a/docs/notebooks/rename.ipynb b/docs/notebooks/rename.ipynb index 315a1d39..908a829d 100644 --- a/docs/notebooks/rename.ipynb +++ b/docs/notebooks/rename.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:31:02][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # rename " + "###
★ rename
" ], "text/plain": [ "" @@ -76,7 +60,7 @@ { "data": { "text/markdown": [ - "### # rename_with " + "###
★ rename_with
" ], "text/plain": [ "" @@ -113,11 +97,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/rename.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(rename, rename_with)" ] }, @@ -803,7 +787,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "f9cee963", "metadata": { "execution": { @@ -962,7 +946,7 @@ "[150 rows x 5 columns]" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/replace_na.ipynb b/docs/notebooks/replace_na.ipynb index b2d6b233..50f84752 100644 --- a/docs/notebooks/replace_na.ipynb +++ b/docs/notebooks/replace_na.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:31:08][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # replace_na " + "###
★ replace_na
" ], "text/plain": [ "" @@ -84,10 +68,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/replace_na.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(replace_na)" ] }, diff --git a/docs/notebooks/rownames.ipynb b/docs/notebooks/rownames.ipynb index f19bc781..cae3c315 100644 --- a/docs/notebooks/rownames.ipynb +++ b/docs/notebooks/rownames.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:24.723831Z", @@ -15,7 +15,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -27,7 +27,7 @@ { "data": { "text/markdown": [ - "### # has_rownames " + "###
★ has_rownames
" ], "text/plain": [ "" @@ -59,7 +59,7 @@ { "data": { "text/markdown": [ - "### # remove_rownames " + "###
★ remove_rownames
" ], "text/plain": [ "" @@ -91,7 +91,7 @@ { "data": { "text/markdown": [ - "### # rownames_to_column " + "###
★ rownames_to_column
" ], "text/plain": [ "" @@ -125,7 +125,7 @@ { "data": { "text/markdown": [ - "### # rowid_to_column " + "###
★ rowid_to_column
" ], "text/plain": [ "" @@ -156,7 +156,7 @@ { "data": { "text/markdown": [ - "### # column_to_rownames " + "###
★ column_to_rownames
" ], "text/plain": [ "" @@ -189,18 +189,18 @@ ], "source": [ "# https://tibble.tidyverse.org/reference/add_row.html\n", + "%run nb_helpers.py\n", "\n", "from datar.tibble import *\n", "from datar.base import head\n", "from datar.datasets import mtcars, iris\n", "\n", - "%run nb_helpers.py\n", "nb_header(has_rownames, remove_rownames, rownames_to_column, rowid_to_column, column_to_rownames, book='rownames')" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.100163Z", @@ -216,7 +216,7 @@ "True" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -227,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.111548Z", @@ -243,7 +243,7 @@ "False" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -254,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.125381Z", @@ -270,7 +270,7 @@ "False" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -281,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.135636Z", @@ -898,7 +898,7 @@ "31 2.780 18.60 1 1 4 2 " ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -910,7 +910,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.372381Z", @@ -1077,7 +1077,7 @@ "Valiant 20.22 1 0 3 1 " ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1088,7 +1088,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:27.415514Z", @@ -1206,7 +1206,7 @@ "5 5.4 5 3.9 1.7 0.4 setosa" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/rows.ipynb b/docs/notebooks/rows.ipynb index 1c40ef36..7bb71c90 100644 --- a/docs/notebooks/rows.ipynb +++ b/docs/notebooks/rows.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:31:19][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # rows_insert " + "###
★ rows_insert
" ], "text/plain": [ "" @@ -90,7 +74,7 @@ { "data": { "text/markdown": [ - "### # rows_update " + "###
★ rows_update
" ], "text/plain": [ "" @@ -136,7 +120,7 @@ { "data": { "text/markdown": [ - "### # rows_patch " + "###
★ rows_patch
" ], "text/plain": [ "" @@ -182,7 +166,7 @@ { "data": { "text/markdown": [ - "### # rows_upsert " + "###
★ rows_upsert
" ], "text/plain": [ "" @@ -231,7 +215,7 @@ { "data": { "text/markdown": [ - "### # rows_delete " + "###
★ rows_delete
" ], "text/plain": [ "" @@ -276,9 +260,9 @@ } ], "source": [ + "%run nb_helpers.py\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(\n", " rows_insert, \n", " rows_update, \n", @@ -390,7 +374,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:21][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:21][datar][ INFO] Matching, by='a'\n" ] }, { @@ -488,7 +472,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:21][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:22][datar][ INFO] Matching, by='a'\n" ] }, { @@ -520,7 +504,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:21][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:22][datar][ INFO] Matching, by='a'\n" ] }, { @@ -695,7 +679,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:21][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:23][datar][ INFO] Matching, by='a'\n" ] }, { @@ -786,7 +770,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:21][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:24][datar][ INFO] Matching, by='a'\n" ] }, { @@ -884,7 +868,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:22][datar][ INFO] Matching, by='a'\n" + "[2022-03-18 17:35:25][datar][ INFO] Matching, by='a'\n" ] }, { @@ -961,8 +945,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:31:22][datar][ INFO] Matching, by='a'\n", - "[2022-03-06 02:31:22][datar][ INFO] Ignoring extra columns: ['b']\n" + "[2022-03-18 17:35:25][datar][ INFO] Matching, by='a'\n", + "[2022-03-18 17:35:25][datar][ INFO] Ignoring extra columns: ['b']\n" ] }, { diff --git a/docs/notebooks/rowwise.ipynb b/docs/notebooks/rowwise.ipynb index ddb0e5d6..932ed163 100644 --- a/docs/notebooks/rowwise.ipynb +++ b/docs/notebooks/rowwise.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:33:14][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # rowwise " + "###
★ rowwise
" ], "text/plain": [ "" @@ -78,11 +62,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/rowwise.html\n", + "%run nb_helpers.py\n", "\n", - "from datar.datasets import iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(rowwise)" ] }, @@ -135,45 +118,45 @@ " \n", " \n", " 0\n", - " 0.903370\n", - " 0.381683\n", - " 0.289784\n", - " 0.524946\n", + " 0.598889\n", + " 0.750540\n", + " 0.165758\n", + " 0.505062\n", " \n", " \n", " 1\n", - " 0.862827\n", - " 0.432840\n", - " 0.152457\n", - " 0.482708\n", + " 0.639200\n", + " 0.945952\n", + " 0.339303\n", + " 0.641485\n", " \n", " \n", " 2\n", - " 0.329482\n", - " 0.993187\n", - " 0.022119\n", - " 0.448263\n", + " 0.415240\n", + " 0.725756\n", + " 0.184642\n", + " 0.441879\n", " \n", " \n", " 3\n", - " 0.329133\n", - " 0.365489\n", - " 0.841347\n", - " 0.511990\n", + " 0.375989\n", + " 0.432068\n", + " 0.113932\n", + " 0.307329\n", " \n", " \n", " 4\n", - " 0.376668\n", - " 0.604747\n", - " 0.967709\n", - " 0.649708\n", + " 0.361752\n", + " 0.253792\n", + " 0.621856\n", + " 0.412466\n", " \n", " \n", " 5\n", - " 0.808531\n", - " 0.968855\n", - " 0.165438\n", - " 0.647608\n", + " 0.260691\n", + " 0.200419\n", + " 0.391062\n", + " 0.284058\n", " \n", " \n", "\n", @@ -183,12 +166,12 @@ "text/plain": [ " x y z m\n", " \n", - "0 0.903370 0.381683 0.289784 0.524946\n", - "1 0.862827 0.432840 0.152457 0.482708\n", - "2 0.329482 0.993187 0.022119 0.448263\n", - "3 0.329133 0.365489 0.841347 0.511990\n", - "4 0.376668 0.604747 0.967709 0.649708\n", - "5 0.808531 0.968855 0.165438 0.647608\n", + "0 0.598889 0.750540 0.165758 0.505062\n", + "1 0.639200 0.945952 0.339303 0.641485\n", + "2 0.415240 0.725756 0.184642 0.441879\n", + "3 0.375989 0.432068 0.113932 0.307329\n", + "4 0.361752 0.253792 0.621856 0.412466\n", + "5 0.260691 0.200419 0.391062 0.284058\n", "[TibbleRowwise: (n=6)]" ] }, @@ -205,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:10.067015Z", @@ -252,45 +235,45 @@ " \n", " \n", " 0\n", - " 0.903370\n", - " 0.381683\n", - " 0.289784\n", - " 0.524946\n", + " 0.598889\n", + " 0.750540\n", + " 0.165758\n", + " 0.505062\n", " \n", " \n", " 1\n", - " 0.862827\n", - " 0.432840\n", - " 0.152457\n", - " 0.482708\n", + " 0.639200\n", + " 0.945952\n", + " 0.339303\n", + " 0.641485\n", " \n", " \n", " 2\n", - " 0.329482\n", - " 0.993187\n", - " 0.022119\n", - " 0.448263\n", + " 0.415240\n", + " 0.725756\n", + " 0.184642\n", + " 0.441879\n", " \n", " \n", " 3\n", - " 0.329133\n", - " 0.365489\n", - " 0.841347\n", - " 0.511990\n", + " 0.375989\n", + " 0.432068\n", + " 0.113932\n", + " 0.307329\n", " \n", " \n", " 4\n", - " 0.376668\n", - " 0.604747\n", - " 0.967709\n", - " 0.649708\n", + " 0.361752\n", + " 0.253792\n", + " 0.621856\n", + " 0.412466\n", " \n", " \n", " 5\n", - " 0.808531\n", - " 0.968855\n", - " 0.165438\n", - " 0.647608\n", + " 0.260691\n", + " 0.200419\n", + " 0.391062\n", + " 0.284058\n", " \n", " \n", "\n", @@ -300,16 +283,16 @@ "text/plain": [ " x y z m\n", " \n", - "0 0.903370 0.381683 0.289784 0.524946\n", - "1 0.862827 0.432840 0.152457 0.482708\n", - "2 0.329482 0.993187 0.022119 0.448263\n", - "3 0.329133 0.365489 0.841347 0.511990\n", - "4 0.376668 0.604747 0.967709 0.649708\n", - "5 0.808531 0.968855 0.165438 0.647608\n", + "0 0.598889 0.750540 0.165758 0.505062\n", + "1 0.639200 0.945952 0.339303 0.641485\n", + "2 0.415240 0.725756 0.184642 0.441879\n", + "3 0.375989 0.432068 0.113932 0.307329\n", + "4 0.361752 0.253792 0.621856 0.412466\n", + "5 0.260691 0.200419 0.391062 0.284058\n", "[TibbleRowwise: (n=6)]" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -320,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:10.157870Z", @@ -367,45 +350,45 @@ " \n", " \n", " 0\n", - " 0.903370\n", - " 0.381683\n", - " 0.289784\n", - " 0.289784\n", + " 0.598889\n", + " 0.750540\n", + " 0.165758\n", + " 0.165758\n", " \n", " \n", " 1\n", - " 0.862827\n", - " 0.432840\n", - " 0.152457\n", - " 0.152457\n", + " 0.639200\n", + " 0.945952\n", + " 0.339303\n", + " 0.339303\n", " \n", " \n", " 2\n", - " 0.329482\n", - " 0.993187\n", - " 0.022119\n", - " 0.022119\n", + " 0.415240\n", + " 0.725756\n", + " 0.184642\n", + " 0.184642\n", " \n", " \n", " 3\n", - " 0.329133\n", - " 0.365489\n", - " 0.841347\n", - " 0.329133\n", + " 0.375989\n", + " 0.432068\n", + " 0.113932\n", + " 0.113932\n", " \n", " \n", " 4\n", - " 0.376668\n", - " 0.604747\n", - " 0.967709\n", - " 0.376668\n", + " 0.361752\n", + " 0.253792\n", + " 0.621856\n", + " 0.253792\n", " \n", " \n", " 5\n", - " 0.808531\n", - " 0.968855\n", - " 0.165438\n", - " 0.165438\n", + " 0.260691\n", + " 0.200419\n", + " 0.391062\n", + " 0.200419\n", " \n", " \n", "\n", @@ -415,16 +398,16 @@ "text/plain": [ " x y z m\n", " \n", - "0 0.903370 0.381683 0.289784 0.289784\n", - "1 0.862827 0.432840 0.152457 0.152457\n", - "2 0.329482 0.993187 0.022119 0.022119\n", - "3 0.329133 0.365489 0.841347 0.329133\n", - "4 0.376668 0.604747 0.967709 0.376668\n", - "5 0.808531 0.968855 0.165438 0.165438\n", + "0 0.598889 0.750540 0.165758 0.165758\n", + "1 0.639200 0.945952 0.339303 0.339303\n", + "2 0.415240 0.725756 0.184642 0.184642\n", + "3 0.375989 0.432068 0.113932 0.113932\n", + "4 0.361752 0.253792 0.621856 0.253792\n", + "5 0.260691 0.200419 0.391062 0.200419\n", "[TibbleRowwise: (n=6)]" ] }, - "execution_count": 9, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -435,7 +418,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:10.231704Z", @@ -482,45 +465,45 @@ " \n", " \n", " 0\n", - " 0.903370\n", - " 0.381683\n", - " 0.289784\n", - " 0.289784\n", + " 0.598889\n", + " 0.750540\n", + " 0.165758\n", + " 0.165758\n", " \n", " \n", " 1\n", - " 0.862827\n", - " 0.432840\n", - " 0.152457\n", - " 0.152457\n", + " 0.639200\n", + " 0.945952\n", + " 0.339303\n", + " 0.339303\n", " \n", " \n", " 2\n", - " 0.329482\n", - " 0.993187\n", - " 0.022119\n", - " 0.022119\n", + " 0.415240\n", + " 0.725756\n", + " 0.184642\n", + " 0.184642\n", " \n", " \n", " 3\n", - " 0.329133\n", - " 0.365489\n", - " 0.841347\n", - " 0.329133\n", + " 0.375989\n", + " 0.432068\n", + " 0.113932\n", + " 0.113932\n", " \n", " \n", " 4\n", - " 0.376668\n", - " 0.604747\n", - " 0.967709\n", - " 0.376668\n", + " 0.361752\n", + " 0.253792\n", + " 0.621856\n", + " 0.253792\n", " \n", " \n", " 5\n", - " 0.808531\n", - " 0.968855\n", - " 0.165438\n", - " 0.165438\n", + " 0.260691\n", + " 0.200419\n", + " 0.391062\n", + " 0.200419\n", " \n", " \n", "\n", @@ -530,16 +513,16 @@ "text/plain": [ " x y z m\n", " \n", - "0 0.903370 0.381683 0.289784 0.289784\n", - "1 0.862827 0.432840 0.152457 0.152457\n", - "2 0.329482 0.993187 0.022119 0.022119\n", - "3 0.329133 0.365489 0.841347 0.329133\n", - "4 0.376668 0.604747 0.967709 0.376668\n", - "5 0.808531 0.968855 0.165438 0.165438\n", + "0 0.598889 0.750540 0.165758 0.165758\n", + "1 0.639200 0.945952 0.339303 0.339303\n", + "2 0.415240 0.725756 0.184642 0.184642\n", + "3 0.375989 0.432068 0.113932 0.113932\n", + "4 0.361752 0.253792 0.621856 0.253792\n", + "5 0.260691 0.200419 0.391062 0.200419\n", "[TibbleRowwise: (n=6)]" ] }, - "execution_count": 13, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -550,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:10.245426Z", @@ -597,45 +580,45 @@ " \n", " \n", " 0\n", - " 0.903370\n", - " 0.381683\n", - " 0.289784\n", - " 0.289784\n", + " 0.598889\n", + " 0.750540\n", + " 0.165758\n", + " 0.165758\n", " \n", " \n", " 1\n", - " 0.862827\n", - " 0.432840\n", - " 0.152457\n", - " 0.152457\n", + " 0.639200\n", + " 0.945952\n", + " 0.339303\n", + " 0.339303\n", " \n", " \n", " 2\n", - " 0.329482\n", - " 0.993187\n", - " 0.022119\n", - " 0.022119\n", + " 0.415240\n", + " 0.725756\n", + " 0.184642\n", + " 0.184642\n", " \n", " \n", " 3\n", - " 0.329133\n", - " 0.365489\n", - " 0.841347\n", - " 0.329133\n", + " 0.375989\n", + " 0.432068\n", + " 0.113932\n", + " 0.113932\n", " \n", " \n", " 4\n", - " 0.376668\n", - " 0.604747\n", - " 0.967709\n", - " 0.376668\n", + " 0.361752\n", + " 0.253792\n", + " 0.621856\n", + " 0.253792\n", " \n", " \n", " 5\n", - " 0.808531\n", - " 0.968855\n", - " 0.165438\n", - " 0.165438\n", + " 0.260691\n", + " 0.200419\n", + " 0.391062\n", + " 0.200419\n", " \n", " \n", "\n", @@ -644,15 +627,15 @@ "text/plain": [ " x y z m\n", " \n", - "0 0.903370 0.381683 0.289784 0.289784\n", - "1 0.862827 0.432840 0.152457 0.152457\n", - "2 0.329482 0.993187 0.022119 0.022119\n", - "3 0.329133 0.365489 0.841347 0.329133\n", - "4 0.376668 0.604747 0.967709 0.376668\n", - "5 0.808531 0.968855 0.165438 0.165438" + "0 0.598889 0.750540 0.165758 0.165758\n", + "1 0.639200 0.945952 0.339303 0.339303\n", + "2 0.415240 0.725756 0.184642 0.184642\n", + "3 0.375989 0.432068 0.113932 0.113932\n", + "4 0.361752 0.253792 0.621856 0.253792\n", + "5 0.260691 0.200419 0.391062 0.200419" ] }, - "execution_count": 14, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -663,7 +646,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:28:10.296858Z", @@ -716,7 +699,7 @@ " 1\n", " 1\n", " 1\n", - " [-0.49710972258374775]\n", + " [-0.7634531680295189]\n", " \n", " \n", " 1\n", @@ -724,7 +707,7 @@ " 2\n", " 2\n", " 4\n", - " [-5.952767882433143, 1.3006955205328627]\n", + " [1.3116228201838442, -2.3156113026975653]\n", " \n", " \n", " 2\n", @@ -732,7 +715,7 @@ " 3\n", " 1\n", " 2\n", - " [-0.034757059529934686, 1.211681840606102, 0.4...\n", + " [1.47493909065586, -1.074116930262953, -1.0587...\n", " \n", " \n", "\n", @@ -748,13 +731,13 @@ "\n", " z \n", " \n", - "0 [-0.49710972258374775] \n", - "1 [-5.952767882433143, 1.3006955205328627] \n", - "2 [-0.034757059529934686, 1.211681840606102, 0.4... \n", + "0 [-0.7634531680295189] \n", + "1 [1.3116228201838442, -2.3156113026975653] \n", + "2 [1.47493909065586, -1.074116930262953, -1.0587... \n", "[TibbleRowwise: sim (n=3)]" ] }, - "execution_count": 16, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/select.ipynb b/docs/notebooks/select.ipynb index 742bbbaa..830a73c7 100644 --- a/docs/notebooks/select.ipynb +++ b/docs/notebooks/select.ipynb @@ -12,26 +12,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:33:21][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -43,7 +27,7 @@ { "data": { "text/markdown": [ - "### # select " + "###
★ select
" ], "text/plain": [ "" @@ -83,10 +67,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/select.html\n", + "%run nb_helpers.py\n", + "\n", "from datar.datasets import starwars, iris\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(select)" ] }, @@ -1979,7 +1964,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-07-16T22:27:15.890597Z", @@ -2124,7 +2109,7 @@ "[150 rows x 4 columns]" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/separate.ipynb b/docs/notebooks/separate.ipynb index ea1226d5..cf2593cc 100644 --- a/docs/notebooks/separate.ipynb +++ b/docs/notebooks/separate.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:33:28][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # separate " + "###
★ separate
" ], "text/plain": [ "" @@ -109,7 +93,7 @@ { "data": { "text/markdown": [ - "### # separate_rows " + "###
★ separate_rows
" ], "text/plain": [ "" @@ -143,10 +127,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/separate.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(separate, separate_rows)" ] }, @@ -334,8 +318,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:33:30][datar][WARNING] Expected 2 pieces. Additional pieces discarded in 1 rows ['x y z'].\n", - "[2022-03-06 02:33:30][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['x'].\n" + "[2022-03-18 17:04:11][datar][WARNING] Expected 2 pieces. Additional pieces discarded in 1 rows ['x y z'].\n", + "[2022-03-18 17:04:11][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['x'].\n" ] }, { @@ -601,7 +585,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:33:33][datar][WARNING] Expected 3 pieces. Missing pieces filled with `NA` in 2 rows ['x', 'x y'].\n" + "[2022-03-18 17:04:14][datar][WARNING] Expected 3 pieces. Missing pieces filled with `NA` in 2 rows ['x', 'x y'].\n" ] }, { @@ -862,7 +846,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:33:37][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\n" + "[2022-03-18 17:04:16][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\n" ] }, { @@ -947,7 +931,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "f1a9ec03", "metadata": { "execution": { @@ -962,83 +946,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:33:38][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\n" + "[2022-03-18 17:04:58][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\n" ] }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
keyvalue
<object><float64>
0x1.0
1x2.0
2y4.0
3zNaN
4NaNNaN
\n", - "
\n" - ], - "text/plain": [ - " key value\n", - " \n", - "0 x 1.0\n", - "1 x 2.0\n", - "2 y 4.0\n", - "3 z NaN\n", - "4 NaN NaN" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "text/plain": [ @@ -1047,19 +957,19 @@ "dtype: object" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df >> separate(f.x, c(\"key\",\"value\"), \":\", convert={'value': float}) \n", - "_.dtypes" + "out = df >> separate(f.x, c(\"key\",\"value\"), \":\", convert={'value': float}) \n", + "out.dtypes" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "c7af94b8", "metadata": { "execution": { @@ -1080,7 +990,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "47243faf", "metadata": { "execution": { @@ -1175,7 +1085,7 @@ "5 3 h 6" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/setops.ipynb b/docs/notebooks/setops.ipynb index 43f2cd8e..281a2be4 100644 --- a/docs/notebooks/setops.ipynb +++ b/docs/notebooks/setops.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:33:42][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # intersect " + "###
★ intersect
" ], "text/plain": [ "" @@ -68,7 +52,7 @@ { "data": { "text/markdown": [ - "### # union " + "###
★ union
" ], "text/plain": [ "" @@ -92,7 +76,7 @@ { "data": { "text/markdown": [ - "### # setdiff " + "###
★ setdiff
" ], "text/plain": [ "" @@ -116,7 +100,7 @@ { "data": { "text/markdown": [ - "### # union_all " + "###
★ union_all
" ], "text/plain": [ "" @@ -147,7 +131,7 @@ { "data": { "text/markdown": [ - "### # setequal " + "###
★ setequal
" ], "text/plain": [ "" @@ -171,11 +155,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/setops.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(intersect, union, setdiff, union_all, setequal, book='setops')" ] }, diff --git a/docs/notebooks/slice.ipynb b/docs/notebooks/slice.ipynb index b95a440d..ed17539d 100644 --- a/docs/notebooks/slice.ipynb +++ b/docs/notebooks/slice.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:11:36][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # slice " + "###
★ slice
" ], "text/plain": [ "" @@ -94,7 +78,7 @@ { "data": { "text/markdown": [ - "### # slice_head " + "###
★ slice_head
" ], "text/plain": [ "" @@ -132,7 +116,7 @@ { "data": { "text/markdown": [ - "### # slice_max " + "###
★ slice_max
" ], "text/plain": [ "" @@ -159,7 +143,7 @@ { "data": { "text/markdown": [ - "### # slice_min " + "###
★ slice_min
" ], "text/plain": [ "" @@ -198,7 +182,7 @@ { "data": { "text/markdown": [ - "### # slice_sample " + "###
★ slice_sample
" ], "text/plain": [ "" @@ -225,7 +209,7 @@ { "data": { "text/markdown": [ - "### # slice_tail " + "###
★ slice_tail
" ], "text/plain": [ "" @@ -252,11 +236,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/slice.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import mtcars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(slice, slice_head, slice_max, slice_min, slice_sample, slice_tail)" ] }, @@ -361,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 3, "id": "93030877", "metadata": { "execution": { @@ -449,7 +433,7 @@ "Volvo 142E 1 1 4 2 " ] }, - "execution_count": 29, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -3084,18 +3068,18 @@ " <int64>\n", " \n", " \n", - " Valiant\n", - " 18.1\n", - " 6\n", - " 225.0\n", - " 105\n", + " Dodge Challenger\n", + " 15.5\n", + " 8\n", + " 318.0\n", + " 150\n", " 2.76\n", - " 3.460\n", - " 20.22\n", - " 1\n", + " 3.52\n", + " 16.87\n", + " 0\n", " 0\n", " 3\n", - " 1\n", + " 2\n", " \n", " \n", " Ford Pantera L\n", @@ -3104,7 +3088,7 @@ " 351.0\n", " 264\n", " 4.22\n", - " 3.170\n", + " 3.17\n", " 14.50\n", " 0\n", " 1\n", @@ -3112,67 +3096,67 @@ " 4\n", " \n", " \n", - " Porsche 914-2\n", - " 26.0\n", - " 4\n", - " 120.3\n", - " 91\n", - " 4.43\n", - " 2.140\n", - " 16.70\n", - " 0\n", - " 1\n", - " 5\n", - " 2\n", - " \n", - " \n", - " Toyota Corolla\n", - " 33.9\n", + " Fiat 128\n", + " 32.4\n", " 4\n", - " 71.1\n", - " 65\n", - " 4.22\n", - " 1.835\n", - " 19.90\n", + " 78.7\n", + " 66\n", + " 4.08\n", + " 2.20\n", + " 19.47\n", " 1\n", " 1\n", " 4\n", " 1\n", " \n", " \n", - " Merc 280C\n", - " 17.8\n", - " 6\n", - " 167.6\n", - " 123\n", - " 3.92\n", - " 3.440\n", - " 18.90\n", + " Maserati Bora\n", + " 15.0\n", + " 8\n", + " 301.0\n", + " 335\n", + " 3.54\n", + " 3.57\n", + " 14.60\n", + " 0\n", " 1\n", + " 5\n", + " 8\n", + " \n", + " \n", + " Merc 450SL\n", + " 17.3\n", + " 8\n", + " 275.8\n", + " 180\n", + " 3.07\n", + " 3.73\n", + " 17.60\n", " 0\n", - " 4\n", - " 4\n", + " 0\n", + " 3\n", + " 3\n", " \n", " \n", "\n", "\n" ], "text/plain": [ - " mpg cyl disp hp drat wt \\\n", - " \n", - "Valiant 18.1 6 225.0 105 2.76 3.460 \n", - "Ford Pantera L 15.8 8 351.0 264 4.22 3.170 \n", - "Porsche 914-2 26.0 4 120.3 91 4.43 2.140 \n", - "Toyota Corolla 33.9 4 71.1 65 4.22 1.835 \n", - "Merc 280C 17.8 6 167.6 123 3.92 3.440 \n", + " mpg cyl disp hp drat wt \\\n", + " \n", + "Dodge Challenger 15.5 8 318.0 150 2.76 3.52 \n", + "Ford Pantera L 15.8 8 351.0 264 4.22 3.17 \n", + "Fiat 128 32.4 4 78.7 66 4.08 2.20 \n", + "Maserati Bora 15.0 8 301.0 335 3.54 3.57 \n", + "Merc 450SL 17.3 8 275.8 180 3.07 3.73 \n", "\n", - " qsec vs am gear carb \n", - " \n", - "Valiant 20.22 1 0 3 1 \n", - "Ford Pantera L 14.50 0 1 5 4 \n", - "Porsche 914-2 16.70 0 1 5 2 \n", - "Toyota Corolla 19.90 1 1 4 1 \n", - "Merc 280C 18.90 1 0 4 4 " + " qsec vs am gear carb \n", + " \n", + "Dodge Challenger 16.87 0 0 3 2 \n", + "Ford Pantera L 14.50 0 1 5 4 \n", + "Fiat 128 19.47 1 1 4 1 \n", + "Maserati Bora 14.60 0 1 5 8 \n", + "Merc 450SL 17.60 0 0 3 3 " ] }, "execution_count": 15, @@ -3736,95 +3720,95 @@ " <int64>\n", " \n", " \n", - " Pontiac Firebird\n", - " 19.2\n", + " Merc 450SE\n", + " 16.4\n", " 8\n", - " 400.0\n", - " 175\n", - " 3.08\n", - " 3.845\n", - " 17.05\n", + " 275.8\n", + " 180\n", + " 3.07\n", + " 4.070\n", + " 17.40\n", " 0\n", " 0\n", " 3\n", - " 2\n", + " 3\n", " \n", " \n", - " Merc 240D\n", - " 24.4\n", - " 4\n", - " 146.7\n", - " 62\n", - " 3.69\n", - " 3.190\n", - " 20.00\n", + " Merc 280C\n", + " 17.8\n", + " 6\n", + " 167.6\n", + " 123\n", + " 3.92\n", + " 3.440\n", + " 18.90\n", " 1\n", " 0\n", " 4\n", - " 2\n", - " \n", - " \n", - " Cadillac Fleetwood\n", - " 10.4\n", - " 8\n", - " 472.0\n", - " 205\n", - " 2.93\n", - " 5.250\n", - " 17.98\n", - " 0\n", - " 0\n", - " 3\n", " 4\n", " \n", " \n", - " Ferrari Dino\n", - " 19.7\n", - " 6\n", - " 145.0\n", - " 175\n", - " 3.62\n", - " 2.770\n", - " 15.50\n", - " 0\n", + " Lotus Europa\n", + " 30.4\n", + " 4\n", + " 95.1\n", + " 113\n", + " 3.77\n", + " 1.513\n", + " 16.90\n", + " 1\n", " 1\n", " 5\n", - " 6\n", + " 2\n", " \n", " \n", - " Mazda RX4 Wag\n", + " Mazda RX4\n", " 21.0\n", " 6\n", " 160.0\n", " 110\n", " 3.90\n", - " 2.875\n", - " 17.02\n", + " 2.620\n", + " 16.46\n", " 0\n", " 1\n", " 4\n", " 4\n", " \n", + " \n", + " Camaro Z28\n", + " 13.3\n", + " 8\n", + " 350.0\n", + " 245\n", + " 3.73\n", + " 3.840\n", + " 15.41\n", + " 0\n", + " 0\n", + " 3\n", + " 4\n", + " \n", " \n", "\n", "\n" ], "text/plain": [ - " mpg cyl disp hp drat wt \\\n", - " \n", - "Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 \n", - "Merc 240D 24.4 4 146.7 62 3.69 3.190 \n", - "Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 \n", - "Ferrari Dino 19.7 6 145.0 175 3.62 2.770 \n", - "Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 \n", + " mpg cyl disp hp drat wt \\\n", + " \n", + "Merc 450SE 16.4 8 275.8 180 3.07 4.070 \n", + "Merc 280C 17.8 6 167.6 123 3.92 3.440 \n", + "Lotus Europa 30.4 4 95.1 113 3.77 1.513 \n", + "Mazda RX4 21.0 6 160.0 110 3.90 2.620 \n", + "Camaro Z28 13.3 8 350.0 245 3.73 3.840 \n", "\n", - " qsec vs am gear carb \n", - " \n", - "Pontiac Firebird 17.05 0 0 3 2 \n", - "Merc 240D 20.00 1 0 4 2 \n", - "Cadillac Fleetwood 17.98 0 0 3 4 \n", - "Ferrari Dino 15.50 0 1 5 6 \n", - "Mazda RX4 Wag 17.02 0 1 4 4 " + " qsec vs am gear carb \n", + " \n", + "Merc 450SE 17.40 0 0 3 3 \n", + "Merc 280C 18.90 1 0 4 4 \n", + "Lotus Europa 16.90 1 1 5 2 \n", + "Mazda RX4 16.46 0 1 4 4 \n", + "Camaro Z28 15.41 0 0 3 4 " ] }, "execution_count": 19, @@ -3883,27 +3867,27 @@ " \n", " 0\n", " a\n", - " 0.809743\n", + " 0.739922\n", " \n", " \n", " 1\n", " b\n", - " 0.110534\n", + " 0.033397\n", " \n", " \n", " 2\n", " b\n", - " 0.363136\n", + " 0.851489\n", " \n", " \n", " 3\n", " c\n", - " 0.857736\n", + " 0.886006\n", " \n", " \n", " 4\n", " c\n", - " 0.187621\n", + " 0.068798\n", " \n", " \n", "\n", @@ -3913,11 +3897,11 @@ "text/plain": [ " group x\n", " \n", - "0 a 0.809743\n", - "1 b 0.110534\n", - "2 b 0.363136\n", - "3 c 0.857736\n", - "4 c 0.187621\n", + "0 a 0.739922\n", + "1 b 0.033397\n", + "2 b 0.851489\n", + "3 c 0.886006\n", + "4 c 0.068798\n", "[TibbleGrouped: group (n=3)]" ] }, @@ -3981,17 +3965,17 @@ " \n", " 0\n", " b\n", - " 0.110534\n", + " 0.033397\n", " \n", " \n", " 1\n", " c\n", - " 0.857736\n", + " 0.886006\n", " \n", " \n", " 2\n", " c\n", - " 0.187621\n", + " 0.068798\n", " \n", " \n", "\n", @@ -4001,9 +3985,9 @@ "text/plain": [ " group x\n", " \n", - "0 b 0.110534\n", - "1 c 0.857736\n", - "2 c 0.187621\n", + "0 b 0.033397\n", + "1 c 0.886006\n", + "2 c 0.068798\n", "[TibbleGrouped: group (n=2)]" ] }, @@ -5372,32 +5356,32 @@ " \n", " 0\n", " a\n", - " 0.024847\n", + " 0.137090\n", " \n", " \n", " 1\n", " a\n", - " 0.389788\n", + " 0.160933\n", " \n", " \n", " 2\n", " b\n", - " 0.001498\n", + " 0.066202\n", " \n", " \n", " 3\n", " b\n", - " 0.016201\n", + " 0.138360\n", " \n", " \n", " 4\n", " c\n", - " 0.004985\n", + " 0.043403\n", " \n", " \n", " 5\n", " c\n", - " 0.052600\n", + " 0.068841\n", " \n", " \n", "\n", @@ -5407,12 +5391,12 @@ "text/plain": [ " group x\n", " \n", - "0 a 0.024847\n", - "1 a 0.389788\n", - "2 b 0.001498\n", - "3 b 0.016201\n", - "4 c 0.004985\n", - "5 c 0.052600\n", + "0 a 0.137090\n", + "1 a 0.160933\n", + "2 b 0.066202\n", + "3 b 0.138360\n", + "4 c 0.043403\n", + "5 c 0.068841\n", "[TibbleGrouped: group (n=3)]" ] }, @@ -5476,32 +5460,32 @@ " \n", " 0\n", " a\n", - " 0.979691\n", + " 0.983779\n", " \n", " \n", " 1\n", " a\n", - " 0.969839\n", + " 0.872443\n", " \n", " \n", " 2\n", " b\n", - " 0.967242\n", + " 0.987097\n", " \n", " \n", " 3\n", " b\n", - " 0.906166\n", + " 0.936791\n", " \n", " \n", " 4\n", " c\n", - " 0.995052\n", + " 0.984012\n", " \n", " \n", " 5\n", " c\n", - " 0.994709\n", + " 0.932186\n", " \n", " \n", "\n", @@ -5511,12 +5495,12 @@ "text/plain": [ " group x\n", " \n", - "0 a 0.979691\n", - "1 a 0.969839\n", - "2 b 0.967242\n", - "3 b 0.906166\n", - "4 c 0.995052\n", - "5 c 0.994709\n", + "0 a 0.983779\n", + "1 a 0.872443\n", + "2 b 0.987097\n", + "3 b 0.936791\n", + "4 c 0.984012\n", + "5 c 0.932186\n", "[TibbleGrouped: group (n=3)]" ] }, @@ -5576,32 +5560,32 @@ " \n", " 0\n", " a\n", - " 0.903480\n", + " 0.461532\n", " \n", " \n", " 1\n", " a\n", - " 0.969839\n", + " 0.137090\n", " \n", " \n", " 2\n", " b\n", - " 0.464387\n", + " 0.987097\n", " \n", " \n", " 3\n", " b\n", - " 0.122231\n", + " 0.816681\n", " \n", " \n", " 4\n", " c\n", - " 0.804479\n", + " 0.390507\n", " \n", " \n", " 5\n", " c\n", - " 0.994709\n", + " 0.677276\n", " \n", " \n", "\n", @@ -5611,12 +5595,12 @@ "text/plain": [ " group x\n", " \n", - "0 a 0.903480\n", - "1 a 0.969839\n", - "2 b 0.464387\n", - "3 b 0.122231\n", - "4 c 0.804479\n", - "5 c 0.994709\n", + "0 a 0.461532\n", + "1 a 0.137090\n", + "2 b 0.987097\n", + "3 b 0.816681\n", + "4 c 0.390507\n", + "5 c 0.677276\n", "[TibbleGrouped: group (n=3)]" ] }, diff --git a/docs/notebooks/summarise.ipynb b/docs/notebooks/summarise.ipynb index 3452397d..ed1a0263 100644 --- a/docs/notebooks/summarise.ipynb +++ b/docs/notebooks/summarise.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 18:08:44][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # summarise " + "###
★ summarise
" ], "text/plain": [ "" @@ -64,30 +48,6 @@ "\n", "Aliases - `summarize` \n", "\n", - "##### Examples:\n", - "  >>> df = tibble(x=[1,2,3,4]) \n", - "  >>> df >> summarise(y=sum(f.x), z=f.y*2) \n", - "  >>> # y z \n", - "  >>> # 0 10 20 \n", - "  >>> df >> summarise(y=sum(f.x), z=f.x+f.y) # fail \n", - "\n", - "  But they should not be mixed in later argument. For example: \n", - "  >>> df = tibble(x=[1,2,3,4], g=list('aabb')) >> group_by(f.g) \n", - "  >>> df >> summarise(n=n() + f.x) \n", - "  >>> # as expected: \n", - "  >>> g n \n", - "  >>> # 0 a 3 \n", - "  >>> # 1 a 4 \n", - "  >>> # 2 b 5 \n", - "  >>> # 3 b 6 \n", - "  >>> # [Groups: ['g'] (n=2)] \n", - "  >>> # However: \n", - "  >>> df >> summarise(y=1, n=n() + f.y) \n", - "  >>> # n() will be recycling output instead of input \n", - "  >>> # g y n \n", - "  >>> # 0 a 1 2 \n", - "  >>> # 1 b 1 2 \n", - "\n", "##### Args:\n", "  `_groups`: Grouping structure of the result. \n", "    - \"drop_last\": dropping the last level of grouping.\n", @@ -115,11 +75,11 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/summarise.html\n", + "%run nb_helpers.py\n", "\n", "from datar.datasets import mtcars, starwars\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(summarise)" ] }, @@ -295,7 +255,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 18:08:47][datar][ INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\n" + "[2022-03-18 17:33:44][datar][ INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\n" ] }, { @@ -508,7 +468,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "e5098761", "metadata": { "execution": { @@ -523,7 +483,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 18:10:24][datar][ INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\n" + "[2022-03-18 17:33:45][datar][ INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\n" ] }, { @@ -532,7 +492,7 @@ "['cyl']" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -546,7 +506,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "01a62149", "metadata": { "execution": { @@ -620,7 +580,7 @@ "2 8 353.100000 NaN" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -634,7 +594,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "d2f97ff6", "metadata": { "execution": { @@ -703,7 +663,7 @@ "2 8 706.200000" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -717,7 +677,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "id": "f4bd8382", "metadata": { "execution": { @@ -771,7 +731,7 @@ "0 97.311864" ] }, - "execution_count": 11, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/tibble.ipynb b/docs/notebooks/tibble.ipynb index 66e47da5..b34e2b7d 100644 --- a/docs/notebooks/tibble.ipynb +++ b/docs/notebooks/tibble.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "8b02806d", "metadata": { "execution": { @@ -16,7 +16,7 @@ { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -28,7 +28,7 @@ { "data": { "text/markdown": [ - "### # tibble " + "###
★ tibble
" ], "text/plain": [ "" @@ -77,7 +77,7 @@ { "data": { "text/markdown": [ - "### # tibble_row " + "###
★ tibble_row
" ], "text/plain": [ "" @@ -120,7 +120,7 @@ { "data": { "text/markdown": [ - "### # tribble " + "###
★ tribble
" ], "text/plain": [ "" @@ -142,14 +142,6 @@ "\n", "  `_dtypes`: The dtypes for each columns to convert to. \n", "\n", - "##### Examples:\n", - "  >>> tribble( \n", - "  >>> f.colA, f.colB, \n", - "  >>> \"a\", 1, \n", - "  >>> \"b\", 2, \n", - "  >>> \"c\", 3, \n", - "  >>> ) \n", - "\n", "##### Returns:\n", "  A dataframe \n" ], @@ -164,18 +156,18 @@ "source": [ "# https://tibble.tidyverse.org/reference/tibble.html\n", "# https://tibble.tidyverse.org/reference/tribble.html\n", + "%run nb_helpers.py\n", "\n", "from datar import f\n", "from datar.tibble import tibble, tibble_row, tribble\n", "from datar.base import diag, runif\n", "\n", - "%run nb_helpers.py\n", "nb_header(tibble, tibble_row, tribble)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "id": "a786d6b2", "metadata": { "execution": { @@ -256,7 +248,7 @@ "4 4 8" ] }, - "execution_count": 5, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -268,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "id": "875fe6f2", "metadata": { "execution": { @@ -356,7 +348,7 @@ "4 4 8 1" ] }, - "execution_count": 6, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -367,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "id": "fc39e6d2", "metadata": { "execution": { @@ -411,53 +403,53 @@ " \n", " \n", " 0\n", - " 0.829673\n", - " 1.659347\n", + " 0.723690\n", + " 1.447381\n", " \n", " \n", " 1\n", - " 0.682616\n", - " 1.365232\n", + " 0.800989\n", + " 1.601979\n", " \n", " \n", " 2\n", - " 0.594559\n", - " 1.189117\n", + " 0.163617\n", + " 0.327234\n", " \n", " \n", " 3\n", - " 0.245247\n", - " 0.490494\n", + " 0.220090\n", + " 0.440180\n", " \n", " \n", " 4\n", - " 0.393295\n", - " 0.786590\n", + " 0.402084\n", + " 0.804168\n", " \n", " \n", " 5\n", - " 0.736311\n", - " 1.472622\n", + " 0.320978\n", + " 0.641955\n", " \n", " \n", " 6\n", - " 0.159279\n", - " 0.318559\n", + " 0.350461\n", + " 0.700921\n", " \n", " \n", " 7\n", - " 0.459043\n", - " 0.918085\n", + " 0.391470\n", + " 0.782941\n", " \n", " \n", " 8\n", - " 0.237187\n", - " 0.474374\n", + " 0.483530\n", + " 0.967060\n", " \n", " \n", " 9\n", - " 0.768807\n", - " 1.537615\n", + " 0.690136\n", + " 1.380271\n", " \n", " \n", "\n", @@ -466,19 +458,19 @@ "text/plain": [ " x y\n", " \n", - "0 0.829673 1.659347\n", - "1 0.682616 1.365232\n", - "2 0.594559 1.189117\n", - "3 0.245247 0.490494\n", - "4 0.393295 0.786590\n", - "5 0.736311 1.472622\n", - "6 0.159279 0.318559\n", - "7 0.459043 0.918085\n", - "8 0.237187 0.474374\n", - "9 0.768807 1.537615" + "0 0.723690 1.447381\n", + "1 0.800989 1.601979\n", + "2 0.163617 0.327234\n", + "3 0.220090 0.440180\n", + "4 0.402084 0.804168\n", + "5 0.320978 0.641955\n", + "6 0.350461 0.700921\n", + "7 0.391470 0.782941\n", + "8 0.483530 0.967060\n", + "9 0.690136 1.380271" ] }, - "execution_count": 7, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -489,7 +481,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "id": "dada58f8", "metadata": { "execution": { @@ -516,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "id": "8a22cb4b", "metadata": { "execution": { @@ -531,9 +523,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:37:22][datar][WARNING] New names:\n", - "[2022-03-06 02:37:22][datar][WARNING] * '1' -> '1__0'\n", - "[2022-03-06 02:37:22][datar][WARNING] * '1' -> '1__1'\n" + "[2022-03-18 17:33:27][datar][WARNING] New names:\n", + "[2022-03-18 17:33:27][datar][WARNING] * '1' -> '1__0'\n", + "[2022-03-18 17:33:27][datar][WARNING] * '1' -> '1__1'\n" ] }, { @@ -582,7 +574,7 @@ "0 1 1" ] }, - "execution_count": 9, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -593,7 +585,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "id": "4e811ce7", "metadata": { "execution": { @@ -608,9 +600,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:37:23][datar][WARNING] New names:\n", - "[2022-03-06 02:37:23][datar][WARNING] * '1' -> '1__0'\n", - "[2022-03-06 02:37:23][datar][WARNING] * '1' -> '1__1'\n" + "[2022-03-18 17:33:27][datar][WARNING] New names:\n", + "[2022-03-18 17:33:27][datar][WARNING] * '1' -> '1__0'\n", + "[2022-03-18 17:33:27][datar][WARNING] * '1' -> '1__1'\n" ] }, { @@ -662,7 +654,7 @@ "0 1 1 True" ] }, - "execution_count": 10, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -674,7 +666,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "id": "6007cacc", "metadata": { "execution": { @@ -731,7 +723,7 @@ "0 1 1" ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -742,7 +734,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "id": "aadc8985", "metadata": { "execution": { @@ -757,9 +749,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 02:37:25][datar][WARNING] New names:\n", - "[2022-03-06 02:37:25][datar][WARNING] * '1' -> '_1'\n", - "[2022-03-06 02:37:25][datar][WARNING] * '2' -> '_2'\n" + "[2022-03-18 17:33:28][datar][WARNING] New names:\n", + "[2022-03-18 17:33:28][datar][WARNING] * '1' -> '_1'\n", + "[2022-03-18 17:33:28][datar][WARNING] * '2' -> '_2'\n" ] }, { @@ -808,7 +800,7 @@ "0 1 2" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -820,7 +812,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "id": "7a863e15", "metadata": { "execution": { @@ -877,7 +869,7 @@ "0 1 1" ] }, - "execution_count": 13, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -901,7 +893,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "id": "c76a319b", "metadata": { "execution": { @@ -958,7 +950,7 @@ "0 2 3" ] }, - "execution_count": 14, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -976,7 +968,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 12, "id": "20cff9a2", "metadata": { "execution": { @@ -1033,7 +1025,7 @@ "0 1 1" ] }, - "execution_count": 15, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1044,7 +1036,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "id": "7e006c14", "metadata": { "execution": { @@ -1123,7 +1115,7 @@ "2 6 9 2 6" ] }, - "execution_count": 16, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1141,7 +1133,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 14, "id": "2d9a00e0", "metadata": { "execution": { @@ -1246,7 +1238,7 @@ "3 3 0 0 0 1 0 0" ] }, - "execution_count": 17, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1263,7 +1255,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 15, "id": "bdef0cd4", "metadata": { "execution": { @@ -1289,7 +1281,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "id": "0b39dd2f", "metadata": { "execution": { @@ -1343,7 +1335,7 @@ "0 3" ] }, - "execution_count": 19, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1354,7 +1346,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 17, "id": "e066dd0e", "metadata": { "execution": { @@ -1411,7 +1403,7 @@ "0 1 1" ] }, - "execution_count": 20, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1423,7 +1415,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 18, "id": "065802b4", "metadata": { "execution": { @@ -1480,7 +1472,7 @@ "0 1 3" ] }, - "execution_count": 21, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1491,7 +1483,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 19, "id": "948a38e3", "metadata": { "execution": { @@ -1560,7 +1552,7 @@ "2 c 3" ] }, - "execution_count": 22, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1576,7 +1568,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 20, "id": "3730b8a8", "metadata": { "execution": { @@ -1639,7 +1631,7 @@ "1 b [4, 5, 6]" ] }, - "execution_count": 23, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1654,7 +1646,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "id": "057cd848", "metadata": { "execution": { @@ -1711,7 +1703,7 @@ "0 1 [2, 3]" ] }, - "execution_count": 24, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/notebooks/uncount.ipynb b/docs/notebooks/uncount.ipynb index f9536e42..5ce95e2e 100644 --- a/docs/notebooks/uncount.ipynb +++ b/docs/notebooks/uncount.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 02:36:03][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # uncount " + "###
★ uncount
" ], "text/plain": [ "" @@ -80,10 +64,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/uncount.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(uncount)" ] }, diff --git a/docs/notebooks/unite.ipynb b/docs/notebooks/unite.ipynb index d9fd40bd..c7db4242 100644 --- a/docs/notebooks/unite.ipynb +++ b/docs/notebooks/unite.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 18:12:37][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # unite " + "###
★ unite
" ], "text/plain": [ "" @@ -80,10 +64,10 @@ ], "source": [ "# https://tidyr.tidyverse.org/reference/unite.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(unite)\n" ] }, @@ -375,7 +359,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2022-03-06 18:12:40][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 3 rows ['a', 'b', ''].\n" + "[2022-03-18 17:32:56][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 3 rows ['a', 'b', ''].\n" ] }, { diff --git a/docs/notebooks/with_groups.ipynb b/docs/notebooks/with_groups.ipynb index 2bdeafb2..4db92ef0 100644 --- a/docs/notebooks/with_groups.ipynb +++ b/docs/notebooks/with_groups.ipynb @@ -13,26 +13,10 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"min\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"max\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"sum\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"abs\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"round\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"all\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"any\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"re\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"filter\" has been overriden by datar.\n", - "[2022-03-06 18:19:37][datar][WARNING] Builtin name \"slice\" has been overriden by datar.\n" - ] - }, { "data": { "text/html": [ - "
Try this notebook on binder.
" + "
Try this notebook on binder.
" ], "text/plain": [ "" @@ -44,7 +28,7 @@ { "data": { "text/markdown": [ - "### # with_groups " + "###
★ with_groups
" ], "text/plain": [ "" @@ -78,10 +62,10 @@ ], "source": [ "# https://dplyr.tidyverse.org/reference/with_groups.html\n", + "%run nb_helpers.py\n", "\n", "from datar.all import *\n", "\n", - "%run nb_helpers.py\n", "nb_header(with_groups)" ] }, @@ -134,32 +118,32 @@ " \n", " 0\n", " 1\n", - " 0.787068\n", - " 0.869330\n", + " 0.821443\n", + " 0.493316\n", " \n", " \n", " 1\n", " 1\n", - " 0.951592\n", - " 0.869330\n", + " 0.165189\n", + " 0.493316\n", " \n", " \n", " 2\n", " 2\n", - " 0.993726\n", - " 0.618664\n", + " 0.264447\n", + " 0.539342\n", " \n", " \n", " 3\n", " 2\n", - " 0.243601\n", - " 0.618664\n", + " 0.814237\n", + " 0.539342\n", " \n", " \n", " 4\n", " 3\n", - " 0.035540\n", - " 0.035540\n", + " 0.488513\n", + " 0.488513\n", " \n", " \n", "\n", @@ -169,11 +153,11 @@ "text/plain": [ " g x x_mean\n", " \n", - "0 1 0.787068 0.869330\n", - "1 1 0.951592 0.869330\n", - "2 2 0.993726 0.618664\n", - "3 2 0.243601 0.618664\n", - "4 3 0.035540 0.035540\n", + "0 1 0.821443 0.493316\n", + "1 1 0.165189 0.493316\n", + "2 2 0.264447 0.539342\n", + "3 2 0.814237 0.539342\n", + "4 3 0.488513 0.488513\n", "[TibbleGrouped: g (n=3)]" ] }, @@ -236,32 +220,32 @@ " \n", " 0\n", " 1\n", - " 0.787068\n", - " 0.787068\n", + " 0.821443\n", + " 0.821443\n", " \n", " \n", " 1\n", " 1\n", - " 0.951592\n", - " 0.787068\n", + " 0.165189\n", + " 0.821443\n", " \n", " \n", " 2\n", " 2\n", - " 0.993726\n", - " 0.787068\n", + " 0.264447\n", + " 0.264447\n", " \n", " \n", " 3\n", " 2\n", - " 0.243601\n", - " 0.787068\n", + " 0.814237\n", + " 0.264447\n", " \n", " \n", " 4\n", " 3\n", - " 0.035540\n", - " 0.787068\n", + " 0.488513\n", + " 0.488513\n", " \n", " \n", "\n", @@ -271,11 +255,11 @@ "text/plain": [ " g x x1\n", " \n", - "0 1 0.787068 0.787068\n", - "1 1 0.951592 0.787068\n", - "2 2 0.993726 0.787068\n", - "3 2 0.243601 0.787068\n", - "4 3 0.035540 0.787068\n", + "0 1 0.821443 0.821443\n", + "1 1 0.165189 0.821443\n", + "2 2 0.264447 0.264447\n", + "3 2 0.814237 0.264447\n", + "4 3 0.488513 0.488513\n", "[TibbleGrouped: g (n=3)]" ] }, @@ -338,32 +322,32 @@ " \n", " 0\n", " 1\n", - " 0.787068\n", - " 0.602306\n", + " 0.821443\n", + " 0.510766\n", " \n", " \n", " 1\n", " 1\n", - " 0.951592\n", - " 0.602306\n", + " 0.165189\n", + " 0.510766\n", " \n", " \n", " 2\n", " 2\n", - " 0.993726\n", - " 0.602306\n", + " 0.264447\n", + " 0.510766\n", " \n", " \n", " 3\n", " 2\n", - " 0.243601\n", - " 0.602306\n", + " 0.814237\n", + " 0.510766\n", " \n", " \n", " 4\n", " 3\n", - " 0.035540\n", - " 0.602306\n", + " 0.488513\n", + " 0.510766\n", " \n", " \n", "\n", @@ -372,11 +356,11 @@ "text/plain": [ " g x x_mean\n", " \n", - "0 1 0.787068 0.602306\n", - "1 1 0.951592 0.602306\n", - "2 2 0.993726 0.602306\n", - "3 2 0.243601 0.602306\n", - "4 3 0.035540 0.602306" + "0 1 0.821443 0.510766\n", + "1 1 0.165189 0.510766\n", + "2 2 0.264447 0.510766\n", + "3 2 0.814237 0.510766\n", + "4 3 0.488513 0.510766" ] }, "execution_count": 4, @@ -434,23 +418,23 @@ " \n", " \n", " 0\n", - " 0.787068\n", + " 0.821443\n", " \n", " \n", " 1\n", - " 0.951592\n", + " 0.165189\n", " \n", " \n", " 2\n", - " 0.993726\n", + " 0.264447\n", " \n", " \n", " 3\n", - " 0.243601\n", + " 0.814237\n", " \n", " \n", " 4\n", - " 0.035540\n", + " 0.488513\n", " \n", " \n", "\n", @@ -459,11 +443,11 @@ "text/plain": [ " x\n", " \n", - "0 0.787068\n", - "1 0.951592\n", - "2 0.993726\n", - "3 0.243601\n", - "4 0.035540" + "0 0.821443\n", + "1 0.165189\n", + "2 0.264447\n", + "3 0.814237\n", + "4 0.488513" ] }, "execution_count": 5, diff --git a/docs/reference-maps/base.md b/docs/reference-maps/base.md index 764e69bc..6ebf5f8b 100644 --- a/docs/reference-maps/base.md +++ b/docs/reference-maps/base.md @@ -82,60 +82,60 @@ See [here](../stats) for APIs ported from `r-stats` and [here](../utils) for API |API|Description|Notebook example| |---|---|---:| -|[`bessel_i`][22]|Bessel Functions of integer and fractional order of first kind|[:material-notebook:][4]| -|[`bessel_k`][24]|Bessel Functions of integer and fractional order of second kind|[:material-notebook:][4]| -|[`bessel_j`][23]|Modified Bessel functions of first kind|[:material-notebook:][4]| -|[`bessel_y`][25]|Modified Bessel functions of third kind|[:material-notebook:][4]| +|[`bessel_i()`][22]|Bessel Functions of integer and fractional order of first kind|[:material-notebook:][4]| +|[`bessel_k()`][24]|Bessel Functions of integer and fractional order of second kind|[:material-notebook:][4]| +|[`bessel_j()`][23]|Modified Bessel functions of first kind|[:material-notebook:][4]| +|[`bessel_y()`][25]|Modified Bessel functions of third kind|[:material-notebook:][4]| ### Casting values between types |API|Description|Notebook example| |---|---|---:| -|[`as_integer`][26] [`as_int`][]|Cast data to integer|[:material-notebook:][4]| -|[`as_double`][27]|Cast data to double (`numpy.float64`)|[:material-notebook:][4]| -|[`as_float`][28]|Cast data to float (`numpy.float_`)|[:material-notebook:][4]| -|[`as_numeric`][29]|Cast data to numeric|[:material-notebook:][4]| +|[`as_integer()`][26] [`as_int`][26]|Cast data to integer|[:material-notebook:][4]| +|[`as_double()`][27]|Cast data to double (`numpy.float64`)|[:material-notebook:][4]| +|[`as_float()`][28]|Cast data to float (`numpy.float_`)|[:material-notebook:][4]| +|[`as_numeric()`][29]|Cast data to numeric|[:material-notebook:][4]| ### Complex numbers |API|Description|Notebook example| |---|---|---:| -|[`re`][30]|Get the real part of a complex number|[:material-notebook:][4]| -|[`mod`][31]|Get the modulus of a complex number|[:material-notebook:][4]| -|[`im`][32]|Get the imaginary part of a complex number|[:material-notebook:][4]| -|[`arg`][33]|Get the argument of a complex number|[:material-notebook:][4]| -|[`conj`][34]|Get the complex conjugate of a complex number|[:material-notebook:][4]| -|[`is_complex`][35]|Test if data is complex number|[:material-notebook:][4]| -|[`as_complex`][36]|Cast data to a complex number|[:material-notebook:][4]| +|[`re()`][30]|Get the real part of a complex number|[:material-notebook:][4]| +|[`mod()`][31]|Get the modulus of a complex number|[:material-notebook:][4]| +|[`im()`][32]|Get the imaginary part of a complex number|[:material-notebook:][4]| +|[`arg()`][33]|Get the argument of a complex number|[:material-notebook:][4]| +|[`conj()`][34]|Get the complex conjugate of a complex number|[:material-notebook:][4]| +|[`is_complex()`][35]|Test if data is complex number|[:material-notebook:][4]| +|[`as_complex()`][36]|Cast data to a complex number|[:material-notebook:][4]| ### Cumulativate functions |API|Description|Notebook example| |---|---|---:| -|[`cumsum`][37]|Cummulative sum|[:material-notebook:][4]| -|[`cumprod`][38]|Cummulative product|[:material-notebook:][4]| -|[`cummin`][39]|Cummulative min|[:material-notebook:][4]| -|[`cummax`][40]|Cummulative max|[:material-notebook:][4]| +|[`cumsum()`][37]|Cummulative sum|[:material-notebook:][4]| +|[`cumprod()`][38]|Cummulative product|[:material-notebook:][4]| +|[`cummin()`][39]|Cummulative min|[:material-notebook:][4]| +|[`cummax()`][40]|Cummulative max|[:material-notebook:][4]| ### Date functions |API|Description|Notebook example| |---|---|---:| -|[`as_date`][41]|Cast data to date|[:material-notebook:][4]| -|[**`as_pd_date`**][150]|Alias of `pandas.to_datetime()`|| +|[`as_date()`][41]|Cast data to date|[:material-notebook:][4]| +|[**`as_pd_date()`**][150]|Alias of `pandas.to_datetime()`|| ### Factor data |API|Description|Notebook example| |---|---|---:| -|[`factor`][42]|Construct factor|[:material-notebook:][4]| -|[`droplevels`][43]|Drop unused levels|[:material-notebook:][4]| -|[`levels`][44]|Get levels of factors|[:material-notebook:][4]| -|[`is_factor`][45] [`is_categorical`][45]|Test if data is factor|[:material-notebook:][4]| -|[`as_factor`][46] [`as_categorical`][46]|Cast data to factor|[:material-notebook:][4]| -|[`is_ordered`][140]|Check if a factor is ordered|| -|[`nlevels`][141]|Get number of levels of a factor|| -|[`ordered`][142]|Create an ordered factor|| +|[`factor()`][42]|Construct factor|[:material-notebook:][4]| +|[`droplevels()`][43]|Drop unused levels|[:material-notebook:][4]| +|[`levels()`][44]|Get levels of factors|[:material-notebook:][4]| +|[`is_factor()`][45] [`is_categorical`][45]|Test if data is factor|[:material-notebook:][4]| +|[`as_factor()`][46] [`as_categorical`][46]|Cast data to factor|[:material-notebook:][4]| +|[`is_ordered()`][140]|Check if a factor is ordered|| +|[`nlevels()`][141]|Get number of levels of a factor|| +|[`ordered()`][142]|Create an ordered factor|| ### Logical/Boolean values @@ -143,10 +143,10 @@ See [here](../stats) for APIs ported from `r-stats` and [here](../utils) for API |---|---|---:| |`TRUE`|Logical true|[:material-notebook:][4]| |`FALSE`|Logical false|[:material-notebook:][4]| -|[`is_true`][47]|Test if data is scalar true (R's `isTRUE`)|[:material-notebook:][4]| -|[`is_false`][48]|Test if data is scalar false (R's `FALSE`)|[:material-notebook:][4]| -|[`is_logical`][49] [`is_bool`][49]|Test if data is logical/boolean|[:material-notebook:][4]| -|[`as_logical`][50] [`as_bool`][50]|Cast data to logical/boolean|[:material-notebook:][4]| +|[`is_true()`][47]|Test if data is scalar true (R's `isTRUE`)|[:material-notebook:][4]| +|[`is_false()`][48]|Test if data is scalar false (R's `FALSE`)|[:material-notebook:][4]| +|[`is_logical()`][49] [`is_bool()`][49]|Test if data is logical/boolean|[:material-notebook:][4]| +|[`as_logical()`][50] [`as_bool()`][50]|Cast data to logical/boolean|[:material-notebook:][4]| ### NA (missing values) @@ -157,122 +157,122 @@ See [here](../stats) for APIs ported from `r-stats` and [here](../utils) for API |`NaN`|Missing value, same as `NA`|[:material-notebook:][4]| |[`is_na()`][51]|Test if data is NA|[:material-notebook:][4]| |[`any_na()`][52]|Test if any element is NA|[:material-notebook:][4]| -|[`is_finite`][126]|Test if x is finite|| -|[`is_infinite`][127]|Test if x is infinite|| -|[`is_nan`][128]|Test if x is nan|| +|[`is_finite()`][126]|Test if x is finite|| +|[`is_infinite()`][127]|Test if x is infinite|| +|[`is_nan()`][128]|Test if x is nan|| ### NULL |API|Description|Notebook example| |---|---|---:| |`NULL`|NULL value|[:material-notebook:][4]| -|[`is_null`][53]|Test if data is null|[:material-notebook:][4]| -|[`as_null`][54]|Cast anything to NULL|[:material-notebook:][4]| +|[`is_null()`][53]|Test if data is null|[:material-notebook:][4]| +|[`as_null()`][54]|Cast anything to NULL|[:material-notebook:][4]| ### Random |API|Description|Notebook example| |---|---|---:| -|[`set_seed`][55]|Set the randomization seed|[:material-notebook:][4]| +|[`set_seed()`][55]|Set the randomization seed|[:material-notebook:][4]| ### Functions to create and manipulate sequences |API|Description|Notebook example| |---|---|---:| -|[`c`][56]|Collection of data|[:material-notebook:][4]| -|[`seq`][57]|Generate sequence|[:material-notebook:][4]| -|[`seq_len`][58]|Generate sequence with length|[:material-notebook:][4]| -|[`seq_along`][59]|Generate sequence along with another sequence|[:material-notebook:][4]| -|[`rev`][60]|Reverse a sequence|[:material-notebook:][4]| -|[`rep`][61]|Generate sequence with repeats|[:material-notebook:][4]| -|[`lengths`][62]|Get the length of elements in the sequence|[:material-notebook:][4]| -|[`unique`][63]|Get the unique elements|[:material-notebook:][4]| -|[`sample`][64]|Sample the elements from sequence|[:material-notebook:][4]| -|[`length`][65]|Get the length of data|[:material-notebook:][4]| -|[`match`][129]|match returns a vector of the positions of (first) matches of its first argument in its second.|| -|[`rank`][143]|Returns the sample ranks of the values in a vector.|[:material-notebook:][163]| -|[`order`][144]|Returns a permutation which rearranges its first argument into ascending or descending order|| -|[`sort`][145]|Sorting or Ordering Vectors|| +|[`c()`][56]|Collection of data|[:material-notebook:][4]| +|[`seq()`][57]|Generate sequence|[:material-notebook:][4]| +|[`seq_len()`][58]|Generate sequence with length|[:material-notebook:][4]| +|[`seq_along()`][59]|Generate sequence along with another sequence|[:material-notebook:][4]| +|[`rev()`][60]|Reverse a sequence|[:material-notebook:][4]| +|[`rep()`][61]|Generate sequence with repeats|[:material-notebook:][4]| +|[`lengths()`][62]|Get the length of elements in the sequence|[:material-notebook:][4]| +|[`unique()`][63]|Get the unique elements|[:material-notebook:][4]| +|[`sample()`][64]|Sample the elements from sequence|[:material-notebook:][4]| +|[`length()`][65]|Get the length of data|[:material-notebook:][4]| +|[`match()`][129]|match returns a vector of the positions of (first) matches of its first argument in its second.|| +|[`rank()`][143]|Returns the sample ranks of the values in a vector.|[:material-notebook:][163]| +|[`order()`][144]|Returns a permutation which rearranges its first argument into ascending or descending order|| +|[`sort()`][145]|Sorting or Ordering Vectors|| ### Special functions |API|Description|Notebook example| |---|---|---:| -|[`beta`][66]|Beta function|[:material-notebook:][4]| -|[`lbeta`][67]|Natural logarithm of beta function|[:material-notebook:][4]| -|[`gamma`][68]|Gamma function|[:material-notebook:][4]| -|[`lgamma`][69]|Natural logarithm of gamma function|[:material-notebook:][4]| -|[`digamma`][70]|the first derivatives of the logarithm of the gamma function.|[:material-notebook:][4]| -|[`trigamma`][71]|the second derivatives of the logarithm of the gamma function.|[:material-notebook:][4]| -|[`psigamma`][72]|polygamma funnction|[:material-notebook:][4]| -|[`choose`][73]|binomial coefficients|[:material-notebook:][4]| -|[`lchoose`][74]|the logarithms of binomial coefficients.|[:material-notebook:][4]| -|[`factorial`][75]|factorial|[:material-notebook:][4]| -|[`lfactorial`][76]|Natural logarithm of factorial|[:material-notebook:][4]| +|[`beta()`][66]|Beta function|[:material-notebook:][4]| +|[`lbeta()`][67]|Natural logarithm of beta function|[:material-notebook:][4]| +|[`gamma()`][68]|Gamma function|[:material-notebook:][4]| +|[`lgamma()`][69]|Natural logarithm of gamma function|[:material-notebook:][4]| +|[`digamma()`][70]|the first derivatives of the logarithm of the gamma function.|[:material-notebook:][4]| +|[`trigamma()`][71]|the second derivatives of the logarithm of the gamma function.|[:material-notebook:][4]| +|[`psigamma()`][72]|polygamma funnction|[:material-notebook:][4]| +|[`choose()`][73]|binomial coefficients|[:material-notebook:][4]| +|[`lchoose()`][74]|the logarithms of binomial coefficients.|[:material-notebook:][4]| +|[`factorial()`][75]|factorial|[:material-notebook:][4]| +|[`lfactorial()`][76]|Natural logarithm of factorial|[:material-notebook:][4]| ### String functions |API|Description|Notebook example| |---|---|---:| -|[`is_character`][77] [`is_str`][77] [`is_string`][77]|Test if data is string|[:material-notebook:][4]| -|[`as_character`][78] [`as_str`][78] [`as_string`][78]|Cast data to string|[:material-notebook:][4]| -|[`grep`][79]|Test if pattern in string|[:material-notebook:][4]| -|[`grepl`][80]|Logical version of `grep`|[:material-notebook:][4]| -|[`sub`][81]|Replace substrings in strings|[:material-notebook:][4]| -|[`gsub`][82]|Replace all matched substring in strings|[:material-notebook:][4]| -|[`nchar`][83]|Get length of string|[:material-notebook:][4]| -|[`nzhcar`][84]|Test if string is not empty|[:material-notebook:][4]| -|[`paste`][85]|Concatenate strings|[:material-notebook:][4]| -|[`paste0`][86]|Concatenate strings with `sep=''`|[:material-notebook:][4]| -|[`sprintf`][87]|C-style string formatting|[:material-notebook:][4]| -|[`substr`][88]|Get substring|[:material-notebook:][4]| -|[`substring`][89]|Get substring with a start only|[:material-notebook:][4]| -|[`strsplit`][90]|Split strings with delimiter|[:material-notebook:][4]| -|[`startswith`][130]|Test if strings start with given prefix|| -|[`endswith`][131]|Test if strings end with given suffix|| -|[`strtoi`][132]|Convert strings to integers|| -|[`chartr`][133]|Replace characters in strings|| -|[`tolower`][134]|Transform strings to lower case|| -|[`toupper`][135]|Transform strings to upper case|| -|[`trimws`][149]|Remove leading and/or trailing whitespace from character strings.|| +|[`is_character()`][77] [`is_str`][77] [`is_string`][77]|Test if data is string|[:material-notebook:][4]| +|[`as_character()`][78] [`as_str`][78] [`as_string`][78]|Cast data to string|[:material-notebook:][4]| +|[`grep()`][79]|Test if pattern in string|[:material-notebook:][4]| +|[`grepl()`][80]|Logical version of `grep`|[:material-notebook:][4]| +|[`sub()`][81]|Replace substrings in strings|[:material-notebook:][4]| +|[`gsub()`][82]|Replace all matched substring in strings|[:material-notebook:][4]| +|[`nchar()`][83]|Get length of string|[:material-notebook:][4]| +|[`nzhcar()`][84]|Test if string is not empty|[:material-notebook:][4]| +|[`paste()`][85]|Concatenate strings|[:material-notebook:][4]| +|[`paste0()`][86]|Concatenate strings with `sep=''`|[:material-notebook:][4]| +|[`sprintf()`][87]|C-style string formatting|[:material-notebook:][4]| +|[`substr()`][88]|Get substring|[:material-notebook:][4]| +|[`substring()`][89]|Get substring with a start only|[:material-notebook:][4]| +|[`strsplit()`][90]|Split strings with delimiter|[:material-notebook:][4]| +|[`startswith()`][130]|Test if strings start with given prefix|| +|[`endswith()`][131]|Test if strings end with given suffix|| +|[`strtoi()`][132]|Convert strings to integers|| +|[`chartr()`][133]|Replace characters in strings|| +|[`tolower()`][134]|Transform strings to lower case|| +|[`toupper()`][135]|Transform strings to upper case|| +|[`trimws()`][149]|Remove leading and/or trailing whitespace from character strings.|| ### Table |API|Description|Notebook example| |---|---|---:| -|[`table`][91]|Cross Tabulation and Table Creation|[:material-notebook:][4]| -|[`tabulate`][146]|Takes the integer-valued vector `bin` and counts the number of times each integer occurs in it.|| +|[`table()`][91]|Cross Tabulation and Table Creation|[:material-notebook:][4]| +|[`tabulate()`][146]|Takes the integer-valued vector `bin` and counts the number of times each integer occurs in it.|| ### Testing value types |API|Description|Notebook example| |---|---|---:| -|[`is_double`][92] [`is_float`][92]|Test if data is double or float (`numpy.float_`)|[:material-notebook:][4]| -|[`is_integer`][93] [`is_int`][93]|Test if data is integer|[:material-notebook:][4]| -|[`is_numeric`][94]|Test if data is numeric|[:material-notebook:][4]| -|[`is_atomic`][95]|Test is data is atomic|[:material-notebook:][4]| -|[`is_element, `is_in`][96]|Test if value is an element of an array (R's `%in`)|[:material-notebook:][4]| +|[`is_double()`][92] [`is_float()`][92]|Test if data is double or float (`numpy.float_`)|[:material-notebook:][4]| +|[`is_integer()`][93] [`is_int()`][93]|Test if data is integer|[:material-notebook:][4]| +|[`is_numeric()`][94]|Test if data is numeric|[:material-notebook:][4]| +|[`is_atomic()`][95]|Test is data is atomic|[:material-notebook:][4]| +|[`is_element(), `is_in()`][96]|Test if value is an element of an array (R's `%in`)|[:material-notebook:][4]| ### Trigonometric and hyper bolic functions |API|Description|Notebook example| |---|---|---:| -|[`cos`][97]|cosine|[:material-notebook:][4]| -|[`sin`][98]|sine|[:material-notebook:][4]| -|[`tan`][99]|tangent|[:material-notebook:][4]| -|[`acos`][100]|Arc-cosine|[:material-notebook:][4]| -|[`asin`][101]|Arc-sine|[:material-notebook:][4]| -|[`atan`][102]|Arc-tangent|[:material-notebook:][4]| -|[`atan2`][103]|`atan(y/x)`|[:material-notebook:][4]| -|[`cospi`][104]|`cos(pi*x)`|[:material-notebook:][4]| -|[`sinpi`][105]|`sin(pi*x)`|[:material-notebook:][4]| -|[`tanpi`][106]|`tan(pi*x)`|[:material-notebook:][4]| -|[`cosh`][107]|Hyperbolic cosine|[:material-notebook:][4]| -|[`sinh`][108]|Hyperbolic sine|[:material-notebook:][4]| -|[`tanh`][109]|Hyperbolic tangent|[:material-notebook:][4]| -|[`acosh`][110]|Hyperbolic cosine|[:material-notebook:][4]| -|[`asinh`][111]|Hyperbolic sine|[:material-notebook:][4]| -|[`atanh`][112]|Hyperbolic tangent|[:material-notebook:][4]| +|[`cos()`][97]|cosine|[:material-notebook:][4]| +|[`sin()`][98]|sine|[:material-notebook:][4]| +|[`tan()`][99]|tangent|[:material-notebook:][4]| +|[`acos()`][100]|Arc-cosine|[:material-notebook:][4]| +|[`asin()`][101]|Arc-sine|[:material-notebook:][4]| +|[`atan()`][102]|Arc-tangent|[:material-notebook:][4]| +|[`atan2()`][103]|`atan(y/x)`|[:material-notebook:][4]| +|[`cospi()`][104]|`cos(pi*x)`|[:material-notebook:][4]| +|[`sinpi()`][105]|`sin(pi*x)`|[:material-notebook:][4]| +|[`tanpi()`][106]|`tan(pi*x)`|[:material-notebook:][4]| +|[`cosh()`][107]|Hyperbolic cosine|[:material-notebook:][4]| +|[`sinh()`][108]|Hyperbolic sine|[:material-notebook:][4]| +|[`tanh()`][109]|Hyperbolic tangent|[:material-notebook:][4]| +|[`acosh()`][110]|Hyperbolic cosine|[:material-notebook:][4]| +|[`asinh()`][111]|Hyperbolic sine|[:material-notebook:][4]| +|[`atanh()`][112]|Hyperbolic tangent|[:material-notebook:][4]| ### Which @@ -285,18 +285,18 @@ See [here](../stats) for APIs ported from `r-stats` and [here](../utils) for API |API|Description|Notebook example| |---|---|---:| -|[`cut`][113]|Convert Numeric to Factor|[:material-notebook:][163]| -|[`diff`][164]|Returns suitably lagged and iterated differences.|[:material-notebook:][163]| -|[`identity`][114]|Identity Function|[:material-notebook:][163]| -|[`expandgrid`][115]|Create a Data Frame from All Combinations of Factor Variables|[:material-notebook:][163]| -|[`outer`][165]|Compute the outer product of two vectors.|[:material-notebook:][163]| -|[`max_col`][136]|Find the maximum position for each row of a matrix|| -|[`append`][147]|Add elements to a vector.|| -|[`complete_cases`][137]|Get a bool array indicating whether the values of rows are complete in a data frame.|| -|[`proportions`][147], [`prop_table`][147]|Returns conditional proportions given `margins`|| -|[`make_names`][137]|Make names available as columns and can be accessed by `df.`|[:material-notebook:][163]| -|[`make_unique`][138]|Make the names unique, alias of `make_names(names, unique=True)`|[:material-notebook:][163]| -|[**`data_context`**][116]|Mimic R's `with`|[:material-notebook:][163]| +|[`cut()`][113]|Convert Numeric to Factor|[:material-notebook:][163]| +|[`diff()`][164]|Returns suitably lagged and iterated differences.|[:material-notebook:][163]| +|[`identity()`][114]|Identity Function|[:material-notebook:][163]| +|[`expandgrid()`][115]|Create a Data Frame from All Combinations of Factor Variables|[:material-notebook:][163]| +|[`outer()`][165]|Compute the outer product of two vectors.|[:material-notebook:][163]| +|[`max_col()`][136]|Find the maximum position for each row of a matrix|| +|[`append()`][147]|Add elements to a vector.|| +|[`complete_cases()`][137]|Get a bool array indicating whether the values of rows are complete in a data frame.|| +|[`proportions()`][147], [`prop_table`][147]|Returns conditional proportions given `margins`|| +|[`make_names()`][137]|Make names available as columns and can be accessed by `df.`|[:material-notebook:][163]| +|[`make_unique()`][138]|Make the names unique, alias of `make_names(names, unique=True)`|[:material-notebook:][163]| +|[**`data_context()`**][116]|Mimic R's `with`|[:material-notebook:][163]| [1]: ../../api/datar.base.which/#datar.dplyr.which.which diff --git a/docs/reference-maps/datar.md b/docs/reference-maps/datar.md index d9d2d9ff..aecd6c57 100644 --- a/docs/reference-maps/datar.md +++ b/docs/reference-maps/datar.md @@ -28,11 +28,12 @@ |[**`flatten()`**][2]|Flatten values of data frames|[:material-notebook:][1]| ### Functions + |[**`itemgetter()`**][3]|Turn `a[f.x]` to a valid verb argument with `itemgetter(a, f.x)`|[:material-notebook:][1]| |[**`attrgetter()`**][4]|`f.x.` but works with `SeriesGroupBy` object|[:material-notebook:][1]| -|[**`pd_str()`**][4]|`f.x.str` but works with `SeriesGroupBy` object|[:material-notebook:][1]| -|[**`pd_cat()`**][4]|`f.x.cat` but works with `SeriesGroupBy` object|[:material-notebook:][1]| -|[**`pd_dt()`**][4]|`f.x.dt` but works with `SeriesGroupBy` object|[:material-notebook:][1]| +|[**`pd_str()`**][4]|`str` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]| +|[**`pd_cat()`**][4]|`cat` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]| +|[**`pd_dt()`**][4]|`dt` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]| [1]: ../../notebooks/datar diff --git a/docs/reference-maps/tibble.md b/docs/reference-maps/tibble.md index af1b7a3f..99054023 100644 --- a/docs/reference-maps/tibble.md +++ b/docs/reference-maps/tibble.md @@ -38,14 +38,13 @@ Reference map of `r-tidyverse-tibble` can be found [here][1]. |`tbl_df-class`||| |`print()` `format()`||| |[`tribble()`][3]|Row-wise tibble creation|[:material-notebook:][2]| -|[**`zibble()`**][19]|Zip version of tibble, where names specify together and so do values.|| ### Coercion |API|Description|Notebook example| |---|---|---:| |`is_tibble()`||| -|`as_tibble`||| +|[`as_tibble()`][19]|Convert data frames into datar's tibbles|| |`new_tibble()` `validate_tibble()`||| |[`enframe()`][4] [`deframe()`][14]|Converting iterables to data frames, and vice versa| [:material-notebook:][5]| @@ -85,4 +84,4 @@ Reference map of `r-tidyverse-tibble` can be found [here][1]. [16]: ../../api/datar.tibble.verbs/#datar.tibble.verbs.rownames_to_column [17]: ../../api/datar.tibble.verbs/#datar.tibble.verbs.rowid_to_column [18]: ../../api/datar.tibble.tibble/#datar.tibble.tibble.tibble_row -[19]: ../../api/datar.tibble.tibble/#datar.tibble.tibble.zibble +[19]: ../../api/datar.tibble.tibble/#datar.tibble.tibble.as_tibble diff --git a/docs/reference-maps/tidyr.md b/docs/reference-maps/tidyr.md index 8cab8911..459105f8 100644 --- a/docs/reference-maps/tidyr.md +++ b/docs/reference-maps/tidyr.md @@ -47,10 +47,8 @@ Reference map of `r-tidyverse-tidyr` can be found [here][1]. |---|---|---:| |[`extract()`][22]|Extract a character column into multiple columns using regular expression groups|[:material-notebook:][23]| |[`separate()`][30]|Separate a character column into multiple columns with a regular expression or numeric locations|[:material-notebook:][31]| -|[`separate_rows()`][34]| -Separate a collapsed column into multiple rows|[:material-notebook:][35]| -|[`unite()`][36]| -Unite multiple columns into one by pasting strings together|[:material-notebook:][37]| +|[`separate_rows()`][34]|Separate a collapsed column into multiple rows|[:material-notebook:][35]| +|[`unite()`][36]|Unite multiple columns into one by pasting strings together|[:material-notebook:][37]| ### Missing values diff --git a/docs/style.css b/docs/style.css index 099b7766..52f5ad23 100644 --- a/docs/style.css +++ b/docs/style.css @@ -1,6 +1,7 @@ .md-main__inner.md-grid { max-width: 80%; + margin-left: 32px; } .md-typeset .admonition, .md-typeset details { @@ -23,11 +24,11 @@ line-height: 1; } .mkapi-node { - background-color: #f0f6fa; - border-top: 3px solid #559bc9; + background-color: #f4faff; + border-top: 3px solid #151922; } .mkapi-node .mkapi-object-container { - background-color: #b4d4e9; + background-color: #d1d4d6; padding: .12em .4em; } .mkapi-node .mkapi-object-container .mkapi-object.code { @@ -79,7 +80,7 @@ padding-right: 2px; } .mkapi-node .mkapi-code * { - font-size: .65rem; + font-size: .6rem; } .mkapi-node a.mkapi-docs-link { font-size: .6rem; @@ -120,3 +121,8 @@ .mkapi-object-body.module.top * { font-size: .75rem !important; } + +.mkapi-section-body.examples pre code { + font-size: .65rem !important; + overflow: auto; +} diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..4892c88c --- /dev/null +++ b/environment.yml @@ -0,0 +1,9 @@ +name: datar +channels: +- conda-forge +dependencies: +- python=3.9 +- pip: + - pdtypes + - datar + - -r docs/requirements.txt diff --git a/mkdocs.yml b/mkdocs.yml index ecf9b04b..b034bf85 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,9 +9,22 @@ theme: palette: primary: black name: 'material' - # font: - # text: 'Ubuntu' - # code: 'Ubuntu Mono' + font: + text: + - FreightSans + - "Helvetica Neue" + - Helvetica + - Arial + - sans-serif + code: + - IBMPlexMono + - SFMono-Regular + - Menlo + - Monaco + - Consolas + - "Liberation Mono" + - "Courier New" + - monospace features: - navigation.top markdown_extensions: diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..135f0792 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,670 @@ +[[package]] +name = "asttokens" +version = "2.0.5" +description = "Annotate AST trees with source code positions" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "coverage" +version = "6.3.2" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "diot" +version = "0.1.5" +description = "Python dictionary with dot notation." +category = "main" +optional = false +python-versions = ">=3.6,<4.0" + +[package.dependencies] +inflection = "<1.0.0" + +[[package]] +name = "execnet" +version = "1.9.0" +description = "execnet: rapid multi-Python deployment" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +testing = ["pre-commit"] + +[[package]] +name = "executing" +version = "0.8.3" +description = "Get the currently executing AST node of a frame, and other information" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "importlib-metadata" +version = "4.11.2" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "inflection" +version = "0.5.1" +description = "A port of Ruby on Rails inflector to Python" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "numpy" +version = "1.21.1" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pandas" +version = "1.3.5" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.7.1" + +[package.dependencies] +numpy = [ + {version = ">=1.17.3", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, + {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, +] +python-dateutil = ">=2.7.3" +pytz = ">=2017.3" + +[package.extras] +test = ["hypothesis (>=3.58)", "pytest (>=6.0)", "pytest-xdist"] + +[[package]] +name = "pdtypes" +version = "0.0.4" +description = "Show data types for pandas data frames in terminal and notebooks" +category = "main" +optional = true +python-versions = ">=3.7.1,<4.0.0" + +[package.dependencies] +pandas = ">=1.2,<2.0" + +[[package]] +name = "pipda" +version = "0.5.7" +description = "A framework for data piping in python" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +diot = "*" +executing = "*" +pure_eval = "<1.0.0" +varname = "*" + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pyparsing" +version = "3.0.7" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "7.0.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +tomli = ">=1.0.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "3.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] + +[[package]] +name = "pytest-forked" +version = "1.4.0" +description = "run tests in isolated forked subprocesses" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +py = "*" +pytest = ">=3.10" + +[[package]] +name = "pytest-xdist" +version = "2.5.0" +description = "pytest xdist plugin for distributed testing and loop-on-failing modes" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +execnet = ">=1.1" +pytest = ">=6.2.0" +pytest-forked = "*" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-slugify" +version = "6.1.1" +description = "A Python slugify application that also handles Unicode" +category = "main" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +text-unidecode = ">=1.3" + +[package.extras] +unidecode = ["Unidecode (>=1.1.1)"] + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "scipy" +version = "1.6.1" +description = "SciPy: Scientific Library for Python" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.16.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "text-unidecode" +version = "1.3" +description = "The most basic Text::Unidecode port" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typing-extensions" +version = "4.1.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "varname" +version = "0.8.2" +description = "Dark magics about variable names in python." +category = "main" +optional = false +python-versions = ">=3.6,<4.0" + +[package.dependencies] +asttokens = ">=2.0.0,<3.0.0" +executing = "*" +pure_eval = "<1.0.0" + +[[package]] +name = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "main" +optional = true +python-versions = "*" + +[[package]] +name = "zipp" +version = "3.7.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.7.1" # align with pandas +content-hash = "5ba5c8a1a5f0b37b41aae63d8c8e6e03830927b22d1e7d318f9b210432e5b449" + +[metadata.files] +asttokens = [ + {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"}, + {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +coverage = [ + {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, + {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, + {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, + {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, + {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, + {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, + {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, + {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, + {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, + {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, + {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, + {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, +] +diot = [ + {file = "diot-0.1.5-py3-none-any.whl", hash = "sha256:f5e90a405064c09873130240b0c3a2ba9a480e754611a74f93599f84ec0a28b9"}, + {file = "diot-0.1.5.tar.gz", hash = "sha256:a8adc50e2d8e2a1d03ed017ecae98eb09a7ebb3bd0a5fbd44cbfb222e5a71bb4"}, +] +execnet = [ + {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, + {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, +] +executing = [ + {file = "executing-0.8.3-py2.py3-none-any.whl", hash = "sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9"}, + {file = "executing-0.8.3.tar.gz", hash = "sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.11.2-py3-none-any.whl", hash = "sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735"}, + {file = "importlib_metadata-4.11.2.tar.gz", hash = "sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac"}, +] +inflection = [ + {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, + {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +numpy = [ + {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, + {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, + {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, + {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, + {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, + {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, + {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, + {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, + {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, + {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, + {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, + {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, + {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, + {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pandas = [ + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:adfeb11be2d54f275142c8ba9bf67acee771b7186a5745249c7d5a06c670136b"}, + {file = "pandas-1.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:60a8c055d58873ad81cae290d974d13dd479b82cbb975c3e1fa2cf1920715296"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd541ab09e1f80a2a1760032d665f6e032d8e44055d602d65eeea6e6e85498cb"}, + {file = "pandas-1.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2651d75b9a167cc8cc572cf787ab512d16e316ae00ba81874b560586fa1325e0"}, + {file = "pandas-1.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:aaf183a615ad790801fa3cf2fa450e5b6d23a54684fe386f7e3208f8b9bfbef6"}, + {file = "pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:344295811e67f8200de2390093aeb3c8309f5648951b684d8db7eee7d1c81fb7"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:552020bf83b7f9033b57cbae65589c01e7ef1544416122da0c79140c93288f56"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cce0c6bbeb266b0e39e35176ee615ce3585233092f685b6a82362523e59e5b4"}, + {file = "pandas-1.3.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d28a3c65463fd0d0ba8bbb7696b23073efee0510783340a44b08f5e96ffce0c"}, + {file = "pandas-1.3.5-cp37-cp37m-win32.whl", hash = "sha256:a62949c626dd0ef7de11de34b44c6475db76995c2064e2d99c6498c3dba7fe58"}, + {file = "pandas-1.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:8025750767e138320b15ca16d70d5cdc1886e8f9cc56652d89735c016cd8aea6"}, + {file = "pandas-1.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fe95bae4e2d579812865db2212bb733144e34d0c6785c0685329e5b60fcb85dd"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f261553a1e9c65b7a310302b9dbac31cf0049a51695c14ebe04e4bfd4a96f02"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6dbec5f3e6d5dc80dcfee250e0a2a652b3f28663492f7dab9a24416a48ac39"}, + {file = "pandas-1.3.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3bc49af96cd6285030a64779de5b3688633a07eb75c124b0747134a63f4c05f"}, + {file = "pandas-1.3.5-cp38-cp38-win32.whl", hash = "sha256:b6b87b2fb39e6383ca28e2829cddef1d9fc9e27e55ad91ca9c435572cdba51bf"}, + {file = "pandas-1.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:a395692046fd8ce1edb4c6295c35184ae0c2bbe787ecbe384251da609e27edcb"}, + {file = "pandas-1.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd971a3f08b745a75a86c00b97f3007c2ea175951286cdda6abe543e687e5f2f"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37f06b59e5bc05711a518aa10beaec10942188dccb48918bb5ae602ccbc9f1a0"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c21778a688d3712d35710501f8001cdbf96eb70a7c587a3d5613573299fdca6"}, + {file = "pandas-1.3.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3345343206546545bc26a05b4602b6a24385b5ec7c75cb6059599e3d56831da2"}, + {file = "pandas-1.3.5-cp39-cp39-win32.whl", hash = "sha256:c69406a2808ba6cf580c2255bcf260b3f214d2664a3a4197d0e640f573b46fd3"}, + {file = "pandas-1.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:32e1a26d5ade11b547721a72f9bfc4bd113396947606e00d5b4a5b79b3dcb006"}, + {file = "pandas-1.3.5.tar.gz", hash = "sha256:1e4285f5de1012de20ca46b188ccf33521bff61ba5c5ebd78b4fb28e5416a9f1"}, +] +pdtypes = [ + {file = "pdtypes-0.0.4-py3-none-any.whl", hash = "sha256:a51ecf8485dff142b1864e132928547350d789b735bfb7e8d87aa90cf464ec88"}, + {file = "pdtypes-0.0.4.tar.gz", hash = "sha256:4f76fac05a785d558b809aa59d2ec13ee22e105267f2bde025007242fe8f4983"}, +] +pipda = [ + {file = "pipda-0.5.7-py3-none-any.whl", hash = "sha256:36b629bd95c92395b0592239c835e92f4dda215a87d7c3300fd5530d52002244"}, + {file = "pipda-0.5.7.tar.gz", hash = "sha256:81d2c6e4939d334105f69a810f75b9e6bf725ddda545ba0756dd1dc2a0085bfd"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pure-eval = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pyparsing = [ + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +] +pytest = [ + {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"}, + {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"}, +] +pytest-cov = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] +pytest-forked = [ + {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, + {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, +] +pytest-xdist = [ + {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"}, + {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-slugify = [ + {file = "python-slugify-6.1.1.tar.gz", hash = "sha256:00003397f4e31414e922ce567b3a4da28cf1436a53d332c9aeeb51c7d8c469fd"}, + {file = "python_slugify-6.1.1-py2.py3-none-any.whl", hash = "sha256:8c0016b2d74503eb64761821612d58fcfc729493634b1eb0575d8f5b4aa1fbcf"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +scipy = [ + {file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a423533c55fec61456dedee7b6ee7dce0bb6bfa395424ea374d25afa262be261"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:33d6b7df40d197bdd3049d64e8e680227151673465e5d85723b3b8f6b15a6ced"}, + {file = "scipy-1.6.1-cp37-cp37m-win32.whl", hash = "sha256:6725e3fbb47da428794f243864f2297462e9ee448297c93ed1dcbc44335feb78"}, + {file = "scipy-1.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:5fa9c6530b1661f1370bcd332a1e62ca7881785cc0f80c0d559b636567fab63c"}, + {file = "scipy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd50daf727f7c195e26f27467c85ce653d41df4358a25b32434a50d8870fc519"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f46dd15335e8a320b0fb4685f58b7471702234cba8bb3442b69a3e1dc329c345"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0e5b0ccf63155d90da576edd2768b66fb276446c371b73841e3503be1d63fb5d"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2481efbb3740977e3c831edfd0bd9867be26387cacf24eb5e366a6a374d3d00d"}, + {file = "scipy-1.6.1-cp38-cp38-win32.whl", hash = "sha256:68cb4c424112cd4be886b4d979c5497fba190714085f46b8ae67a5e4416c32b4"}, + {file = "scipy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:5f331eeed0297232d2e6eea51b54e8278ed8bb10b099f69c44e2558c090d06bf"}, + {file = "scipy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8a51d33556bf70367452d4d601d1742c0e806cd0194785914daf19775f0e67"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:83bf7c16245c15bc58ee76c5418e46ea1811edcc2e2b03041b804e46084ab627"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:794e768cc5f779736593046c9714e0f3a5940bc6dcc1dba885ad64cbfb28e9f0"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5da5471aed911fe7e52b86bf9ea32fb55ae93e2f0fac66c32e58897cfb02fa07"}, + {file = "scipy-1.6.1-cp39-cp39-win32.whl", hash = "sha256:8e403a337749ed40af60e537cc4d4c03febddcc56cd26e774c9b1b600a70d3e4"}, + {file = "scipy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a5193a098ae9f29af283dcf0041f762601faf2e595c0db1da929875b7570353f"}, + {file = "scipy-1.6.1.tar.gz", hash = "sha256:c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +text-unidecode = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +typing-extensions = [ + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, +] +varname = [ + {file = "varname-0.8.2-py3-none-any.whl", hash = "sha256:db4d82106a512e67104cdf6fecc0081bf318f810215610e3c9def6551c9e74ef"}, + {file = "varname-0.8.2.tar.gz", hash = "sha256:2df1fdd8945e57e67193c09998f5c9eeeb2d8c1f30f561ce71b94480a846e5d9"}, +] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] +zipp = [ + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, +] diff --git a/pyproject.toml b/pyproject.toml index f23b9a54..e36b6f14 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "datar" -version = "0.6.3" +version = "0.6.4" description = "Port of dplyr and other related R packages in python, using pipda." authors = ["pwwang "] readme = "README.md" diff --git a/tests/__init__.py b/tests/__init__.py index 810a6be1..1d7d33ac 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,6 @@ import sys -from pipda import options +from datar import options from datar.base import set_seed -options.warn_astnode_failure = False +options(warn_astnode_failure=False, warn_builtin_names=False) set_seed(8888) diff --git a/tests/dplyr/test_funs.py b/tests/dplyr/test_funs.py index 899295c9..e032cf0a 100644 --- a/tests/dplyr/test_funs.py +++ b/tests/dplyr/test_funs.py @@ -91,8 +91,11 @@ def test_lead_lag_return_x_if_n_eqs_0(): def test_lead_lag_return_all_nas_if_n_eqs_lenx(): - assert lead([1, 2], 2).fillna(0).tolist() == [0.0, 0.0] - assert lag([1, 2], 2).fillna(0).tolist() == [0.0, 0.0] + out = lead([1, 2], 2) + assert_iterable_equal(out, [NA, NA]) + + out = lag([1, 2], 2) + assert_iterable_equal(out, [NA, NA]) def test_cumany_cumall_handle_nas_consistently():