whylabs/whylogs-python

View on GitHub
python/examples/tutorials/Data_Validation_Tutorial.ipynb

Summary

Maintainability
Test Coverage
{
  "cells": [
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        ">### 🚩 *Create a free WhyLabs account to get more value out of whylogs!*<br> \n",
        ">*Did you know you can store, visualize, and monitor whylogs profiles with the [WhyLabs Observability Platform](https://whylabs.ai/whylogs-free-signup?utm_source=whylogs-Github&utm_medium=whylogs-example&utm_campaign=Validation_Tutorial)? Sign up for a [free WhyLabs account](https://whylabs.ai/whylogs-free-signup?utm_source=whylogs-Github&utm_medium=whylogs-example&utm_campaign=Validation_Tutorial) to leverage the power of whylogs and WhyLabs together!*"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "7V25M_P5sXXq"
      },
      "source": [
        "# Data Validation at Scale - Detecting and Responding to Data Misbehavior\n",
        "\n",
        "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/whylabs/whylogs/blob/mainline/python/examples/tutorials/Data_Validation_Tutorial.ipynb)\n",
        "\n",
        "In this tutorial, we'll introduce the concept of data logging and discuss how to validate data at scale by creating metric constraints and generating reports based on the data's statistical profiles using the whylogs open-source package.\n",
        "\n",
        "We will also walk through steps that data scientists and ML engineers can take to tailor their set of validations to fit the specific needs of their business or project, take actions when their rules fail to be met, and debug and troubleshoot cases where data fails to behave as expected.\n",
        "\n",
        "## Agenda\n",
        "- Session 1: Introduction to Data Logging with whylogs\n",
        "- Session 2: Data Validation with Metric Constraints\n",
        "- Session 3: Per-value constraints with Condition Count Metrics\n",
        "- Session 4: Auto-constraints generation\n",
        "- Session 5: Debugging Failed Conditions\n",
        "\n",
        "## What is Data Validation?\n",
        "\n",
        "Data validation is the process of ensuring that data is accurate, complete, and consistent. It involves checking data for errors or inconsistencies, and ensuring that it meets the specified requirements or constraints. Data validation is important because it helps to ensure the integrity and quality of data, and helps to prevent errors or inaccuracies in data from propagating and causing problems downstream.\n",
        "\n",
        "In whylogs, you validate data by creating Metric Constraints and validating those constraints against a whylogs profile.\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "V7ewBmRCgBV6"
      },
      "source": [
        "# Session  1 - Data Logging"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "H07RwXCldzGh"
      },
      "source": [
        "## Installing whylogs\n",
        "\n",
        "To install the whylogs library, you can use the following command:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DaxL1mBIdyUZ",
        "outputId": "cb97f181-4d42-4919-a6ae-62af52c461c8"
      },
      "outputs": [],
      "source": [
        "%pip install -q whylogs[viz]"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "NtqFsE6Id5qp"
      },
      "source": [
        "## Loading a Pandas DataFrame\n",
        "\n",
        "Before showing how we can log data, we first need the data itself. Let's create a simple Pandas DataFrame:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "hAK8NOtsd6t4"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "data = {\n",
        "    \"animal\": [\"cat\", \"hawk\", \"snake\", \"cat\"],\n",
        "    \"legs\": [4, 2, 0, 4],\n",
        "    \"weight\": [4.3, 1.8, 1.3, 4.1],\n",
        "}\n",
        "\n",
        "df = pd.DataFrame(data)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "uDRUOXn5d_LZ"
      },
      "source": [
        "## Profiling with whylogs\n",
        "\n",
        "To obtain a profile of your data, you can simply use whylogs' `log` call, and navigate through the result to a specific profile with `profile()`:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "4lGjB710eDgJ",
        "outputId": "93cd61ce-e4d4-417c-e317-df8e9ac39f24"
      },
      "outputs": [],
      "source": [
        "import whylogs as why\n",
        "\n",
        "profile = why.log(df).profile()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "XBIgI1VOeKoD"
      },
      "source": [
        "## Analyzing Profiles\n",
        "\n",
        "Once you're done logging the data, you can generate a Profile View and inspect it in a Pandas Dataframe format:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 303
        },
        "id": "xCvJtUi6eFnZ",
        "outputId": "a81842a9-f405-48da-f20c-60b6aa614e5f"
      },
      "outputs": [
        {
          "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>cardinality/est</th>\n",
              "      <th>cardinality/lower_1</th>\n",
              "      <th>cardinality/upper_1</th>\n",
              "      <th>counts/inf</th>\n",
              "      <th>counts/n</th>\n",
              "      <th>counts/nan</th>\n",
              "      <th>counts/null</th>\n",
              "      <th>distribution/max</th>\n",
              "      <th>distribution/mean</th>\n",
              "      <th>distribution/median</th>\n",
              "      <th>...</th>\n",
              "      <th>frequent_items/frequent_strings</th>\n",
              "      <th>type</th>\n",
              "      <th>types/boolean</th>\n",
              "      <th>types/fractional</th>\n",
              "      <th>types/integral</th>\n",
              "      <th>types/object</th>\n",
              "      <th>types/string</th>\n",
              "      <th>types/tensor</th>\n",
              "      <th>ints/max</th>\n",
              "      <th>ints/min</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>column</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>animal</th>\n",
              "      <td>3.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>3.00015</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.000</td>\n",
              "      <td>NaN</td>\n",
              "      <td>...</td>\n",
              "      <td>[FrequentItem(value='cat', est=2, upper=2, low...</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>legs</th>\n",
              "      <td>3.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>3.00015</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>2.500</td>\n",
              "      <td>4.0</td>\n",
              "      <td>...</td>\n",
              "      <td>[FrequentItem(value='4', est=2, upper=2, lower...</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weight</th>\n",
              "      <td>4.0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>4.00020</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.3</td>\n",
              "      <td>2.875</td>\n",
              "      <td>4.1</td>\n",
              "      <td>...</td>\n",
              "      <td>NaN</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3 rows × 31 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "        cardinality/est  cardinality/lower_1  cardinality/upper_1  counts/inf  \\\n",
              "column                                                                          \n",
              "animal              3.0                  3.0              3.00015           0   \n",
              "legs                3.0                  3.0              3.00015           0   \n",
              "weight              4.0                  4.0              4.00020           0   \n",
              "\n",
              "        counts/n  counts/nan  counts/null  distribution/max  \\\n",
              "column                                                        \n",
              "animal         4           0            0               NaN   \n",
              "legs           4           0            0               4.0   \n",
              "weight         4           0            0               4.3   \n",
              "\n",
              "        distribution/mean  distribution/median  ...  \\\n",
              "column                                          ...   \n",
              "animal              0.000                  NaN  ...   \n",
              "legs                2.500                  4.0  ...   \n",
              "weight              2.875                  4.1  ...   \n",
              "\n",
              "                          frequent_items/frequent_strings                type  \\\n",
              "column                                                                          \n",
              "animal  [FrequentItem(value='cat', est=2, upper=2, low...  SummaryType.COLUMN   \n",
              "legs    [FrequentItem(value='4', est=2, upper=2, lower...  SummaryType.COLUMN   \n",
              "weight                                                NaN  SummaryType.COLUMN   \n",
              "\n",
              "        types/boolean  types/fractional  types/integral  types/object  \\\n",
              "column                                                                  \n",
              "animal              0                 0               0             0   \n",
              "legs                0                 0               4             0   \n",
              "weight              0                 4               0             0   \n",
              "\n",
              "        types/string  types/tensor  ints/max  ints/min  \n",
              "column                                                  \n",
              "animal             4             0       NaN       NaN  \n",
              "legs               0             0       4.0       0.0  \n",
              "weight             0             0       NaN       NaN  \n",
              "\n",
              "[3 rows x 31 columns]"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "profile_view = profile.view()\n",
        "prof_df = profile_view.to_pandas()\n",
        "\n",
        "prof_df"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "Bbv4GK7BeTkI"
      },
      "source": [
        "This will provide you with valuable statistics on a column (feature) basis, such as:\n",
        "\n",
        "- Counters, such as number of samples and null values\n",
        "- Inferred types, such as integral, fractional and boolean\n",
        "- Estimated Cardinality\n",
        "- Frequent Items\n",
        "- Distribution Metrics: min,max, median, quantile values"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 303
        },
        "id": "6bN5BjSveQTI",
        "outputId": "31b2e85f-014d-4d4c-b6c0-402c7770d2a5"
      },
      "outputs": [
        {
          "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>cardinality/est</th>\n",
              "      <th>cardinality/lower_1</th>\n",
              "      <th>cardinality/upper_1</th>\n",
              "      <th>counts/inf</th>\n",
              "      <th>counts/n</th>\n",
              "      <th>counts/nan</th>\n",
              "      <th>counts/null</th>\n",
              "      <th>distribution/max</th>\n",
              "      <th>distribution/mean</th>\n",
              "      <th>distribution/median</th>\n",
              "      <th>...</th>\n",
              "      <th>frequent_items/frequent_strings</th>\n",
              "      <th>type</th>\n",
              "      <th>types/boolean</th>\n",
              "      <th>types/fractional</th>\n",
              "      <th>types/integral</th>\n",
              "      <th>types/object</th>\n",
              "      <th>types/string</th>\n",
              "      <th>types/tensor</th>\n",
              "      <th>ints/max</th>\n",
              "      <th>ints/min</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>column</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>animal</th>\n",
              "      <td>3.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>3.00015</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.000</td>\n",
              "      <td>NaN</td>\n",
              "      <td>...</td>\n",
              "      <td>[FrequentItem(value='cat', est=4, upper=4, low...</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>legs</th>\n",
              "      <td>3.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>3.00015</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>2.500</td>\n",
              "      <td>4.0</td>\n",
              "      <td>...</td>\n",
              "      <td>[FrequentItem(value='4', est=4, upper=4, lower...</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>0.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weight</th>\n",
              "      <td>4.0</td>\n",
              "      <td>4.0</td>\n",
              "      <td>4.00020</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>4.3</td>\n",
              "      <td>2.875</td>\n",
              "      <td>4.1</td>\n",
              "      <td>...</td>\n",
              "      <td>NaN</td>\n",
              "      <td>SummaryType.COLUMN</td>\n",
              "      <td>0</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3 rows × 31 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "        cardinality/est  cardinality/lower_1  cardinality/upper_1  counts/inf  \\\n",
              "column                                                                          \n",
              "animal              3.0                  3.0              3.00015           0   \n",
              "legs                3.0                  3.0              3.00015           0   \n",
              "weight              4.0                  4.0              4.00020           0   \n",
              "\n",
              "        counts/n  counts/nan  counts/null  distribution/max  \\\n",
              "column                                                        \n",
              "animal         8           0            0               NaN   \n",
              "legs           8           0            0               4.0   \n",
              "weight         8           0            0               4.3   \n",
              "\n",
              "        distribution/mean  distribution/median  ...  \\\n",
              "column                                          ...   \n",
              "animal              0.000                  NaN  ...   \n",
              "legs                2.500                  4.0  ...   \n",
              "weight              2.875                  4.1  ...   \n",
              "\n",
              "                          frequent_items/frequent_strings                type  \\\n",
              "column                                                                          \n",
              "animal  [FrequentItem(value='cat', est=4, upper=4, low...  SummaryType.COLUMN   \n",
              "legs    [FrequentItem(value='4', est=4, upper=4, lower...  SummaryType.COLUMN   \n",
              "weight                                                NaN  SummaryType.COLUMN   \n",
              "\n",
              "        types/boolean  types/fractional  types/integral  types/object  \\\n",
              "column                                                                  \n",
              "animal              0                 0               0             0   \n",
              "legs                0                 0               8             0   \n",
              "weight              0                 8               0             0   \n",
              "\n",
              "        types/string  types/tensor  ints/max  ints/min  \n",
              "column                                                  \n",
              "animal             8             0       NaN       NaN  \n",
              "legs               0             0       4.0       0.0  \n",
              "weight             0             0       NaN       NaN  \n",
              "\n",
              "[3 rows x 31 columns]"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "merged_profile_view = profile_view.merge(profile_view)\n",
        "merged_profile_view.to_pandas()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "um-2-Q1vebrt"
      },
      "source": [
        "## Writing to Disk\n",
        "You can also store your profile in disk for further inspection:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "6q4j5WCAeVdo",
        "outputId": "fb5c54d2-0f0f-4f0c-c810-b0a5c1598750"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(True, 'profile.bin')"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "why.write(profile,\"profile.bin\")"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "JG7hvFFQetD5"
      },
      "source": [
        "## Reading from Disk\n",
        "\n",
        "You can read the profile back into memory with:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "UWLIMZxKepfp"
      },
      "outputs": [],
      "source": [
        "n_prof = why.read(\"profile.bin\")"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "npHOsMixgGry"
      },
      "source": [
        "# Session 2 - Data Validation with Metric Constraints\n",
        "\n",
        "Constraints are a powerful feature built on top of whylogs profiles that enable you to quickly and easily validate that your data looks the way that it should. There are numerous types of constraints that you can set on your data (that numerical data will always fall within a certain range, that text data will always be in a JSON format, etc) and, if your dataset fails to satisfy a constraint, you can fail your unit tests or your data pipeline.\n",
        "\n",
        "You can create Metric Constraints in two different ways:\n",
        "\n",
        "- By directly using out-of-the-box helper constraints, such as greater_than_number, no_missing_values, or is_non_negative.\n",
        "- By assembling your own set of tailored constraints.\n",
        "- By automatically generating constraints from a reference profile\n",
        "\n",
        "Once you have a set of constraints, you can use it to validate or generate a report of a Profile.\n",
        "\n",
        "In this session, we'll show how to create constraints through the first approach: by using out-of-the-box helper constraints.\n"
      ]
    },
    {
      "attachments": {
        "image.png": {
          "image/png": "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IiIiIqLbD4O2RBX89edf6r933qH+Q9SoWrXSXGh//aW57oiIiIiIiIiIiIiI6PbDoC0RERERERERERERERERkQm1sKBtJhK3huOTjdVMW/cjW7xDLXs/PjP0ugrTZwczxRuIiIiIiIiIiIiIiIiIiJpGCwva5iB5ZyQ2b6pm2pmEXPEOtdwkxBh6XYUp5lCOeAMRERERERERERERERERUdNg98hERERERERERERERERERCbEoC0RERERERERERERERERkQm1sKCtG56POIDordVMEfMwQLxDzWUewg29rsIUHuwm3kBERERERERERERERERE1DRaWNDWDGbt28HCspqpfWuoxDvUzFqjg6HXVZg6tDETbyAiIiIiIiIiIiIiIiIiahp3/CURaYOOxF3FkfireNC7I3q63SOWNp209a6Yu03MwB1zN62BT0cxa0z+ToRNXYJkMQu3Bfh86XhYiVljCuLn4PF3k8Qc4PdOCp7tK2aaUNz6bBTkFuOp17uindVdYik1lfyLxfj87Wx0ecAcw5+8Tywlahyp+68g7WABvCZ1Qp+hlmJpy1JSUoI///xTzBHVTJs2bUSq5UneexWH91zFwJHW6D2kutIFERG1dEd2X0LGsesYPd0Gjv0txNKW5ebNmyJF1DK0xLLi6dOn0bt3bzEHmLm2xT2LbcQcEVH9lOWW4sqMbDEHjBw5El9++aWYa1lYLqHauuuuu9RTS5Ofn49OnTqJOUDVqzWs3mW84VZSFH8DN967LOaAZcuWITQ0VMzVDYO2CgzakoxBW2pKt0rQtqCgQMwRVU+lUqFDhw5iruVh0JaI6PZyqwRtr127JuaImjc5YGtp2fJ+GzFoS0SN6VYK2sqBrLKyMjFHVD1ra2sGbalZaoygbQvrHpmIiIiIiIiIiIiIiIiI6NbCoC0RERERERERERERERERkQk1/6CtmZlIyJKwaqorvL2rmZRdI8uSl+BxQ6+rMCm7RpY+GGatRJKIiIiIiIiIiIiIiIiIqJE0+6Btj74ToBLpJmU+AQO6izQRERERERERERERERERUSNp9kFb1aAZeOmRdmKuqbSDR8gMDDBJtJiIiIiIiIiIiIiIiIiIbictYExba3i9FoPw0AB4dLNu3Fa35tZwdA/AaxExWOBpLRYSNT9p6/Xdeq/7USxsRvTbNwdx+WJhS5ETh1XbT4gZ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"
        }
      },
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "![image.png](attachment:image.png)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "The above diagram depicts the relationship between the concepts presented so far:\n",
        "\n",
        "As its name suggest, a metric constraint uses metrics in a profile to perform the validation. With no additional customization, the constraint will have at its disposal standard metrics captured in the logging process, such as Distribution, Frequent Items and Cardinality metrics."
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "AOFInYwUhbtZ"
      },
      "source": [
        "## Loading the Data\n",
        "\n",
        "To begin, let's load the data into our environment. We will be using two datasets: df_reference and df_target.\n",
        "\n",
        "We will create our set of constraints assuming the existence of previous domain knowledge and experience with the data. We will use `df_reference` as our reference dataset to create the constraints, and `df_target` as the dataset to be validated. In an ML scenario, `df_reference` will usually be the training dataset, and `df_target` the data you encounter in production on the system's day-to-day operation."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "nNDgZ_ZjO5S6"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "\n",
        "df_reference = pd.read_parquet(\"https://whylabs-public.s3.us-west-2.amazonaws.com/whylogs_examples/Listings/airbnb_listings_reference.parquet\")\n",
        "df_target = pd.read_parquet(\"https://whylabs-public.s3.us-west-2.amazonaws.com/whylogs_examples/Listings/airbnb_listings_target.parquet\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "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>name</th>\n",
              "      <th>description</th>\n",
              "      <th>listing_url</th>\n",
              "      <th>last_review</th>\n",
              "      <th>number_of_reviews_ltm</th>\n",
              "      <th>number_of_reviews_l30d</th>\n",
              "      <th>id</th>\n",
              "      <th>latitude</th>\n",
              "      <th>longitude</th>\n",
              "      <th>availability_365</th>\n",
              "      <th>bedrooms</th>\n",
              "      <th>reviews_per_month</th>\n",
              "      <th>room_type</th>\n",
              "      <th>price</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>17895</th>\n",
              "      <td>COPACABANA PRINCESINHA DO MAR</td>\n",
              "      <td>na quadra da praia. pertinho da pedra do leme....</td>\n",
              "      <td>https://www.airbnb.com/rooms/37994848</td>\n",
              "      <td>2020-02-22</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>37994848</td>\n",
              "      <td>-22.96576</td>\n",
              "      <td>-43.17784</td>\n",
              "      <td>82</td>\n",
              "      <td>1</td>\n",
              "      <td>0.44</td>\n",
              "      <td>Entire home/apt</td>\n",
              "      <td>220.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5343</th>\n",
              "      <td>*Double Room with A/C &amp; TV – Riocentro</td>\n",
              "      <td>Welcome to Rio de Janeiro-Gated community loca...</td>\n",
              "      <td>https://www.airbnb.com/rooms/10123238</td>\n",
              "      <td>2016-08-23</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>10123238</td>\n",
              "      <td>-22.95001</td>\n",
              "      <td>-43.38205</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0.02</td>\n",
              "      <td>Private room</td>\n",
              "      <td>119.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                         name  \\\n",
              "17895           COPACABANA PRINCESINHA DO MAR   \n",
              "5343   *Double Room with A/C & TV – Riocentro   \n",
              "\n",
              "                                             description  \\\n",
              "17895  na quadra da praia. pertinho da pedra do leme....   \n",
              "5343   Welcome to Rio de Janeiro-Gated community loca...   \n",
              "\n",
              "                                 listing_url last_review  \\\n",
              "17895  https://www.airbnb.com/rooms/37994848  2020-02-22   \n",
              "5343   https://www.airbnb.com/rooms/10123238  2016-08-23   \n",
              "\n",
              "       number_of_reviews_ltm  number_of_reviews_l30d        id  latitude  \\\n",
              "17895                      2                       0  37994848 -22.96576   \n",
              "5343                       0                       0  10123238 -22.95001   \n",
              "\n",
              "       longitude  availability_365  bedrooms  reviews_per_month  \\\n",
              "17895  -43.17784                82         1               0.44   \n",
              "5343   -43.38205                 0         1               0.02   \n",
              "\n",
              "             room_type  price  \n",
              "17895  Entire home/apt  220.0  \n",
              "5343      Private room  119.0  "
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_reference.head(2)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "hqJ5ZIT0gQga"
      },
      "source": [
        "## Defining the Constraints\n",
        "\n",
        "Let's define a list of constraints to apply to our data in the tables below.\n",
        "\n",
        "For each of these constraints, we will show the feature it will be applied to, used parameters, and also a brief explanation of what it checks for.\n",
        "\n",
        "### Completeness Constraints\n",
        "\n",
        "| constraint  | feature | parameters  | semantic                                        |\n",
        "|-------------|---------|-------------|-------------------------------------------------|\n",
        "| no_missing_values | id      | column name | Checks that are no missing values in the column |\n",
        "\n",
        "\n",
        "### Consistency Constraints\n",
        "\n",
        "| constraint                        | feature               | parameters                         | semantic                                                                    |\n",
        "|-----------------------------------|-----------------------|------------------------------------|-----------------------------------------------------------------------------|\n",
        "| is_probably_unique                         | _id_                  | column name                        | Checks that there are probably no duplicate values in a column.                      |\n",
        "| matches_pattern                   | _listing_url_         | column name, regex pattern         | Checks that all values match regex pattern (if link is from airbnb domain)  |\n",
        "| is_in_range                       | _latitude, longitude_ | column name, lower and upper bound | Checks that column is inside a range defined by a lower and upper bound     |\n",
        "| is_less_than                      | _availability_365_    | column name, value                 | Checks that maximum value of column is less than number                     |\n",
        "| is_nullable_integral            | _bedrooms_            | column name                        | Checks that column contains only integral values (null values acceptable) |\n",
        "| is_nullable_fractional            | _price_            | column name                        | Checks that column contains only fractional values (null values acceptable) |\n",
        "| is_non_negative                   | _bedrooms_            | column name                        | Checks that column contains only non negative values                        |\n",
        "| matches_date_format               | _last_review_         | column name, date pattern          | Checks that all values match date pattern (Y-m-d)                           |\n",
        "| frequent_strings_on_reference_set | _room_type_           | column name, reference set         | Checks that all values are in reference set                                 |\n",
        "\n",
        "\n",
        "### Statistics Constraints\n",
        "\n",
        "| constraint           | feature             | parameters                          | semantic                                                                               |\n",
        "|----------------------|---------------------|-------------------------------------|----------------------------------------------------------------------------------------|\n",
        "| quantile_between_range            | _price_            | column name, quantile, lower, upper                       | Checks that Q-th quantile value must be withing the range defined |\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Entire home/apt    8725\n",
              "Private room       2902\n",
              "Shared room         208\n",
              "Hotel room           68\n",
              "Name: room_type, dtype: int64"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_reference['room_type'].value_counts()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Profiling and Building the Constraints\n",
        "\n",
        "To build our constraints, let's first profile our target dataset:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 339
        },
        "id": "KeCCHuWihylK",
        "outputId": "41955e43-40ce-4f48-8e38-6b05c5c044d5"
      },
      "outputs": [],
      "source": [
        "import whylogs as why\n",
        "\n",
        "target_profile = why.log(df_target).view()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now, we create our constraints with the help of `ConstraintsBuilder`. That will allow us to iterate over the constraints we wish to build. Let's first show how to add a single constraint. Let's begin with the `no_missing_values` constraint for the `id` feature:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "wRtZ0xB5jg1x",
        "outputId": "12218b13-eb9b-4a96-e038-96dc7e172d29"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[ReportResult(name='id has no missing values', passed=1, failed=0, summary=None)]"
            ]
          },
          "execution_count": 11,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.core.constraints.factories import no_missing_values\n",
        "from whylogs.core.constraints import ConstraintsBuilder\n",
        "\n",
        "builder = ConstraintsBuilder(dataset_profile_view=target_profile)\n",
        "\n",
        "builder.add_constraint(no_missing_values(column_name=\"id\"))\n",
        "\n",
        "constraints = builder.build()\n",
        "\n",
        "\n",
        "constraints.generate_constraints_report()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now, we can call `constraints.validate` to validate our constraints against the target profile:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "True"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "constraints.validate()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "`validate` will return True if all the constraints passes, and False otherwise. In this case, we can see that the constraint passes, as there are no missing values in the `id` column.\n",
        "\n",
        "We can also call `generate_constraints_report` to generate a report of the constraints against the target profile:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[ReportResult(name='id has no missing values', passed=1, failed=0, summary=None)]"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "constraints.generate_constraints_report()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Let's continue adding constraints as defined previously:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UqbJrPSvjsHL",
        "outputId": "a3b7e98d-1a3d-4f71-d5c8-2b9e4719bb23"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[ReportResult(name='id has no missing values', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='latitude is in range [-24,-22]', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='longitude is in range [-44,-43]', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='availability_365 smaller than number 366', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='price 0.5-th quantile value between 150 and 437 (inclusive)', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='price is nullable fractional', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='bedrooms is non negative', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='bedrooms is nullable integral', passed=0, failed=1, summary=None),\n",
              " ReportResult(name=\"room_type values in set {'Entire home/apt', 'Hotel room', 'Shared room', 'Private room'}\", passed=1, failed=0, summary=None),\n",
              " ReportResult(name='id is probably unique', passed=0, failed=1, summary=None)]"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.core.constraints.factories import column_is_probably_unique\n",
        "from whylogs.core.constraints.factories import is_in_range\n",
        "from whylogs.core.constraints.factories import smaller_than_number\n",
        "from whylogs.core.constraints.factories import quantile_between_range\n",
        "from whylogs.core.constraints.factories import is_non_negative\n",
        "from whylogs.core.constraints.factories import frequent_strings_in_reference_set\n",
        "from whylogs.core.constraints.factories import column_is_nullable_integral, column_is_nullable_fractional\n",
        "\n",
        "room_set = {'Private room', 'Shared room', 'Hotel room', 'Entire home/apt'}\n",
        "\n",
        "builder.add_constraint(column_is_probably_unique(column_name=\"id\"))\n",
        "builder.add_constraint(is_in_range(column_name=\"latitude\",lower=-24,upper=-22))\n",
        "builder.add_constraint(is_in_range(column_name=\"longitude\",lower=-44,upper=-43))\n",
        "builder.add_constraint(smaller_than_number(column_name=\"availability_365\",number=366))\n",
        "builder.add_constraint(quantile_between_range(column_name=\"price\",quantile=0.5,lower=150,upper=437))\n",
        "builder.add_constraint(is_non_negative(column_name=\"bedrooms\"))\n",
        "builder.add_constraint(column_is_nullable_integral(column_name=\"bedrooms\"))\n",
        "builder.add_constraint(column_is_nullable_fractional(column_name=\"price\"))\n",
        "builder.add_constraint(frequent_strings_in_reference_set(column_name=\"room_type\",reference_set=room_set))\n",
        "constraints = builder.build()\n",
        "\n",
        "constraints.generate_constraints_report()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "We can also visualize the constraints report with the `viz` module. With it, you can filter the displayed constraints by name or status (pass or fail).\n",
        "\n",
        "If you hover on each constraint's status, it will provide you with additional context that was used to determine the constraint's status."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 321
        },
        "id": "_0XFEd_Yj8zL",
        "outputId": "0d6c0839-f284-4e45-eabe-fa8b87f0349a"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div></div><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
              "&lt;html lang=&quot;en&quot;&gt;\n",
              "  &lt;head&gt;\n",
              "    &lt;meta charset=&quot;UTF-8&quot; /&gt;\n",
              "    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;\n",
              "    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;\n",
              "    &lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;\n",
              "    &lt;meta name=&quot;author&quot; content=&quot;&quot; /&gt;\n",
              "\n",
              "    &lt;title&gt;Profile Visualizer | whylogs&lt;/title&gt;\n",
              "\n",
              "    &lt;link rel=&quot;icon&quot; href=&quot;images/whylabs-favicon.png&quot; type=&quot;image/png&quot; sizes=&quot;16x16&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin /&gt;\n",
              "    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Asap:wght@400;500;600;700&amp;display=swap&quot; rel=&quot;stylesheet&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css&quot; /&gt;\n",
              "\n",
              "    &lt;script\n",
              "      src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.7/handlebars.min.js&quot;\n",
              "      integrity=&quot;sha512-RNLkV3d+aLtfcpEyFG8jRbnWHxUqVZozacROI4J2F1sTaDqo1dPQYs01OMi1t1w9Y2FdbSCDSQ2ZVdAC8bzgAg==&quot;\n",
              "      crossorigin=&quot;anonymous&quot;\n",
              "      referrerpolicy=&quot;no-referrer&quot;\n",
              "    &gt;&lt;/script&gt;\n",
              "\n",
              "    &lt;style type=&quot;text/css&quot;&gt;\n",
              "\n",
              "      /* Screen on smaller screens */\n",
              "      .no-responsive {\n",
              "        display: none;\n",
              "        position: fixed;\n",
              "        top: 0;\n",
              "        left: 0;\n",
              "        z-index: 1031;\n",
              "        width: 100vw;\n",
              "        height: 100vh;\n",
              "        background-color: var(--tealBackground);\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      @media screen and (min-width: 1000px) {\n",
              "        .desktop-content {\n",
              "          display: block;\n",
              "        }\n",
              "        .no-responsive {\n",
              "          display: none;\n",
              "        }\n",
              "      }\n",
              "\n",
              "      .no-responsive__content {\n",
              "        max-width: 600px;\n",
              "        width: 100%;\n",
              "        padding: 0 24px;\n",
              "      }\n",
              "\n",
              "      .no-responsive__title {\n",
              "        font-size: 96px;\n",
              "        font-weight: 300;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.167;\n",
              "      }\n",
              "\n",
              "      .no-responsive__text {\n",
              "        margin: 0;\n",
              "        font-size: 16px;\n",
              "        font-weight: 400;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.5;\n",
              "      }\n",
              "\n",
              "      .header-title {\n",
              "        font-size: 26px;\n",
              "        font-weight: 700;\n",
              "        color: #444444;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number {\n",
              "        position: relative;\n",
              "        display: inline-block;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number .tooltiptext {\n",
              "        visibility: hidden;\n",
              "        background: black;\n",
              "        color: white;\n",
              "        border: 1px solid black;\n",
              "        text-align: start;\n",
              "        padding: 3px;\n",
              "        position: absolute;\n",
              "        z-index: 1;\n",
              "        top: 0;\n",
              "        left: 100%;\n",
              "        margin-left: 5px;\n",
              "        opacity: 0;\n",
              "        transition: opacity 0.5s;\n",
              "        font-size: 13px;\n",
              "        font-weight: normal;\n",
              "        line-height: 100%;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number:hover .tooltiptext {\n",
              "        visibility: visible;\n",
              "        opacity: 1;\n",
              "      }\n",
              "\n",
              "\n",
              "      .wl-compare-profile {\n",
              "        position: relative;\n",
              "        left: 0;\n",
              "        padding: 30px;\n",
              "        margin-bottom: 20px;\n",
              "        background: var(--white);;\n",
              "        border-bottom: 1px solid #CED4DA;\n",
              "      }\n",
              "\n",
              "      .alert-list {\n",
              "        padding: 30px;\n",
              "        padding-top: 0;\n",
              "      }\n",
              "\n",
              "    .drift-detection {\n",
              "       justify-content: space-between;\n",
              "       align-items: center;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-circle {\n",
              "       width: 15px;\n",
              "       height: 15px;\n",
              "       border-radius: 50px;\n",
              "       display: inline-block;\n",
              "       margin-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item {\n",
              "         padding-right: 20px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-title {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 22px;\n",
              "       line-height: 130%;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-count {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 14px;\n",
              "       line-height: 16px;\n",
              "       color: #000000;\n",
              "       padding-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-name {\n",
              "       font-family: Arial;\n",
              "       font-style: normal;\n",
              "       font-weight: normal;\n",
              "       font-size: 12px;\n",
              "       line-height: 14px;\n",
              "       color: #000000;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input {\n",
              "       display: flex;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 170px;\n",
              "       padding-left: 10px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input img{\n",
              "       margin-right: 5px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input input::placeholder {\n",
              "       font-family: Arial;\n",
              "       font-weight: normal;\n",
              "       font-size: 13px;\n",
              "       line-height: 16px;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .dropdown-container {\n",
              "       position: absolute;\n",
              "       right: 30px;\n",
              "       top: 80px;\n",
              "       z-index: 999;\n",
              "       background: #FFFFFF;\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.05);\n",
              "       border-radius: 4px;\n",
              "       padding: 10px !important;\n",
              "       border: none !important;\n",
              "     }\n",
              "\n",
              "     .filter-options-title {\n",
              "       width: 240px;\n",
              "     }\n",
              "\n",
              "     .filter-options-title p {\n",
              "       margin: 0;\n",
              "     }\n",
              "\n",
              "     .form-check-input:checked {\n",
              "       background-color: #0E7384;\n",
              "       border-color: #0E7384;\n",
              "     }\n",
              "\n",
              "     .form-check-input[type=checkbox] {\n",
              "       border-radius: 2px;\n",
              "     }\n",
              "\n",
              "     .search-input{\n",
              "       padding-top: 0 !important;\n",
              "       padding-bottom: 0 !important;\n",
              "     }\n",
              "\n",
              "     .search-input input{\n",
              "       border: none;\n",
              "       background: none;\n",
              "       outline: none;\n",
              "       height: 40px;\n",
              "       width: 100%;\n",
              "       font-size: 14px;\n",
              "     }\n",
              "\n",
              "     .search-input img{\n",
              "       height: 19px;\n",
              "       pointer-events: none;\n",
              "     }\n",
              "\n",
              "     input::placeholder {\n",
              "       color: var(--secondaryLight1000);\n",
              "     }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "     .close-filter-button {\n",
              "       display: flex;\n",
              "       justify-content: center;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #369BAC;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 40px;\n",
              "       height: 40px;\n",
              "       cursor: pointer;\n",
              "       margin-left: 10px;\n",
              "     }\n",
              "\n",
              "      .statistic-number-title {\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 20px;\n",
              "        color: #6C757D;\n",
              "      }\n",
              "\n",
              "      .statistic-number {\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 20px;\n",
              "        line-height: 140%;\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        color: #4F595B;\n",
              "      }\n",
              "\n",
              "      .full-summary-statistics-wrap {\n",
              "        padding: 20px;\n",
              "      }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "      .statistics-list {\n",
              "        width: 100% ;\n",
              "      }\n",
              "\n",
              "      mark {\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 140%;\n",
              "      }\n",
              "\n",
              "      .blue-mark {\n",
              "        background-color:  #369BAC1A;\n",
              "        color: #369BAC;\n",
              "      }\n",
              "\n",
              "      .red-mark {\n",
              "        background-color: #FFEFEE;\n",
              "        color: #F5473C;\n",
              "      }\n",
              "\n",
              "      .alert-tag {\n",
              "        height: 27px;\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 12px;\n",
              "        line-height: 140%;\n",
              "        color: #FFFFFF;\n",
              "      }\n",
              "\n",
              "      .turquoise-background-color {\n",
              "        background-color: #1DBB42;\n",
              "      }\n",
              "\n",
              "      .bordeaux-background-color {\n",
              "        background-color: #C6462A;\n",
              "      }\n",
              "\n",
              "      .border-solid-gray {\n",
              "        border: 1px solid #CED4DA;\n",
              "        border-radius: 4px;\n",
              "      }\n",
              "\n",
              "      .display-flex {\n",
              "        display: flex;\n",
              "      }\n",
              "\n",
              "      .justify-content-space-between {\n",
              "        justify-content: space-between;\n",
              "      }\n",
              "\n",
              "      .justify-content-center {\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      .align-items-center {\n",
              "        align-items: center;\n",
              "      }\n",
              "\n",
              "      .align-items-flex-start {\n",
              "        align-items: flex-start;\n",
              "      }\n",
              "\n",
              "      .padding-right-30 {\n",
              "        padding-right: 30px;\n",
              "      }\n",
              "\n",
              "      .notif-circle-container{\n",
              "        position: absolute;\n",
              "        top: 25px;\n",
              "        right: 25px;\n",
              "        padding: 5.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: white;\n",
              "        cursor: pointer;\n",
              "      }\n",
              "\n",
              "      .notif-circle {\n",
              "        position: absolute;\n",
              "        top: 2px;\n",
              "        right: 2px;\n",
              "        padding: 3.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: #F2994A;\n",
              "      }\n",
              "\n",
              "      .alert-list-text {\n",
              "        width: 70%\n",
              "      }\n",
              "\n",
              "     @media screen and (min-width: 500px) {\n",
              "       .desktop-content {\n",
              "         display: block;\n",
              "       }\n",
              "       .no-responsive {\n",
              "         display: none;\n",
              "       }\n",
              "     }\n",
              "    &lt;/style&gt;\n",
              "  &lt;/head&gt;\n",
              "\n",
              "  &lt;body id=&quot;generated-html&quot;&gt;&lt;/body&gt;\n",
              "\n",
              "  &lt;script id=&quot;entry-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;\n",
              "    \n",
              "      &lt;div class=&quot;desktop-content&quot;&gt;\n",
              "        &lt;div class=&quot;full-summary-statistics-wrap&quot;&gt;\n",
              "          &lt;div class=&quot;full-summary-statistics&quot;&gt;\n",
              "            &lt;div&gt;\n",
              "              &lt;div class=&quot;display-flex justify-content-center&quot;&gt;\n",
              "                &lt;div class=&quot;statistics-list border-solid-gray&quot;&gt;\n",
              "                  &lt;div&gt;\n",
              "                    &lt;div class=&quot;wl-compare-profile&quot; id=&quot;compare-profile&quot;&gt;\n",
              "                        &lt;div class=&quot;drift-detection-wrap&quot;&gt;\n",
              "                          &lt;div class=&quot;drift-detection display-flex align-items-flex-start&quot;&gt;\n",
              "                            &lt;div class=&quot;drift-detection-info flex-direction-colum&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-info-title-wrap display-flex&quot;&gt;\n",
              "                                &lt;p class=&quot;drift-detection-info-title&quot;&gt;\n",
              "                                  Constraints Report\n",
              "                                &lt;/p&gt;\n",
              "                              &lt;/div&gt;\n",
              "\n",
              "                              &lt;!-- &lt;/div&gt; --&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;drift-detection-search-input-wrap display-flex&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-search-input search-input&quot;&gt;\n",
              "                                &lt;input type=&quot;text&quot; id=&quot;wl__feature-search&quot; placeholder=&quot;Quick search...&quot;/&gt;\n",
              "                                &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGdSURBVHgBpZK7TkJBEIZnZoVocdTYyQNALxpNKPQBMEaNJsbCRMKhl8ISWwt6AaksCF5iTHgAGhJD4AHkAaAzGiwUsjvOQnO4SYh/cXbPzO43OxcEj9Zy92EiFSXNIfvPyE1kKFfdoxJMENpP6DrvLC0vJoEwCgwto7DWcxoIIHBYbA3NmKwnDltjAeuZhyul1DaTTlfPB6Nt5Z53DOgky4P875+nlctY2+unjZviLklkJhi5bPUa3y/7qJuQUM7PinMy7CdQc1Gh16vnBxPzrMROmlKQEgKNASAHLQCmSIGpS75O+O5pdQAgVXaIqTkNwDDXHmcnW3VmHZoGMLoTsOt88+NrAMCIZdu+iLTyTwKRa1Md6YKfOgXbzO7K8sWku5u5RxcRV5EpPezrzcHGbXEXWaUkgkweZ/UC9YrK3zqggFw5FBZfm8EUavHj7AjAKpIvBDrGn+pNnlcyhYgqbcC41idr1gvB4SdZkDbzQa21gwv0Vj07aPTtL07XdDOyDXohCDNoHIRmAVRie20f+RKybRDQDvxHkXy/7b/DrayncLbMwQAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                              &lt;/div&gt;\n",
              "                              &lt;div class=&quot;wl__dropdown_arrow-icon&quot;&gt;\n",
              "                                &lt;div onclick=&quot;openFilter()&quot; class=&quot;close-filter-button&quot;&gt;\n",
              "                                &lt;div class=&quot;display-flex close-filter-icon d-none&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADFSURBVHgBfY+xDcIwEEXvnLQBZQkYAEhDwwKpEEK0CCZgAEjJCEmgjYSAygxAHTZgFRSOsyUjY5mcZFnn/+78PwBXf3+MoKWUPuYjVBPFnTwpr9t/oNJfcTfXsAhRAlDqDhhQIPYgpAqNMDqcUqSAYZT1epr9gAHt6uXshvYme4DYHQJNDKh0dD0m5WXB10Y3Fqjtuh7fROn3oREDWxfeMLyRsMnc0OgDzdduaA0Pi3Plgr7Q2kaAePeBqh6rueSNBVt6fgCwBV1JLF3rlAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;div class=&quot;display-flex filter-icon&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACSSURBVHgBrZLBCYAwDEWTUjw7igcdwI1cxkNXUJzBEVzFAbSVKoKmaVrEB6GHJv/w+AACtRk7P9IONv1QOYUl96k0zv61m2tjARoLtSDI3EFsgIJ4uoXrMLazO72CRG2mzg/8BSdVlEjhpGZJjAWdAZJECpWalEhJSs1pHuUlMad5FFai1Lwg4Ckx1TxKIPFL8w55mEWd8VjPGAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;/div&gt;\n",
              "                              &lt;span class=&quot;notif-circle-container&quot;&gt;\n",
              "                                &lt;span class=&quot;notif-circle&quot;&gt;&lt;/span&gt;\n",
              "                              &lt;/span&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                        &lt;div class=&quot;dropdown-container flex-direction-colum mb-2 d-none&quot; id=&quot;dropdown-container&quot;&gt;\n",
              "                          &lt;div class=&quot;filter-options&quot;&gt;\n",
              "                            &lt;div class=&quot;filter-options-title space-between dropdown&quot;&gt;\n",
              "                              &lt;p&gt;Select a view:&lt;/p&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1 mt-2&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Discrete&quot;\n",
              "                                id=&quot;inferredDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredDiscrete&quot;&gt;\n",
              "                                Failed constraints (&lt;span class=&quot;wl__feature-count--discrete&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Non-discrete&quot;\n",
              "                                id=&quot;inferredNonDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredNonDiscrete&quot;&gt;\n",
              "                                Passed constraints (&lt;span\n",
              "                                  class=&quot;wl__feature-count--non-discrete&quot;\n",
              "                                &gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Unknown&quot;\n",
              "                                id=&quot;inferredUnknown&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredUnknown&quot;&gt;\n",
              "                                All constraints (&lt;span class=&quot;wl__feature-count--unknown&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                      &lt;/div&gt;\n",
              "                    &lt;div class=&quot;alert-list&quot; id=&quot;alert-list&quot;&gt;\n",
              "                      {{{alertLIst this}}}\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;\n",
              "                &lt;/div&gt;\n",
              "              &lt;/div&gt;\n",
              "            &lt;/div&gt;\n",
              "          &lt;/div&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "      &lt;div class=&quot;no-responsive&quot;&gt;\n",
              "        &lt;div class=&quot;no-responsive__content&quot;&gt;\n",
              "          &lt;h1 class=&quot;no-responsive__title&quot;&gt;Hold on! :)&lt;/h1&gt;\n",
              "          &lt;p class=&quot;no-responsive__text&quot;&gt;\n",
              "            It looks like your current screen size or device is not yet supported by the WhyLabs Sandbox. The Sandbox is\n",
              "            best experienced on a desktop computer. Please try maximizing this window or switching to another device. We\n",
              "            are working on adding support for a larger variety of devices.\n",
              "          &lt;/p&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "    \n",
              "  &lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.min.js&quot; integrity=&quot;sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js&quot; integrity=&quot;sha512-cd6CHE+XWDQ33ElJqsi0MdNte3S+bQY819f7p3NUHgwQQLXSKjE4cPZTeGNI+vaxZynk1wVU3hoHmow3m089wA==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script&gt;\n",
              "    function registerHandlebarHelperFunctions() {\n",
              "      //helper fun\n",
              "      function formatLabelDate(timestamp) {\n",
              "        const date = new Date(timestamp);\n",
              "        const format = d3.timeFormat(&quot;%Y-%m-%d %I:%M:%S %p %Z&quot;);\n",
              "        return format(date);\n",
              "      }\n",
              "\n",
              "      function fixNumberTo(number, decimals = 3) {\n",
              "        return parseFloat(number).toFixed(decimals);\n",
              "      }\n",
              "\n",
              "      const randomNumbers = (range) =&gt; Math.floor(Math.random() * range)\n",
              "\n",
              "      const findFetureWithNumberSummary = (column) =&gt; {\n",
              "        const fetureIndex = Object.values(column.columns)\n",
              "              .findIndex((feture) =&gt; feture.numberSummary)\n",
              "\n",
              "        return Object.keys(column.columns)[fetureIndex]\n",
              "      }\n",
              "\n",
              "      const alertListItemStatus = (status, passedItem, failedItem) =&gt; {\n",
              "        if (status) {\n",
              "          return passedItem\n",
              "        } else {\n",
              "          return failedItem\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const alertListElement = (name, text, status, summary) =&gt; {\n",
              "        if (summary == null){\n",
              "          return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed&lt;/div&gt;\n",
              "                  `\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed&lt;/div&gt;\n",
              "                  `\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "\n",
              "        }\n",
              "        return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                          &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                        &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "      }\n",
              "\n",
              "      let failedConstraints = 0;\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileTimeStamp&quot;, function (column) {\n",
              "        return formatLabelDate(+column.properties.dataTimestamp)\n",
              "      });\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileName&quot;, function (column) {\n",
              "        return column.properties.tags.name\n",
              "      });\n",
              "\n",
              "\n",
              "      Handlebars.registerHelper(&quot;alertLIst&quot;, function (column) {\n",
              "        let alertListItem = column.map((value) =&gt; {\n",
              "          if (value[1][0]) {\n",
              "            let alertListValue = value[1].map((cstr)=&gt;{\n",
              "              return alertListElement(value[0],cstr[0],cstr[cstr.length - 1] === 0 || (failedConstraints++, false), value[3])\n",
              "            })\n",
              "            return alertListValue.join(&#x27; &#x27;)\n",
              "          } else {\n",
              "            return alertListElement(&#x27;&#x27;, value[0], value[2] === 0 ||  (failedConstraints++, false), value[3])\n",
              "          }\n",
              "        })\n",
              "         $(document).ready(() =&gt; {\n",
              "           $(&quot;.wl__feature-count--discrete&quot;).append(failedConstraints)\n",
              "           $(&quot;.wl__feature-count--non-discrete&quot;).append(column.length - failedConstraints)\n",
              "           $(&quot;.wl__feature-count--unknown&quot;).append(column.length)\n",
              "         })\n",
              "        return alertListItem.join(&#x27; &#x27;)\n",
              "      });\n",
              "\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function initHandlebarsTemplate() {\n",
              "      // Replace this context with JSON from .py file\n",
              "      const context = [[&quot;id has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;latitude is in range [-24,-22]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -22.964742460346738, &quot;stddev&quot;: 0.03434137097559033, &quot;n&quot;: 5422, &quot;max&quot;: -22.75061, &quot;min&quot;: -23.07148, &quot;q_01&quot;: -23.02679, &quot;q_05&quot;: -23.01179, &quot;q_10&quot;: -23.0058, &quot;q_25&quot;: -22.98427, &quot;median&quot;: -22.97042, &quot;q_75&quot;: -22.94071, &quot;q_90&quot;: -22.91803, &quot;q_95&quot;: -22.91044, &quot;q_99&quot;: -22.84452}], [&quot;longitude is in range [-44,-43]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -43.24698487089635, &quot;stddev&quot;: 0.09482828226695596, &quot;n&quot;: 5422, &quot;max&quot;: -43.10575, &quot;min&quot;: -43.69322, &quot;q_01&quot;: -43.51764, &quot;q_05&quot;: -43.45553, &quot;q_10&quot;: -43.39899, &quot;q_25&quot;: -43.29871, &quot;median&quot;: -43.19553, &quot;q_75&quot;: -43.18677, &quot;q_90&quot;: -43.17745, &quot;q_95&quot;: -43.17489, &quot;q_99&quot;: -43.16962}], [&quot;availability_365 smaller than number 366&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 221.00036886757653, &quot;stddev&quot;: 141.35219390801402, &quot;n&quot;: 5422, &quot;max&quot;: 365.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 87.0, &quot;median&quot;: 269.0, &quot;q_75&quot;: 363.0, &quot;q_90&quot;: 365.0, &quot;q_95&quot;: 365.0, &quot;q_99&quot;: 365.0}], [&quot;price 0.5-th quantile value between 150 and 437 (inclusive)&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 619.9743637034304, &quot;stddev&quot;: 2202.9701745617413, &quot;n&quot;: 5422, &quot;max&quot;: 126233.0, &quot;min&quot;: 35.0, &quot;q_01&quot;: 53.0, &quot;q_05&quot;: 80.0, &quot;q_10&quot;: 100.0, &quot;q_25&quot;: 150.0, &quot;median&quot;: 271.0, &quot;q_75&quot;: 580.0, &quot;q_90&quot;: 1200.0, &quot;q_95&quot;: 1881.0, &quot;q_99&quot;: 5374.0}], [&quot;price is nullable fractional&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5422, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;bedrooms is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 1.6868207864058486, &quot;stddev&quot;: 1.0116525581979967, &quot;n&quot;: 5061, &quot;max&quot;: 15.0, &quot;min&quot;: 1.0, &quot;q_01&quot;: 1.0, &quot;q_05&quot;: 1.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 1.0, &quot;median&quot;: 1.0, &quot;q_75&quot;: 2.0, &quot;q_90&quot;: 3.0, &quot;q_95&quot;: 3.0, &quot;q_99&quot;: 5.0}], [&quot;bedrooms is nullable integral&quot;, 0, 1, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5061, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;room_type values in set {&#x27;Entire home/apt&#x27;, &#x27;Hotel room&#x27;, &#x27;Shared room&#x27;, &#x27;Private room&#x27;}&quot;, 1, 0, {&quot;metric&quot;: &quot;frequent_items&quot;, &quot;frequent_strings_top_10&quot;: [&quot;Entire home/apt:3787&quot;, &quot;Private room:1500&quot;, &quot;Shared room:114&quot;, &quot;Hotel room:21&quot;]}], [&quot;id is probably unique&quot;, 0, 1, {&quot;id/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;id/cardinality/est&quot;: 5247.937651967344, &quot;id/cardinality/upper_1&quot;: 5316.630280310205, &quot;id/cardinality/lower_1&quot;: 5180.916011668648, &quot;id/counts/metric&quot;: &quot;counts&quot;, &quot;id/counts/n&quot;: 5422, &quot;id/counts/null&quot;: 0, &quot;id/counts/nan&quot;: 0, &quot;id/counts/inf&quot;: 0}]];\n",
              "      // Config handlebars and pass data to HBS template\n",
              "      const source = document.getElementById(&quot;entry-template&quot;).innerHTML;\n",
              "      const template = Handlebars.compile(source);\n",
              "      const html = template(context);\n",
              "      const target = document.getElementById(&quot;generated-html&quot;);\n",
              "      target.innerHTML = html;\n",
              "    }\n",
              "\n",
              "    function initWebsiteScripts() {\n",
              "      const $featureSearch = document.getElementById(&quot;wl__feature-search&quot;);\n",
              "      const $alertList = document.getElementById(&quot;alert-list&quot;);\n",
              "      const $discrete = document.getElementById(&quot;inferredDiscrete&quot;);\n",
              "      const $nonDiscrete = document.getElementById(&quot;inferredNonDiscrete&quot;);\n",
              "      const $unknown = document.getElementById(&quot;inferredUnknown&quot;);\n",
              "\n",
              "      const activeTypes = {\n",
              "        passed: true,\n",
              "        failed: true\n",
              "      };\n",
              "\n",
              "      let searchString = &quot;&quot;;\n",
              "\n",
              "      function debounce(func, wait, immediate) {\n",
              "        let timeout;\n",
              "\n",
              "        return function () {\n",
              "          const context = this;\n",
              "          const args = arguments;\n",
              "          const later = function () {\n",
              "            timeout = null;\n",
              "            if (!immediate) func.apply(context, args);\n",
              "          };\n",
              "\n",
              "          const callNow = immediate &amp;&amp; !timeout;\n",
              "          clearTimeout(timeout);\n",
              "          timeout = setTimeout(later, wait);\n",
              "          if (callNow) func.apply(context, args);\n",
              "        };\n",
              "      }\n",
              "\n",
              "      function filterNotification() {\n",
              "        const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "        const $boxes = $(&#x27;.wl_filter-options&gt;.form-check&gt;input[name=checkbox]:checked&#x27;);\n",
              "        const item = Object.values($boxes).find(function(value) { return $(value)[0] === undefined});\n",
              "        if (item === undefined) {\n",
              "          $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "        } else {\n",
              "          $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        }\n",
              "      }\n",
              "\n",
              "      function handleSearch() {\n",
              "        const tableBodyChildren = $alertList.children;\n",
              "\n",
              "        for (let i = 0; i &lt; tableBodyChildren.length; i++) {\n",
              "          const type = tableBodyChildren[i].dataset.inferredType.toLowerCase();\n",
              "          const name = $(tableBodyChildren[i].children[0]).html().toLowerCase();\n",
              "          if (activeTypes[type] &amp;&amp; name.includes(searchString)) {\n",
              "            tableBodyChildren[i].style.display = &quot;&quot;;\n",
              "          } else {\n",
              "            tableBodyChildren[i].style.display = &quot;none&quot;;\n",
              "          }\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const checkedBoxes = () =&gt; {\n",
              "        if ($(&#x27;.form-check-input:checked&#x27;).length === $(&quot;.form-check-input&quot;).length - 1) {\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, true );\n",
              "        }\n",
              "      }\n",
              "\n",
              "      $featureSearch.addEventListener(\n",
              "        &quot;keyup&quot;,\n",
              "        debounce((event) =&gt; {\n",
              "          searchString = event.target.value.toLowerCase();\n",
              "          handleSearch();\n",
              "        }, 100),\n",
              "      );\n",
              "\n",
              "      $discrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $nonDiscrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $unknown.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, true );\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, false );\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "    }\n",
              "\n",
              "    function checkedBoxes() {\n",
              "      const $boxes = $(&#x27;input[name=checkbox]:checked&#x27;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "\n",
              "      if ($boxes.length) {\n",
              "        $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "        checkedBoxes()\n",
              "      }\n",
              "    }\n",
              "\n",
              "    // Invoke functions -- keep in mind invokation order\n",
              "    registerHandlebarHelperFunctions();\n",
              "    initHandlebarsTemplate();\n",
              "    initWebsiteScripts();\n",
              "  &lt;/script&gt;\n",
              "&lt;/html&gt;\n",
              "\" width=100% height=300\n",
              "        frameBorder=0></iframe>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.viz import NotebookProfileVisualizer\n",
        "\n",
        "visualization = NotebookProfileVisualizer()\n",
        "visualization.constraints_report(constraints, cell_height=300)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "ILss3z7YgqrJ"
      },
      "source": [
        "# Session 3 - Per-value constraints with Condition Count Metrics\n",
        "\n",
        "whylogs profiles contain summarized information about our data. This means that it’s a lossy process, and once we get the profiles, we don’t have access anymore to the complete set of data.\n",
        "\n",
        "This makes it impossible to create some types of constraints from the standard metrics themselves. For example, suppose you need to check every row of a column to verify that there is no textual information that matches a credit card number or email information. Or maybe you’re interested in ensuring that there are no even numbers in a certain column. How do we do that if we don’t have access to the complete data?\n",
        "\n",
        "The answer is that you need to define a Condition Count Metric to be tracked before logging your data. This metric will count the number of times the values of a given column meet a user-defined condition. When the profile is generated, you’ll have that information to check against the constraints you’ll create."
      ]
    },
    {
      "attachments": {
        "image.png": {
          "image/png": "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9ddfzRzp4osv1pAhQ5xA9tZbb1V4eLiZ47ID3KeeesoJZwEAAAAAAAAAWQhmAQCAY9euXXr99dfVs2dP/fOf/1RCQoKZIzVt2lTDhw93AtmuXbvK6839J8QVV1yh2NhYcw0AAAAAAAAA4EcwCwDAWe63337TK6+84rSQffPNN7Vnzx4zR7rqqqucboknTpyozp07m1oAAAAAAAAAQEERzAIAcJbasGGDXnjhBSeQfeedd3Tw4EEzR2rXrp1efvllJ7C97rrrTC0AAAAAAAAAoLAIZgEAOMusXr1azz77rBPIfvjhhzp69KiZI3Xq1ElvvPGGxowZo7i4OFMLAAAAAAAAADhVBLMAAJwlli9frmHDhqlXr16aNWuWfD6fU1+mTBl169bNaTX71FNPOePEAgAAAAAAAACKFsEsAABnuMWLF2vw4MH661//qv/85z+mVjrvvPN01113acqUKXr88cfVuHFjMwcAAAAAAAAAUNQIZgEAOAMlJydr5syZ6t+/vx588EHNnz/fzJFq1aqlfv36OYHsAw88oHr16pk5AAAAAAAAAIBg8fj8/RgCQAEtnL5Xm9Yk66b7LzA1QZC0Xl//57/67Yi5forK171W8Vc3VESYqQiCGS9t1mVXVVCLjlVMDXD6bNiwQfPmzdPcuXO1c+dOU+uKiopS586dnalChQqmFgDOXmlp9kksrRUT09faR15nagEAoSA1NVmzZt1t7cOHWvvwW0wtAAAAULIRzAIotKAHswfna+x9g/XFQXO9iETEj9G/H26nCHO9qBHMojjYLWLtQParr74yNVmaNm2qG2+8UTfddJNKly5tagEABLMAELoIZgEAABCK6MoYQIm1dcFbRR7K2pLmvqX5CeYKEML27Nmjd999Vz179nTGkA0MZb1er2644Qa9/PLLmjhxorp06UIoCwAAAAAAAADFiGAWQImVtHe9KRW19doVhMAXOF1WrFihUaNG6bbbbnOC159//tnMcceP7dWrlz744AM988wziouLM3MAAAAAAAAAAMWJYBYAgBCQkpKi2bNn6/7771ffvn01ffp0HT582MyVrrjiCv3tb39zAtkBAwY448kCAAAAAAAAAEoOglkAAEqwjRs3avz48U7r2BEjRmjp0qVmjlSqVCl17NhRr776qt544w2nu+Jy5cqZuQAAAAAAAACAkoRgFkAIiNOg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"
        }
      },
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "![image.png](attachment:image.png)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "lSIwRzq0liRI"
      },
      "source": [
        "- A whylogs __profile__ contains a set of metrics that summarize the original data. \n",
        "- __Metric Constraints__ validate __Metrics__ present on the __Profile__ to generate a Report. This report will tell us whether the data meets the data quality constraints we defined.\n",
        "- Those metrics can be standard metrics, such as Distribution, Frequent Items, or Types metrics. They can also be __Condition Count Metrics__.\n",
        "- Condition Count Metrics count the number of times a certain relation passed/failed. For example, the number of times the rows for the column `Name` was equal to `Bob`\n",
        "- For a profile to contain Condition Count Metrics, you first have to specify a Condition __before__ logging your data, and pass that to your Dataset Schema.\n",
        "- The Dataset Schema configures the behavior for tracking metrics in whylogs.\n"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "y3vXIHF4lyIi"
      },
      "source": [
        "## Defining the Conditions\n",
        "\n",
        "The conditions are defined through a whylogs' `Condition` object. There are several different ways of assembling a condition. In the following example, we will define a custom function that will verify if the string is properly formatted as a date. We'll also define a second relation that will validate the text against a defined regex pattern to verify the url formatting.\n",
        "\n",
        "Since we can define multiple conditions for a single column, we'll assemble the conditions into dictionaries, where the key is the condition name. Each dictionary will later be attached to the relevant column."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "KKP-HkIRlu-4"
      },
      "outputs": [],
      "source": [
        "import datetime\n",
        "from whylogs.core.relations import Predicate\n",
        "from typing import Any\n",
        "from whylogs.core.metrics.condition_count_metric import Condition\n",
        "\n",
        "def date_format(x: Any) -> bool:\n",
        "    date_format = '%Y-%m-%d'\n",
        "    if x is None:\n",
        "        return True\n",
        "    try:\n",
        "        datetime.datetime.strptime(x, date_format)\n",
        "        return True\n",
        "    except ValueError:\n",
        "        return False\n",
        "        \n",
        "\n",
        "last_review_conditions = {\"is_date_format\": Condition(Predicate().is_(date_format))}\n",
        "listing_url_conditions = {\"url_matches_airbnb_domain\": Condition(Predicate().matches(\"^https:\\/\\/www.airbnb.com\\/rooms\"))}"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Creating the Schema and Logging the Data\n",
        "\n",
        "whylogs must be aware of those conditions while profiling the data. We can do that by creating a Standard Schema, and then simply adding the conditions to the schema with `add_resolver_spec`. That way, we can pass our enhanced schema when calling `why.log()` later."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "fhjJwHOxlz0Z"
      },
      "outputs": [],
      "source": [
        "from whylogs.core.schema import DeclarativeSchema\n",
        "from whylogs.core.resolvers import STANDARD_RESOLVER\n",
        "from whylogs.core.specialized_resolvers import ConditionCountMetricSpec\n",
        "\n",
        "schema = DeclarativeSchema(STANDARD_RESOLVER)\n",
        "\n",
        "schema.add_resolver_spec(column_name=\"last_review\", metrics=[ConditionCountMetricSpec(last_review_conditions)])\n",
        "schema.add_resolver_spec(column_name=\"listing_url\", metrics=[ConditionCountMetricSpec(listing_url_conditions)])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "y0kjqAIxqB0S"
      },
      "outputs": [],
      "source": [
        "import whylogs as why\n",
        "target_profile = why.log(df_target, schema=schema).view()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Generating constraints"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DxwXhP-jqQjK",
        "outputId": "46441f79-3850-4329-b13e-bbf9516ed3b3"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[ReportResult(name='id has no missing values', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='latitude is in range [-24,-22]', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='longitude is in range [-44,-43]', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='availability_365 smaller than number 366', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='price 0.5-th quantile value between 150 and 437 (inclusive)', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='price is nullable fractional', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='bedrooms is non negative', passed=1, failed=0, summary=None),\n",
              " ReportResult(name='bedrooms is nullable integral', passed=0, failed=1, summary=None),\n",
              " ReportResult(name=\"room_type values in set {'Entire home/apt', 'Hotel room', 'Shared room', 'Private room'}\", passed=1, failed=0, summary=None),\n",
              " ReportResult(name='last_review meets condition is_date_format', passed=0, failed=1, summary=None),\n",
              " ReportResult(name='listing_url meets condition url_matches_airbnb_domain', passed=0, failed=1, summary=None),\n",
              " ReportResult(name='id is probably unique', passed=0, failed=1, summary=None)]"
            ]
          },
          "execution_count": 19,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.core.constraints.factories import condition_meets\n",
        "from whylogs.core.constraints import ConstraintsBuilder\n",
        "\n",
        "builder = ConstraintsBuilder(dataset_profile_view=target_profile)\n",
        "\n",
        "room_set = {'Private room', 'Shared room', 'Hotel room', 'Entire home/apt'}\n",
        "\n",
        "builder.add_constraint(no_missing_values(column_name=\"id\"))\n",
        "builder.add_constraint(column_is_probably_unique(column_name=\"id\"))\n",
        "builder.add_constraint(is_in_range(column_name=\"latitude\",lower=-24,upper=-22))\n",
        "builder.add_constraint(is_in_range(column_name=\"longitude\",lower=-44,upper=-43))\n",
        "builder.add_constraint(smaller_than_number(column_name=\"availability_365\",number=366))\n",
        "builder.add_constraint(quantile_between_range(column_name=\"price\",quantile=0.5,lower=150,upper=437))\n",
        "builder.add_constraint(is_non_negative(column_name=\"bedrooms\"))\n",
        "builder.add_constraint(column_is_nullable_integral(column_name=\"bedrooms\"))\n",
        "builder.add_constraint(column_is_nullable_fractional(column_name=\"price\"))\n",
        "builder.add_constraint(frequent_strings_in_reference_set(column_name=\"room_type\",reference_set=room_set))\n",
        "\n",
        "builder.add_constraint(condition_meets(column_name=\"last_review\", condition_name=\"is_date_format\"))\n",
        "builder.add_constraint(condition_meets(column_name=\"listing_url\", condition_name=\"url_matches_airbnb_domain\"))\n",
        "\n",
        "\n",
        "constraints = builder.build()\n",
        "constraints.generate_constraints_report()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 321
        },
        "id": "pESy18tCqxdr",
        "outputId": "b106ccf7-efa9-441a-eb04-b88e9374615b"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div></div><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
              "&lt;html lang=&quot;en&quot;&gt;\n",
              "  &lt;head&gt;\n",
              "    &lt;meta charset=&quot;UTF-8&quot; /&gt;\n",
              "    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;\n",
              "    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;\n",
              "    &lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;\n",
              "    &lt;meta name=&quot;author&quot; content=&quot;&quot; /&gt;\n",
              "\n",
              "    &lt;title&gt;Profile Visualizer | whylogs&lt;/title&gt;\n",
              "\n",
              "    &lt;link rel=&quot;icon&quot; href=&quot;images/whylabs-favicon.png&quot; type=&quot;image/png&quot; sizes=&quot;16x16&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin /&gt;\n",
              "    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Asap:wght@400;500;600;700&amp;display=swap&quot; rel=&quot;stylesheet&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css&quot; /&gt;\n",
              "\n",
              "    &lt;script\n",
              "      src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.7/handlebars.min.js&quot;\n",
              "      integrity=&quot;sha512-RNLkV3d+aLtfcpEyFG8jRbnWHxUqVZozacROI4J2F1sTaDqo1dPQYs01OMi1t1w9Y2FdbSCDSQ2ZVdAC8bzgAg==&quot;\n",
              "      crossorigin=&quot;anonymous&quot;\n",
              "      referrerpolicy=&quot;no-referrer&quot;\n",
              "    &gt;&lt;/script&gt;\n",
              "\n",
              "    &lt;style type=&quot;text/css&quot;&gt;\n",
              "\n",
              "      /* Screen on smaller screens */\n",
              "      .no-responsive {\n",
              "        display: none;\n",
              "        position: fixed;\n",
              "        top: 0;\n",
              "        left: 0;\n",
              "        z-index: 1031;\n",
              "        width: 100vw;\n",
              "        height: 100vh;\n",
              "        background-color: var(--tealBackground);\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      @media screen and (min-width: 1000px) {\n",
              "        .desktop-content {\n",
              "          display: block;\n",
              "        }\n",
              "        .no-responsive {\n",
              "          display: none;\n",
              "        }\n",
              "      }\n",
              "\n",
              "      .no-responsive__content {\n",
              "        max-width: 600px;\n",
              "        width: 100%;\n",
              "        padding: 0 24px;\n",
              "      }\n",
              "\n",
              "      .no-responsive__title {\n",
              "        font-size: 96px;\n",
              "        font-weight: 300;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.167;\n",
              "      }\n",
              "\n",
              "      .no-responsive__text {\n",
              "        margin: 0;\n",
              "        font-size: 16px;\n",
              "        font-weight: 400;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.5;\n",
              "      }\n",
              "\n",
              "      .header-title {\n",
              "        font-size: 26px;\n",
              "        font-weight: 700;\n",
              "        color: #444444;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number {\n",
              "        position: relative;\n",
              "        display: inline-block;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number .tooltiptext {\n",
              "        visibility: hidden;\n",
              "        background: black;\n",
              "        color: white;\n",
              "        border: 1px solid black;\n",
              "        text-align: start;\n",
              "        padding: 3px;\n",
              "        position: absolute;\n",
              "        z-index: 1;\n",
              "        top: 0;\n",
              "        left: 100%;\n",
              "        margin-left: 5px;\n",
              "        opacity: 0;\n",
              "        transition: opacity 0.5s;\n",
              "        font-size: 13px;\n",
              "        font-weight: normal;\n",
              "        line-height: 100%;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number:hover .tooltiptext {\n",
              "        visibility: visible;\n",
              "        opacity: 1;\n",
              "      }\n",
              "\n",
              "\n",
              "      .wl-compare-profile {\n",
              "        position: relative;\n",
              "        left: 0;\n",
              "        padding: 30px;\n",
              "        margin-bottom: 20px;\n",
              "        background: var(--white);;\n",
              "        border-bottom: 1px solid #CED4DA;\n",
              "      }\n",
              "\n",
              "      .alert-list {\n",
              "        padding: 30px;\n",
              "        padding-top: 0;\n",
              "      }\n",
              "\n",
              "    .drift-detection {\n",
              "       justify-content: space-between;\n",
              "       align-items: center;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-circle {\n",
              "       width: 15px;\n",
              "       height: 15px;\n",
              "       border-radius: 50px;\n",
              "       display: inline-block;\n",
              "       margin-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item {\n",
              "         padding-right: 20px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-title {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 22px;\n",
              "       line-height: 130%;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-count {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 14px;\n",
              "       line-height: 16px;\n",
              "       color: #000000;\n",
              "       padding-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-name {\n",
              "       font-family: Arial;\n",
              "       font-style: normal;\n",
              "       font-weight: normal;\n",
              "       font-size: 12px;\n",
              "       line-height: 14px;\n",
              "       color: #000000;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input {\n",
              "       display: flex;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 170px;\n",
              "       padding-left: 10px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input img{\n",
              "       margin-right: 5px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input input::placeholder {\n",
              "       font-family: Arial;\n",
              "       font-weight: normal;\n",
              "       font-size: 13px;\n",
              "       line-height: 16px;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .dropdown-container {\n",
              "       position: absolute;\n",
              "       right: 30px;\n",
              "       top: 80px;\n",
              "       z-index: 999;\n",
              "       background: #FFFFFF;\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.05);\n",
              "       border-radius: 4px;\n",
              "       padding: 10px !important;\n",
              "       border: none !important;\n",
              "     }\n",
              "\n",
              "     .filter-options-title {\n",
              "       width: 240px;\n",
              "     }\n",
              "\n",
              "     .filter-options-title p {\n",
              "       margin: 0;\n",
              "     }\n",
              "\n",
              "     .form-check-input:checked {\n",
              "       background-color: #0E7384;\n",
              "       border-color: #0E7384;\n",
              "     }\n",
              "\n",
              "     .form-check-input[type=checkbox] {\n",
              "       border-radius: 2px;\n",
              "     }\n",
              "\n",
              "     .search-input{\n",
              "       padding-top: 0 !important;\n",
              "       padding-bottom: 0 !important;\n",
              "     }\n",
              "\n",
              "     .search-input input{\n",
              "       border: none;\n",
              "       background: none;\n",
              "       outline: none;\n",
              "       height: 40px;\n",
              "       width: 100%;\n",
              "       font-size: 14px;\n",
              "     }\n",
              "\n",
              "     .search-input img{\n",
              "       height: 19px;\n",
              "       pointer-events: none;\n",
              "     }\n",
              "\n",
              "     input::placeholder {\n",
              "       color: var(--secondaryLight1000);\n",
              "     }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "     .close-filter-button {\n",
              "       display: flex;\n",
              "       justify-content: center;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #369BAC;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 40px;\n",
              "       height: 40px;\n",
              "       cursor: pointer;\n",
              "       margin-left: 10px;\n",
              "     }\n",
              "\n",
              "      .statistic-number-title {\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 20px;\n",
              "        color: #6C757D;\n",
              "      }\n",
              "\n",
              "      .statistic-number {\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 20px;\n",
              "        line-height: 140%;\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        color: #4F595B;\n",
              "      }\n",
              "\n",
              "      .full-summary-statistics-wrap {\n",
              "        padding: 20px;\n",
              "      }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "      .statistics-list {\n",
              "        width: 100% ;\n",
              "      }\n",
              "\n",
              "      mark {\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 140%;\n",
              "      }\n",
              "\n",
              "      .blue-mark {\n",
              "        background-color:  #369BAC1A;\n",
              "        color: #369BAC;\n",
              "      }\n",
              "\n",
              "      .red-mark {\n",
              "        background-color: #FFEFEE;\n",
              "        color: #F5473C;\n",
              "      }\n",
              "\n",
              "      .alert-tag {\n",
              "        height: 27px;\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 12px;\n",
              "        line-height: 140%;\n",
              "        color: #FFFFFF;\n",
              "      }\n",
              "\n",
              "      .turquoise-background-color {\n",
              "        background-color: #1DBB42;\n",
              "      }\n",
              "\n",
              "      .bordeaux-background-color {\n",
              "        background-color: #C6462A;\n",
              "      }\n",
              "\n",
              "      .border-solid-gray {\n",
              "        border: 1px solid #CED4DA;\n",
              "        border-radius: 4px;\n",
              "      }\n",
              "\n",
              "      .display-flex {\n",
              "        display: flex;\n",
              "      }\n",
              "\n",
              "      .justify-content-space-between {\n",
              "        justify-content: space-between;\n",
              "      }\n",
              "\n",
              "      .justify-content-center {\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      .align-items-center {\n",
              "        align-items: center;\n",
              "      }\n",
              "\n",
              "      .align-items-flex-start {\n",
              "        align-items: flex-start;\n",
              "      }\n",
              "\n",
              "      .padding-right-30 {\n",
              "        padding-right: 30px;\n",
              "      }\n",
              "\n",
              "      .notif-circle-container{\n",
              "        position: absolute;\n",
              "        top: 25px;\n",
              "        right: 25px;\n",
              "        padding: 5.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: white;\n",
              "        cursor: pointer;\n",
              "      }\n",
              "\n",
              "      .notif-circle {\n",
              "        position: absolute;\n",
              "        top: 2px;\n",
              "        right: 2px;\n",
              "        padding: 3.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: #F2994A;\n",
              "      }\n",
              "\n",
              "      .alert-list-text {\n",
              "        width: 70%\n",
              "      }\n",
              "\n",
              "     @media screen and (min-width: 500px) {\n",
              "       .desktop-content {\n",
              "         display: block;\n",
              "       }\n",
              "       .no-responsive {\n",
              "         display: none;\n",
              "       }\n",
              "     }\n",
              "    &lt;/style&gt;\n",
              "  &lt;/head&gt;\n",
              "\n",
              "  &lt;body id=&quot;generated-html&quot;&gt;&lt;/body&gt;\n",
              "\n",
              "  &lt;script id=&quot;entry-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;\n",
              "    \n",
              "      &lt;div class=&quot;desktop-content&quot;&gt;\n",
              "        &lt;div class=&quot;full-summary-statistics-wrap&quot;&gt;\n",
              "          &lt;div class=&quot;full-summary-statistics&quot;&gt;\n",
              "            &lt;div&gt;\n",
              "              &lt;div class=&quot;display-flex justify-content-center&quot;&gt;\n",
              "                &lt;div class=&quot;statistics-list border-solid-gray&quot;&gt;\n",
              "                  &lt;div&gt;\n",
              "                    &lt;div class=&quot;wl-compare-profile&quot; id=&quot;compare-profile&quot;&gt;\n",
              "                        &lt;div class=&quot;drift-detection-wrap&quot;&gt;\n",
              "                          &lt;div class=&quot;drift-detection display-flex align-items-flex-start&quot;&gt;\n",
              "                            &lt;div class=&quot;drift-detection-info flex-direction-colum&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-info-title-wrap display-flex&quot;&gt;\n",
              "                                &lt;p class=&quot;drift-detection-info-title&quot;&gt;\n",
              "                                  Constraints Report\n",
              "                                &lt;/p&gt;\n",
              "                              &lt;/div&gt;\n",
              "\n",
              "                              &lt;!-- &lt;/div&gt; --&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;drift-detection-search-input-wrap display-flex&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-search-input search-input&quot;&gt;\n",
              "                                &lt;input type=&quot;text&quot; id=&quot;wl__feature-search&quot; placeholder=&quot;Quick search...&quot;/&gt;\n",
              "                                &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGdSURBVHgBpZK7TkJBEIZnZoVocdTYyQNALxpNKPQBMEaNJsbCRMKhl8ISWwt6AaksCF5iTHgAGhJD4AHkAaAzGiwUsjvOQnO4SYh/cXbPzO43OxcEj9Zy92EiFSXNIfvPyE1kKFfdoxJMENpP6DrvLC0vJoEwCgwto7DWcxoIIHBYbA3NmKwnDltjAeuZhyul1DaTTlfPB6Nt5Z53DOgky4P875+nlctY2+unjZviLklkJhi5bPUa3y/7qJuQUM7PinMy7CdQc1Gh16vnBxPzrMROmlKQEgKNASAHLQCmSIGpS75O+O5pdQAgVXaIqTkNwDDXHmcnW3VmHZoGMLoTsOt88+NrAMCIZdu+iLTyTwKRa1Md6YKfOgXbzO7K8sWku5u5RxcRV5EpPezrzcHGbXEXWaUkgkweZ/UC9YrK3zqggFw5FBZfm8EUavHj7AjAKpIvBDrGn+pNnlcyhYgqbcC41idr1gvB4SdZkDbzQa21gwv0Vj07aPTtL07XdDOyDXohCDNoHIRmAVRie20f+RKybRDQDvxHkXy/7b/DrayncLbMwQAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                              &lt;/div&gt;\n",
              "                              &lt;div class=&quot;wl__dropdown_arrow-icon&quot;&gt;\n",
              "                                &lt;div onclick=&quot;openFilter()&quot; class=&quot;close-filter-button&quot;&gt;\n",
              "                                &lt;div class=&quot;display-flex close-filter-icon d-none&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADFSURBVHgBfY+xDcIwEEXvnLQBZQkYAEhDwwKpEEK0CCZgAEjJCEmgjYSAygxAHTZgFRSOsyUjY5mcZFnn/+78PwBXf3+MoKWUPuYjVBPFnTwpr9t/oNJfcTfXsAhRAlDqDhhQIPYgpAqNMDqcUqSAYZT1epr9gAHt6uXshvYme4DYHQJNDKh0dD0m5WXB10Y3Fqjtuh7fROn3oREDWxfeMLyRsMnc0OgDzdduaA0Pi3Plgr7Q2kaAePeBqh6rueSNBVt6fgCwBV1JLF3rlAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;div class=&quot;display-flex filter-icon&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACSSURBVHgBrZLBCYAwDEWTUjw7igcdwI1cxkNXUJzBEVzFAbSVKoKmaVrEB6GHJv/w+AACtRk7P9IONv1QOYUl96k0zv61m2tjARoLtSDI3EFsgIJ4uoXrMLazO72CRG2mzg/8BSdVlEjhpGZJjAWdAZJECpWalEhJSs1pHuUlMad5FFai1Lwg4Ckx1TxKIPFL8w55mEWd8VjPGAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;/div&gt;\n",
              "                              &lt;span class=&quot;notif-circle-container&quot;&gt;\n",
              "                                &lt;span class=&quot;notif-circle&quot;&gt;&lt;/span&gt;\n",
              "                              &lt;/span&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                        &lt;div class=&quot;dropdown-container flex-direction-colum mb-2 d-none&quot; id=&quot;dropdown-container&quot;&gt;\n",
              "                          &lt;div class=&quot;filter-options&quot;&gt;\n",
              "                            &lt;div class=&quot;filter-options-title space-between dropdown&quot;&gt;\n",
              "                              &lt;p&gt;Select a view:&lt;/p&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1 mt-2&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Discrete&quot;\n",
              "                                id=&quot;inferredDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredDiscrete&quot;&gt;\n",
              "                                Failed constraints (&lt;span class=&quot;wl__feature-count--discrete&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Non-discrete&quot;\n",
              "                                id=&quot;inferredNonDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredNonDiscrete&quot;&gt;\n",
              "                                Passed constraints (&lt;span\n",
              "                                  class=&quot;wl__feature-count--non-discrete&quot;\n",
              "                                &gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Unknown&quot;\n",
              "                                id=&quot;inferredUnknown&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredUnknown&quot;&gt;\n",
              "                                All constraints (&lt;span class=&quot;wl__feature-count--unknown&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                      &lt;/div&gt;\n",
              "                    &lt;div class=&quot;alert-list&quot; id=&quot;alert-list&quot;&gt;\n",
              "                      {{{alertLIst this}}}\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;\n",
              "                &lt;/div&gt;\n",
              "              &lt;/div&gt;\n",
              "            &lt;/div&gt;\n",
              "          &lt;/div&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "      &lt;div class=&quot;no-responsive&quot;&gt;\n",
              "        &lt;div class=&quot;no-responsive__content&quot;&gt;\n",
              "          &lt;h1 class=&quot;no-responsive__title&quot;&gt;Hold on! :)&lt;/h1&gt;\n",
              "          &lt;p class=&quot;no-responsive__text&quot;&gt;\n",
              "            It looks like your current screen size or device is not yet supported by the WhyLabs Sandbox. The Sandbox is\n",
              "            best experienced on a desktop computer. Please try maximizing this window or switching to another device. We\n",
              "            are working on adding support for a larger variety of devices.\n",
              "          &lt;/p&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "    \n",
              "  &lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.min.js&quot; integrity=&quot;sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js&quot; integrity=&quot;sha512-cd6CHE+XWDQ33ElJqsi0MdNte3S+bQY819f7p3NUHgwQQLXSKjE4cPZTeGNI+vaxZynk1wVU3hoHmow3m089wA==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script&gt;\n",
              "    function registerHandlebarHelperFunctions() {\n",
              "      //helper fun\n",
              "      function formatLabelDate(timestamp) {\n",
              "        const date = new Date(timestamp);\n",
              "        const format = d3.timeFormat(&quot;%Y-%m-%d %I:%M:%S %p %Z&quot;);\n",
              "        return format(date);\n",
              "      }\n",
              "\n",
              "      function fixNumberTo(number, decimals = 3) {\n",
              "        return parseFloat(number).toFixed(decimals);\n",
              "      }\n",
              "\n",
              "      const randomNumbers = (range) =&gt; Math.floor(Math.random() * range)\n",
              "\n",
              "      const findFetureWithNumberSummary = (column) =&gt; {\n",
              "        const fetureIndex = Object.values(column.columns)\n",
              "              .findIndex((feture) =&gt; feture.numberSummary)\n",
              "\n",
              "        return Object.keys(column.columns)[fetureIndex]\n",
              "      }\n",
              "\n",
              "      const alertListItemStatus = (status, passedItem, failedItem) =&gt; {\n",
              "        if (status) {\n",
              "          return passedItem\n",
              "        } else {\n",
              "          return failedItem\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const alertListElement = (name, text, status, summary) =&gt; {\n",
              "        if (summary == null){\n",
              "          return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed&lt;/div&gt;\n",
              "                  `\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed&lt;/div&gt;\n",
              "                  `\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "\n",
              "        }\n",
              "        return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                          &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                        &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "      }\n",
              "\n",
              "      let failedConstraints = 0;\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileTimeStamp&quot;, function (column) {\n",
              "        return formatLabelDate(+column.properties.dataTimestamp)\n",
              "      });\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileName&quot;, function (column) {\n",
              "        return column.properties.tags.name\n",
              "      });\n",
              "\n",
              "\n",
              "      Handlebars.registerHelper(&quot;alertLIst&quot;, function (column) {\n",
              "        let alertListItem = column.map((value) =&gt; {\n",
              "          if (value[1][0]) {\n",
              "            let alertListValue = value[1].map((cstr)=&gt;{\n",
              "              return alertListElement(value[0],cstr[0],cstr[cstr.length - 1] === 0 || (failedConstraints++, false), value[3])\n",
              "            })\n",
              "            return alertListValue.join(&#x27; &#x27;)\n",
              "          } else {\n",
              "            return alertListElement(&#x27;&#x27;, value[0], value[2] === 0 ||  (failedConstraints++, false), value[3])\n",
              "          }\n",
              "        })\n",
              "         $(document).ready(() =&gt; {\n",
              "           $(&quot;.wl__feature-count--discrete&quot;).append(failedConstraints)\n",
              "           $(&quot;.wl__feature-count--non-discrete&quot;).append(column.length - failedConstraints)\n",
              "           $(&quot;.wl__feature-count--unknown&quot;).append(column.length)\n",
              "         })\n",
              "        return alertListItem.join(&#x27; &#x27;)\n",
              "      });\n",
              "\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function initHandlebarsTemplate() {\n",
              "      // Replace this context with JSON from .py file\n",
              "      const context = [[&quot;id has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;latitude is in range [-24,-22]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -22.964742460346738, &quot;stddev&quot;: 0.03434137097559033, &quot;n&quot;: 5422, &quot;max&quot;: -22.75061, &quot;min&quot;: -23.07148, &quot;q_01&quot;: -23.02675, &quot;q_05&quot;: -23.01186, &quot;q_10&quot;: -23.00579, &quot;q_25&quot;: -22.98428, &quot;median&quot;: -22.97044, &quot;q_75&quot;: -22.94059, &quot;q_90&quot;: -22.91824, &quot;q_95&quot;: -22.91048, &quot;q_99&quot;: -22.84541}], [&quot;longitude is in range [-44,-43]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -43.24698487089635, &quot;stddev&quot;: 0.09482828226695596, &quot;n&quot;: 5422, &quot;max&quot;: -43.10575, &quot;min&quot;: -43.69322, &quot;q_01&quot;: -43.51842, &quot;q_05&quot;: -43.45553, &quot;q_10&quot;: -43.39923, &quot;q_25&quot;: -43.29878, &quot;median&quot;: -43.19553, &quot;q_75&quot;: -43.18676, &quot;q_90&quot;: -43.17748, &quot;q_95&quot;: -43.17488, &quot;q_99&quot;: -43.16955}], [&quot;availability_365 smaller than number 366&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 221.00036886757653, &quot;stddev&quot;: 141.35219390801402, &quot;n&quot;: 5422, &quot;max&quot;: 365.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 87.0, &quot;median&quot;: 270.0, &quot;q_75&quot;: 363.0, &quot;q_90&quot;: 365.0, &quot;q_95&quot;: 365.0, &quot;q_99&quot;: 365.0}], [&quot;price 0.5-th quantile value between 150 and 437 (inclusive)&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 619.9743637034304, &quot;stddev&quot;: 2202.9701745617413, &quot;n&quot;: 5422, &quot;max&quot;: 126233.0, &quot;min&quot;: 35.0, &quot;q_01&quot;: 53.0, &quot;q_05&quot;: 80.0, &quot;q_10&quot;: 100.0, &quot;q_25&quot;: 150.0, &quot;median&quot;: 271.0, &quot;q_75&quot;: 580.0, &quot;q_90&quot;: 1200.0, &quot;q_95&quot;: 1881.0, &quot;q_99&quot;: 5374.0}], [&quot;price is nullable fractional&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5422, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;bedrooms is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 1.6868207864058486, &quot;stddev&quot;: 1.0116525581979967, &quot;n&quot;: 5061, &quot;max&quot;: 15.0, &quot;min&quot;: 1.0, &quot;q_01&quot;: 1.0, &quot;q_05&quot;: 1.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 1.0, &quot;median&quot;: 1.0, &quot;q_75&quot;: 2.0, &quot;q_90&quot;: 3.0, &quot;q_95&quot;: 3.0, &quot;q_99&quot;: 5.0}], [&quot;bedrooms is nullable integral&quot;, 0, 1, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5061, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;room_type values in set {&#x27;Entire home/apt&#x27;, &#x27;Hotel room&#x27;, &#x27;Shared room&#x27;, &#x27;Private room&#x27;}&quot;, 1, 0, {&quot;metric&quot;: &quot;frequent_items&quot;, &quot;frequent_strings_top_10&quot;: [&quot;Entire home/apt:3787&quot;, &quot;Private room:1500&quot;, &quot;Shared room:114&quot;, &quot;Hotel room:21&quot;]}], [&quot;last_review meets condition is_date_format&quot;, 0, 1, {&quot;metric&quot;: &quot;condition_count&quot;, &quot;total&quot;: 3473, &quot;is_date_format&quot;: 3471}], [&quot;listing_url meets condition url_matches_airbnb_domain&quot;, 0, 1, {&quot;metric&quot;: &quot;condition_count&quot;, &quot;total&quot;: 5422, &quot;url_matches_airbnb_domain&quot;: 5392}], [&quot;id is probably unique&quot;, 0, 1, {&quot;id/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;id/cardinality/est&quot;: 5247.937651967344, &quot;id/cardinality/upper_1&quot;: 5316.630280310205, &quot;id/cardinality/lower_1&quot;: 5180.916011668648, &quot;id/counts/metric&quot;: &quot;counts&quot;, &quot;id/counts/n&quot;: 5422, &quot;id/counts/null&quot;: 0, &quot;id/counts/nan&quot;: 0, &quot;id/counts/inf&quot;: 0}]];\n",
              "      // Config handlebars and pass data to HBS template\n",
              "      const source = document.getElementById(&quot;entry-template&quot;).innerHTML;\n",
              "      const template = Handlebars.compile(source);\n",
              "      const html = template(context);\n",
              "      const target = document.getElementById(&quot;generated-html&quot;);\n",
              "      target.innerHTML = html;\n",
              "    }\n",
              "\n",
              "    function initWebsiteScripts() {\n",
              "      const $featureSearch = document.getElementById(&quot;wl__feature-search&quot;);\n",
              "      const $alertList = document.getElementById(&quot;alert-list&quot;);\n",
              "      const $discrete = document.getElementById(&quot;inferredDiscrete&quot;);\n",
              "      const $nonDiscrete = document.getElementById(&quot;inferredNonDiscrete&quot;);\n",
              "      const $unknown = document.getElementById(&quot;inferredUnknown&quot;);\n",
              "\n",
              "      const activeTypes = {\n",
              "        passed: true,\n",
              "        failed: true\n",
              "      };\n",
              "\n",
              "      let searchString = &quot;&quot;;\n",
              "\n",
              "      function debounce(func, wait, immediate) {\n",
              "        let timeout;\n",
              "\n",
              "        return function () {\n",
              "          const context = this;\n",
              "          const args = arguments;\n",
              "          const later = function () {\n",
              "            timeout = null;\n",
              "            if (!immediate) func.apply(context, args);\n",
              "          };\n",
              "\n",
              "          const callNow = immediate &amp;&amp; !timeout;\n",
              "          clearTimeout(timeout);\n",
              "          timeout = setTimeout(later, wait);\n",
              "          if (callNow) func.apply(context, args);\n",
              "        };\n",
              "      }\n",
              "\n",
              "      function filterNotification() {\n",
              "        const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "        const $boxes = $(&#x27;.wl_filter-options&gt;.form-check&gt;input[name=checkbox]:checked&#x27;);\n",
              "        const item = Object.values($boxes).find(function(value) { return $(value)[0] === undefined});\n",
              "        if (item === undefined) {\n",
              "          $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "        } else {\n",
              "          $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        }\n",
              "      }\n",
              "\n",
              "      function handleSearch() {\n",
              "        const tableBodyChildren = $alertList.children;\n",
              "\n",
              "        for (let i = 0; i &lt; tableBodyChildren.length; i++) {\n",
              "          const type = tableBodyChildren[i].dataset.inferredType.toLowerCase();\n",
              "          const name = $(tableBodyChildren[i].children[0]).html().toLowerCase();\n",
              "          if (activeTypes[type] &amp;&amp; name.includes(searchString)) {\n",
              "            tableBodyChildren[i].style.display = &quot;&quot;;\n",
              "          } else {\n",
              "            tableBodyChildren[i].style.display = &quot;none&quot;;\n",
              "          }\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const checkedBoxes = () =&gt; {\n",
              "        if ($(&#x27;.form-check-input:checked&#x27;).length === $(&quot;.form-check-input&quot;).length - 1) {\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, true );\n",
              "        }\n",
              "      }\n",
              "\n",
              "      $featureSearch.addEventListener(\n",
              "        &quot;keyup&quot;,\n",
              "        debounce((event) =&gt; {\n",
              "          searchString = event.target.value.toLowerCase();\n",
              "          handleSearch();\n",
              "        }, 100),\n",
              "      );\n",
              "\n",
              "      $discrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $nonDiscrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $unknown.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, true );\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, false );\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "    }\n",
              "\n",
              "    function checkedBoxes() {\n",
              "      const $boxes = $(&#x27;input[name=checkbox]:checked&#x27;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "\n",
              "      if ($boxes.length) {\n",
              "        $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "        checkedBoxes()\n",
              "      }\n",
              "    }\n",
              "\n",
              "    // Invoke functions -- keep in mind invokation order\n",
              "    registerHandlebarHelperFunctions();\n",
              "    initHandlebarsTemplate();\n",
              "    initWebsiteScripts();\n",
              "  &lt;/script&gt;\n",
              "&lt;/html&gt;\n",
              "\" width=100% height=300\n",
              "        frameBorder=0></iframe>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.viz import NotebookProfileVisualizer\n",
        "\n",
        "visualization = NotebookProfileVisualizer()\n",
        "visualization.constraints_report(constraints, cell_height=300)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "hLr0BDo0rsab"
      },
      "source": [
        "# Session 4 (Bonus) - Constraints Auto Generation"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Constraints can be built:\n",
        "1. From domain knowledge\n",
        "2. Based on a Reference Dataset\n",
        "\n",
        "Until now, we have demonstrated how to build constraints based on the user's experience and knowledge about the data. Another way to get us started is by automatically generating a set of constraints based on a __Reference Profile__. This is useful when we have a dataset that we know is of good quality, and we want to ensure that future data is similar to it.\n",
        "\n",
        "Let's do it all on one block: We will ask for suggested constraints based on a reference profile with `generate_constraints_from_reference_profile`, and then we will validate those constraints against our target profile. Then, we will visualize our constraints report by calling `constraints_report`:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 771
        },
        "id": "K3y49yZYr4fM",
        "outputId": "e55d3097-06d4-401e-ba9d-0a25cbf35158"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div></div><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
              "&lt;html lang=&quot;en&quot;&gt;\n",
              "  &lt;head&gt;\n",
              "    &lt;meta charset=&quot;UTF-8&quot; /&gt;\n",
              "    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;\n",
              "    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;\n",
              "    &lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;\n",
              "    &lt;meta name=&quot;author&quot; content=&quot;&quot; /&gt;\n",
              "\n",
              "    &lt;title&gt;Profile Visualizer | whylogs&lt;/title&gt;\n",
              "\n",
              "    &lt;link rel=&quot;icon&quot; href=&quot;images/whylabs-favicon.png&quot; type=&quot;image/png&quot; sizes=&quot;16x16&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin /&gt;\n",
              "    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Asap:wght@400;500;600;700&amp;display=swap&quot; rel=&quot;stylesheet&quot; /&gt;\n",
              "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; /&gt;\n",
              "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css&quot; /&gt;\n",
              "\n",
              "    &lt;script\n",
              "      src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.7/handlebars.min.js&quot;\n",
              "      integrity=&quot;sha512-RNLkV3d+aLtfcpEyFG8jRbnWHxUqVZozacROI4J2F1sTaDqo1dPQYs01OMi1t1w9Y2FdbSCDSQ2ZVdAC8bzgAg==&quot;\n",
              "      crossorigin=&quot;anonymous&quot;\n",
              "      referrerpolicy=&quot;no-referrer&quot;\n",
              "    &gt;&lt;/script&gt;\n",
              "\n",
              "    &lt;style type=&quot;text/css&quot;&gt;\n",
              "\n",
              "      /* Screen on smaller screens */\n",
              "      .no-responsive {\n",
              "        display: none;\n",
              "        position: fixed;\n",
              "        top: 0;\n",
              "        left: 0;\n",
              "        z-index: 1031;\n",
              "        width: 100vw;\n",
              "        height: 100vh;\n",
              "        background-color: var(--tealBackground);\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      @media screen and (min-width: 1000px) {\n",
              "        .desktop-content {\n",
              "          display: block;\n",
              "        }\n",
              "        .no-responsive {\n",
              "          display: none;\n",
              "        }\n",
              "      }\n",
              "\n",
              "      .no-responsive__content {\n",
              "        max-width: 600px;\n",
              "        width: 100%;\n",
              "        padding: 0 24px;\n",
              "      }\n",
              "\n",
              "      .no-responsive__title {\n",
              "        font-size: 96px;\n",
              "        font-weight: 300;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.167;\n",
              "      }\n",
              "\n",
              "      .no-responsive__text {\n",
              "        margin: 0;\n",
              "        font-size: 16px;\n",
              "        font-weight: 400;\n",
              "        color: var(--brandSecondary900);\n",
              "        line-height: 1.5;\n",
              "      }\n",
              "\n",
              "      .header-title {\n",
              "        font-size: 26px;\n",
              "        font-weight: 700;\n",
              "        color: #444444;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number {\n",
              "        position: relative;\n",
              "        display: inline-block;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number .tooltiptext {\n",
              "        visibility: hidden;\n",
              "        background: black;\n",
              "        color: white;\n",
              "        border: 1px solid black;\n",
              "        text-align: start;\n",
              "        padding: 3px;\n",
              "        position: absolute;\n",
              "        z-index: 1;\n",
              "        top: 0;\n",
              "        left: 100%;\n",
              "        margin-left: 5px;\n",
              "        opacity: 0;\n",
              "        transition: opacity 0.5s;\n",
              "        font-size: 13px;\n",
              "        font-weight: normal;\n",
              "        line-height: 100%;\n",
              "      }\n",
              "\n",
              "      .tooltip-full-number:hover .tooltiptext {\n",
              "        visibility: visible;\n",
              "        opacity: 1;\n",
              "      }\n",
              "\n",
              "\n",
              "      .wl-compare-profile {\n",
              "        position: relative;\n",
              "        left: 0;\n",
              "        padding: 30px;\n",
              "        margin-bottom: 20px;\n",
              "        background: var(--white);;\n",
              "        border-bottom: 1px solid #CED4DA;\n",
              "      }\n",
              "\n",
              "      .alert-list {\n",
              "        padding: 30px;\n",
              "        padding-top: 0;\n",
              "      }\n",
              "\n",
              "    .drift-detection {\n",
              "       justify-content: space-between;\n",
              "       align-items: center;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-circle {\n",
              "       width: 15px;\n",
              "       height: 15px;\n",
              "       border-radius: 50px;\n",
              "       display: inline-block;\n",
              "       margin-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item {\n",
              "         padding-right: 20px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-title {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 22px;\n",
              "       line-height: 130%;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-count {\n",
              "       font-family: Arial;\n",
              "       font-weight: bold;\n",
              "       font-size: 14px;\n",
              "       line-height: 16px;\n",
              "       color: #000000;\n",
              "       padding-right: 8px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-info-drifts-item-name {\n",
              "       font-family: Arial;\n",
              "       font-style: normal;\n",
              "       font-weight: normal;\n",
              "       font-size: 12px;\n",
              "       line-height: 14px;\n",
              "       color: #000000;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input {\n",
              "       display: flex;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 170px;\n",
              "       padding-left: 10px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input img{\n",
              "       margin-right: 5px;\n",
              "     }\n",
              "\n",
              "     .drift-detection-search-input input::placeholder {\n",
              "       font-family: Arial;\n",
              "       font-weight: normal;\n",
              "       font-size: 13px;\n",
              "       line-height: 16px;\n",
              "       color: #313B3D;\n",
              "     }\n",
              "\n",
              "     .dropdown-container {\n",
              "       position: absolute;\n",
              "       right: 30px;\n",
              "       top: 80px;\n",
              "       z-index: 999;\n",
              "       background: #FFFFFF;\n",
              "       border: 1px solid #DBE5E7;\n",
              "       box-sizing: border-box;\n",
              "       box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.05);\n",
              "       border-radius: 4px;\n",
              "       padding: 10px !important;\n",
              "       border: none !important;\n",
              "     }\n",
              "\n",
              "     .filter-options-title {\n",
              "       width: 240px;\n",
              "     }\n",
              "\n",
              "     .filter-options-title p {\n",
              "       margin: 0;\n",
              "     }\n",
              "\n",
              "     .form-check-input:checked {\n",
              "       background-color: #0E7384;\n",
              "       border-color: #0E7384;\n",
              "     }\n",
              "\n",
              "     .form-check-input[type=checkbox] {\n",
              "       border-radius: 2px;\n",
              "     }\n",
              "\n",
              "     .search-input{\n",
              "       padding-top: 0 !important;\n",
              "       padding-bottom: 0 !important;\n",
              "     }\n",
              "\n",
              "     .search-input input{\n",
              "       border: none;\n",
              "       background: none;\n",
              "       outline: none;\n",
              "       height: 40px;\n",
              "       width: 100%;\n",
              "       font-size: 14px;\n",
              "     }\n",
              "\n",
              "     .search-input img{\n",
              "       height: 19px;\n",
              "       pointer-events: none;\n",
              "     }\n",
              "\n",
              "     input::placeholder {\n",
              "       color: var(--secondaryLight1000);\n",
              "     }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "     .close-filter-button {\n",
              "       display: flex;\n",
              "       justify-content: center;\n",
              "       align-items: center;\n",
              "       background: rgba(255, 255, 255, 0.7);\n",
              "       border: 1px solid #369BAC;\n",
              "       box-sizing: border-box;\n",
              "       border-radius: 4px;\n",
              "       width: 40px;\n",
              "       height: 40px;\n",
              "       cursor: pointer;\n",
              "       margin-left: 10px;\n",
              "     }\n",
              "\n",
              "      .statistic-number-title {\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 20px;\n",
              "        color: #6C757D;\n",
              "      }\n",
              "\n",
              "      .statistic-number {\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 20px;\n",
              "        line-height: 140%;\n",
              "        display: flex;\n",
              "        align-items: center;\n",
              "        color: #4F595B;\n",
              "      }\n",
              "\n",
              "      .full-summary-statistics-wrap {\n",
              "        padding: 20px;\n",
              "      }\n",
              "\n",
              "      .statistics {\n",
              "        width: 100%;\n",
              "      }\n",
              "\n",
              "      .statistics-list {\n",
              "        width: 100% ;\n",
              "      }\n",
              "\n",
              "      mark {\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: normal;\n",
              "        font-size: 14px;\n",
              "        line-height: 140%;\n",
              "      }\n",
              "\n",
              "      .blue-mark {\n",
              "        background-color:  #369BAC1A;\n",
              "        color: #369BAC;\n",
              "      }\n",
              "\n",
              "      .red-mark {\n",
              "        background-color: #FFEFEE;\n",
              "        color: #F5473C;\n",
              "      }\n",
              "\n",
              "      .alert-tag {\n",
              "        height: 27px;\n",
              "        padding: 5px;\n",
              "        border-radius: 4px;\n",
              "        font-family: Arial;\n",
              "        font-weight: bold;\n",
              "        font-size: 12px;\n",
              "        line-height: 140%;\n",
              "        color: #FFFFFF;\n",
              "      }\n",
              "\n",
              "      .turquoise-background-color {\n",
              "        background-color: #1DBB42;\n",
              "      }\n",
              "\n",
              "      .bordeaux-background-color {\n",
              "        background-color: #C6462A;\n",
              "      }\n",
              "\n",
              "      .border-solid-gray {\n",
              "        border: 1px solid #CED4DA;\n",
              "        border-radius: 4px;\n",
              "      }\n",
              "\n",
              "      .display-flex {\n",
              "        display: flex;\n",
              "      }\n",
              "\n",
              "      .justify-content-space-between {\n",
              "        justify-content: space-between;\n",
              "      }\n",
              "\n",
              "      .justify-content-center {\n",
              "        justify-content: center;\n",
              "      }\n",
              "\n",
              "      .align-items-center {\n",
              "        align-items: center;\n",
              "      }\n",
              "\n",
              "      .align-items-flex-start {\n",
              "        align-items: flex-start;\n",
              "      }\n",
              "\n",
              "      .padding-right-30 {\n",
              "        padding-right: 30px;\n",
              "      }\n",
              "\n",
              "      .notif-circle-container{\n",
              "        position: absolute;\n",
              "        top: 25px;\n",
              "        right: 25px;\n",
              "        padding: 5.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: white;\n",
              "        cursor: pointer;\n",
              "      }\n",
              "\n",
              "      .notif-circle {\n",
              "        position: absolute;\n",
              "        top: 2px;\n",
              "        right: 2px;\n",
              "        padding: 3.3px;\n",
              "        border-radius: 50%;\n",
              "        background-color: #F2994A;\n",
              "      }\n",
              "\n",
              "      .alert-list-text {\n",
              "        width: 70%\n",
              "      }\n",
              "\n",
              "     @media screen and (min-width: 500px) {\n",
              "       .desktop-content {\n",
              "         display: block;\n",
              "       }\n",
              "       .no-responsive {\n",
              "         display: none;\n",
              "       }\n",
              "     }\n",
              "    &lt;/style&gt;\n",
              "  &lt;/head&gt;\n",
              "\n",
              "  &lt;body id=&quot;generated-html&quot;&gt;&lt;/body&gt;\n",
              "\n",
              "  &lt;script id=&quot;entry-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;\n",
              "    \n",
              "      &lt;div class=&quot;desktop-content&quot;&gt;\n",
              "        &lt;div class=&quot;full-summary-statistics-wrap&quot;&gt;\n",
              "          &lt;div class=&quot;full-summary-statistics&quot;&gt;\n",
              "            &lt;div&gt;\n",
              "              &lt;div class=&quot;display-flex justify-content-center&quot;&gt;\n",
              "                &lt;div class=&quot;statistics-list border-solid-gray&quot;&gt;\n",
              "                  &lt;div&gt;\n",
              "                    &lt;div class=&quot;wl-compare-profile&quot; id=&quot;compare-profile&quot;&gt;\n",
              "                        &lt;div class=&quot;drift-detection-wrap&quot;&gt;\n",
              "                          &lt;div class=&quot;drift-detection display-flex align-items-flex-start&quot;&gt;\n",
              "                            &lt;div class=&quot;drift-detection-info flex-direction-colum&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-info-title-wrap display-flex&quot;&gt;\n",
              "                                &lt;p class=&quot;drift-detection-info-title&quot;&gt;\n",
              "                                  Constraints Report\n",
              "                                &lt;/p&gt;\n",
              "                              &lt;/div&gt;\n",
              "\n",
              "                              &lt;!-- &lt;/div&gt; --&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;drift-detection-search-input-wrap display-flex&quot;&gt;\n",
              "                              &lt;div class=&quot;drift-detection-search-input search-input&quot;&gt;\n",
              "                                &lt;input type=&quot;text&quot; id=&quot;wl__feature-search&quot; placeholder=&quot;Quick search...&quot;/&gt;\n",
              "                                &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGdSURBVHgBpZK7TkJBEIZnZoVocdTYyQNALxpNKPQBMEaNJsbCRMKhl8ISWwt6AaksCF5iTHgAGhJD4AHkAaAzGiwUsjvOQnO4SYh/cXbPzO43OxcEj9Zy92EiFSXNIfvPyE1kKFfdoxJMENpP6DrvLC0vJoEwCgwto7DWcxoIIHBYbA3NmKwnDltjAeuZhyul1DaTTlfPB6Nt5Z53DOgky4P875+nlctY2+unjZviLklkJhi5bPUa3y/7qJuQUM7PinMy7CdQc1Gh16vnBxPzrMROmlKQEgKNASAHLQCmSIGpS75O+O5pdQAgVXaIqTkNwDDXHmcnW3VmHZoGMLoTsOt88+NrAMCIZdu+iLTyTwKRa1Md6YKfOgXbzO7K8sWku5u5RxcRV5EpPezrzcHGbXEXWaUkgkweZ/UC9YrK3zqggFw5FBZfm8EUavHj7AjAKpIvBDrGn+pNnlcyhYgqbcC41idr1gvB4SdZkDbzQa21gwv0Vj07aPTtL07XdDOyDXohCDNoHIRmAVRie20f+RKybRDQDvxHkXy/7b/DrayncLbMwQAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                              &lt;/div&gt;\n",
              "                              &lt;div class=&quot;wl__dropdown_arrow-icon&quot;&gt;\n",
              "                                &lt;div onclick=&quot;openFilter()&quot; class=&quot;close-filter-button&quot;&gt;\n",
              "                                &lt;div class=&quot;display-flex close-filter-icon d-none&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADFSURBVHgBfY+xDcIwEEXvnLQBZQkYAEhDwwKpEEK0CCZgAEjJCEmgjYSAygxAHTZgFRSOsyUjY5mcZFnn/+78PwBXf3+MoKWUPuYjVBPFnTwpr9t/oNJfcTfXsAhRAlDqDhhQIPYgpAqNMDqcUqSAYZT1epr9gAHt6uXshvYme4DYHQJNDKh0dD0m5WXB10Y3Fqjtuh7fROn3oREDWxfeMLyRsMnc0OgDzdduaA0Pi3Plgr7Q2kaAePeBqh6rueSNBVt6fgCwBV1JLF3rlAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;div class=&quot;display-flex filter-icon&quot;&gt;\n",
              "                                  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACSSURBVHgBrZLBCYAwDEWTUjw7igcdwI1cxkNXUJzBEVzFAbSVKoKmaVrEB6GHJv/w+AACtRk7P9IONv1QOYUl96k0zv61m2tjARoLtSDI3EFsgIJ4uoXrMLazO72CRG2mzg/8BSdVlEjhpGZJjAWdAZJECpWalEhJSs1pHuUlMad5FFai1Lwg4Ckx1TxKIPFL8w55mEWd8VjPGAAAAABJRU5ErkJggg==&quot;/&gt;\n",
              "                                &lt;/div&gt;\n",
              "                                &lt;/div&gt;\n",
              "                              &lt;span class=&quot;notif-circle-container&quot;&gt;\n",
              "                                &lt;span class=&quot;notif-circle&quot;&gt;&lt;/span&gt;\n",
              "                              &lt;/span&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                        &lt;div class=&quot;dropdown-container flex-direction-colum mb-2 d-none&quot; id=&quot;dropdown-container&quot;&gt;\n",
              "                          &lt;div class=&quot;filter-options&quot;&gt;\n",
              "                            &lt;div class=&quot;filter-options-title space-between dropdown&quot;&gt;\n",
              "                              &lt;p&gt;Select a view:&lt;/p&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1 mt-2&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Discrete&quot;\n",
              "                                id=&quot;inferredDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredDiscrete&quot;&gt;\n",
              "                                Failed constraints (&lt;span class=&quot;wl__feature-count--discrete&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Non-discrete&quot;\n",
              "                                id=&quot;inferredNonDiscrete&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredNonDiscrete&quot;&gt;\n",
              "                                Passed constraints (&lt;span\n",
              "                                  class=&quot;wl__feature-count--non-discrete&quot;\n",
              "                                &gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                            &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
              "                              &lt;input\n",
              "                                class=&quot;form-check-input wl__feature-filter-input&quot;\n",
              "                                type=&quot;checkbox&quot;\n",
              "                                name=&quot;checkbox&quot;\n",
              "                                value=&quot;Unknown&quot;\n",
              "                                id=&quot;inferredUnknown&quot;\n",
              "                                checked\n",
              "                              /&gt;\n",
              "                              &lt;label class=&quot;form-check-label&quot; for=&quot;inferredUnknown&quot;&gt;\n",
              "                                All constraints (&lt;span class=&quot;wl__feature-count--unknown&quot;&gt;&lt;/span&gt;)\n",
              "                              &lt;/label&gt;\n",
              "                            &lt;/div&gt;\n",
              "                          &lt;/div&gt;\n",
              "                        &lt;/div&gt;\n",
              "                      &lt;/div&gt;\n",
              "                    &lt;div class=&quot;alert-list&quot; id=&quot;alert-list&quot;&gt;\n",
              "                      {{{alertLIst this}}}\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;\n",
              "                &lt;/div&gt;\n",
              "              &lt;/div&gt;\n",
              "            &lt;/div&gt;\n",
              "          &lt;/div&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "      &lt;div class=&quot;no-responsive&quot;&gt;\n",
              "        &lt;div class=&quot;no-responsive__content&quot;&gt;\n",
              "          &lt;h1 class=&quot;no-responsive__title&quot;&gt;Hold on! :)&lt;/h1&gt;\n",
              "          &lt;p class=&quot;no-responsive__text&quot;&gt;\n",
              "            It looks like your current screen size or device is not yet supported by the WhyLabs Sandbox. The Sandbox is\n",
              "            best experienced on a desktop computer. Please try maximizing this window or switching to another device. We\n",
              "            are working on adding support for a larger variety of devices.\n",
              "          &lt;/p&gt;\n",
              "        &lt;/div&gt;\n",
              "      &lt;/div&gt;\n",
              "    \n",
              "  &lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.min.js&quot; integrity=&quot;sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js&quot; integrity=&quot;sha512-cd6CHE+XWDQ33ElJqsi0MdNte3S+bQY819f7p3NUHgwQQLXSKjE4cPZTeGNI+vaxZynk1wVU3hoHmow3m089wA==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/script&gt;\n",
              "\n",
              "  &lt;script&gt;\n",
              "    function registerHandlebarHelperFunctions() {\n",
              "      //helper fun\n",
              "      function formatLabelDate(timestamp) {\n",
              "        const date = new Date(timestamp);\n",
              "        const format = d3.timeFormat(&quot;%Y-%m-%d %I:%M:%S %p %Z&quot;);\n",
              "        return format(date);\n",
              "      }\n",
              "\n",
              "      function fixNumberTo(number, decimals = 3) {\n",
              "        return parseFloat(number).toFixed(decimals);\n",
              "      }\n",
              "\n",
              "      const randomNumbers = (range) =&gt; Math.floor(Math.random() * range)\n",
              "\n",
              "      const findFetureWithNumberSummary = (column) =&gt; {\n",
              "        const fetureIndex = Object.values(column.columns)\n",
              "              .findIndex((feture) =&gt; feture.numberSummary)\n",
              "\n",
              "        return Object.keys(column.columns)[fetureIndex]\n",
              "      }\n",
              "\n",
              "      const alertListItemStatus = (status, passedItem, failedItem) =&gt; {\n",
              "        if (status) {\n",
              "          return passedItem\n",
              "        } else {\n",
              "          return failedItem\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const alertListElement = (name, text, status, summary) =&gt; {\n",
              "        if (summary == null){\n",
              "          return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed&lt;/div&gt;\n",
              "                  `\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed&lt;/div&gt;\n",
              "                  `\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "\n",
              "        }\n",
              "        return (\n",
              "          `&lt;div\n",
              "             data-inferred-type=${alertListItemStatus(status, &quot;passed&quot;, &quot;failed&quot;)}\n",
              "             class=&quot;alert-list-item display-flex justify-content-space-between align-items-center mb-2&quot;\n",
              "           &gt;\n",
              "            &lt;div class=&quot;alert-list-text&quot;&gt;\n",
              "              ${\n",
              "                name &amp;&amp;\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `&lt;mark class=&quot;blue-mark&quot;&gt;${name}&lt;/mark&gt;`,\n",
              "                  `&lt;mark class=&quot;red-mark&quot;&gt;${name}&lt;/mark&gt;`\n",
              "                )\n",
              "              }\n",
              "              ${text}\n",
              "            &lt;/div&gt;\n",
              "              ${\n",
              "                alertListItemStatus(\n",
              "                  status,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;turquoise-background-color alert-tag&quot;&gt;Passed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                          &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "\n",
              "                  ,\n",
              "                  `\n",
              "                  &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
              "                    &lt;div class=&quot;bordeaux-background-color alert-tag&quot;&gt;Failed\n",
              "                      &lt;span class=&quot;tooltiptext&quot;&gt;\n",
              "                        &lt;pre class=&quot;mb-1&quot;&gt; ${JSON.stringify(summary, null, 2)} &lt;/pre&gt;\n",
              "                        &lt;/span&gt;\n",
              "                    &lt;/div&gt;\n",
              "                  &lt;/div&gt;`\n",
              "                )\n",
              "              }\n",
              "              &lt;/div&gt;`\n",
              "        )\n",
              "      }\n",
              "\n",
              "      let failedConstraints = 0;\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileTimeStamp&quot;, function (column) {\n",
              "        return formatLabelDate(+column.properties.dataTimestamp)\n",
              "      });\n",
              "\n",
              "      Handlebars.registerHelper(&quot;getProfileName&quot;, function (column) {\n",
              "        return column.properties.tags.name\n",
              "      });\n",
              "\n",
              "\n",
              "      Handlebars.registerHelper(&quot;alertLIst&quot;, function (column) {\n",
              "        let alertListItem = column.map((value) =&gt; {\n",
              "          if (value[1][0]) {\n",
              "            let alertListValue = value[1].map((cstr)=&gt;{\n",
              "              return alertListElement(value[0],cstr[0],cstr[cstr.length - 1] === 0 || (failedConstraints++, false), value[3])\n",
              "            })\n",
              "            return alertListValue.join(&#x27; &#x27;)\n",
              "          } else {\n",
              "            return alertListElement(&#x27;&#x27;, value[0], value[2] === 0 ||  (failedConstraints++, false), value[3])\n",
              "          }\n",
              "        })\n",
              "         $(document).ready(() =&gt; {\n",
              "           $(&quot;.wl__feature-count--discrete&quot;).append(failedConstraints)\n",
              "           $(&quot;.wl__feature-count--non-discrete&quot;).append(column.length - failedConstraints)\n",
              "           $(&quot;.wl__feature-count--unknown&quot;).append(column.length)\n",
              "         })\n",
              "        return alertListItem.join(&#x27; &#x27;)\n",
              "      });\n",
              "\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function initHandlebarsTemplate() {\n",
              "      // Replace this context with JSON from .py file\n",
              "      const context = [[&quot;name has no missing values&quot;, 0, 1, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 5, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;name allows for types [&#x27;string&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 5417, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;description has no missing values&quot;, 0, 1, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 284, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;description allows for types [&#x27;string&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 5138, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;listing_url has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;listing_url allows for types [&#x27;string&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 5422, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;listing_url meets condition url_matches_airbnb_domain&quot;, 0, 1, {&quot;metric&quot;: &quot;condition_count&quot;, &quot;total&quot;: 5422, &quot;url_matches_airbnb_domain&quot;: 5392}], [&quot;last_review has no missing values&quot;, 0, 1, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 1949, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;last_review allows for types [&#x27;string&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 3473, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;last_review meets condition is_date_format&quot;, 0, 1, {&quot;metric&quot;: &quot;condition_count&quot;, &quot;total&quot;: 3473, &quot;is_date_format&quot;: 3471}], [&quot;number_of_reviews_ltm has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;number_of_reviews_ltm allows for types [&#x27;integral&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 5422, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;number_of_reviews_ltm is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 2.536149022500922, &quot;stddev&quot;: 5.46097514611653, &quot;n&quot;: 5422, &quot;max&quot;: 69.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 0.0, &quot;q_25&quot;: 0.0, &quot;median&quot;: 0.0, &quot;q_75&quot;: 3.0, &quot;q_90&quot;: 8.0, &quot;q_95&quot;: 13.0, &quot;q_99&quot;: 27.0}], [&quot;number_of_reviews_ltm is in range [0.0,118.0]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 2.536149022500922, &quot;stddev&quot;: 5.46097514611653, &quot;n&quot;: 5422, &quot;max&quot;: 69.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 0.0, &quot;q_25&quot;: 0.0, &quot;median&quot;: 0.0, &quot;q_75&quot;: 3.0, &quot;q_90&quot;: 8.0, &quot;q_95&quot;: 13.0, &quot;q_99&quot;: 27.0}], [&quot;number_of_reviews_l30d has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;number_of_reviews_l30d allows for types [&#x27;integral&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 5422, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;number_of_reviews_l30d is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 0.3533751383253412, &quot;stddev&quot;: 0.8962951512473657, &quot;n&quot;: 5422, &quot;max&quot;: 10.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 0.0, &quot;q_25&quot;: 0.0, &quot;median&quot;: 0.0, &quot;q_75&quot;: 0.0, &quot;q_90&quot;: 1.0, &quot;q_95&quot;: 2.0, &quot;q_99&quot;: 4.0}], [&quot;number_of_reviews_l30d values in set {&#x27;1&#x27;, &#x27;11&#x27;, &#x27;10&#x27;, &#x27;14&#x27;, &#x27;12&#x27;, &#x27;2&#x27;, &#x27;9&#x27;, &#x27;4&#x27;, &#x27;6&#x27;, &#x27;29&#x27;, &#x27;7&#x27;, &#x27;0&#x27;, &#x27;5&#x27;, &#x27;8&#x27;, &#x27;3&#x27;}&quot;, 1, 0, {&quot;metric&quot;: &quot;frequent_items&quot;, &quot;frequent_strings_top_10&quot;: [&quot;0:4364&quot;, &quot;1:598&quot;, &quot;2:229&quot;, &quot;3:136&quot;, &quot;4:58&quot;, &quot;5:17&quot;, &quot;6:13&quot;, &quot;7:3&quot;, &quot;9:2&quot;, &quot;10:1&quot;]}], [&quot;id has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;id allows for types [&#x27;integral&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 5422, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;id is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 24213660.595721137, &quot;stddev&quot;: 15313840.037928166, &quot;n&quot;: 5422, &quot;max&quot;: 47882280.0, &quot;min&quot;: 70080.0, &quot;q_01&quot;: 519097.0, &quot;q_05&quot;: 2186329.0, &quot;q_10&quot;: 3028401.0, &quot;q_25&quot;: 12378993.0, &quot;median&quot;: 21812821.0, &quot;q_75&quot;: 40207471.0, &quot;q_90&quot;: 45638058.0, &quot;q_95&quot;: 46830234.0, &quot;q_99&quot;: 47712387.0}], [&quot;latitude has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;latitude allows for types [&#x27;fractional&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5422, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;latitude is in range [-23.07292,-22.74982]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -22.964742460346738, &quot;stddev&quot;: 0.03434137097559033, &quot;n&quot;: 5422, &quot;max&quot;: -22.75061, &quot;min&quot;: -23.07148, &quot;q_01&quot;: -23.02754, &quot;q_05&quot;: -23.01206, &quot;q_10&quot;: -23.0058, &quot;q_25&quot;: -22.98427, &quot;median&quot;: -22.97043, &quot;q_75&quot;: -22.94078, &quot;q_90&quot;: -22.91827, &quot;q_95&quot;: -22.91062, &quot;q_99&quot;: -22.84452}], [&quot;longitude has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;longitude allows for types [&#x27;fractional&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5422, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;longitude is in range [-43.70479,-43.10544]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: -43.24698487089635, &quot;stddev&quot;: 0.09482828226695596, &quot;n&quot;: 5422, &quot;max&quot;: -43.10575, &quot;min&quot;: -43.69322, &quot;q_01&quot;: -43.51285, &quot;q_05&quot;: -43.45489, &quot;q_10&quot;: -43.39877, &quot;q_25&quot;: -43.29863, &quot;median&quot;: -43.19553, &quot;q_75&quot;: -43.18674, &quot;q_90&quot;: -43.17744, &quot;q_95&quot;: -43.17485, &quot;q_99&quot;: -43.1694}], [&quot;availability_365 has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;availability_365 allows for types [&#x27;integral&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 5422, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;availability_365 is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 221.00036886757653, &quot;stddev&quot;: 141.35219390801402, &quot;n&quot;: 5422, &quot;max&quot;: 365.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 87.0, &quot;median&quot;: 269.0, &quot;q_75&quot;: 363.0, &quot;q_90&quot;: 365.0, &quot;q_95&quot;: 365.0, &quot;q_99&quot;: 365.0}], [&quot;availability_365 is in range [0.0,365.0]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 221.00036886757653, &quot;stddev&quot;: 141.35219390801402, &quot;n&quot;: 5422, &quot;max&quot;: 365.0, &quot;min&quot;: 0.0, &quot;q_01&quot;: 0.0, &quot;q_05&quot;: 0.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 87.0, &quot;median&quot;: 269.0, &quot;q_75&quot;: 363.0, &quot;q_90&quot;: 365.0, &quot;q_95&quot;: 365.0, &quot;q_99&quot;: 365.0}], [&quot;bedrooms has no missing values&quot;, 0, 1, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 361, &quot;nan&quot;: 361, &quot;inf&quot;: 0}], [&quot;bedrooms allows for types [&#x27;integral&#x27;]&quot;, 0, 1, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5061, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;bedrooms is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 1.6868207864058486, &quot;stddev&quot;: 1.0116525581979967, &quot;n&quot;: 5061, &quot;max&quot;: 15.0, &quot;min&quot;: 1.0, &quot;q_01&quot;: 1.0, &quot;q_05&quot;: 1.0, &quot;q_10&quot;: 1.0, &quot;q_25&quot;: 1.0, &quot;median&quot;: 1.0, &quot;q_75&quot;: 2.0, &quot;q_90&quot;: 3.0, &quot;q_95&quot;: 3.0, &quot;q_99&quot;: 5.0}], [&quot;reviews_per_month has no missing values&quot;, 0, 1, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 1949, &quot;nan&quot;: 1949, &quot;inf&quot;: 0}], [&quot;reviews_per_month allows for types [&#x27;fractional&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 3473, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;reviews_per_month is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 0.6111431039447164, &quot;stddev&quot;: 0.8320150990004157, &quot;n&quot;: 3473, &quot;max&quot;: 10.29, &quot;min&quot;: 0.01, &quot;q_01&quot;: 0.02, &quot;q_05&quot;: 0.03, &quot;q_10&quot;: 0.05, &quot;q_25&quot;: 0.09, &quot;median&quot;: 0.23, &quot;q_75&quot;: 0.87, &quot;q_90&quot;: 1.68, &quot;q_95&quot;: 2.38, &quot;q_99&quot;: 3.66}], [&quot;reviews_per_month is in range [0.01,25.0]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 0.6111431039447164, &quot;stddev&quot;: 0.8320150990004157, &quot;n&quot;: 3473, &quot;max&quot;: 10.29, &quot;min&quot;: 0.01, &quot;q_01&quot;: 0.02, &quot;q_05&quot;: 0.03, &quot;q_10&quot;: 0.05, &quot;q_25&quot;: 0.09, &quot;median&quot;: 0.23, &quot;q_75&quot;: 0.87, &quot;q_90&quot;: 1.68, &quot;q_95&quot;: 2.38, &quot;q_99&quot;: 3.66}], [&quot;room_type has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;room_type allows for types [&#x27;string&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 0, &quot;boolean&quot;: 0, &quot;string&quot;: 5422, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;room_type values in set {&#x27;Entire home/apt&#x27;, &#x27;Hotel room&#x27;, &#x27;Shared room&#x27;, &#x27;Private room&#x27;}&quot;, 1, 0, {&quot;metric&quot;: &quot;frequent_items&quot;, &quot;frequent_strings_top_10&quot;: [&quot;Entire home/apt:3787&quot;, &quot;Private room:1500&quot;, &quot;Shared room:114&quot;, &quot;Hotel room:21&quot;]}], [&quot;price has no missing values&quot;, 1, 0, {&quot;metric&quot;: &quot;counts&quot;, &quot;n&quot;: 5422, &quot;null&quot;: 0, &quot;nan&quot;: 0, &quot;inf&quot;: 0}], [&quot;price allows for types [&#x27;fractional&#x27;]&quot;, 1, 0, {&quot;metric&quot;: &quot;types&quot;, &quot;integral&quot;: 0, &quot;fractional&quot;: 5422, &quot;boolean&quot;: 0, &quot;string&quot;: 0, &quot;object&quot;: 0, &quot;tensor&quot;: 0}], [&quot;price is non negative&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 619.9743637034304, &quot;stddev&quot;: 2202.9701745617413, &quot;n&quot;: 5422, &quot;max&quot;: 126233.0, &quot;min&quot;: 35.0, &quot;q_01&quot;: 54.0, &quot;q_05&quot;: 80.0, &quot;q_10&quot;: 100.0, &quot;q_25&quot;: 150.0, &quot;median&quot;: 271.0, &quot;q_75&quot;: 589.0, &quot;q_90&quot;: 1200.0, &quot;q_95&quot;: 1897.0, &quot;q_99&quot;: 5467.0}], [&quot;price is in range [33.0,129080.0]&quot;, 1, 0, {&quot;metric&quot;: &quot;distribution&quot;, &quot;mean&quot;: 619.9743637034304, &quot;stddev&quot;: 2202.9701745617413, &quot;n&quot;: 5422, &quot;max&quot;: 126233.0, &quot;min&quot;: 35.0, &quot;q_01&quot;: 54.0, &quot;q_05&quot;: 80.0, &quot;q_10&quot;: 100.0, &quot;q_25&quot;: 150.0, &quot;median&quot;: 271.0, &quot;q_75&quot;: 589.0, &quot;q_90&quot;: 1200.0, &quot;q_95&quot;: 1897.0, &quot;q_99&quot;: 5467.0}], [&quot;name is probably unique&quot;, 0, 1, {&quot;name/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;name/cardinality/est&quot;: 5179.142453705238, &quot;name/cardinality/upper_1&quot;: 5246.934590598049, &quot;name/cardinality/lower_1&quot;: 5112.999399879549, &quot;name/counts/metric&quot;: &quot;counts&quot;, &quot;name/counts/n&quot;: 5422, &quot;name/counts/null&quot;: 5, &quot;name/counts/nan&quot;: 0, &quot;name/counts/inf&quot;: 0}], [&quot;description is probably unique&quot;, 0, 1, {&quot;description/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;description/cardinality/est&quot;: 4945.15782448741, &quot;description/cardinality/upper_1&quot;: 5009.887230791801, &quot;description/cardinality/lower_1&quot;: 4882.002998551391, &quot;description/counts/metric&quot;: &quot;counts&quot;, &quot;description/counts/n&quot;: 5422, &quot;description/counts/null&quot;: 284, &quot;description/counts/nan&quot;: 0, &quot;description/counts/inf&quot;: 0}], [&quot;listing_url is probably unique&quot;, 0, 1, {&quot;listing_url/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;listing_url/cardinality/est&quot;: 5133.877481609754, &quot;listing_url/cardinality/upper_1&quot;: 5201.077124820034, &quot;listing_url/cardinality/lower_1&quot;: 5068.312508713966, &quot;listing_url/counts/metric&quot;: &quot;counts&quot;, &quot;listing_url/counts/n&quot;: 5422, &quot;listing_url/counts/null&quot;: 0, &quot;listing_url/counts/nan&quot;: 0, &quot;listing_url/counts/inf&quot;: 0}], [&quot;id is probably unique&quot;, 0, 1, {&quot;id/cardinality/metric&quot;: &quot;cardinality&quot;, &quot;id/cardinality/est&quot;: 5247.937651967344, &quot;id/cardinality/upper_1&quot;: 5316.630280310205, &quot;id/cardinality/lower_1&quot;: 5180.916011668648, &quot;id/counts/metric&quot;: &quot;counts&quot;, &quot;id/counts/n&quot;: 5422, &quot;id/counts/null&quot;: 0, &quot;id/counts/nan&quot;: 0, &quot;id/counts/inf&quot;: 0}]];\n",
              "      // Config handlebars and pass data to HBS template\n",
              "      const source = document.getElementById(&quot;entry-template&quot;).innerHTML;\n",
              "      const template = Handlebars.compile(source);\n",
              "      const html = template(context);\n",
              "      const target = document.getElementById(&quot;generated-html&quot;);\n",
              "      target.innerHTML = html;\n",
              "    }\n",
              "\n",
              "    function initWebsiteScripts() {\n",
              "      const $featureSearch = document.getElementById(&quot;wl__feature-search&quot;);\n",
              "      const $alertList = document.getElementById(&quot;alert-list&quot;);\n",
              "      const $discrete = document.getElementById(&quot;inferredDiscrete&quot;);\n",
              "      const $nonDiscrete = document.getElementById(&quot;inferredNonDiscrete&quot;);\n",
              "      const $unknown = document.getElementById(&quot;inferredUnknown&quot;);\n",
              "\n",
              "      const activeTypes = {\n",
              "        passed: true,\n",
              "        failed: true\n",
              "      };\n",
              "\n",
              "      let searchString = &quot;&quot;;\n",
              "\n",
              "      function debounce(func, wait, immediate) {\n",
              "        let timeout;\n",
              "\n",
              "        return function () {\n",
              "          const context = this;\n",
              "          const args = arguments;\n",
              "          const later = function () {\n",
              "            timeout = null;\n",
              "            if (!immediate) func.apply(context, args);\n",
              "          };\n",
              "\n",
              "          const callNow = immediate &amp;&amp; !timeout;\n",
              "          clearTimeout(timeout);\n",
              "          timeout = setTimeout(later, wait);\n",
              "          if (callNow) func.apply(context, args);\n",
              "        };\n",
              "      }\n",
              "\n",
              "      function filterNotification() {\n",
              "        const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "        const $boxes = $(&#x27;.wl_filter-options&gt;.form-check&gt;input[name=checkbox]:checked&#x27;);\n",
              "        const item = Object.values($boxes).find(function(value) { return $(value)[0] === undefined});\n",
              "        if (item === undefined) {\n",
              "          $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "        } else {\n",
              "          $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        }\n",
              "      }\n",
              "\n",
              "      function handleSearch() {\n",
              "        const tableBodyChildren = $alertList.children;\n",
              "\n",
              "        for (let i = 0; i &lt; tableBodyChildren.length; i++) {\n",
              "          const type = tableBodyChildren[i].dataset.inferredType.toLowerCase();\n",
              "          const name = $(tableBodyChildren[i].children[0]).html().toLowerCase();\n",
              "          if (activeTypes[type] &amp;&amp; name.includes(searchString)) {\n",
              "            tableBodyChildren[i].style.display = &quot;&quot;;\n",
              "          } else {\n",
              "            tableBodyChildren[i].style.display = &quot;none&quot;;\n",
              "          }\n",
              "        }\n",
              "      }\n",
              "\n",
              "      const checkedBoxes = () =&gt; {\n",
              "        if ($(&#x27;.form-check-input:checked&#x27;).length === $(&quot;.form-check-input&quot;).length - 1) {\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, true );\n",
              "        }\n",
              "      }\n",
              "\n",
              "      $featureSearch.addEventListener(\n",
              "        &quot;keyup&quot;,\n",
              "        debounce((event) =&gt; {\n",
              "          searchString = event.target.value.toLowerCase();\n",
              "          handleSearch();\n",
              "        }, 100),\n",
              "      );\n",
              "\n",
              "      $discrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $nonDiscrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          $($(&quot;.form-check-input&quot;)[$(&quot;.form-check-input&quot;).length - 1]).prop( &quot;checked&quot;, false );\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "\n",
              "      $unknown.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
              "        const currentCheckbox = $(event.currentTarget);\n",
              "\n",
              "        if (event.currentTarget.checked) {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, true );\n",
              "          activeTypes[&quot;passed&quot;] = true;\n",
              "          activeTypes[&quot;failed&quot;] = true;\n",
              "          checkedBoxes();\n",
              "        } else {\n",
              "          $(&quot;.form-check-input&quot;).prop( &quot;checked&quot;, false );\n",
              "          activeTypes[&quot;passed&quot;] = false;\n",
              "          activeTypes[&quot;failed&quot;] = false;\n",
              "        }\n",
              "        handleSearch();\n",
              "      });\n",
              "    }\n",
              "\n",
              "    function checkedBoxes() {\n",
              "      const $boxes = $(&#x27;input[name=checkbox]:checked&#x27;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "\n",
              "      if ($boxes.length) {\n",
              "        $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
              "      }\n",
              "    }\n",
              "\n",
              "    function openFilter() {\n",
              "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
              "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
              "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
              "\n",
              "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
              "        $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
              "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
              "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "      } else {\n",
              "        $filterOptions.addClass(&quot;d-none&quot;);\n",
              "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
              "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
              "        checkedBoxes()\n",
              "      }\n",
              "    }\n",
              "\n",
              "    // Invoke functions -- keep in mind invokation order\n",
              "    registerHandlebarHelperFunctions();\n",
              "    initHandlebarsTemplate();\n",
              "    initWebsiteScripts();\n",
              "  &lt;/script&gt;\n",
              "&lt;/html&gt;\n",
              "\" width=100% height=750px\n",
              "        frameBorder=0></iframe>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "execution_count": 21,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from whylogs.experimental.constraints_generation import (\n",
        "    generate_constraints_from_reference_profile,\n",
        ")\n",
        "from whylogs.core.constraints import ConstraintsBuilder\n",
        "import whylogs as why\n",
        "\n",
        "target_profile = why.log(df_target, schema=schema).view()\n",
        "reference_profile = why.log(df_reference, schema=schema).view()\n",
        "\n",
        "suggested_constraints = generate_constraints_from_reference_profile(reference_profile_view=reference_profile)\n",
        "\n",
        "builder = ConstraintsBuilder(dataset_profile_view=target_profile)\n",
        "builder.add_constraints(suggested_constraints)\n",
        "constraints = builder.build()\n",
        "\n",
        "from whylogs.viz import NotebookProfileVisualizer\n",
        "\n",
        "visualization = NotebookProfileVisualizer()\n",
        "visualization.constraints_report(constraints)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "> Note. The constraints generated by `generate_constraints_from_reference_profile` are not guaranteed to be the best constraints for your data. They are just a starting point. You should always review the constraints and adjust them to your needs. The feature is also currently experimental, and we are working on improving it."
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "id": "91K05j54rlvM"
      },
      "source": [
        "## Session 5 - Debugging Failed Conditions\n",
        "\n",
        "With __Condition Validators__, the user is able to evaluate conditions on individual values on real-time scenarios. These checks are done while data is being logged, and can trigger one or multiple actions when these conditions fail to be met. With __Condition Validators__, you are able to define actions where an immediate response is required, such as emiting an alert to key stakeholders, logging specific failures or throwing exceptions. Validators are designed with flexibility in mind, so you are free to customize your actions as well as the conditions that trigger those actions.\n",
        "\n",
        "Unlike metrics, validators will not log properties into profiles. They are meant only to evaluate conditions and trigger actions while logging is under way.\n",
        "\n",
        "Additionally, the validator retain contextual information about the data that failed the conditions. This is done through the process of __Reservoir Sampling__. This means that the validator will retain a sample of the data that failed the conditions, and will be able to provide that information when the user requests it."
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Data Validators"
      ]
    },
    {
      "attachments": {
        "image.png": {
          "image/png": "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3LixLr/8crd3ukKFCunll18+LaC18he4RJcVykvJgFLuuqs17pXhKn3t/+jwsQNeyZv/91T7plYIaAEAAAAAAIDMw3+NAwAAafbZZ59p8+bN+vXX1NekLlq0qEaOHKk77rjDtSAzVaxYUZMmTVJ4eLhXIiIi3BEAAAAAAAAAWQkhLQAA+FOffPKJ/vWvf3nT6a5cudK1Jle4cGF17NhRVatWdS24GOxI5ueee86b6jilzz//3NUAAAAAAAAAXEyEtAAA4IzWrFmjvn376oknntD777/vWuVNd2xD2YCCBQvqrrvu0t///nfXgovNhrXBJk+erMcff1yDBg3SwYMHXSsAAAAAAACAi4GQFgAAnOaDDz5Qr1691L17d61atcq1Sv/zP/+jDh06aObMmWrXrt3JIPCvf/2rnn32Wa+OrGfbtm1eSGstWrTIC2vj4uK8fQAAAAAAAACZj5AWAACctGzZMm9KYztV7ocffuhapTJlyqhr165eOGsDvhIlSnghbWhoqIoUKUJAm8XZtWrtVNQBNrRl6mMAAAAAAADg4iGkBQAgl/v99981f/58/eMf//DC1s8++8wdka6//nr169fPC2cffvjhZFMcWyNGjNCYMWO8fsjabEg7adIkL1gPDw9XRESEOwIAAAAAAAAgsxHSAgCQS/3666+aMWOGWrduraFDh2rTpk3uiHTrrbd6ga093rJlSxUoUMAdSc6GszfddJPbQ1ZXrVo1b7pjO1I6JdapBQAAAAAAADIPIS0AALnMnj179Nprr6lt27YaPXq0duzY4Y5It912m4YMGaKpU6fqvvvuc63ISew6woG1hAPserVNmzZlCmQAAAAAAAAgkxDSAgCQS+zcuVPjxo1TmzZtvGlv4+Li3BGpdu3aGj58uCZMmKDGjRu7VuQGNpi1Ia0dSWvXG7Z1AAAAAAAAABmLkBYAgBxuy5Yteumll7xwdtq0aTpw4IA7IjVo0MALbu26svXq1XOtyE1KliypihUruj1/VG10dLTbAwAAAAAAAJARCGkBAMih7AjJgQMHql27dvrPf/6jY8eOuSPSvffe642m/fe//62aNWu6VuRGpUqV8n4L4eHh3r7d1q1b16sDAAAAAAAAyBiEtAAA5DAfffSR+vXr501du2TJEtdq/qF/ySW6//779b//+78aPHiwqlWr5o4gt7Nr1D733HMa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"
        }
      },
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "![image.png](attachment:image.png)"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "> Note: Actions can also be executed using __Conditions__. In upcoming releases, our goal is to unify all the functionalities introduced in Sessions 4 and 5 within the Conditions framework."
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Defining the Actions\n",
        "\n",
        "The action to be triggered when a contidion fails is created by simply defining a regular function.\n",
        "\n",
        "We should just remember to define the arguments: `validator_name`, `condition_name` and `value`. You can use these values to help with logging and debugging the failures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {},
      "outputs": [],
      "source": [
        "from typing import Any\n",
        "\n",
        "def halt_pipeline(validator_name, condition_name: str, value: Any):\n",
        "    print(\"Validator: {}\\n    Condition name {} failed for value {}\".format(validator_name, condition_name, value))\n",
        "    print(\"    Halting the pipeline....\")\n",
        "    # Do something here to respond to the constraint violation\n",
        "    return\n",
        "\n",
        "def send_slack_alert(validator_name, condition_name: str, value: Any):\n",
        "    print(\"Validator: {}\\n    Condition name {} failed for value {}\".format(validator_name, condition_name, value))\n",
        "    print(\"    Sending slack alert....\")\n",
        "    # Do something here to respond to the constraint violation\n",
        "    return"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "To create a Condition Validator, we need a name, a set of conditions, and a list of actions.\n",
        "\n",
        "Let's make a Validator for the date format validator and another Validator for the url validation. Each validator has a single condition to be evaluated, and also a single action.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {},
      "outputs": [],
      "source": [
        "from whylogs.core.validators import ConditionValidator\n",
        "\n",
        "\n",
        "date_format_validator = ConditionValidator(\n",
        "    name=\"date_format_validation\",\n",
        "    conditions=last_review_conditions,\n",
        "    actions=[send_slack_alert],\n",
        ")\n",
        "\n",
        "url_validator = ConditionValidator(\n",
        "    name=\"domain_regex_validation\",\n",
        "    conditions=listing_url_conditions,\n",
        "    actions=[halt_pipeline],\n",
        ")\n",
        "\n",
        "validators = {\n",
        "    \"last_review\": [date_format_validator],\n",
        "    \"listing_url\": [url_validator]}"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now we're set to log our data. We'll use the same schema as before, but this time we'll pass our validators to the `log` method."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/47105367\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/18893176\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/38630639\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/45593569\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/26165233\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/41730820\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/22596125\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/34617883\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/13883050\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/30469824\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/10837127\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/22389931\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/772144\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/29438607\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/13553340\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/47124997\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/39754322\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/22613087\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/18159534\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/46356406\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/31483051\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/13879708\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/15207920\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/2866008\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/5474840\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/13771053\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/46437836\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/46220190\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/13327744\n",
            "    Halting the pipeline....\n",
            "Validator: domain_regex_validation\n",
            "    Condition name url_matches_airbnb_domain failed for value www.airbnb.com/rooms/7162238\n",
            "    Halting the pipeline....\n",
            "Validator: date_format_validation\n",
            "    Condition name is_date_format failed for value 2020/12/31\n",
            "    Sending slack alert....\n",
            "Validator: date_format_validation\n",
            "    Condition name is_date_format failed for value 27-02-2020\n",
            "    Sending slack alert....\n"
          ]
        }
      ],
      "source": [
        "from whylogs.core.schema import DatasetSchema\n",
        "import whylogs as why\n",
        "\n",
        "schema = DatasetSchema(validators=validators)\n",
        "profile = why.log(df_target, schema=schema).profile()"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "You can see that the validators are being triggered when the conditions fail. The validators will also retain a sample of the data that failed the conditions. We can access that data by calling `get_samples` on the validator.\n",
        "\n",
        "Additionally, if you call `to_summary_dict` on the validator, you'll get a summary of the validator's status, as well as the number of times the conditions were evaluated, and the number of times the conditions failed."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "{'total_evaluations': 5422, 'url_matches_airbnb_domain': 30}\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "['www.airbnb.com/rooms/13327744',\n",
              " 'www.airbnb.com/rooms/45593569',\n",
              " 'www.airbnb.com/rooms/46437836',\n",
              " 'www.airbnb.com/rooms/41730820',\n",
              " 'www.airbnb.com/rooms/22596125',\n",
              " 'www.airbnb.com/rooms/772144',\n",
              " 'www.airbnb.com/rooms/22613087',\n",
              " 'www.airbnb.com/rooms/18893176',\n",
              " 'www.airbnb.com/rooms/10837127',\n",
              " 'www.airbnb.com/rooms/13553340']"
            ]
          },
          "execution_count": 25,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "print(url_validator.to_summary_dict())\n",
        "url_validator.get_samples()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "{'total_evaluations': 5422, 'is_date_format': 2}\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "['2020/12/31', '27-02-2020']"
            ]
          },
          "execution_count": 26,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "print(date_format_validator.to_summary_dict())\n",
        "date_format_validator.get_samples()"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "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.10"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}