Skip to content

PlanMaterialization

pydantable.PlanMaterialization

Bases: str, Enum

How terminal materialization of a lazy plan is scheduled and consumed.

Values are lowercase strings suitable for stable logging and JSON.

Blocking

Synchronous APIs on the **current thread**:
:meth:`~pydantable.DataFrame.collect`,
:meth:`~pydantable.DataFrame.to_dict`,
:meth:`~pydantable.DataFrame.to_polars`,
:meth:`~pydantable.DataFrame.to_arrow`,
:meth:`~pydantable.DataFrame.collect_batches`, etc.

Async

``await`` coroutines so the event loop can run other tasks while the
engine is awaited (or work is offloaded to a thread pool when the wheel
does not expose native async execution): :meth:`~pydantable.DataFrame.acollect`,
:meth:`~pydantable.DataFrame.ato_dict`,
:meth:`~pydantable.DataFrame.ato_polars`,
:meth:`~pydantable.DataFrame.ato_arrow` (and :class:`~pydantable.DataFrameModel`
mirrors such as ``arows`` / ``ato_dicts``).

Deferred

Start materialization in the background and await the result later:
:meth:`~pydantable.DataFrame.submit` returns a
:class:`~pydantable.dataframe.ExecutionHandle`; ``await handle.result()``
matches :meth:`~pydantable.DataFrame.collect` for the same arguments.

Chunked

After **one** full engine collect, yield **column dict** chunks (same slicing
contract as :meth:`~pydantable.DataFrame.collect_batches`): **sync**
:meth:`~pydantable.DataFrame.stream` or **async**
:meth:`~pydantable.DataFrame.astream`. Not out-of-core Polars streaming;
see **EXECUTION** (Rust engine) in the docs.
Source code in python/pydantable/materialization.py
class PlanMaterialization(str, Enum):
    """How terminal materialization of a lazy plan is scheduled and consumed.

    Values are **lowercase strings** suitable for stable logging and JSON.

    **Blocking**

        Synchronous APIs on the **current thread**:
        :meth:`~pydantable.DataFrame.collect`,
        :meth:`~pydantable.DataFrame.to_dict`,
        :meth:`~pydantable.DataFrame.to_polars`,
        :meth:`~pydantable.DataFrame.to_arrow`,
        :meth:`~pydantable.DataFrame.collect_batches`, etc.

    **Async**

        ``await`` coroutines so the event loop can run other tasks while the
        engine is awaited (or work is offloaded to a thread pool when the wheel
        does not expose native async execution): :meth:`~pydantable.DataFrame.acollect`,
        :meth:`~pydantable.DataFrame.ato_dict`,
        :meth:`~pydantable.DataFrame.ato_polars`,
        :meth:`~pydantable.DataFrame.ato_arrow` (and :class:`~pydantable.DataFrameModel`
        mirrors such as ``arows`` / ``ato_dicts``).

    **Deferred**

        Start materialization in the background and await the result later:
        :meth:`~pydantable.DataFrame.submit` returns a
        :class:`~pydantable.dataframe.ExecutionHandle`; ``await handle.result()``
        matches :meth:`~pydantable.DataFrame.collect` for the same arguments.

    **Chunked**

        After **one** full engine collect, yield **column dict** chunks (same slicing
        contract as :meth:`~pydantable.DataFrame.collect_batches`): **sync**
        :meth:`~pydantable.DataFrame.stream` or **async**
        :meth:`~pydantable.DataFrame.astream`. Not out-of-core Polars streaming;
        see **EXECUTION** (Rust engine) in the docs.
    """

    BLOCKING = "blocking"
    ASYNC = "async"
    DEFERRED = "deferred"
    CHUNKED = "chunked"