From 2b781bfc57a127db64e55715f3e87c1bb03cb0c3 Mon Sep 17 00:00:00 2001 From: John Mount Date: Sat, 7 Mar 2020 09:15:28 -0800 Subject: [PATCH] test user coder path --- Examples/UserCoders/UserCoders.ipynb | 558 +++++++++++-------------- coverage.txt | 35 +- pkg/dist/vtreat-0.3.8-py3-none-any.whl | Bin 18712 -> 18712 bytes pkg/dist/vtreat-0.3.8.tar.gz | Bin 25546 -> 25547 bytes pkg/tests/test_user_coders.py | 140 +++++++ 5 files changed, 391 insertions(+), 342 deletions(-) create mode 100644 pkg/tests/test_user_coders.py diff --git a/Examples/UserCoders/UserCoders.ipynb b/Examples/UserCoders/UserCoders.ipynb index 8916db0..6a02e81 100644 --- a/Examples/UserCoders/UserCoders.ipynb +++ b/Examples/UserCoders/UserCoders.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 0, "metadata": { "pycharm": { "is_executing": false @@ -30,7 +30,7 @@ }, "outputs": [], "source": [ - "import pygam\n", + "import sklearn.linear_model\n", "import pandas\n", "import numpy\n", "import numpy.random\n", @@ -50,26 +50,45 @@ }, "outputs": [], "source": [ - "class GAMTransform(vtreat.transform.UserTransform):\n", - " \"\"\"a gam model\"\"\"\n", - " def __init__(self):\n", - " vtreat.transform.UserTransform.__init__(self, treatment='gam')\n", + "class PolyTransform(vtreat.transform.UserTransform):\n", + " \"\"\"a polynomial model\"\"\"\n", + " def __init__(self, *, deg=5, alpha=0.1):\n", + " vtreat.transform.UserTransform.__init__(self, treatment='poly')\n", " self.models_ = None\n", + " self.deg = deg\n", + " self.alpha = alpha\n", "\n", + " def poly_terms(self, vname, vec):\n", + " vec = numpy.asarray(vec)\n", + " r = pandas.DataFrame({'x': vec})\n", + " for d in range(1, self.deg+1):\n", + " r[vname + '_' + str(d)] = vec**d\n", + " return r\n", + " \n", " def fit(self, X, y):\n", - " self.models_ = { \n", - " v:pygam.LinearGAM().fit(X[[v]], y) \n", - " for v in X.columns \n", - " if vtreat.util.can_convert_v_to_numeric(X[v])}\n", - " self.incoming_vars_ = [v for v in self.models_.keys()]\n", - " self.derived_vars_ = [(v + \"_gam\") for v in self.incoming_vars_]\n", + " self.models_ = {}\n", + " self.incoming_vars_ = []\n", + " self.derived_vars_ = []\n", + " for v in X.columns:\n", + " if vtreat.util.can_convert_v_to_numeric(X[v]):\n", + " X_v = self.poly_terms(v, X[v])\n", + " model_v = sklearn.linear_model.Ridge(alpha=self.alpha).fit(X_v, y) \n", + " new_var = v + \"_poly\"\n", + " self.models_[v] = (model_v, [c for c in X_v.columns], new_var)\n", + " self.incoming_vars_.append(v)\n", + " self.derived_vars_.append(new_var)\n", " return self\n", " \n", " def transform(self, X):\n", - " cols = {\n", - " self.derived_vars_[i]:self.models_[self.incoming_vars_[i]].predict(X[[self.incoming_vars_[i]]]) \n", - " for i in range(len(self.incoming_vars_))}\n", - " return pandas.DataFrame(cols)" + " r = pandas.DataFrame()\n", + " for k, v in self.models_.items():\n", + " model_k = v[0]\n", + " cols_k = v[1]\n", + " new_var = v[2]\n", + " X_k = self.poly_terms(k, X[k])\n", + " xform_k = model_k.predict(X_k)\n", + " r[new_var] = xform_k\n", + " return r\n" ] }, { @@ -83,76 +102,17 @@ "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", - " \n", - " \n", - " \n", - " \n", - " \n", - "
xy
000.253978
110.103809
220.307287
330.604404
440.754575
\n", - "
" - ], - "text/plain": [ - " x y\n", - "0 0 0.253978\n", - "1 1 0.103809\n", - "2 2 0.307287\n", - "3 3 0.604404\n", - "4 4 0.754575" - ] + "text/plain": " x y\n0 0 -0.188057\n1 1 -0.104672\n2 2 0.469285\n3 3 0.272010\n4 4 0.603709", + "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
xy
00-0.188057
11-0.104672
220.469285
330.272010
440.603709
\n
" }, - "execution_count": 3, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 3 } ], "source": [ "d = pandas.DataFrame({'x':[i for i in range(100)]})\n", - "d['y'] = numpy.sin(0.2*d['x']) + 0.1*numpy.random.normal(size=d.shape[0])\n", + "d['y'] = numpy.sin(0.2*d['x']) + 0.2*numpy.random.normal(size=d.shape[0])\n", "d.head()" ] }, @@ -166,7 +126,7 @@ }, "outputs": [], "source": [ - "step = GAMTransform()" + "step = PolyTransform(deg=10)" ] }, { @@ -179,84 +139,25 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", + "name": "stderr", "text": [ - "['x_gam']\n" - ] + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=1.09351e-40): result may not be accurate.\n", + " overwrite_a=True).T\n" + ], + "output_type": "stream" }, { "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", - "
x_gamx
00.3347040
10.4381931
20.5354722
30.6230803
40.6975574
\n", - "
" - ], - "text/plain": [ - " x_gam x\n", - "0 0.334704 0\n", - "1 0.438193 1\n", - "2 0.535472 2\n", - "3 0.623080 3\n", - "4 0.697557 4" - ] + "text/plain": " x_poly x\n0 -0.263258 0\n1 -0.043296 1\n2 0.218220 2\n3 0.478494 3\n4 0.707910 4", + "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
x_polyx
0-0.2632580
1-0.0432961
20.2182202
30.4784943
40.7079104
\n
" }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 5 } ], "source": [ "fit = step.fit_transform(d[['x']], d['y'])\n", - "print(step.derived_vars_)\n", "fit['x'] = d['x']\n", "fit.head()" ] @@ -272,20 +173,16 @@ "outputs": [ { "data": { - "text/plain": [ - "" - ] + "text/plain": "" }, - "execution_count": 6, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 6 }, { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -295,7 +192,7 @@ ], "source": [ "seaborn.scatterplot(x='x', y='y', data=d)\n", - "seaborn.lineplot(x='x', y='x_gam', data=fit, color='red', alpha=0.5)" + "seaborn.lineplot(x='x', y='x_poly', data=fit, color='red', alpha=0.5)" ] }, { @@ -311,26 +208,173 @@ "transform = vtreat.NumericOutcomeTreatment(\n", " outcome_name='y',\n", " params = vtreat.vtreat_parameters({\n", - " 'user_transforms': [GAMTransform()]\n", + " 'filter_to_recommended': False,\n", + " 'user_transforms': [PolyTransform(deg=10)]\n", " }))" ] }, { "cell_type": "code", "execution_count": 8, + "outputs": [ + { + "name": "stderr", + "text": [ + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=2.78226e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.53976e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.51805e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.04556e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=4.3458e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.19132e-42): result may not be accurate.\n", + " overwrite_a=True).T\n" + ], + "output_type": "stream" + }, + { + "data": { + "text/plain": "vtreat.vtreat_api.NumericOutcomeTreatment(outcome_name='y', cols_to_copy=['y'], )" + }, + "metadata": {}, + "output_type": "execute_result", + "execution_count": 8 + } + ], + "source": [ + "transform.fit(d, d['y'])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": false + } + } + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [ + { + "data": { + "text/plain": " variable orig_variable treatment y_aware has_range PearsonR \\\n0 x x clean_copy False True -0.135012 \n1 x_poly x poly True True 0.896726 \n\n significance vcount default_threshold recommended \n0 1.804771e-01 1.0 0.5 True \n1 1.816677e-36 1.0 0.5 True ", + "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 \n \n \n \n
variableorig_variabletreatmenty_awarehas_rangePearsonRsignificancevcountdefault_thresholdrecommended
0xxclean_copyFalseTrue-0.1350121.804771e-011.00.5True
1x_polyxpolyTrueTrue0.8967261.816677e-361.00.5True
\n
" + }, + "metadata": {}, + "output_type": "execute_result", + "execution_count": 9 + } + ], + "source": [ + "transform.score_frame_" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": false + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [ + { + "name": "stderr", + "text": [ + "/Users/johnmount/Documents/work/pyvtreat/pkg/vtreat/vtreat_api.py:107: UserWarning: possibly called transform on same data used to fit\n", + "(this causes over-fit, please use fit_transform() instead)\n", + " \"possibly called transform on same data used to fit\\n\" +\n" + ], + "output_type": "stream" + } + ], + "source": [ + "x2_overfit = transform.transform(d)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": false + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "metadata": {}, + "output_type": "execute_result", + "execution_count": 11 + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "seaborn.scatterplot(x='x', y='y', data=x2_overfit)\n", + "seaborn.lineplot(x='x', y='x_poly', data=x2_overfit, color='red', alpha=0.5)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": false + } + } + }, + { + "cell_type": "code", + "execution_count": 12, "metadata": { "pycharm": { "is_executing": false } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "text": [ + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=2.78226e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=4.4025e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=4.22739e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=2.92077e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.10173e-42): result may not be accurate.\n", + " overwrite_a=True).T\n", + "/Users/johnmount/opt/anaconda3/envs/ai_academy_3_7/lib/python3.7/site-packages/sklearn/linear_model/ridge.py:147: LinAlgWarning: Ill-conditioned matrix (rcond=3.23015e-42): result may not be accurate.\n", + " overwrite_a=True).T\n" + ], + "output_type": "stream" + } + ], "source": [ "x2 = transform.fit_transform(d, d['y'])" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": { "pycharm": { "is_executing": false @@ -339,81 +383,12 @@ "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
variableorig_variabletreatmenty_awarehas_rangePearsonRsignificancevcountdefault_thresholdrecommended
0xxclean_copyFalseTrue-0.1605311.106009e-011.00.5True
1x_gamxgamTrueTrue0.9810701.102330e-711.00.5True
\n", - "
" - ], - "text/plain": [ - " variable orig_variable treatment y_aware has_range PearsonR \\\n", - "0 x x clean_copy False True -0.160531 \n", - "1 x_gam x gam True True 0.981070 \n", - "\n", - " significance vcount default_threshold recommended \n", - "0 1.106009e-01 1.0 0.5 True \n", - "1 1.102330e-71 1.0 0.5 True " - ] + "text/plain": " variable orig_variable treatment y_aware has_range PearsonR \\\n0 x x clean_copy False True -0.135012 \n1 x_poly x poly True True 0.834335 \n\n significance vcount default_threshold recommended \n0 1.804771e-01 1.0 0.5 True \n1 4.312400e-27 1.0 0.5 True ", + "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 \n \n \n \n
variableorig_variabletreatmenty_awarehas_rangePearsonRsignificancevcountdefault_thresholdrecommended
0xxclean_copyFalseTrue-0.1350121.804771e-011.00.5True
1x_polyxpolyTrueTrue0.8343354.312400e-271.00.5True
\n
" }, - "execution_count": 9, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 13 } ], "source": [ @@ -422,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": { "pycharm": { "is_executing": false @@ -431,77 +406,12 @@ "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
yxx_gam
00.2539780.00.388329
10.1038091.00.528187
20.3072872.00.569928
30.6044043.00.622904
40.7545754.00.740127
\n", - "
" - ], - "text/plain": [ - " y x x_gam\n", - "0 0.253978 0.0 0.388329\n", - "1 0.103809 1.0 0.528187\n", - "2 0.307287 2.0 0.569928\n", - "3 0.604404 3.0 0.622904\n", - "4 0.754575 4.0 0.740127" - ] + "text/plain": " y x x_poly\n0 -0.188057 0.0 2.332155\n1 -0.104672 1.0 1.152522\n2 0.469285 2.0 -0.175078\n3 0.272010 3.0 0.208507\n4 0.603709 4.0 0.507284", + "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 \n
yxx_poly
0-0.1880570.02.332155
1-0.1046721.01.152522
20.4692852.0-0.175078
30.2720103.00.208507
40.6037094.00.507284
\n
" }, - "execution_count": 10, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 14 } ], "source": [ @@ -510,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": { "pycharm": { "is_executing": false @@ -519,20 +429,16 @@ "outputs": [ { "data": { - "text/plain": [ - "" - ] + "text/plain": "" }, - "execution_count": 11, "metadata": {}, - "output_type": "execute_result" + "output_type": "execute_result", + "execution_count": 15 }, { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -542,19 +448,12 @@ ], "source": [ "seaborn.scatterplot(x='x', y='y', data=x2)\n", - "seaborn.lineplot(x='x', y='x_gam', data=x2, color='red', alpha=0.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice the cross-fit is more ragged, simulating the expected lower performance on in-range but out-of-sample data. This is good: as it is porting difficulties we will see later back into the training environment, where we can try to do something about them." + "seaborn.lineplot(x='x', y='x_poly', data=x2, color='red', alpha=0.5)\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "pycharm": { "is_executing": false @@ -581,8 +480,17 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "source": [], + "metadata": { + "collapsed": false + } + } } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/coverage.txt b/coverage.txt index 1f80005..42ee323 100644 --- a/coverage.txt +++ b/coverage.txt @@ -2,19 +2,20 @@ platform darwin -- Python 3.7.5, pytest-5.2.4, py-1.8.0, pluggy-0.13.0 rootdir: /Users/johnmount/Documents/work/pyvtreat/pkg plugins: cov-2.8.1 -collected 15 items +collected 16 items -pkg/tests/test_classification.py .. [ 13%] -pkg/tests/test_col_name_issues.py ... [ 33%] -pkg/tests/test_imputation_controls.py . [ 40%] -pkg/tests/test_multinomial.py . [ 46%] -pkg/tests/test_nan_inf.py . [ 53%] -pkg/tests/test_outcome_name_required.py . [ 60%] -pkg/tests/test_perm_cor.py . [ 66%] -pkg/tests/test_r1_issue.py . [ 73%] -pkg/tests/test_range.py . [ 80%] -pkg/tests/test_regression.py . [ 86%] -pkg/tests/test_unsupervised.py . [ 93%] +pkg/tests/test_classification.py .. [ 12%] +pkg/tests/test_col_name_issues.py ... [ 31%] +pkg/tests/test_imputation_controls.py . [ 37%] +pkg/tests/test_multinomial.py . [ 43%] +pkg/tests/test_nan_inf.py . [ 50%] +pkg/tests/test_outcome_name_required.py . [ 56%] +pkg/tests/test_perm_cor.py . [ 62%] +pkg/tests/test_r1_issue.py . [ 68%] +pkg/tests/test_range.py . [ 75%] +pkg/tests/test_regression.py . [ 81%] +pkg/tests/test_unsupervised.py . [ 87%] +pkg/tests/test_user_coders.py . [ 93%] pkg/tests/test_util.py . [100%] ---------- coverage: platform darwin, python 3.7.5-final-0 ----------- @@ -22,12 +23,12 @@ Name Stmts Miss Cover ----------------------------------------------- pkg/vtreat/__init__.py 6 0 100% pkg/vtreat/cross_plan.py 104 57 45% -pkg/vtreat/transform.py 17 10 41% +pkg/vtreat/transform.py 17 4 76% pkg/vtreat/util.py 161 25 84% -pkg/vtreat/vtreat_api.py 218 43 80% -pkg/vtreat/vtreat_impl.py 575 107 81% +pkg/vtreat/vtreat_api.py 218 42 81% +pkg/vtreat/vtreat_impl.py 575 79 86% ----------------------------------------------- -TOTAL 1081 242 78% +TOTAL 1081 207 81% -============================== 15 passed in 9.39s ============================== +============================= 16 passed in 10.34s ============================== diff --git a/pkg/dist/vtreat-0.3.8-py3-none-any.whl b/pkg/dist/vtreat-0.3.8-py3-none-any.whl index ca375dd90636e0ac4edb2761136c9dfcec3a3dc3..a4876a89f8a4afee12de9ca5f3b26868804d6ffc 100644 GIT binary patch delta 82 zcmbO+iE+jx#tru^nQnD%erV~y45F27x3L20$+w-RfT%)ePmt&y=Sv{j$rIeYK-3*~ TZxE&F;Q^wGJpw?~QIB8%{Zk~| delta 82 zcmbO+iE+jx#tru^ndWG0erV~y45F27x3L20$+w-RfT%)ePmt&y=Sv{j$rIeYK-3*~ TZxE&F;Q^wGJpw?~QIB8%6FeTK diff --git a/pkg/dist/vtreat-0.3.8.tar.gz b/pkg/dist/vtreat-0.3.8.tar.gz index 68ef96ecbb62b8c96ee951e95be360c586375d01..46ff74cb4c4150b33bb648441b645721e2cd11cc 100644 GIT binary patch delta 24652 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 delta 24651 zcmV)KK)S!n#{tU60R|t72ncyAkp?0G?2#!b0#vGzQ!Rhdr};GDbKL3h_Yr?L+lTzk zpGU2Oql4yAyVE&tJ!-ZN+s%VVPUq1BeCA2&#*Xvor)V5bqj{JvDF?+yqcxMniOBCi z$>&O6|F_@%v;Ok+*Ka<-`X3!0E?fU&K#tt{cMe*uM^1CM{-6Bw%1>R-P2Ktrew+kR z*mc^CR_TAWJN3H`<3>rnAtWiipHHW5ypXS*AaPu0=7ye|G`@nCzK)@?GmE34pCnPd zKa4^zNTC5gcG59an8p6gjs3)d>XZ6)6i++{hv1B&7+-q9Fb%GJXBv6_BnU5@AcP(O z{%Me;!O)#d7ES^yA#|>U!S=bFzA1An$D8${{BUfj_2o%VKm+UF$jO~ zhbfF@wh(iAHc!V<+;zTzRd-(Dve%r~LFhXFo=^RWcwP6WZZPROKM`L1=XDU)uc#et zwe(#u^uq*t6n{9~uJh*oOXt}P=6>aS`1{NEUpWW$;l!Q8dr_|Rm7fgbV3rb0OOE*T zKa78a>P-7tUI8%smwh3ma zR%{rO%x8Xl6(l~c|8N|HzBBRNI7CdbBanY;ZXF`6m`3Ve`UIUIoXt~xLaHoHVT>?z zl9@jYMga_Q7)|EW(812&R~eTlny0X=zH{Zq0fN2kRAAiYMY(D=CD!=oxf`ZIx^U9S zIrruKps|XJBM18Bgb{X(GY*nOpYWACnfpn#;W%%gsaOo2#{}byp}7cZ;M)5)vx$Ej zy0F3vHL`3WD(PY-AQr+7iGv}+dg!M9MHJ(U{UnW{=Q{Q1)o|p1^0KF?yHHK(1C;~h z3FB;Gqr}bx+KruSn0JD+#?1p?V&({`Y^7d?@Z5#<9{PY8!?AUVuzvy)z%Q6ip&94^ z7k?h4I8W6Y;#UEw2w}ZBQY;!~G)jN{5a9*;!HL2QB&r!JENc#}ml#PJO?=ptc}Q4L z@IwShIsuraKp<)vMxM`uiHFFR#%`Fv$YEZ_q_1JcVNXvcE61hQh}PxYhpFie1|dM+ z#TlN%l0+lbmPCV9ZPuJ?AQph{`B}oO#=eDCOlK2+>W3*)D*(JV2U_8H&=Y@BRN1E- zGA+l@ou#lis>T_Ax?u^i+w;V90R`4N3B|m@Re#O+rxlxi0z&~^Ft3tw=Z|F z*xczjj^-C*9ZUt3P%urLN&sYUh<)qG0dog5h9*7y1-K5N^24Dop8)b`Q;hv80TF4$ zlI4e262A$rU04jyccAozuP=Y3Mo$&WPkmT6K(0|7O&uVi@EqWG0b2n1Oij)BB6ht1 zAfg&Oj{y1^Wwzoou8ZfpFu<;}h~}_>A(7V{p8z0Ep}z$&0Y_s3IwX8I2_}o0GjajZ zM)L{&4GWDxUGRnjmIAniza@Kdf>ht=sx3A9Iiac-4d;l9I2!>Dej$I+wSm-U7{#+F zCd9JfGj1N3qJ^lyd@e_m=o+2?kwY;2JP(GKFiL!*n!^2q?0w;Q0djdDa%nstBEmB? zECBuy8i2R{jf>kUA^4sn4j`xNBT?8;%-Dy2{r#y6D;n>=5Y5?`{nrRhz)9F5DaaBI zlyh;YzVBdnU8nEHAA^6ZZtJMkYBZl59v^4e2YbEo>}@t8H@*q38c}?)@17_7S&b_2 zAix~CD!ivX5~a?4=9DP62vMk(v76}HhlfZ9B~`FP=9<9nvw9T2EF3FHV$@ipWk}`Xoey*b=yaW1>N-z*Fu%ruu65L(N4P?1 z{lj7gn=|!qQb2#)_|l86!xD__3dnO(e{lnxr3=DJH~{3G&UwoXfZ#DFg>`wf`~2BI zhW+Q=i)UZGdeNAA4`}~sH4hJukJ$dxIX-S5kp1WIxU;kWJjAC|dPu{={TUoecQY{D zlVM@4L80^+a6>3Cq2eX+cLpeu@BDz2^Jvs90egMyoXvlN8OR}ARFo{f*i0&k-D@e7 z%q}nXJs9Y|zULc&{f&!X&Tyn(k@S{muw7yGxCd*;U9B8mRpWlF8TVtwxTE#r zE>?@uJyj3aX;3Fd$Bs)i?!iitPDl#Lg`+t3HM<|xU==(9;^l% zSPO8YUig10GOZW~M^#kULUA9C{oy52ZU;wUsN8}@_5bOogvPQRb8-Zkq0nB2RB=-^ z`g{_d7u4wIMpL<;Ag_{My4k2Q1iRCS-l=A^KerpnbUsOgy5Kg8`vli3Y&ndk0dO$w zZ}FZ-x$!XPp|*EZH@QsiG`8=x=8PX2@NiQD1HOL<{K23@82ylhPl}l$4W!mF?)BY)1EBD=L-#(ch@7E~chYG?BAy z%)*OmsZ@a_i@MG?^GV>#(^`7&T-|mp0p0DCcNf|&QO%ZX%Ib`D}$;amzMS;2#KOn<2CctH_UxM;4`F(XG+*< zd@1(XiXz%>w3LF~CJX92BP-Gc&}!z0XcvA+LY}w3w6%Z6IGs+a$f^8z=P34@ z^)37aW((p**f~F`1CvSQKw^Icn+1)9?kw2PyB3JPp?#8&8+4$cRu)ib#GJ(0U&8eQ8huQ4icDHL8I+6$`BTKMZl~C=?1=FwTDz?kS0Tx zM2L=Fj{_i6Q_##Wc-Mg_M}iWSJr93yX_JIhJ5WnMbH0QbT*OFOOQjcApaRfRVd*$5 z%1Eg{9EZWrP~E8jL_Cl!VK~qOh_kS#K;BAAY*|opWDQ0zkAc?!VBm+8H`Qqt(qo|s z0X>YuD(ut}k`2#|Jzf7-vR*}(V|hbOf?s@3mv2k@bJs&lg|sb@4oP|u{QrL#$iy@X zA2awFGE&(HOGEN4QNA*;Iv~YP8qzxlmU5CXz;p#ckdM%DOEb`LhrtXLb|U%nG@9b> zhjx-N3N3D6uWI-AUeeL^TVbUq<8ql)V!)D38%Da*xb3yB>D z+GhyGr{{nMEDTcvXbDenmeV4Bxf3)Fq~j?ch2;hwMpuBt6Oa=C?3K{JmQ#RtnqeVR zN)ym&xzBmb=!=RY2pO~4M96|Q8b9jaSXdQ|-2ewvmCz~iY3_NQQHX!+EUe${`=b$H ze1cjXak&uyBEn^g5y4=vunb~0FK)2kAl1rR$1SD^dle^X!e1$vPK7WpqGJcBjr&ia zKLabQCqRx!>IL|zR;-}44I|M`NC7uN*JK`)^RNCS_10RVLRCWr+7;M6ly z~NNT=LFLgW>+C0OTO_2 zfDSaDc?P>KMX?$S@(dwJh{XnqKx4uU5qL;pkQA`>mAH>nx$}RR3cRfPA7c5D+>unk zP)Mji}6o#2ViI@Ol%46r+T_j5k8K{AHAUO%sqv8mH^s+!NxWd?<%p_Mxv16b) zXclD7Fl{(L`Wb(9?+WliLx8x`gvR4epdk;%XEs&f5Nc$RAdSItU1> z3fjjAZo!D^xKL_3L;Ip5!~$Oo6}ctlPJ0*Fft%` zWW)h@@<@b0kpP)huBNi~_%+RN!wf&=jb|DIiM-&7plN@Llm%kZXiW8ek~x*(jZH2H za5nb^p{9$X=*gx{VO2r_W9nN>E_D)f`(g@0rsGX_g+jz+qwN9&*1zGM!L+9Tmii@& zl{^P=fl@D$KpL#xQ7<5~rRZX-RPZGop_qksuGu_jfleDibUqOmQV$JcS1V3h`BOMw*3y?|aMHkU`fG7j)Xr=nXW=GE~I31jJY3 z--b{Hq?1k!66KVgCjMkp?J_wP9U!LEfn;;jLD=X*ZisoZ)=daGYmAP-Y8>AJR@O+^cfNCgEYV(#rDotM}LM z+J=8!33|j1*O+IPSL71`#T8%`68%`q9S+e>;}E@VU}%ER$I4$D=ZI7w~H%xH=g zA-9Jl4WPVx0U8mAzw)F7VPKU4YfOwyt)a%WbcNXH8Zsk`#p1w_5v592dNwG^l>>^M zAYBl&K^ovu3(L+;BXvxm7LZK7Vv9Elp5=dJD-?!0?c5>}rw=KBEdhO$2AvTQJU$Y; z4^Y*$x8X3SHu^7phGP^*$)$f351h?s*H^Pe>AT4F=s-YO6ok!#Op#}2Gj`SjPKh*% z%{KDa%?0Vw@~7y-_|+h?F~BLw7qBj~MT3=i`3#5B0CF;s4-y~)i$(&#PJA3jsq}vi z=8FL318nG`?)9dEf2N?s5XcmR7(gyu~_})Dd6Z`PR`H!FMWrg?Adaq+9zf)BFp4H#(rdvgEPA|7!6X{?yEUhI zS}pO)2i^_zmiTFfyN1d3_vnAs9+U|ZMi5-`0C6&_gxF1w2+ozTdP=3ya?%q-1N3v; zf&<_p71@$lVmj^t>KxID7cgo%okw{A1cii|u0ii()Rx19?Q?uSFOJHomOL*Y%vak* z$oVuVm|{)tpW&R%q$Ev7g17Kt2DXH)&Y4?MQ!xuN3n7e?DOQ1BpjCg>z$;II&1)dY zRgNL%CNALZq9XQVuBO^Gy&h~UPXasZ0)AV1(3iyCfv9J;PwVu7 zPw`QmQ@UJ%ED5iT1;N%OX~HTDK(XgmK|mT(rDqKgD%e-d&^_fTLXrfC+(668tkbZ8 zyn%E}BP3sV!PQgvVy}OQ^C(85R&JG9ChV1wn3I%TehNh8ixjIrCGzq`8pAR#CVsDs z-nn&m0@7#KiGz!A`XA+|!U-E{JpE!H{?UGe($lg$Yg?WjSe_kPo^>qGjx5iPEzeFY z&z{)E+{{00G#a*fw5_vix2;bPtWOWEPdnD9N7kpu)~6@dr?!9D0=Lbc!e241|Gq+i zFVgeKTPRe}Yv!IhDY9~derK)j~dPV)8pc!Tlc^VZ9IyS$z}f8=;IGB68Go) zYd-v9w!eQp?|l9K>-^*IUY$&iPM-YyW_G*YN8dj8f4{|SKloxEJp9&tHaYsY z`~8PP0e;$2o`QP7sA0Fjjy3^y~ z?N;^RfmhY?=y%wl&tDwRFAwJTy+OZz@3w!x4SM*{yt9AVe)5Olovm-$!>b$rPOE9# zo%gbw)1OX`Hd;^kX0ZtVK#3aum_6+{sB=31-~UDvhIFF-VtK3EHVaKq9 ze2B#v7W*`@Z;Db5qLI)N*>FjJUI&v2IbT#w?EoEPd^8aWBUt0(Kflaw_JP(6Do`+` zV{cNJr|y5v02G~c+&ic_(K$Nvfa2NPI}bvPyMmf6o+#|08ogi(KX-wCL={i!Y?_W& zE%`U(obiIbP`Pwb!R5;60FqYx8=<)1qs-aL<1-o5xM`|%6XTq`t7^_@61n880P~t; zS3~vBSAj>GmAG)AtfAa2sGk4>ydZ!&z>`*uzuSM}`#^jjitmp2J`&%@;`>B=KcVk7 zE+c)n#CKbKABgWm@!b*MN8O-Xs<2WYm4^UqP@0guPxeZKLPyu&QJFeWqp>`W>-5W4srg6E(SdRC6$Q^dMf1&0KXre#asFhJ^nU7>e+-ex4Xpv8QAL6+$ z5b}GptQUOb&=7-;?Be>7J28$-s53r?B_|nybn?y;pHL}B1bOI8C%fbplHh%#yjL0> zi{nWi1I2a9?9f2aZj^0i#cM+Mn}fq9-&}vJa+oF%wUARNn|q@*H^e<_~T-ZrnS@;{vLD#Nu7T) ziH%b@Pon48Eb$y+;UmvTvh6rxml#O5bb5afYf*a;B!hF;vl)n%zdBt0sZGRi&_( zyfkI8Ij!sN$wu8hq3#B+pAA;L7Mg$6ve!boyB}Lut0+3(`cZSEN4IXvQpzH%Z#u44 zr*(AFE~pt+KZ5om$C`hRSBD47 zUMl-W{>5TI*Ol^*$8ItpHNR_-Mz`us03v?ke7c|u+p+BJWyA33N~JMk`ye=XvMK?l;%PEN*2x+@jq?u0+ zth=q*Y91V|8O7!@si_I)!O{Mt;AlN*A6sYGY!)TVk+QyH` zhB^@5x2CgOfpPZBDiYRd-||+Y_2tvkYH8w!m8^Z!OBFag{`qyFUHMunDDX*+QC}l^ z&WaBm^Bf(@DhJzFIoyA~N@x2jM_X1|{{f-YF(S4W%xfDB%wllcq>8k@X{Fwin|ogr zt~r3tr}-*qk=wEgTIn{a@|_=Eq~oqbM_t10nNKKlJK{4s2uRw7$)i?!@bX{3yfq&DGVKJ$1FccEtxx^q z&gj+A{Nfwq@$rAF!{cu{|9sY*efZbQuWv3oV)*SAk9Pj;vzPJ|mmYj~a+nwoUZodP zdA>^zUXPO(;o*12vyY>n(>Dj-d%w6J#{+o^oEvECF#mw<^}}zjzBV3w|F19K$&+Au zfIb_>gI}IsUdglIT%+Q_i|?Y5@c{iZ*LLOBTQH1d&<_ev8On&IxD#pfbe#%q z&dT1Ky=twRp8^GlDXkjxn9evW{Y_@lzY2h-Q|DK7fx(y>vu3?_dGSNiFT73zdmn@4 z;7vt8+{b??D@nS~HN@9|u8qHv>^?zDtc=`3_ZHV1+Hw0&IARkgF%M&*Ay+5>>cA0HeX+cmF)w#76C(S%VStFulCW2eGE(B)@dEyM&aZ!EYbU{ zrV|{)k}-GMo!h8+pMDG*Dp%)xhX}Sd3TeZuemS>6%BNrSoM{kNtnZx9omQji*Pm4J znh}4s#?9}@!wT}yw(iaLvGsHdH0opf-fSNoFQF&Lx5kGM@8AML;7T?)pauKq;9W_2 znbVPT^|x`yq~^Bq$mGV20hrBWNP+=r{JmzQQxhS^;@;lHIrgt*1>HjL zwQ3ffKra@86al4-XV@A(yKtvdx7V~aAp?KT4A40ZhSQQWouuvn1LgH{-l&!~rgVch zn0SM0A5kB>6eb_KzYEM<2PnEehJ&A?^Ta-@5N+VDC#tRhbBq#Ko_j71F&Tm`KA1&`Hf+3u%N<+VN&?W`Q!y?)J|Q?`HI_?)bkQr^H)em| zx}NTyYYJRNDeKt`gXd)Wo%DM{9T(j*$Drob@kV0Nw+wgwK*R*`J?TAXc+Noy(a+mS zl*+*C6O6kq&VqQzQJC|bthnSNNYRYlWFC`CsdjZX=fyW0smrDL@QsyU#ZAwyHu>MG zs!G3%_sW58_joJ~am^fOcJ3PRtD=9(-a0L*kN}Mt%nD@2VI|*M&B>mKi>5Uv4N@fE zujG_J;QO+a9skjv$rxZ;h1pkEuf-jI@f*W-&*tgi@Nm!+VNE54Xf}=y+lS50QTyoN zxN`t>mX7UKt`LzBzCY~ekV3dRKKuST2TDqv3mhZIKoU-i=k8CstGAxVAhJeBThd#%&TANVym4;ke{ACLJL5n8x ze{3CyMgn8gd?SF&A}fU&P8NTWdHe1+>O2cyOzz$kA5w&J31obJr~gicHF7GGAiS(@ z7D-1B(jbF?h;QK`&(XOHUHguE9$ooHTt77e&Vt}#e1fv);|a9JIXL*5B+?ljs_N{~Duc!$WjMr%NwqqhJDKAEePhJE=Hh*JqA@gkyi6XTikv0qe0@ zU0O4YZa}{D7z>hTAjE|NPXTT=;1cU^6L4g-;+2A$$<^6vgw}_oCz@1Ywxvm;^6Q>; z&U;-lLi|>(YC~Ib1&7`np6#Ma!MD9=*WkLhqr6(bTiTySo`Sd4fUb|qYA(O4ohV#w zDB{uG!CZtYL`b@2D3pK8aFuo$Zl+#_JMD6fcKO6+Z2*>L)fEq|-T+GS{HcTWzj>Sefvei?4BV1_#lbD4&Tmj(Z38fK_eOu8&pG3oM3OTHqEY_R-1F$#JLs`F@rsXF2W9a)M13Y=TBk_!;IM#hW$xDWtLrt+}_2a`d# zXY&{cG1;t?HaiKISb+073H&>ia@+7lBh`N zwjz%Jg}P4s$rau)J*O0gSCl#=)LG&}kPD-jqTKpJcg~AKfmyW) zvP#IQP(&KLTzWK_iV>g}#J-jfk$_7PN;$-JN$ZEMV9zlH2H%-xbJZx4c|-CM%K5^t z2xt9#O*DUhvSM%)R(6S@e}2rOu!&5G8Xlk;IdZ1~#b?Np2~hUD`Eu|T8;kZA$@2TuyXF8$<5k)_tq@;Oi#{c3~h0;Oz894(~>?y4-HHHTxK zMiJ=hm^lK#G@f59i;-KI1ed<^OE9ZbHoz)n%bar^RySRAzPO9R*j^=25_% z?|6|3)xC%eqtS3Uk3~w%Tv`o`hwq7`mlUGC!~!43iFbGfl&ylP5E@U3e9^9#6j}`M zHD!MWSvkUI5+9}Yjw7*7q6G&b87e8ChYW1bH-GlDwnCrDdqZnQ(Q z@R<~deljs;6h_j|HI@DoS$OuXMBvPOS#d5}zjs`_GQh>+*xDd!3Yx}nIkfeD*n zATrOVND_#tZYVR4O7=^MBr*dQE;yxOobx_3Q@^;h8EICSYJdfN%=qVqel$-29KZN+ z;iYuXP{tCDU^7ZU~+;4Q#N9VeGVi+WEj&}I$ydAp#6Us zkzDX+HjIsgk&Z#n3JP5dniAGhbkl%`Nw^~>wGvAh%U`i(wjYEP971NldHt;BymnvL zoX_ho!;yyaKbWLnj|@RV0#JJ*a%5nhUR6CX1}g>(dlQGb6)+~A~fD%md&W-Npa4w-_A;92IuTII1PK4z!Z z1}?XN$f1+5FCth|7Za5Q+@_uZ2}vg9#T8EDWs3DdK(bAkH>!8$A+zQB^f(64v%&>$a2T%lw;i37B7@0WkHMT|j!AM{{na7tD0oar=8YPi1gz!|!sUj_$A0{FZvIrOpI}Qn%$XEl7 zQ!)~fNTehnO5&N=?!X5aIGiK{fDlZH*i+CEB3ha3fCDOth&v8&x-9s=;?=~Vu|8@= zn1v8GtxUmXWH#o=zc`E3h2ekFN#1bm&d9cUNW(kAMeRRU@yE&k*bx!P8K>VpE>->w zqTQs%c@+P{c?Gl>fdz8QVO2>tGuZ~tA>kHC#;J;&%cVX^X~`JVsgaZ9*!R;rWd_YD zT;@+a7Qu)&v{cuA2{GbQqRXgQZR z$VdjDvcyPYSt{r=h}I~0Q7|FOmqu&^%_e-rLsD5L#UlYJabj&sNg+jfEy*eGNQubL zP!uKk8bt>z$>&qqP_lpAX4+Lq;NO%4hcvHx=%oa^%KyU{YL1g`_IQ{0*v7+ zlzt4DkU|8m#6&27k|I5|J$Ln;6IBcE1x~+9@}j5mzzMezBfXi-UjxJ>-i`>_Qc0?GFj6Z-i5^pp+}suc`JEGJwDF?+yqcxL+kNW+6TP$QA4JM=xyL5WkM{|!*JXYq)71AK){my@k zCj?ymXm$g*mTYicad7R}!CqPic5Rq^CX9B0a5gt$S(j9lZ4sKAGL;D#OB`XA>COSW z=PIqQOd0FTi*mIjkE6x)2T+32g%A+MxS6%F*OO@<^U5b8qTAY6=*840R)~P42CJruS4^wwh(g!3=>{VVid060} zfg>iXNFuH2S_)NwM5FW)6;iS~it}z8$jQPZ@|OjmaC!kp8<&==66OBPBLN|nCk*1s zur4A@a58J2ddUhSVet_?r_qFBoafW7k&c!`lPk7**RoATqDJCqcbs5N^+|tSv+Zv( zvG%WEO>kxdrq&Q!sWtn#T*g&x)s)LiA$i;f-N0!k0~ZIeexict$-d+eMUJ^y3cxPu zZXGCi#Zy;vcM+~S`Y2T^>`0RBDL@eNZIFI1`*KG~g=QR+xm*K-TGA{*Il2ePqb6-} zGeZ{s%A(iECz_3s&zqJlBc^{h)Geqk0NL|7bt5i}MyC{N%IxTrmsMCcWB(#X({Myd z33z4~vFl+1_Yym~DoU3$a#nOQN4jj|&e2yq2%{Xtd3P0@q3Ow$rz>M#z@#hIOUb*NSvN7p_cb!+Dw_L&Q786{{YG2!g) zz}Q!}OaS*=MFBuc6eWM+qJ7!%zDnjfOT3JQO zc?<*OsZ3=3-mhBqC>#JnOvORVfIL*#*0~3pV~_l* z_e3+li8;Z0qT?`7H&kyYATWdpOyxWN!|8UNH}79M&t|}_kVnDqFW-OV9H0>z1rJe9 zLW%>)s5zFO_6~mt^Q1KwOSF;X=5rUSI0_4e?}%07B5pbLR$Q7hfkWcFI# zxUPW{Ao7x|$S~YzbB_;OVcg=}b^jfRTy8uZ@9FOJdvD_i*ur#*RPj4tGIKm#fLgqV zwkeB$9c*2p(b>Mr(e_o2x36+yR#}4?CPJLr7rvL*!AgJCow4XoYyS}(>(M8${~UKZ z%k96-X3qZG>9m@UoX*bv^SiA7V1OPPgTZ}S0@v98I`AX2|G~mHTgOMO_RjwIF!sMN z0*MB7eiWGBF1`^Cxy%})*Jqw zg4nN{RJXFFKAg=@3^8Z%Q-j^v`yR&Lmtn`B$l51x$7<`#CiI81^vPYhv-7RC^JPo; zN3`-~qx-|y_yhyYTlgft{eJenGu(n_U)lv|``+0y`(D=bGW*`s_4d7Yce3sY zA)s_;NSMaGr&W{7o2ETs+1qEko|GNd^e&{Af?4nE-F6MIQE#UM@AQ9D|Kk{Y6g}`> zG{DvRU+eI&*+TuV)ofw#UwGecq8hl<{~q9DC~5kS24B$4t9~WVA4%WIEC)j+9H94Q z&B=dIr^+GOfx>ViYvtJ~Z?=hRjCd~t9XH3Wht~-mGz4FS6eR$u6J25B?o@6Sl@0^gXX%iR=HBpXs!SwBUK{bA5AL#O3a3|oPIsp1+S4OkR{Ig@$XAs5^q zl>hHr)gp|OuJI(ZNx+#aus1p|VaxZ(ktTnYO5#sO)odU$XgDiH4bV`jT+Mlmv21Xj zA}q}1U=)EMEq+lDF8*^t-&(`53$hlv2)~pvtnaRWNCx=w4pk!3Iw|xT)T@w)`?ne0RRoT2uo4>LD;dpDN28f zt7@VO#+LXgf+rwOM)R3MuCNVDk7)x0ZcQSE&d$Emt};3WBh}7RsFF=XJ_X!t%aWq@ z7d@wia=R>ozq5*;0dOw-kku%>I5u%-upWuHiYktFFcM4O2p05fnJ#mcyG}nKEGHy4 z=6zao2&-2W`As!?nqLy^w!}jeZq$FYB?a8jaxk9&Se*)8rz8*Q6a`gOcS6*493P}t zF3!-qh-WyD!1;d^FqRBU^c#Ypn~dk9k+=(@Q>2D?QGr&gB`chMH6XSgV7O?|T0b~- z{?T)OIyJ*Ht%IdjyJyzUfQ&VN%4$k9E@ca#17A{{Z+~r;hD(8z{ABI!ICIMvny&qY8lY2n|RD$I!>gSVac$x4G`vmXx zgwnb|cYPK@*qe9*955n|L^gpa+;_iB4N-WqzK)v#lvLHLE7_7|zTAK4JlucANteT11$is3I_H!oLd3+OhA^^_k0HPm zl8OcHIe4Sf=uFT;G#P)xa$Iv1biS45p5uAVB?q2>UXv_&0W_e;@zGl>5TRms;t5A8 z$`|KfNFc?ZbBe!UHY4Pk@XDML9|BrLo-3=!b0r8T5c8GXj7z9U;>%@)@)Zz3eJsGK zE|4bXIbhajkp*5!@ur$}zB!n*u>$c2(l0?ZPz@o#_(wI9`NV(Q6;d8bcX()n0l?hh zC8Zgq13Pi#a%b6{BQuQBL4rpvz^LHcoX=JHw4a}#^M!LEV%pL@CY}g0i>aFq$6GcB zylH8B6b^jL_MWa7UVyS^MFGF=w5lkz^Qw3^1B3<(76q0n77!ON01!Y^r>YtabCY^c zds)Szbb#y6foy;HENwK$<1LP|w7uY-dc2k7L!oh+rS z&1mB+w1xgkg@>O?{*Di&ex|MQPHuHW8S`fI_eh^dmd< zQq{uO>W6<>CJ2WSUX-9j16ZzqY8DXwUHW@vqcQwm-}>`<#0J7am3tLe|RZEkPE79+US3TrSLu3Vqq}A0-BAc^qm?_B90b`;~%Nbx~Ny(}{)j@Z!vsR2zjqQCFT3t5wT9JLCv&tV7DNA|>>R zwZXY-E2EXvS0qRV=dP!ZpM+ZJ!Y@XCQ(*I!BIi&TCqGofD)klW(9%- z1`ofp{;G!MCD*P1=os&?lL<&pXYEwND8)rk#$!1$cwSNKBkjXk;bcCoh+mq8Sib+l zX)jrLIi{PwD0^Dm8&mfNcfwQoGYEgP8A88PN&+FQ8I>Ed!i>V6DD3N2Ci;FatEjsf zk;rW-@0oDq%m!1PE@cI9Zo0}la-Vl6-9F+L_%g>iMi$qqjKXdz^Z5k(sly8xp68KGxHiXjb?vUf#Y{Y ziBqXX5=;)uH)`<&ij$ig8~g#D1z6-x_t8Qf=4{NW1$-y} z&Xt*xZM&F6u}t|`?Qh&0`-=}NN=yXr*ooMDspwnr{cn>WI4%mO&>Eq2rIM}YQajnL&tAS*s3+O7$wDeWzY*w(2~7EY2(G zT^LZ6RtCsiuMMPYo5D_Hk(RA5#5DM?{eP^-6;sYXv(}O`)qd>rw0S~wF8euR3I|NO zA{!4y>Xi$NHXroFWP+YGq;MGLEelp*J0p^6#WK9kT4$mHtdABp-=>Bq*e0NfnulmY zbv( zoG%pgseqG4WGUu=;K@c3=_l#^G^Z=EbcZ$!NZktREuz<-BQ23N@D1k75EWxoUqo6j z%3Vb9)fLZEAlo{7EkB%7HJk&Q9!qoMId`jRaV!ltAAVW$$SKl z@DjD-UqLUb>F*P9d6ss!GfVur7uAJJvbatzTyCPG){-g5KtC?hu@g4*5{tDZ0LWbt zO+er%TNP9`5S6n|R1gsFYFFKLK=NBdr7;$z$p4v3BS#NcG4mT*GvW1j?q~UQd0Lrp zPzg~ZWg*H?F~1;61h}lrhkyBU3v0PW)p82LugUfR(t>iF!$eqa?15&H38}E942e*C zv(Fk#^0RW>@<0)QZ6lQc6j&B!0}K6)y@3S^bybl@CSx9=?S&j|VGrQC+x7u7y7Oef zt-)WFp>*F12jd`R6;56KgFT_Ss4!M&FkEE5$-?b@IF15fF);41CV%tm=?tG{5)>vf zGrUJ>SV0y2n8a93M+-Sp{{9@-P2}jiV8<)QG^q z2XgwV>9HO}+z2~C(*q9*vZj$V>VmLd1!|b6M1s(T8&F;&Onb_mpy!9uO2s}?L#f(T zL{!n#Hq|Df*4zukpV$tZvV4*G*AxhKM zuYVRxfV7ItBs-Tg4GY6)V#20>b((u=ANWw-jLqoOQ)INP*eL>p#SCj0J}8uuP%ui$ zhgB2lDKv#N{Wpf>5GH?Ca%H9Er3jX%I=UEaI>8-fW&SYq41ebpuP!!TJR3EI$zpff z@j+w8{5>|hD>j*of|bs?#;v5K5=U7DPwG0b^25zL!H$qu27pkqRYNc^&rI#?9DT~;^`6`x^_HPtN$!zhF;2$gD%dlLYOuhE4xQ@7pRh>#b;NqQTQ*C)Cj zND@SpDyck1)|%8r)TtT@em$~u9Oh+bd9;Knf2EP9ka2<|d!aN-k;@tmUZ27oPzT~eMPva&FgU^a!$ z;M_d_&LSPqRWN=d!boN4;13;Htv}R!G4U}ptv?eTW`tfG&w*S6t<<4Tm5>dk9}oAYaYOB#~ZQ0JzM-3NbdJFgVCHO-EG9Gu=bqG0g{uT!T|igbp=LT7fR( z_zv3&LVs$YNVB2;hC4%tvkDfr&}FFBa6SFCKx+7sSdBTQ2OI&e0$*ZoQ+B6C>A(!H`;;DE_M z#eX|jc;c-6%oRj`vfQK0DPIs26*CRFALcZ#pt~{uPV@^6=$9<+A&RJKSsjO>n?|7< zW8gl|6RD)gahVnT>eAl%@*at z!6h9_WkHkj1=I_osD-x_r_uV#^REJ#Fb<&j77uvs^|D}(`PaW`lh!|EfBz;~l7{7W zxoCFjFA^abak&OQsZ>oV=~5#4z$jFZm@cKbMD1GSB{H9U>o0`yL~SmNPoW%)FY)B1 zOidwDfa3EDxsRLfNH~uEC7v8;1A_;qa}hpN!ekaE^!`WzUtZ9fc2YOFOm0OX9(>zx zwntZNzUJ?<8FmPsM{vGKfAg9Z%r|T%`XC+sD;oD~{2=uF54jsKfSFS_#KazMcD02s z%5unE6}nm&F)LX#-KzbnjcI%l_Y94PS8hC*1WDQ}`p<}NNG7+u28lgEwt>6C@><)^ z=8Fuk22*#Y70?!2&BoC*csbOrga6{mN*c}ah1^w4ol&&?(Pl?cXziI7B0oz9d^&&e@=FCF3!yyGxL5XBO~v4Bs{pexHO5G5AhGw z0MbgdqDCipwBB+Dw$#+ao1$x3M`0`^Sw041>!2ENi3wc!QMc%W!@fo&-Y=Ggl!~P5 zxBziEhTeYv+7|tKWd@qX{fl6B9K+)!J3AJq76{zk@lS>~odBQ5XhNBiw;F01pi=V7 zm8GIfs%G0543=Y=?gdPBb8DS<>-7yTa5jZRoDhLZq+o<~Kc;7FVwqfs*Y0k%U%STvDS&VB+6^LumQ&-0YdD1}l;ZjtA@N>$gHp=YMb`{l=Tl?u94Chqel~-T0QSp^J4!_Xu&5GT zJA}=-ttH_!dZ^M!4{tuj)SKuBsggSwG@dDw_DH2|s-U97;NWV}(a1OIM$!>olS9C3 z$wuOFaX){wRYsyq&upD;qTE(#5MRF@E-HP0-T!_=xQKnb%#ERkKpYoSUqONAvk}a} z&&-^e`9HsA-jk-AN9u2ra3U;g0Z)?a_!`j|{@`GQ*B^OZm zCf;}-XDs8)awzFOvetC=7Q#Oky=9j)E4Uw-CzBH2GQGE9+O_y{5C$qN+-4ok^Xe~? zS?c*Zrd{Dn&7-SvvKMq@8R>u%mo-g#05=g!`Q$}eOpn;l={ugW=Ox7sXm~Gx-+5Z5 zPxiDl{uz?k#3QvQV-eOI$hp4kUH|ssnK`_;u~7_cBEwu7PR>@4Q~UM^eYL%7z)^GV z9_F9eKjk_SyrIsWprdp1+@(=y3=j>wtSauel@_ws-C> zsakKEhlwCII<4M|hpW`co$s)!QxY)UMQK{Jv&oq&dcC#i94^1m;AF%lUQ33ebmb|5 zhCYpPl-9!HwY)g(0BGnIsn1&I4Qgeq-D@OCE#I~8ylkNh2>rez-Qe<3yjyb|>ACJq zA2M~F!$7Poi=-NtnRGcGAzGUnh;BuFul@5aJ=egbRlV@s;$u@oZmP;b?R9A7$Zy(5 zoV?_33ay_0OqgSWdMlJGM9F<_S9_CoO`zqMh6y*yw+-nwAX+efb<(T}1bu-jxLqza z_=%%Gaav3XxfySvEl93A5%Bj<6-)P@(CyY4MtPo%TLWw^Y4ahc4$5OAuDk`yq#JHX z&6%(cmj26&FqSlk!XOp>fPnPs07dpqe`zcJD>f~xVSWXu52BkzxBa+(b|2@SXabF&{P#6`nuFn# zoE&;iR)OmYsIk?x!*fCeAt!sASwq7v1h|JsITqZ z*OWFY2NFDOvr-m&0yVc_*>CuL>o!O0T=*MY+w1oBfIDOXI`Mt1>PcH(aH#bJa}WR+ z*;~xz+dw0%d?P30DuST-A1S%VjcJ71S7FfXw;-+1L~yfsHLqru`_e7Zym4k5%$F=m zyFDIbZ9%@a{Hq0e1_=~rtA=ZdD_eGo2t+yBPE1&Im|msdX5&FtCIrW<=-+@V(L zAjIWvW;a_mP;^^+a>!HrBFm{1`un3$wO6VXBsxN@JBtqEn@Cm1==WdNr7#lR{HrP0 zvH@n8Oqha`;)9S;t1#T*-*Y9A5&NxSA_qGIDW^iO#00U6L(gvrRC|fR!h(6+xV)6pFtEXp)Y#2)m5OUcxt(DXVthyb+}(c z#kLQxn;s2qzHU}JkNvx^ipy6>Xe^#B9Anl|-pa2WV?iQ~lFzG*S%p^`QX@i?JnjY!!dFRVYpvm~bQkmyLEdebm^GF6t9#umWxSdca+9oNWT z92g?1CYuzb#swoR>+S$2*HsqfXI1c@Iyf_w05o<)kG+ftomts~d${QGdi>}QrI9N9 zy>?S38A|ZnQF4YbLnzl;2|^R`xEMd8r)$N?$RQ1?4W~8giOlTPbKwTB)s`NuX3IxO zmW`}NwR+DL#8I8swR*kE{F+$zCrjM_H7|+C1vo%8yZ|FZXdS?Z*>=x-mM*W8m60 zv&yYpl?6143t(pFp?}ASjB{r36tS3u^qokjwb}5yWS15l)M-6LYm7SS%~E075|$pG zLAOQEASH+uhK_)8wPVzTlF+BfqlxM4LS~UVB6_m(Rx?z7K3be$Z9j}Q`Q=kWdl=25 z8V^v}%GnZmtO}8r1R@M#1}hjOgTqk%DwT%IX}Q68d=RM{w?L$^CtkA=3Y((J>%F|H?Y?$yu4QpSHk(U^c_6wo!lORociqjU&<(NRu@(2fJP!M#?+tkl+g6TOe(GX zUQ18T#I?nH4%3AO#K`rFg>!6F4VocL@RPB*^eN%aB-t6D!T589&m>o9N z=<0&I=biRdPnA37{D*05w?vl$02xV)m6L5sybZF<%Gm=eAm z)Ja0Bk>*Sy<|Nr8*XMKcN_rY&Zdp#cR=*z@ceXjYD4)oapP_)-R6xepELF|Uo{^j& z0!LYh`B}e_vCbJC&nC(>(VlF-*;$h4_L96+BCD`r$o_d|Wq?hF#cDtcF#lPG{3uhW z^jVd_y($>N_t+@F-yDfOhpgMnne?pAVaF(2P)Dy?4>$2^z^5wox7S|O@DXm-A;$!; zy449a`JuIHmO2$4;FE-ORR$# zg4wwHD9tM{@rZJxEL9Ez)ZA3|;>V&8BGV(soxr{1_}!#gl(6V=E~F=s48{r8>bI)! z3HR=UmC%iRi7V5-D4u>d{~HT;(NEK`=bELp(oqObow4FIv$CbOBc_Q_`~ z+nQfCRQu7GIpr3~b?z@%@paah*ddy&r%UnpMsd#1^J|i-(D)OA_^51$5U*4MHxTtB zhEWa27N-+Rrm&f-kgVk++HQQ_5i-^Rh9k0;2=x$N`%OY#771BE5~X2sh4@JQ7u}CX z&h{-wi;fP-j%IOy+w13D&2NG2k<;!u`QNmc4eL=>)fYeX99U> z9tayZ`No33E}2<{&k*e()QZ1}AUGb;W2no}aAejz%KP7& zdE1O4da8CZ4TqP>Wm&JLTy90ue_Tt!?Sr6xj{BQMV1k`0c6306!Srig9a%ytkRebu ztkLB%j@RmjA*ST(w^lbXwejA~pNBg2lP^bs<%YFk68eU2iMf^>A4i6xrCc>hJbXj6 z5rJNf0g6O=@_bp?c1^Bkl3y(z%VEY0`6(Bcr7&R7!Z2Innop(V!2WT+`;{HEpPCq+wHcR*Bjb(3xv>z!hr zEliK=+aAB6Xmqbx*Qx_$y@2x4lLFIWAHZq&T)zD>C4d*_#a+gb&{&lv{k@2{@gnUQ zo04}0YFC?+&Unez*_tRp_*;_(hWVq@AG!Sy0Z?-+LMu+e3#Y-MdY6khDkHr;yZ7qw zrE~CWL(<0s3j*%?;WN#iS1WJR%uX|k;-*b6nmCKtJL?AuZ$6~j2nA?-391l28DM%e zzcLt1Y9;EQ5mAuvKx(H91qzVbn^(jX5nz9_MQzFw9f&#@5Tp&k{%aBjr4x>uYbfF$HQk;y zqD^E5b@whSJQ~i@cP#Ltw-;sP2r0mChsQm0FrwX|k=H@?`AHd@Q7%$1OIL$xDzZcl z=LmOQu98_vhA7>mn7^(40VR~U9z4~-ef`N~;ugg%6EsfWXUsn#i&F-z1R6Py8Te2d zgg-WE8#!Jk*cIjMG9S$C1Q{`&DEOoTN337&3L{nnr@!SfF6z%%bq5!w4F?61RSYMA z=1SIxRlQO~^vIKc$_agoXZJ$%qAeeL_K~vbzthxQ^so-T-v5ASK!_ERHwVK|OG+k; zK*@N=6Z)!RyJP*q`J;PdC196HNsVJ(S5M{;Hy+#mbo%Z1<6#04Xp9=QemWhSbB?rI zDP_N(>#IS;kb1LVL$C1%)6a~u%ZjB5qw!ij^^&gce&BWLib~6>otv%T0|!|%M0d0iPKteu zNCRGJrs(D2a2{0`QmYQwR5}LuvccO}mu9jj+be`PrM8BKF0^PO~D6FzBL!)B%Y?xSTJxdT^RZ35-R3NUU-fw za#u3VoV|h7uB@H9af9JCIrk_Dv|9?FC}ILR&+2@^#pP;;aU@*o{58Mc>jf_Q(ErGe zGo-z<=uJtfF+VlI%WT6RLOelrDbtFR{l=-J%LY^Aaxk7p05BSF*x=T!mZNva-Q)!_ zAx-M|q(RV_V=(ha5T(c~_|0i2`*rxESY5N1@r9^_1^tEVV6t!w4HC2vkY?}os<25c zl(E_A!#BtODVs4<}eM zQAt(Y6>m^5uKoS|CHg&atA26~{^qYx?4rNeHhRbCQb0Um{bd;hIakD=0>+W9jt&fr zNy6`kO?7e=(RZ|Z(o7K^0A_Jad$P9HoJDCCpO-wwf*E_?%SN6i$;&8 zrX9nqVbeB5s-$wKf!B}4lP!vB$h2vDi5Gs)KcX)&GudvkQ)zz6SFv`dk=;6>Z-0?> z{|BiQI(Bt%prOYjr&L^=*4OSTjqG{!(W}=SMGA`oOP&!NiiF3z`}O>4MLPiJ#spr$ z9B>HIo?kaqT~v$;ND-c*X0^!FFjr68S5?}bt1VPs9A(>eR2q^g$^XTG?9bU>m)L~$ z7h?bFmcxew&+M!Z-As?7PnsbO}-oHcdhEaStC} zthxVb8%A{bxKbVEwu+idQ)Nn12muReiGCO?cs-(3sRcF+rpIOxPsyAW`p0J<%=g>P zX!!H%!K9e1g!1Y zU~~?u#z-arY{7DO2Duwsd z?iU|eRCw&-ALPLXN9|l+4BC=&wUmZ{Bqe0=Fbp~rXW6zOO{esG)fdP2WfGWu|*rKWam^td;f?}^5qxm&A4JV+s&jg5IDcL1)}2v^<@O#l5#!cD9^TsLUD}~F)qA&x0$jG4s&bo4YcW@&(Zr-d!Ec zM-pH17@>be0A^DLW~PVtId~KAo`p5DV5d*w-*o88C@tje0^+pmT z3NsW487DGPn%eC)*{Zt2tZ2PLOYYch$C6lhxbrzw2KtX$MZf=$U3mC)z9m}yqsC9_ z#JIfhEHIanemejD|0cc9rMbM;d;cftJs(gWa7{aw*f}~$-lpW1b^n!uwm2~|#7HXV z#|8`r$snnKcDn?LF=BR>QzY zP|yFu_IOmO(&w~<$0Ej35&yr;vK5{l?&sQjpPJV`PMdE9(;tc!ab;W{4I^b(iUQmn zQ3Yr{kMKv2D?TA&P{I592N6UB9{)*GF&}Lf;*zcun0IC7IK7lmH!Wd;42n*za$wFP zhDGglW>5m$TH?YcXxHIpO^|Sqg|-Q+9o5=V1uw-OCO2Vt&ym9>RTn*MmGIA6e7^n^ znecJ=k9`TQocK8LPOj5ihyPszFCTAlQCC1e`IJE%YO7bi1 zj;XZSoCz06d}j#Z-GxZ^s8cCV-go{l;jL@NIBQedLJ0z_jjX+J?IYwDJI!PuZR+UBYF+6ya|2!k^c2qOja62YZ+LAo$-Wk6!QpeyO3(;YKx8>KAiffP%NZUPrIh~O%7 z?|`R3#AEpvE-!L79@U^ejY@^Mebc`X#$nTO#E`=(xpAgJXvgH%MM9GuAe+?vthurA zFZ;*Irt>M{Uw?oK`FJ0Zj$CB*fte#)K7tQH*?;&0iC-3SpF9a&r>f$NCXVqL`VhJd z!w^l>0}gIh?pN6J=xLbt8%O;WCDfif3MUwT1Ik~$Atr+&&qrs<2JK|^ZxY;=rng2k z+?>#kP$xQitc1_@@B5C7f&XC1|I13Y6+aW(^tk0Ek0oD6(2iv6Ty&p`f2oir^q5}M zF7NdQd#P|1OSVY;lt>*L`qX;Mlr?2WT^jg~YXO5d26s}YLZD5sCg>-3N=wZU_z01X z>6iJPX>9l1j{oh{r$5q4LV5zcA6PBAyD@vX)&V?OM+5aGgf%#RsoJ>#d4<9~s}^x* zREZn;Mecp>9ieoZ?<8?n&wet%X%~D;cVwt({^0T_I5jRQ!MLmc10@@J2FeMYv4(9K zAulI6x;9oh)qjuNuC&b{;rU}ls@CE$q(d{Ibj5K2b^C5+iCc!jI3be~B#hZz=3wB!>zPl@ksJs!6N?4Q=3_}06;U$=Z| zI%Gw2Uy40FVw&FS(}o0}rhfRWb$HzVE+>vG)s}m96|o&BqU)I|NG`r*bP=9;Z=*Uf z4{~N4_d{dbpA6jkobXUrEVXQEji^SnCMk>S+f3p=@0F^9{%d*UHrbk+TtUn@WrgtI z4ee7|pm hP`$U+qBUQ)>{ZJ<=>NYwl>58_EC^fZFdT3&{{@5*dNlw5 diff --git a/pkg/tests/test_user_coders.py b/pkg/tests/test_user_coders.py new file mode 100644 index 0000000..b2e2e2a --- /dev/null +++ b/pkg/tests/test_user_coders.py @@ -0,0 +1,140 @@ + +# From: +# https://github.com/WinVector/pyvtreat/blob/master/Examples/UserCoders/UserCoders.ipynb + + +import pandas +import numpy +import numpy.random +# import seaborn + +import vtreat +import vtreat.util +import vtreat.transform + +have_sklearn = True +try: + import sklearn.linear_model + import sklearn +except Exception: + have_sklean = False + + +def test_user_coders(): + sklearn.warnings.filterwarnings('ignore') + + # avoid depending on sklearn.metrics.r2_score + def r_squared(*, y_true, y_pred): + y_true = numpy.asarray(y_true) + y_pred = numpy.asarray(y_pred) + return 1 - numpy.sum((y_true - y_pred)**2)/numpy.sum((y_true - numpy.mean(y_true))**2) + + # %% + + class PolyTransform(vtreat.transform.UserTransform): + """a polynomial model""" + + def __init__(self, *, deg=5, alpha=0.1): + vtreat.transform.UserTransform.__init__(self, treatment='poly') + self.models_ = None + self.deg = deg + self.alpha = alpha + + def poly_terms(self, vname, vec): + vec = numpy.asarray(vec) + r = pandas.DataFrame({'x': vec}) + for d in range(1, self.deg + 1): + r[vname + '_' + str(d)] = vec ** d + return r + + def fit(self, X, y): + self.models_ = {} + self.incoming_vars_ = [] + self.derived_vars_ = [] + for v in X.columns: + if vtreat.util.can_convert_v_to_numeric(X[v]): + X_v = self.poly_terms(v, X[v]) + model_v = sklearn.linear_model.Ridge(alpha=self.alpha).fit(X_v, y) + new_var = v + "_poly" + self.models_[v] = (model_v, [c for c in X_v.columns], new_var) + self.incoming_vars_.append(v) + self.derived_vars_.append(new_var) + return self + + def transform(self, X): + r = pandas.DataFrame() + for k, v in self.models_.items(): + model_k = v[0] + cols_k = v[1] + new_var = v[2] + X_k = self.poly_terms(k, X[k]) + xform_k = model_k.predict(X_k) + r[new_var] = xform_k + return r + + # %% + + d = pandas.DataFrame({'x': [i for i in range(100)]}) + d['y'] = numpy.sin(0.2 * d['x']) + 0.2 * numpy.random.normal(size=d.shape[0]) + d.head() + + # %% + + step = PolyTransform(deg=10) + + # %% + + fit = step.fit_transform(d[['x']], d['y']) + fit['x'] = d['x'] + fit.head() + + # %% + + # seaborn.scatterplot(x='x', y='y', data=d) + # seaborn.lineplot(x='x', y='x_poly', data=fit, color='red', alpha=0.5) + + # %% + + transform = vtreat.NumericOutcomeTreatment( + outcome_name='y', + params=vtreat.vtreat_parameters({ + 'filter_to_recommended': False, + 'user_transforms': [PolyTransform(deg=10)] + })) + + # %% + + transform.fit(d, d['y']) + + # %% + + transform.score_frame_ + + # %% + + x2_overfit = transform.transform(d) + + # %% + # seaborn.scatterplot(x='x', y='y', data=x2_overfit) + # seaborn.lineplot(x='x', y='x_poly', data=x2_overfit, color='red', alpha=0.5) + + # %% + + x2 = transform.fit_transform(d, d['y']) + + # %% + + transform.score_frame_ + + # %% + + x2.head() + + # %% + + # seaborn.scatterplot(x='x', y='y', data=x2) + # seaborn.lineplot(x='x', y='x_poly', data=x2, color='red', alpha=0.5) + + # %% + +