Consumer types

Result, topology, geometry, transport, capability and diagnostics types returned by the propagation consumer.

These types are returned by the functions on the consumer page. All are frozen dataclasses in witwin.channel.propagation.consumer. K is the number of path rows, D the interaction width, F the number of frequency offsets and S the number of time slots.

Evaluations#

PropagationEvaluation#

Returned by evaluate.

FieldType
pathsPropagationPathBatch
conventionPropagationConvention
capabilitiesPropagationCapabilities
diagnosticsPropagationDiagnostics

FixedTopologyEvaluation#

Returned by reevaluate. The same four fields, plus row_valid: a (K,) bool CUDA mask, or None. When present it is the only authority on whether a replayed row is meaningful. Errors (ABI, capacity, device) still raise; they are never reported as row_valid=False.

TimeVaryingEvaluation#

Returned by evaluate_time_varying.

FieldType and shapeMeaning
slot_count, row_countintS and K (rows per slot).
times_sfloat64, (S,)The time labels from the request.
delay_s, path_length_mfloat32, (S, K)Per-slot delay and length.
transportTimeVaryingTransportPer-slot transport.
pair_count, pair_offsetsint, (pair_count + 1,)Pair segmentation of one slot; every slot repeats it.
row_validbool, (S, K), or NoneRow validity per slot.
convention, capabilities, diagnosticsrecordsAs above.

TimeVaryingEvaluation.from_evaluation(evaluation, times_s, slot_count) builds these views from a slot-batched FixedTopologyEvaluation; evaluate_time_varying calls it for you.

TimeVaryingTransport#

Fields response, coefficient, field, direction, matrix, source_basis, sink_basis. Only the fields of the requested response are set; each is shaped (S, K, ...). TimeVaryingTransport.from_transport(transport, slot_count) creates the views without copying; the row count must be divisible by slot_count.

PropagationPathBatch#

FieldType and shapeMeaning
pair_countintNumber of source-sink pairs.
path_countintK.
pair_index(K,)Pair of every row: sink_index * source_count + source_index.
pair_offsets(pair_count + 1,)Row range of each pair: rows pair_offsets[p] to pair_offsets[p + 1] - 1 belong to pair p.
topologyPropagationTopologyDiscrete rows.
geometryPropagationGeometryContinuous geometry.
transportScalarTransport, Complex3Transport or JonesTransportDepends on response.

PropagationTopology#

FieldType and shapeMeaning
source_index, sink_indexint32, (K,)Row in the source and sink batch.
source_id, sink_idint64, (K,)The stable_ids from the batches.
depth, component_idint32, (K,)Interaction count and component code.
primitive_id, edge_id, material_idint32, (K,)First interaction.
primitive_sequence, material_sequence, interaction_typeint32, (K, D)Every interaction.
provenanceWorldProvenance or NoneScene versions at discovery.

Properties: row_count (K), device.

PropagationGeometry#

FieldType and shape
path_length_m, delay_sfloat32, (K,)
field_directionfloat32, (K, 3)
interaction_positions_m, interaction_normalsfloat32, (K, D, 3)

Properties: row_count, device.

Transports#

TypeFieldsNotes
ScalarTransportcoefficient (K,) complex64; coefficient_offsets (K, F) or None; frequency_offsets_hz tuple or Nonecoefficient includes the source amplitude sqrt(powers_w) and the reference-frequency phase.
Complex3Transportfield (K, 3) complex64; direction (K, 3) float32; field_offsets (K, F, 3) or None; frequency_offsets_hzWorld-frame field, including sqrt(powers_w).
JonesTransportmatrix (K, 2, 2) complex64; source_basis, sink_basis (K, 2, 3) float32matrix[k, i, j] maps source component j to sink component i. It is a basis map and does not include sqrt(powers_w). No wideband offsets.

Each has row_count and device properties.

Fixed-topology handles#

PreparedFixedTopology#

FieldMeaning
topologyThe frozen PropagationTopology.
bucketsTuple of FixedTopologyBucket, one per (component, depth).
prepare_d2h_copies, prepare_d2h_bytes, prepare_synchronizationsCost of building the handle.

Properties: row_count, device, provenance.

FixedTopologyBucket#

FixedTopologyBucket(component, depth, rows): the ascending row indices that share one component and depth. Property row_count.

WorldProvenance#

WorldProvenance(topology_version, geometry_version, material_version, assignment_version, time_s=None).

  • WorldProvenance.of(compiled) captures the versions of a CompiledScene.
  • moved_domain(current, *, allow_geometry=False) returns the first version name that differs from current, or None. With allow_geometry=True, geometry_version is ignored.

time_s is a label only and never makes a topology stale.

PropagationConvention#

The units and layout every evaluation follows.

FieldValue
contract_version6
pair_layoutsink_major_source_minor:pair_index=sink_index*source_count+source_index
slot_pair_layoutBlock-diagonal slot layout: row = slot * frozen_row_count + frozen_row
distance_unit, delay_unit"m", "s"
phasor, time_dependenceexp(-j*k*d), exp(+j*2*pi*f*t)
coefficient_referenceincludes_reference_frequency_phase
narrowband_frequency_offset_lawH(f_ref+df) = C(f_ref)*exp(-j*2*pi*df*delay_s)
narrowband_frequency_offset_error_law, wideband_offset_layout, wideband_frequency_quantization_lawText descriptions of the approximation error and the wideband grid
complex3_basisworld_cartesian
jones_mappingsource_transverse_basis_to_sink_transverse_basis

The narrowband law is how you extrapolate a single-frequency coefficient to nearby frequencies. Wideband offsets on FixedTopologyRequest evaluate each frequency natively instead.

PropagationCapabilities#

Returned by consumer.capabilities() and attached to every evaluation.

GroupFields
Vocabularycontract_version, components, responses, topology_modes, ad_modes, world_motions, world_version_domains
Support matricesresponse_components, response_ad_modes, component_ad_modes
Fixed topologyfixed_topology_components, fixed_topology_responses, supports_fixed_topology, supports_los_jones, fixed_topology_row_validity_components, polarimetric_frozen_ad_inputs
Slots and widebandsupports_slot_batching, max_slot_count, supports_wideband_offsets, wideband_responses, wideband_components, wideband_dispersive_materials, wideband_rough_materials, max_frequency_offset_count, native_frequency_resolution_law
Gradientscomponent_material_leaves, differentiable_geometry_outputs, direction_differentiable_components, primal_only_ad_inputs, supports_higher_order_ad, ad_accounting

Lookup methods, each raising ValueError for an unknown name:

MethodReturns
components_for(response)Components available for a response
ad_modes_for(response)AD modes available for a response
ad_modes_for_component(component)AD modes available for a component; diffraction is {"none"}
material_leaves_for(component)Differentiable material fields for a component
differentiable_geometry_for(route)Differentiable geometry outputs of a route

PropagationDiagnostics#

Per-call counters, for auditing rather than as performance guarantees: discovery_launch_count, candidate_count, visibility_rejection_count, compact_count_d2h_copies, compact_count_d2h_bytes, compact_sync_count, validation_d2h_copies, validation_d2h_bytes, validation_sync_count, frequency_column_count (default 1), ad_companion_launches (default 0) and ad_tape_bytes (default 0).