Oakfield API Documentation 1.0.0
Numerical core APIs
Loading...
Searching...
No Matches
operator.h
Go to the documentation of this file.
1
13#ifndef OAKFIELD_OPERATOR_H
14#define OAKFIELD_OPERATOR_H
15
16#include <stdbool.h>
17#include <stddef.h>
18#include <stdint.h>
19
20#ifndef OAKFIELD_ENABLE_SYMBOLIC_KERNELS
21#define OAKFIELD_ENABLE_SYMBOLIC_KERNELS 1
22#endif
23
24#ifndef OAKFIELD_ENABLE_ZETA_CORE
25#define OAKFIELD_ENABLE_ZETA_CORE 1
26#endif
27
28#include "field.h"
29#include "oakfield/backend.h"
30#include "operator_identity.h"
31
33struct SimGraphIR;
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39struct SimContext;
40struct SimOperator;
42struct SimOperatorConfigAdapter;
43
47typedef void (*SimOperatorCycleLogFn)(const char* message, void* userdata);
48
50#define SIM_OPERATOR_NAME_MAX 63U
52#define SIM_OPERATOR_SCHEMA_KEY_MAX 127U
53
71
81
82const char* sim_continuity_mode_name(SimContinuityMode mode);
83bool sim_continuity_mode_from_string(const char* text, SimContinuityMode* out_mode);
84
99
100const char* sim_continuity_limiter_name(SimContinuityLimiterStrategy strategy);
101const char* sim_boundary_policy_name(SimIRBoundaryPolicy policy);
102bool sim_boundary_policy_from_string(const char* text, SimIRBoundaryPolicy* out_policy);
103void sim_operator_config_set_spacing(struct SimOperatorConfig* config,
104 const double* spacing,
105 size_t rank);
106
108#define SIM_OPERATOR_MAX_SPACING_DIMS 4U
109
123
139
150
163
174
184
194
206
208#define SIM_NEURAL_CHANNEL_AXIS_AUTO 255U
209
222
233
249
251#define SIM_OPERATOR_MAX_INVARIANTS 4U
252
265
273
303
322
326typedef SimResult (*SimOperatorEvalFn)(struct SimContext* context,
327 struct SimOperator* self,
328 void* userdata);
329
333typedef void (*SimOperatorDestroyFn)(void* userdata);
334
338typedef const struct SimGraphIR* (*SimOperatorGraphIRViewFn)(const struct SimOperator* self,
339 void* userdata);
340
371
379
387
402
417
445
454
458typedef struct SimOperatorPlan {
459 size_t* order;
460 size_t count;
462
470
477
487 const SimOperatorDescriptor* descriptor,
488 size_t* out_index);
489
498
506void sim_operator_dependencies(const SimOperator* op, const size_t** out_deps, size_t* out_count);
507
518 SimOperatorPlan* plan,
520 void* logger_userdata);
521
522SimResult sim_operator_resolve_plan(const SimOperatorRegistry* registry, SimOperatorPlan* plan);
523
530
538
545const char* sim_operator_name(const SimOperator* op);
546
554
559SimOperatorConfig sim_operator_config_defaults(void);
560SimOperatorInfo sim_operator_info_defaults(void);
561void sim_operator_info_normalize(SimOperatorInfo* info);
562void sim_operator_info_set_identity(SimOperatorInfo* info,
563 const char* schema_key,
564 SimIROpcode ir_opcode);
565void sim_operator_info_set_schema_identity(SimOperatorInfo* info, const char* schema_key);
566const char* sim_operator_abstract_id(const struct SimOperator* op);
567void sim_operator_set_schema_key(struct SimOperator* op, const char* schema_key);
568void sim_operator_set_catalog_metadata(struct SimOperator* op, const void* metadata);
569const void* sim_operator_catalog_metadata(const struct SimOperator* op);
570const char* sim_operator_schema_key(const struct SimOperator* op);
571const char* sim_operator_schema_key_or(const struct SimOperator* op, const char* fallback);
572SimIROpcode sim_operator_ir_opcode(const struct SimOperator* op);
573const SimOperatorRepresentation* sim_operator_representation(const struct SimOperator* op);
574const char* sim_operator_representation_domain_name(const struct SimOperator* op);
575const char* sim_operator_representation_value_kind_name(const struct SimOperator* op);
576const struct SimGraphIR* sim_operator_graph_ir(const struct SimOperator* op);
577bool sim_operator_config_get(const SimOperator* op, SimOperatorConfig* out_config);
578void sim_operator_config_set(struct SimOperator* op, const SimOperatorConfig* config);
579
580#ifdef __cplusplus
581}
582#endif
583
584#endif /* OAKFIELD_OPERATOR_H */
Backend abstraction layer for libsimcore execution engines.
SimKernelComplexSemantics
Declares how complex-valued IR lanes should be interpreted by backends.
Definition backend.h:85
Multidimensional contiguous field abstraction with configurable layout.
SimFieldDomain
Domain for field representation (physical vs spectral).
Definition field.h:51
SimFieldValueKind
Value kind for field scalars.
Definition field.h:61
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
SimIRBoundaryPolicy
Boundary handling policy for differential operators.
Definition kernel_ir.h:82
size_t SimIRNodeId
Definition kernel_ir.h:28
#define SIM_OPERATOR_MAX_INVARIANTS
Definition operator.h:251
SimNeuralPrecisionMode
Numeric precision policy for neural inference operators.
Definition operator.h:198
@ SIM_NEURAL_PRECISION_BF16
Definition operator.h:204
@ SIM_NEURAL_PRECISION_FP16
Definition operator.h:203
@ SIM_NEURAL_PRECISION_MIXED
Definition operator.h:202
@ SIM_NEURAL_PRECISION_DEFAULT
Definition operator.h:199
@ SIM_NEURAL_PRECISION_FP32
Definition operator.h:200
@ SIM_NEURAL_PRECISION_FP64
Definition operator.h:201
#define SIM_OPERATOR_MAX_SPACING_DIMS
Definition operator.h:108
SimOperatorInvariantKind
Supported invariant kinds for bookkeeping/diagnostics.
Definition operator.h:256
@ SIM_OPERATOR_INVARIANT_L1_NORM
Definition operator.h:259
@ SIM_OPERATOR_INVARIANT_VARIANCE
Definition operator.h:263
@ SIM_OPERATOR_INVARIANT_MASS
Definition operator.h:261
@ SIM_OPERATOR_INVARIANT_L2_NORM
Definition operator.h:258
@ SIM_OPERATOR_INVARIANT_ENERGY
Definition operator.h:260
@ SIM_OPERATOR_INVARIANT_NONE
Definition operator.h:257
@ SIM_OPERATOR_INVARIANT_MEAN
Definition operator.h:262
SimResult sim_operator_resolve_plan_with_logger(const SimOperatorRegistry *registry, SimOperatorPlan *plan, SimOperatorCycleLogFn logger, void *logger_userdata)
Resolve an execution plan for the registry.
void sim_operator_plan_destroy(SimOperatorPlan *plan)
Release resources owned by a plan.
void(* SimOperatorCycleLogFn)(const char *message, void *userdata)
Callback used to report dependency-cycle diagnostics.
Definition operator.h:47
void sim_operator_config_normalize(SimOperatorConfig *config)
Convenience helpers for working with operator configuration payloads.
SimResult sim_operator_registry_init(SimOperatorRegistry *registry)
Initialize an empty registry.
SimContinuityLimiterStrategy
Limiter/clipper strategies engaged by continuity guards.
Definition operator.h:88
@ SIM_LIMITER_STRATEGY_ADAPTIVE_BIAS
Definition operator.h:93
@ SIM_LIMITER_STRATEGY_SIGMOID_COMPRESSION
Definition operator.h:91
@ SIM_LIMITER_STRATEGY_SOFT_CLIP
Definition operator.h:90
@ SIM_LIMITER_STRATEGY_PER_FIELD_OVERRIDE
Definition operator.h:97
@ SIM_LIMITER_STRATEGY_HARD_CLIP
Definition operator.h:89
@ SIM_LIMITER_STRATEGY_STAT_AWARE
Definition operator.h:95
void(* SimOperatorDestroyFn)(void *userdata)
Function signature for operator teardown callbacks.
Definition operator.h:333
void sim_operator_registry_destroy(SimOperatorRegistry *registry)
Release all operators contained in a registry.
SimOperatorCategory
Operator category for grouping and scheduling hints.
Definition operator.h:57
@ SIM_OPERATOR_CATEGORY_UNKNOWN
Definition operator.h:58
@ SIM_OPERATOR_CATEGORY_UTILITY
Definition operator.h:68
@ SIM_OPERATOR_CATEGORY_REACTION
Definition operator.h:61
@ SIM_OPERATOR_CATEGORY_DIFFUSION
Definition operator.h:59
@ SIM_OPERATOR_CATEGORY_COUPLING
Definition operator.h:64
@ SIM_OPERATOR_CATEGORY_NONLINEAR
Definition operator.h:69
@ SIM_OPERATOR_CATEGORY_POTENTIAL
Definition operator.h:62
@ SIM_OPERATOR_CATEGORY_ADVECTION
Definition operator.h:60
@ SIM_OPERATOR_CATEGORY_NOISE
Definition operator.h:65
@ SIM_OPERATOR_CATEGORY_THERMOSTAT
Definition operator.h:67
@ SIM_OPERATOR_CATEGORY_MEASUREMENT
Definition operator.h:63
@ SIM_OPERATOR_CATEGORY_BOUNDARY
Definition operator.h:66
SimDeterminismFlags
Determinism capability flags declared by operators.
Definition operator.h:167
@ SIM_DET_REWIND_SAFE
Definition operator.h:170
@ SIM_DET_PURE_TIME
Definition operator.h:169
@ SIM_DET_NONE
Definition operator.h:168
@ SIM_DET_DETERMINISTIC_RNG_ONLY
Definition operator.h:172
@ SIM_DET_NO_STATEFUL_NODES
Definition operator.h:171
SimRepresentationMode
Representation mode governing determinism guarantees.
Definition operator.h:158
@ SIM_REPRESENTATION_MODE_STRICT
Definition operator.h:159
@ SIM_REPRESENTATION_MODE_RELAXED
Definition operator.h:160
@ SIM_REPRESENTATION_MODE_EXPLORATION
Definition operator.h:161
#define SIM_OPERATOR_NAME_MAX
Definition operator.h:50
void sim_operator_dependencies(const SimOperator *op, const size_t **out_deps, size_t *out_count)
Access operator dependency list.
SimClockMode
Clock selection for time-sensitive operators.
Definition operator.h:244
@ SIM_CLOCK_FROM_TIME_PARAM
Definition operator.h:245
@ SIM_CLOCK_FROM_STEP_PURE
Definition operator.h:246
@ SIM_CLOCK_ACCUMULATED_STATEFUL
Definition operator.h:247
SimOperator * sim_operator_registry_get(SimOperatorRegistry *registry, size_t index)
Lookup an operator by index.
SimOperatorInfo sim_operator_info(const SimOperator *op)
Retrieve operator metadata.
SimResult(* SimOperatorEvalFn)(struct SimContext *context, struct SimOperator *self, void *userdata)
Function signature for operator evaluation.
Definition operator.h:326
void * sim_operator_payload(SimOperator *op)
Retrieve the internal user payload.
SimNeuralDeterminismPolicy
Determinism policy for neural inference operators.
Definition operator.h:178
@ SIM_NEURAL_DETERMINISM_BEST_EFFORT
Definition operator.h:181
@ SIM_NEURAL_DETERMINISM_OFF
Definition operator.h:182
@ SIM_NEURAL_DETERMINISM_INHERIT
Definition operator.h:179
@ SIM_NEURAL_DETERMINISM_STRICT
Definition operator.h:180
#define SIM_OPERATOR_SCHEMA_KEY_MAX
Definition operator.h:52
SimContinuityMode
Numerical continuity and stability policy.
Definition operator.h:75
@ SIM_CONTINUITY_NONE
Definition operator.h:76
@ SIM_CONTINUITY_CLAMPED
Definition operator.h:78
@ SIM_CONTINUITY_LIMITED
Definition operator.h:79
@ SIM_CONTINUITY_STRICT
Definition operator.h:77
SimOperatorAlgebraicFlags
Algebraic property bitmask for operators.
Definition operator.h:113
@ SIM_OPERATOR_ALG_LINEAR
Definition operator.h:115
@ SIM_OPERATOR_ALG_PROJECTION
Definition operator.h:118
@ SIM_OPERATOR_ALG_NONE
Definition operator.h:114
@ SIM_OPERATOR_ALG_AFFINE
Definition operator.h:116
@ SIM_OPERATOR_ALG_COMMUTES_WITH_BOUNDARY
Definition operator.h:121
@ SIM_OPERATOR_ALG_SELF_ADJOINT
Definition operator.h:117
@ SIM_OPERATOR_ALG_COMMUTES_WITH_NOISE
Definition operator.h:119
SimNeuralDeviceRequirement
Device placement requirement for neural inference operators.
Definition operator.h:188
@ SIM_NEURAL_DEVICE_ACCELERATOR_PREFERRED
Definition operator.h:191
@ SIM_NEURAL_DEVICE_ACCELERATOR_REQUIRED
Definition operator.h:192
@ SIM_NEURAL_DEVICE_ANY
Definition operator.h:189
@ SIM_NEURAL_DEVICE_CPU_ONLY
Definition operator.h:190
SimResult sim_operator_registry_register(SimOperatorRegistry *registry, const SimOperatorDescriptor *descriptor, size_t *out_index)
Register a new operator.
const char * sim_operator_name(const SimOperator *op)
Retrieve the operator name.
const struct SimGraphIR *(* SimOperatorGraphIRViewFn)(const struct SimOperator *self, void *userdata)
Optional hook exposing a read-only GraphIR lowering view.
Definition operator.h:338
Core-owned operator identity metadata shared by execution and IR.
SimWarpLevel
Public classification for analytic warp operators.
Definition operator_identity.h:17
SimIROpcode
Semantic operator category opcodes for KernelIR nodes.
Definition operator_identity.h:27
KernelIR package describing the executable graph for a backend.
Definition backend.h:97
Simulation runtime state.
Definition sim_context.h:70
Monotonic arena for IR node allocation.
Definition kernel_ir.h:347
Field binding made available to a compiled kernel.
Definition backend.h:59
Output specification emitted by a kernel.
Definition backend.h:73
Shape and channel constraints used by neural operators.
Definition operator.h:213
uint8_t min_rank
Definition operator.h:214
uint32_t min_channels
Definition operator.h:217
bool allow_complex_input
Definition operator.h:220
bool channels_last
Definition operator.h:219
uint8_t channel_axis
Definition operator.h:216
uint32_t max_channels
Definition operator.h:218
uint8_t max_rank
Definition operator.h:215
Approximation metadata describing discretization quality.
Definition operator.h:143
double stencil_order
Definition operator.h:145
double error_constant
Definition operator.h:147
double spatial_order
Definition operator.h:144
double temporal_order
Definition operator.h:148
Operator runtime configuration shared between descriptors and instances.
Definition operator.h:307
double clamp_min
Definition operator.h:309
uint8_t spacing_rank
Definition operator.h:313
double norm_budget
Definition operator.h:315
double clamp_max
Definition operator.h:310
SimIRBoundaryPolicy boundary
Definition operator.h:312
double norm_budget_softness
Definition operator.h:316
SimRepresentationMode representation_mode_override
Definition operator.h:320
double continuity_tol
Definition operator.h:311
double spacing[SIM_OPERATOR_MAX_SPACING_DIMS]
Definition operator.h:314
SimContinuityMode continuity
Definition operator.h:308
bool representation_mode_override_enabled
Definition operator.h:317
Description used when registering a new operator.
Definition operator.h:421
uint64_t read_mask
Definition operator.h:431
const char * name
Definition operator.h:422
SimOperatorEvalFn restore_state
Definition operator.h:440
const SimOperatorKernelDescriptor * kernel
Definition operator.h:429
void * userdata
Definition operator.h:426
SimOperatorDestroyFn destroy
Definition operator.h:425
SimOperatorEvalFn evaluate
Definition operator.h:424
const size_t * dependencies
Definition operator.h:427
const void * catalog_metadata
Definition operator.h:438
const struct SimOperatorConfigAdapter * config_adapter
Definition operator.h:441
const size_t * write_indices
Definition operator.h:435
size_t dependency_count
Definition operator.h:428
SimOperatorGraphIRViewFn graph_ir_view
Definition operator.h:443
SimOperatorConfig config
Definition operator.h:423
size_t write_index_count
Definition operator.h:436
uint64_t required_features
Definition operator.h:437
size_t read_index_count
Definition operator.h:434
uint64_t write_mask
Definition operator.h:432
SimOperatorInfo info
Definition operator.h:430
const size_t * read_indices
Definition operator.h:433
SimOperatorEvalFn save_state
Definition operator.h:439
Metadata describing operator characteristics.
Definition operator.h:277
bool is_local
Definition operator.h:286
SimOperatorApproximation approximation
Definition operator.h:299
bool preserves_real
Definition operator.h:290
const char * abstract_id
Definition operator.h:292
bool is_spectral
Definition operator.h:285
double preferred_dt
Definition operator.h:291
SimDeterminismFlags determinism_flags
Definition operator.h:296
SimIROpcode ir_opcode
Definition operator.h:282
bool is_differentiable
Definition operator.h:284
bool is_linear
Definition operator.h:288
SimWarpLevel warp_level
Definition operator.h:279
uint32_t algebraic_flags
Definition operator.h:295
bool has_ir_opcode
Definition operator.h:281
bool is_warp
Definition operator.h:289
const char * schema_key
Definition operator.h:280
SimOperatorRepresentation representation
Definition operator.h:298
bool is_nonlocal
Definition operator.h:287
bool is_noise
Definition operator.h:283
SimOperatorCategory category
Definition operator.h:278
SimOperatorInvariant invariants[SIM_OPERATOR_MAX_INVARIANTS]
Definition operator.h:300
SimOperatorNeuralContract neural
Definition operator.h:297
uint8_t invariant_count
Definition operator.h:301
Invariant declaration with tolerance.
Definition operator.h:269
SimOperatorInvariantKind kind
Definition operator.h:270
double tolerance
Definition operator.h:271
Maps an IR field reference to a context field index.
Definition operator.h:375
size_t context_field_index
Definition operator.h:377
size_t ir_field_index
Definition operator.h:376
Descriptor for registering a kernel-backed operator.
Definition operator.h:391
const SimOperatorKernelBindingDescriptor * bindings
Definition operator.h:393
size_t output_count
Definition operator.h:396
size_t binding_count
Definition operator.h:394
const SimOperatorKernelOutputDescriptor * outputs
Definition operator.h:395
uint64_t required_features
Definition operator.h:399
const double * params
Definition operator.h:397
SimKernelComplexSemantics complex_semantics
Definition operator.h:400
const SimIRBuilder * builder
Definition operator.h:392
size_t param_count
Definition operator.h:398
Describes an output expression emitted by a kernel-backed operator.
Definition operator.h:383
size_t ir_field_index
Definition operator.h:384
SimIRNodeId expression
Definition operator.h:385
Runtime state for a kernel-backed operator.
Definition operator.h:406
SimOperatorKernelOutputDescriptor * output_map
Definition operator.h:411
SimOperatorKernelBindingDescriptor * binding_map
Definition operator.h:408
SimKernelIROutput * outputs
Definition operator.h:412
double * params
Definition operator.h:414
size_t binding_count
Definition operator.h:410
size_t output_count
Definition operator.h:413
size_t param_count
Definition operator.h:415
SimKernelIRBinding * bindings
Definition operator.h:409
KernelIR kernel
Definition operator.h:407
Neural operator contract metadata.
Definition operator.h:226
SimNeuralDeviceRequirement device_requirement
Definition operator.h:229
SimNeuralPrecisionMode precision_mode
Definition operator.h:230
bool enabled
Definition operator.h:227
SimNeuralShapeConstraints shape
Definition operator.h:231
SimNeuralDeterminismPolicy determinism_policy
Definition operator.h:228
Execution plan obtained via dependency resolution.
Definition operator.h:458
size_t * order
Definition operator.h:459
size_t count
Definition operator.h:460
Operator registry storing owned operator instances.
Definition operator.h:449
SimOperator * records
Definition operator.h:450
size_t capacity
Definition operator.h:452
size_t count
Definition operator.h:451
Representation metadata attached to an operator.
Definition operator.h:127
SimFieldValueKind value_kind
Definition operator.h:129
SimIRBoundaryPolicy boundary
Definition operator.h:134
bool preserves_real_subspace
Definition operator.h:131
uint8_t spacing_hint_rank
Definition operator.h:135
bool requires_complex_representation
Definition operator.h:133
SimFieldDomain domain
Definition operator.h:128
double spacing_hint[SIM_OPERATOR_MAX_SPACING_DIMS]
Definition operator.h:137
bool requires_complex_input
Definition operator.h:130
Operator instance stored by the registry.
Definition operator.h:344
struct SimOperatorKernel * kernel
Definition operator.h:355
SimOperatorEvalFn restore_state
Definition operator.h:350
char schema_key[SIM_OPERATOR_SCHEMA_KEY_MAX+1U]
Definition operator.h:346
size_t write_index_count
Definition operator.h:363
SimOperatorDestroyFn destroy
Definition operator.h:351
SimOperatorGraphIRViewFn graph_ir_view
Definition operator.h:369
SimOperatorEvalFn save_state
Definition operator.h:349
size_t * read_indices
Definition operator.h:360
void * userdata
Definition operator.h:352
size_t read_index_count
Definition operator.h:361
SimOperatorConfig config
Definition operator.h:357
size_t * dependencies
Definition operator.h:353
uint64_t write_mask
Definition operator.h:359
const void * catalog_metadata
Definition operator.h:366
size_t * write_indices
Definition operator.h:362
const struct SimOperatorConfigAdapter * config_adapter
Definition operator.h:367
SimOperatorEvalFn evaluate
Definition operator.h:348
uint64_t read_mask
Definition operator.h:358
uint64_t guid
Definition operator.h:347
SimOperatorInfo info
Definition operator.h:356
size_t dependency_count
Definition operator.h:354
char name[SIM_OPERATOR_NAME_MAX+1U]
Definition operator.h:345
uint64_t required_features
Definition operator.h:364