Skip to content

Instantly share code, notes, and snippets.

@canimus
Last active October 28, 2020 00:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save canimus/eedd7bf633d9469b40303cdba42812f9 to your computer and use it in GitHub Desktop.
Save canimus/eedd7bf633d9469b40303cdba42812f9 to your computer and use it in GitHub Desktop.
Test Case - Rules
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 214,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import rules as R\n",
"from functools import partial as pa\n",
"from operator import methodcaller as mc\n",
"from operator import attrgetter as ag\n",
"import unittest"
]
},
{
"cell_type": "code",
"execution_count": 274,
"metadata": {},
"outputs": [],
"source": [
"_df = lambda x: pd.DataFrame(dict([(k,v) for k,v in {**base, **x}.items()]))\n",
"_a = lambda x,y: np.array(x, dtype=y)\n",
"_r = lambda x,y: np.repeat(x,y)"
]
},
{
"cell_type": "code",
"execution_count": 275,
"metadata": {},
"outputs": [],
"source": [
"base = {\n",
" 'WorkflowId' : np.arange(10)\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 349,
"metadata": {},
"outputs": [],
"source": [
"_i5x2 = _r(_a([0,1], np.int8), 5)\n",
"_i10x1 = _r(1, 10)\n",
"_i5_n = _r([1,np.nan],5)\n",
"_d10x1 = np.arange('2020-01-01', '2020-01-11', dtype='datetime64[D]')\n",
"_d5_n = _r(_a(['2020-01-01', None], 'datetime64[D]'), 5) + np.arange(10)\n",
"_n10 = _r(None, 10)"
]
},
{
"cell_type": "code",
"execution_count": 350,
"metadata": {},
"outputs": [],
"source": [
"def prepare(*args, **kwargs):\n",
" def fn_wrap(fn):\n",
" _y = _df(kwargs['input'])\n",
" _x = _y.WorkflowId.to_frame()\n",
" for c in kwargs['rules']:\n",
" m = \"\"\n",
" if isinstance(c, tuple):\n",
" n = c[0]\n",
" r = c[1] \n",
" if r.startswith(\"~\"):\n",
" r = r[1:]\n",
" m = \"~\"\n",
" else:\n",
" n = c\n",
" r = c\n",
" print(f'R({n}): {m}[{ag(r)(R)}]')\n",
" _ev = mc('eval', ag(r)(R), engine='python')\n",
" _x[n] = _ev(_y) if m == '' else ~_ev(_y) \n",
" fn(_x)\n",
" return fn_wrap"
]
},
{
"cell_type": "code",
"execution_count": 351,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R(IsEntrepreneur): [IsPrivate == 0]\n",
"R(IsPrivate): ~[IsPrivate == 0]\n"
]
}
],
"source": [
"@prepare(\n",
" input={'IsPrivate' : _i5x2},\n",
" rules=['IsEntrepreneur', ('IsPrivate', '~IsEntrepreneur')])\n",
"def test_is_priv(tdf): \n",
" assert(tdf['IsEntrepreneur'].sum() == 5)\n",
" assert(tdf['IsPrivate'].sum() == 5)"
]
},
{
"cell_type": "code",
"execution_count": 352,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R(IsEntrepreneur): [IsPrivate == 0]\n",
"R(IsPrivate): ~[IsPrivate == 0]\n"
]
}
],
"source": [
"@prepare(\n",
" input={'IsPrivate' : _i10x1},\n",
" rules=['IsEntrepreneur', ('IsPrivate', '~IsEntrepreneur')])\n",
"def test_is_ent(tdf): \n",
" assert(tdf['IsEntrepreneur'].sum() == 0)\n",
" assert(tdf['IsPrivate'].sum() == 10)"
]
},
{
"cell_type": "code",
"execution_count": 353,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R(HasDossierComplete): [FirstDossierCompleteDate.notnull()]\n",
"R(HasOfferSent): [FirstArchiveOfferSentDate.notnull()]\n",
"R(WithoutOfferSent): ~[FirstArchiveOfferSentDate.notnull()]\n"
]
}
],
"source": [
"@prepare(\n",
" input={\n",
" 'FirstDossierCompleteDate' : _d10x1, \n",
" 'FirstArchiveOfferSentDate' : _d5_n\n",
" },\n",
" rules=['HasDossierComplete']+['HasOfferSent', ('WithoutOfferSent', '~HasOfferSent')])\n",
"def test_is_ent(tdf): \n",
" assert(tdf.eval('B0_2=HasDossierComplete & WithoutOfferSent')['B0_2'].sum() == 5)"
]
},
{
"cell_type": "code",
"execution_count": 357,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R(IsEntrepreneur): [IsPrivate == 0]\n",
"R(IsPrivate): ~[IsPrivate == 0]\n",
"R(HasOIPType): [OIPType.notnull()]\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>WorkflowId</th>\n",
" <th>IsEntrepreneur</th>\n",
" <th>IsPrivate</th>\n",
" <th>HasOIPType</th>\n",
" <th>IsPrivateOrWithoutType</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" WorkflowId IsEntrepreneur IsPrivate HasOIPType IsPrivateOrWithoutType\n",
"0 0 True False True False\n",
"1 1 True False True False\n",
"2 2 True False True False\n",
"3 3 True False True False\n",
"4 4 True False True False\n",
"5 5 False True False True\n",
"6 6 False True False True\n",
"7 7 False True False True\n",
"8 8 False True False True\n",
"9 9 False True False True"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#test['IsPrivateOrWithoutType'] = (~df.eval(R.IsEntrepreneur) | ~df.eval(R.HasOIPType))\n",
"@prepare(\n",
" input={\n",
" 'IsPrivate' : _i5x2,\n",
" 'OIPType' : _i5_n\n",
" },\n",
" rules=['IsEntrepreneur', ('IsPrivate', '~IsEntrepreneur'), 'HasOIPType'])\n",
"def test_is_ent(tdf): \n",
" tdf['IsPrivateOrWithoutType'] = tdf.eval('(~IsEntrepreneur | ~HasOIPType)')\n",
" display(tdf)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'df' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-4-21c7feea98bf>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtest\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'WorkflowId'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'IsEntrepreneur'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIsEntrepreneur\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'IsPrivate'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m~\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIsEntrepreneur\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'HasDossierComplete'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mR\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mHasDossierComplete\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'df' is not defined"
]
}
],
"source": [
"test = df[['WorkflowId']].copy()\n",
"\n",
"test['IsEntrepreneur'] = df.eval(R.IsEntrepreneur)\n",
"test['IsPrivate'] = ~df.eval(R.IsEntrepreneur)\n",
"test['HasDossierComplete'] = df.eval(R.HasDossierComplete)\n",
"test['WithoutDossierComplete'] = ~df.eval(R.HasDossierComplete)\n",
"test['HasOfferSent'] = df.eval(R.HasOfferSent)\n",
"test['WithoutOfferSent'] = ~df.eval(R.HasOfferSent)\n",
"test['HasFinalApproval'] = df.eval(R.HasFinalApproval)\n",
"test['WithoutFinalApproval'] = ~df.eval(R.HasFinalApproval)\n",
"test['IsDossierCompleteActive'] = df.eval(R.IsDossierCompleteActive)\n",
"test['IsNotDossierCompleteActive'] = ~df.eval(R.IsDossierCompleteActive)\n",
"test['HasProcessHandler'] = df.eval(R.HasProcessHandler)\n",
"test['WithoutProcessHandler'] = ~df.eval(R.HasProcessHandler)\n",
"test['IsInternalWaiting'] = df.eval(R.IsInternalWaiting)\n",
"test['IsNotInternalWaiting'] = ~df.eval(R.IsInternalWaiting)\n",
"test['HasExternalTest'] = df.eval(R.HasExternalTest)\n",
"test['WithoutExternalTest'] = ~df.eval(R.HasExternalTest)\n",
"test['HasOIPType'] = df.eval(R.HasOIPType)\n",
"test['IsPrivateOrWithoutType'] = (~df.eval(R.IsEntrepreneur) | ~df.eval(R.HasOIPType))\n",
"test['IsFirstDFA'] = df.eval(R.IsFirstDFA)\n",
"test['SameDateFirstAndSecondDFA'] = df.eval(R.SameDateFirstAndSecondDFA)\n",
"test['IsFirstDFANotSecondDFA'] = (df.eval(R.IsFirstDFA) & ~(df.eval(R.SameDateFirstAndSecondDFA)))\n",
"test['HasSecondDFA'] = df.eval(R.HasSecondDFA)\n",
"test['IsChangeRequest'] = df.eval(R.IsChangeRequest)\n",
"test['IsNotChangeRequest'] = ~df.eval(R.IsChangeRequest)\n",
"test['NotSecondDFAAndExternalTest'] = ~(df.eval(R.HasSecondDFA) & df.eval(R.HasExternalTest))\n",
"test['IsFirstDFAConfirmation'] = ((df.eval(R.IsFirstDFA) & ~(df.eval(R.SameDateFirstAndSecondDFA))) | ((~df.eval(R.HasSecondDFA) & (~df.eval(R.HasExternalTest)))))\n",
"test['IsSecondDFA'] = df.eval(R.IsSecondDFA)\n",
"test['IsFECMaybe'] = df.eval(R.IsFECMaybe)\n",
"test['IsNotFECMaybe'] = ~df.eval(R.IsFECMaybe)\n",
"test['HasOIPType'] = df.eval(R.HasOIPType)\n",
"test['IsCRMT'] = df.eval(R.IsCRMT)\n",
"test['IsLight'] = df.eval(R.IsLight)\n",
"test['IsComplex'] = df.eval(R.IsComplex)\n",
"\n",
"test['IsOnderhands'] = df.eval(R.IsOnderhands)\n",
"test['IsNotary'] = ~df.eval(R.IsOnderhands)\n",
"test['IsChangeRequestClosing'] = df.eval(R.IsChangeRequestClosing)\n",
"test['IsNotChangeRequestClosing'] = ~df.eval(R.IsChangeRequestClosing)\n",
"test['IsWaitingForClosing'] = df.eval(R.IsWaitingForClosing)\n",
"test['IsSignOffScheduled'] = df.eval(R.IsSignOffScheduled)\n",
"test['IsSignOffDone'] = ~df.eval(R.IsSignOffScheduled)\n",
"test['IsFirstClosing'] = df.eval(R.IsFirstClosing)\n",
"test['IsClosingOnRisk'] = df.eval(R.IsClosingOnRisk)\n",
"test['IsClosingNotification'] = df.eval(R.IsClosingNotification)\n",
"test['IsClosingBeforContract'] = df.eval(R.IsClosingBeforContract)\n",
"test['IsClosingWaitingHypos'] = df.eval(R.IsClosingWaitingHypos)\n",
"test['IsClosingFinalize'] = df.eval(R.IsClosingFinalize)\n",
"test['IsClosingChanging'] = df.eval(R.IsClosingChanging)\n",
"\n",
"test['IsFirstClosingOnderhands'] = df.eval(R.IsFirstClosingOnderhands)\n",
"test['IsSecondClosingOnderhands'] = df.eval(R.IsSecondClosingOnderhands)\n",
"test['IsClosingBeforContractOnderhands'] = df.eval(R.IsClosingBeforContractOnderhands)\n",
"test['IsClosingWaitingHyposOnderhands'] = df.eval(R.IsClosingWaitingHyposOnderhands)\n",
"test['IsClosingFinalizeOnderhands'] = df.eval(R.IsClosingFinalizeOnderhands)\n",
"test['IsClosingChangingOnderhands'] = df.eval(R.IsClosingChangingOnderhands)\n",
"\n",
"test['HasOfferReceived'] = df.eval(R.HasOfferReceived)\n",
"test['WithoutOfferReceived'] = ~df.eval(R.HasOfferReceived)\n",
"test['HasOfferHandled'] = df.eval(R.HasOfferHandled)\n",
"test['WithoutOfferHandled'] = ~df.eval(R.HasOfferHandled)\n",
"test['OfferReceivedBeforOfferSent'] = df.eval(R.OfferReceivedBeforOfferSent)\n",
"test['OfferReceivedAfterOfferSent'] = ~df.eval(R.OfferReceivedBeforOfferSent)\n",
"test['OfferReceivedAndOfferHandled'] = df.eval(R.OfferReceivedBeforOfferHandled)\n",
"test['OfferReceivedAfterOfferHandled'] = ~df.eval(R.OfferReceivedBeforOfferHandled)\n",
"test['WithoutOfferReceivedOrOfferHandled'] = ~df.eval(R.HasOfferReceived) | df.eval(R.OfferReceivedBeforOfferSent) | df.eval(R.OfferReceivedBeforOfferHandled)\n",
"test['IsDossierCompleteForContractActive'] = df.eval(R.IsDossierCompleteForContractActive)\n",
"test['IsNotDossierCompleteForContractActive'] = ~df.eval(R.IsDossierCompleteForContractActive)\n",
"test['IsBankGuarantee'] = df.eval(R.IsBankGuarantee)\n",
"test['IsNotBankGuarantee'] = ~df.eval(R.IsBankGuarantee)\n",
"test['IsOfferReceivedAndNotHandled'] = ~df.eval(R.OfferReceivedBeforOfferSent) & (~df.eval(R.OfferReceivedBeforOfferHandled) | ~df.eval(R.HasOfferHandled))\n",
"test['IsDossierCompleteForContractActiveAndOfferReceivedAndOfferHandled'] = df.eval(R.IsDossierCompleteForContractActive) & df.eval(R.OfferReceivedBeforOfferHandled)\n",
"test['IsFirstFA'] = df.eval(R.IsFirstFA)\n",
"test['WithoutFirstFAStarted'] = df.eval(R.WithoutFirstFAStarted)\n",
"test['IsFirstDFAAfterOfferSent'] = df.eval(R.IsFirstDFAAfterOfferSent)\n",
"test['IsSecondDFAAfterOfferSent'] = df.eval(R.IsSecondDFAAfterOfferSent)\n",
"test['IsSecondFA'] = df.eval(R.IsSecondFA)\n",
"\n",
"test['DayBucket4'] = df[['DayBucket4']].astype(bool)\n",
"test['DayBucket5'] = df[['DayBucket5']].astype(bool)\n",
"test['DayBucket6'] = df[['DayBucket6']].astype(bool)\n",
"test['DayBucket7'] = df[['DayBucket7']].astype(bool)\n",
"test['DayBucket8'] = df[['DayBucket8']].astype(bool)\n",
"\n",
"test['FutureBucket4'] = df[['FutureDayBucket4']].astype(bool)\n",
"test['FutureBucket5'] = df[['FutureDayBucket5']].astype(bool)\n",
"test['FutureBucket6'] = df[['FutureDayBucket6']].astype(bool)\n",
"test['FutureBucket7'] = df[['FutureDayBucket7']].astype(bool)\n",
"test['FutureBucket8'] = df[['FutureDayBucket8']].astype(bool)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"test2['B0_2'] = test.eval(\"HasDossierComplete & WithoutOfferSent\")\n",
"\n",
"test2['B0_2_1'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & WithoutProcessHandler & IsNotInternalWaiting & WithoutExternalTest & IsPrivateOrWithoutType\")\n",
"test2['B0_2_2'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & IsPrivateOrWithoutType & IsFirstDFAConfirmation & IsNotChangeRequest\")\n",
"test2['B0_2_3'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & IsPrivateOrWithoutType & IsSecondDFA & IsNotChangeRequest\")\n",
"test2['B0_2_4'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsChangeRequest & IsDossierCompleteActive & IsNotInternalWaiting & IsNotFECMaybe & HasProcessHandler &IsPrivateOrWithoutType\")\n",
"test2['B0_2_5'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & (IsInternalWaiting | IsFECMaybe) & IsPrivateOrWithoutType\")\n",
"test2['B0_2_6'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsNotDossierCompleteActive & IsPrivateOrWithoutType\")\n",
"\n",
"\n",
"test2['B0_2_7'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & WithoutProcessHandler & IsNotInternalWaiting & WithoutExternalTest & (IsCRMT & IsEntrepreneur)\")\n",
"test2['B0_2_8'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsCRMT & IsEntrepreneur) & IsFirstDFAConfirmation & IsNotChangeRequest\")\n",
"test2['B0_2_9'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsCRMT & IsEntrepreneur) & IsSecondDFA & IsNotChangeRequest\")\n",
"test2['B0_2_10'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsChangeRequest & IsDossierCompleteActive & IsNotInternalWaiting & IsNotFECMaybe & HasProcessHandler & (IsCRMT & IsEntrepreneur)\")\n",
"test2['B0_2_11'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & (IsInternalWaiting | IsFECMaybe) & (IsCRMT & IsEntrepreneur)\")\n",
"test2['B0_2_12'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsNotDossierCompleteActive & (IsCRMT & IsEntrepreneur)\")\n",
"test2['B0_2_13'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & WithoutProcessHandler & IsNotInternalWaiting & WithoutExternalTest & (IsLight & IsEntrepreneur)\")\n",
"test2['B0_2_14'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsLight & IsEntrepreneur) & IsFirstDFAConfirmation & IsNotChangeRequest\")\n",
"test2['B0_2_15'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsLight & IsEntrepreneur) & IsSecondDFA & IsNotChangeRequest\")\n",
"test2['B0_2_16'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsChangeRequest & IsDossierCompleteActive & IsNotInternalWaiting & IsNotFECMaybe & HasProcessHandler & (IsLight & IsEntrepreneur)\")\n",
"test2['B0_2_17'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & (IsInternalWaiting | IsFECMaybe) & (IsLight & IsEntrepreneur)\")\n",
"test2['B0_2_18'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsNotDossierCompleteActive & (IsLight & IsEntrepreneur)\")\n",
"test2['B0_2_19'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & WithoutProcessHandler & IsNotInternalWaiting & WithoutExternalTest & (IsComplex & IsEntrepreneur)\")\n",
"test2['B0_2_20'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsComplex & IsEntrepreneur) & IsFirstDFAConfirmation & IsNotChangeRequest\")\n",
"test2['B0_2_21'] = test.eval(\"HasDossierComplete & WithoutOfferSent & HasProcessHandler & IsDossierCompleteActive & IsNotInternalWaiting & (IsComplex & IsEntrepreneur) & IsSecondDFA & IsNotChangeRequest\")\n",
"test2['B0_2_22'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsChangeRequest & IsDossierCompleteActive & IsNotInternalWaiting & IsNotFECMaybe & HasProcessHandler & (IsComplex & IsEntrepreneur)\")\n",
"test2['B0_2_23'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsDossierCompleteActive & (IsInternalWaiting | IsFECMaybe) & (IsComplex & IsEntrepreneur)\")\n",
"test2['B0_2_24'] = test.eval(\"HasDossierComplete & WithoutOfferSent & IsNotDossierCompleteActive & (IsComplex & IsEntrepreneur)\")\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment