Source code for eradiate.scenes.integrators._core

from __future__ import annotations

from abc import ABC

import attrs

from ..core import NodeSceneElement
from ..._factory import Factory
from ...attrs import define, documented, get_doc

integrator_factory = Factory()
integrator_factory.register_lazy_batch(
    [
        ("_path_tracers.PathIntegrator", "path", {}),
        ("_path_tracers.VolPathIntegrator", "volpath", {}),
        ("_path_tracers.VolPathMISIntegrator", "volpathmis", {}),
        ("_path_tracers.PiecewiseVolPathIntegrator", "piecewise_volpath", {}),
    ],
    cls_prefix="eradiate.scenes.integrators",
)


[docs] @define(eq=False, slots=False) class Integrator(NodeSceneElement, ABC): """ Abstract base class for all integrator elements. Notes ----- * This class is to be used as a mixin. """ id: str | None = documented( attrs.field( default="integrator", validator=attrs.validators.optional(attrs.validators.instance_of(str)), ), doc=get_doc(NodeSceneElement, "id", "doc"), type=get_doc(NodeSceneElement, "id", "type"), init_type=get_doc(NodeSceneElement, "id", "init_type"), default='"integrator"', ) timeout: float | None = documented( attrs.field( default=None, converter=attrs.converters.optional(float), ), doc="Maximum amount of time to spend during a kernel render pass in " "second (excluding scene parsing).", type="float or None", init_type="float, optional", default="None", ) moment: bool = documented( attrs.field( default=False, converter=attrs.converters.optional(bool), ), doc="If true, calculates the variance of the output film", type="bool", init_type="bool, optional", default="False", ) stokes: bool = documented( attrs.field( default=False, converter=attrs.converters.optional(bool), ), doc="If ```True```, calculates and outputs the polarized components of" "the Stokes vector. Note that this will only work with a polarized" "mode and a sensor that measures radiance.", type="bool", init_type="bool, optional", default="False", ) meridian_align: bool = documented( attrs.field( default=True, converter=attrs.converters.optional(bool), ), doc="If ```True```, align the Stokes vector to the meridian plane. Otherwise" "default to aligning to the sensor's x-axis. This parameter is only" "relevant in polarized mode, when measuring radiance with ``stokes=True``.", type="bool", init_type="bool, optional", default="True", )