
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "auto_examples/01_basic_catalog_usage.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_auto_examples_01_basic_catalog_usage.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_01_basic_catalog_usage.py:


Basic Catalog Usage
===================

This example demonstrates how to create a :class:`~pandera_catalog.PanderaCatalog`,
register Pandera schemas with optional metadata, and then look them up.

.. GENERATED FROM PYTHON SOURCE LINES 10-13

Setup
-----
Import the catalog and pandera.

.. GENERATED FROM PYTHON SOURCE LINES 13-17

.. code-block:: Python


    import pandera.pandas as pa
    from pandera_catalog import PanderaCatalog








.. GENERATED FROM PYTHON SOURCE LINES 18-20

Create a catalog
----------------

.. GENERATED FROM PYTHON SOURCE LINES 20-24

.. code-block:: Python


    catalog = PanderaCatalog()
    print(f"Empty catalog: {catalog}")





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Empty catalog: PanderaCatalog(schemas=[], projections=[])




.. GENERATED FROM PYTHON SOURCE LINES 25-27

Define schemas
--------------

.. GENERATED FROM PYTHON SOURCE LINES 27-46

.. code-block:: Python


    sales_schema = pa.DataFrameSchema(
        columns={
            "date": pa.Column(str, nullable=False),
            "product_id": pa.Column(int, nullable=False),
            "quantity": pa.Column(int, pa.Check.greater_than(0)),
            "revenue": pa.Column(float, pa.Check.greater_than_or_equal_to(0.0)),
        },
        name="sales",
    )

    inventory_schema = pa.DataFrameSchema(
        columns={
            "product_id": pa.Column(int, nullable=False),
            "stock_level": pa.Column(int, pa.Check.greater_than_or_equal_to(0)),
        },
        name="inventory",
    )








.. GENERATED FROM PYTHON SOURCE LINES 47-50

Register schemas
----------------
You can attach an optional description and tags to each entry.

.. GENERATED FROM PYTHON SOURCE LINES 50-66

.. code-block:: Python


    catalog.register(
        "sales",
        sales_schema,
        description="Daily sales transactions",
        tags=["finance", "production"],
    )
    catalog.register(
        "inventory",
        inventory_schema,
        description="Current warehouse stock levels",
        tags=["operations"],
    )

    print(f"Registered schemas: {catalog.list()}")





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Registered schemas: ['inventory', 'sales']




.. GENERATED FROM PYTHON SOURCE LINES 67-69

Look up a schema
----------------

.. GENERATED FROM PYTHON SOURCE LINES 69-73

.. code-block:: Python


    retrieved = catalog.get("sales")
    print(f"Retrieved: {type(retrieved).__name__}")





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Retrieved: DataFrameSchema




.. GENERATED FROM PYTHON SOURCE LINES 74-76

Inspect a full catalog entry
----------------------------

.. GENERATED FROM PYTHON SOURCE LINES 76-82

.. code-block:: Python


    entry = catalog.get_entry("sales")
    print(f"Entry name: {entry.name}")
    print(f"Description: {entry.description}")
    print(f"Tags: {entry.tags}")





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Entry name: sales
    Description: Daily sales transactions
    Tags: ['finance', 'production']




.. GENERATED FROM PYTHON SOURCE LINES 83-86

Validate a DataFrame
--------------------
Once you have the schema you can validate a DataFrame as usual.

.. GENERATED FROM PYTHON SOURCE LINES 86-101

.. code-block:: Python


    import pandas as pd

    df = pd.DataFrame(
        {
            "date": ["2024-01-01", "2024-01-02"],
            "product_id": [1, 2],
            "quantity": [10, 5],
            "revenue": [99.9, 49.5],
        }
    )

    validated_df = catalog.get("sales").validate(df)
    print(validated_df)





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

             date  product_id  quantity  revenue
    0  2024-01-01           1        10     99.9
    1  2024-01-02           2         5     49.5




.. GENERATED FROM PYTHON SOURCE LINES 102-104

Remove a schema
---------------

.. GENERATED FROM PYTHON SOURCE LINES 104-107

.. code-block:: Python


    catalog.remove("inventory")
    print(f"After removal: {catalog.list()}")




.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    After removal: ['sales']





.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 0.059 seconds)


.. _sphx_glr_download_auto_examples_01_basic_catalog_usage.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: 01_basic_catalog_usage.ipynb <01_basic_catalog_usage.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: 01_basic_catalog_usage.py <01_basic_catalog_usage.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: 01_basic_catalog_usage.zip <01_basic_catalog_usage.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
