jax_sn.operator_creation.builders module

Builders: a derivation graph per operator kind.

Two axes. The operator axis is this file’s class ladder – each rung adds the primitives that operator is built from (its strategy, its angle, its energy group) and the quantities that follow. The storage axis is generated: .varying(...) / .freezing(...) on any rung returns a class storing everything the named primitives do not determine (see jax_sn.tools.parametrisation).

Which tier an operator needs is visible in its registry rather than declared: only the rungs whose operator actually sweeps carry sweep_data and mark it NON_DIFFERENTIABLE. The others build their narrow data type directly, so there is no sweep to skip and no placeholder to invent.

class TopologyBuild(etoe: Array, etof: Array, face_perm_idx: Array)[source]

Bases: Module

etoe: Array
etof: Array
face_perm_idx: Array
face_template(element: Element)[source]
Return type:

Array

fem_matrices(element: Element)[source]
Return type:

FEMMatrices

topology_build(connectivity: Array, face_template: Array)[source]
Return type:

TopologyBuild

face_normals(vertices: Array, connectivity: Array, face_template: Array)[source]
Return type:

Array

geometric_domain(vertices: Array, connectivity: Array, face_normals: Array, topology_build: TopologyBuild, face_template: Array)[source]
Return type:

GeometricDomain

domain(geometric_domain: GeometricDomain, cross_sections_indexed: CrossSectionsIndexed)[source]
Return type:

Domain

precomputed_geometric_data(element: Element, geometric_domain: GeometricDomain)[source]
Return type:

PrecomputedGeometricData

spatial_data(domain: Domain, fem_matrices: FEMMatrices, precomputed_geometric_data: PrecomputedGeometricData, element: Element)[source]
Return type:

SpatialData

solution_domain(spatial_data: SpatialData)[source]
Return type:

SolutionDomain

angular_data(quadrature_set: QuadratureSetBase, cross_sections_indexed: CrossSectionsIndexed)[source]
Return type:

AngularData

discretisation_data(spatial_data: SpatialData, angular_data: AngularData)[source]
Return type:

DiscretisationData

non_differentiable_data(geometric_domain: GeometricDomain, quadrature_set: QuadratureSetBase, strategy: MultiGroupStrategy)[source]
Return type:

NonDifferentiableData

sweep_data(non_differentiable_data: NonDifferentiableData)[source]
Return type:

SweepData

operator_data(discretisation_data: DiscretisationData, non_differentiable_data: NonDifferentiableData)[source]
Return type:

OperatorData

multi_group_operator(operator_data: OperatorData, strategy: MultiGroupStrategy)[source]
Return type:

MultiGroupOperator

single_group_data(operator_data: OperatorData, energy_group: int)[source]
Return type:

SingleGroupData

single_group_operator(single_group_data: SingleGroupData, strategy: SingleGroupStrategy)[source]
Return type:

SingleGroupOperator

single_group_chain_operator(single_group_data: SingleGroupData, strategy: SingleGroupChainStrategy)[source]
Return type:

SingleGroupChainOperator

single_group_source_operator(single_group_data: SingleGroupData, strategy: SingleGroupSourceStrategy)[source]
Return type:

SingleGroupSourceOperator

mass_data(fem_matrices: FEMMatrices, precomputed_geometric_data: PrecomputedGeometricData)[source]
Return type:

MassData

mass_operator(mass_data: MassData, additional_shape: Tuple[int, ...], strategy: MassStrategy)[source]
Return type:

MassOperator

moment_data(angular_data: AngularData)[source]
Return type:

MomentData

moment_operator(moment_data: MomentData, spatial_data: SpatialData, strategy: FluxMomentStrategy)[source]
Return type:

MomentOperator

discrete_data(angular_data: AngularData)[source]
Return type:

DiscreteData

discrete_operator(discrete_data: DiscreteData, spatial_data: SpatialData, strategy: FluxMomentStrategy)[source]
Return type:

DiscreteOperator

scatter_data(energy_group_out: int, energy_group_in: int, cross_sections_indexed: CrossSectionsIndexed)[source]
Return type:

ScatterData

scatter_operator(scatter_data: ScatterData, strategy: ScatterStrategy, spatial_data: SpatialData, angular_data: AngularData)[source]
Return type:

ScatterOperator

transport_sweep_data(geometric_domain: GeometricDomain, angle: Array, inversion_strategy: Union[SingleAngleInversionStrategy, MultiAngleInversionStrategy])[source]
Return type:

SweepData

transport_data(spatial_data: SpatialData, energy_group: int, angle: Array, sweep_data: SweepData)[source]
Return type:

TransportData

single_angle_transport_operator(transport_data: TransportData, forward_strategy: SingleAngleForwardStrategy, inversion_strategy: SingleAngleInversionStrategy)[source]
Return type:

TransportOperatorSingleAngle

multi_angle_transport_operator(transport_data: TransportData, forward_strategy: MultiAngleForwardStrategy, inversion_strategy: MultiAngleInversionStrategy)[source]
Return type:

TransportOperatorMultiAngle

class SpatialBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed)[source]

Bases: ParametrisedModule

The problem’s spatial description: a mesh, an element and its materials.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
vertices: Array
connectivity: Array
element: Element
cross_sections_indexed: CrossSectionsIndexed
classmethod from_solution_domain(solution_domain: SolutionDomain, **primitives: Any)[source]

Recover a builder from an already-built SolutionDomain. Nothing is recomputed: the solution domain is stored whole and the spatial tier is projected back out. primitives supplies whatever else the rung needs (a quadrature set, a strategy, an angle, …).

Return type:

SpatialBuilder

class DiscretisationBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase)[source]

Bases: SpatialBuilder

The spatial description plus an angular discretisation.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'angular_data': {'cross_sections_indexed': <function DiscretisationBuilder.<lambda>>}}
quadrature_set: QuadratureSetBase
class SweptBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase)[source]

Bases: DiscretisationBuilder

The rungs whose operator sweeps, and therefore carry the combinatorial tier.

strategy builds the tier itself (build_default_non_differentiable_data()), so a builder cannot disagree with the operator it builds, and a strategy that comes to need more of that tier than a sweep ordering – or a knob to build it with – changes nothing here. The tier is marked non-differentiable on the registry rather than inside the derivation, so it holds on the stored and projected paths too.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
NON_DIFFERENTIABLE: ClassVar[FrozenSet[str]] = frozenset({'non_differentiable_data', 'sweep_data'})
RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'angular_data': {'cross_sections_indexed': <function DiscretisationBuilder.<lambda>>}, 'non_differentiable_data': {'strategy': <function SweptBuilder.<lambda>>}}
class MultiGroupBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: MultiGroupStrategy)[source]

Bases: SweptBuilder

The full multigroup operator \(I - M T^{-1} H D S\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'multi_group_operator': <function multi_group_operator>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'multi_group_operator': <function MultiGroupBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: MultiGroupStrategy
class SingleGroupBuilderBase(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int)[source]

Bases: SweptBuilder

One energy group. energy_group is a primitive, so a per-group loop can hold the sort: the group index touches neither the geometry nor the angles it was built from.

The three flavours below are three different operators, so they are three rungs rather than one that dispatches on the strategy.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
energy_group: int
class SingleGroupBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupStrategy)[source]

Bases: SingleGroupBuilderBase

The full single-group operator \(I - M T^{-1} H D S_{gg}\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'single_group_operator': <function single_group_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_operator': <function SingleGroupBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: SingleGroupStrategy
class SingleGroupChainBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupChainStrategy)[source]

Bases: SingleGroupBuilderBase

The chain operator \(M T^{-1} H D\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_chain_operator': <function single_group_chain_operator>, 'single_group_data': <function single_group_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_chain_operator': <function SingleGroupChainBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: SingleGroupChainStrategy
class SingleGroupSourceBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupSourceStrategy)[source]

Bases: SingleGroupBuilderBase

The source operator \(M T^{-1} H\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'single_group_source_operator': <function single_group_source_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_source_operator': <function SingleGroupSourceBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: SingleGroupSourceStrategy
class MassBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, strategy: MassStrategy, additional_shape: Tuple[int, ...])[source]

Bases: SpatialBuilder

The mass operator. Needs no angular discretisation, so it hangs off the spatial spine.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'mass_data': <function mass_data>, 'mass_operator': <function mass_operator>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'mass_data': {'mass_operator': <function MassBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: MassStrategy
additional_shape: Tuple[int, ...]
class MomentBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: FluxMomentStrategy)[source]

Bases: DiscretisationBuilder

The discrete-to-moment operator \(M\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'moment_data': <function moment_data>, 'moment_operator': <function moment_operator>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'moment_data': {'moment_operator': <function MomentBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: FluxMomentStrategy
class DiscreteBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: FluxMomentStrategy)[source]

Bases: DiscretisationBuilder

The moment-to-discrete operator \(D\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discrete_data': <function discrete_data>, 'discrete_operator': <function discrete_operator>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discrete_data': {'discrete_operator': <function DiscreteBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: FluxMomentStrategy
class ScatterBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: ScatterStrategy, energy_group_out: int, energy_group_in: int)[source]

Bases: DiscretisationBuilder

The group-to-group scatter \(S_{\tilde{g}g}\).

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'scatter_data': <function scatter_data>, 'scatter_operator': <function scatter_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'scatter_data': {'scatter_operator': <function ScatterBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
strategy: ScatterStrategy
energy_group_out: int
energy_group_in: int
class TransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int)[source]

Bases: SpatialBuilder

Shared base for the transport rungs: no quadrature set, since the sort is for angle.

Single- and multi-angle are separate rungs rather than one that dispatches on angle.ndim: they are different operators, and separating them turns the shape/strategy compatibility checks into __check_init__ invariants that re-fire on every update.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}
NON_DIFFERENTIABLE: ClassVar[FrozenSet[str]] = frozenset({'sweep_data'})
RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'sweep_data': {'inversion_strategy': <function TransportBuilder.<lambda>>}}
angle: Array
energy_group: int
class SingleAngleTransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int, forward_strategy: SingleAngleForwardStrategy, inversion_strategy: SingleAngleInversionStrategy)[source]

Bases: TransportBuilder

Transport for one direction.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>, 'transport_operator': <function single_angle_transport_operator>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}, 'transport_data': {'transport_operator': <function SingleAngleTransportBuilder.<lambda>>}}
forward_strategy: SingleAngleForwardStrategy
inversion_strategy: SingleAngleInversionStrategy
class MultiAngleTransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int, forward_strategy: MultiAngleForwardStrategy, inversion_strategy: MultiAngleInversionStrategy)[source]

Bases: TransportBuilder

Transport batched over the angle axis.

DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>, 'transport_operator': <function multi_angle_transport_operator>}
PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}, 'transport_data': {'transport_operator': <function MultiAngleTransportBuilder.<lambda>>}}
forward_strategy: MultiAngleForwardStrategy
inversion_strategy: MultiAngleInversionStrategy