Skip to main content

vyre_spec/
lib.rs

1#![deny(missing_docs)]
2#![forbid(unsafe_code)]
3#![cfg_attr(
4    not(test),
5    deny(
6        clippy::unwrap_used,
7        clippy::expect_used,
8        clippy::todo,
9        clippy::unimplemented,
10        clippy::panic
11    )
12)]
13//! vyre-spec is the machine-checkable frozen data contract for the vyre GPU
14//! compute IR. Any backend may depend on vyre-spec alone to prove conformance
15//! without depending on vyre itself.
16//!
17//! This crate is intentionally data-only. It has no dependency on `vyre` or
18//! `vyre`; backend vendors can use these types as the stable contract
19//! for conformance proofs. Example: a conformance runner can read an
20//! [`OpSignature`] and verify the byte width expected by a backend primitive.
21
22/// Adversarial input descriptors — hostile payloads every op must reject or handle.
23/// Specification element.
24/// Specification element.
25pub mod adversarial_input;
26/// Algebraic law primitives — associativity, identity, commutativity declarations.
27/// Specification element.
28/// Specification element.
29pub mod algebraic_law;
30/// Canonical catalog of every algebraic law tagged to operations.
31/// Specification element.
32/// Specification element.
33pub mod all_algebraic_laws;
34/// Atomic operation enum — the bounded set of read-modify-write primitives.
35/// Specification element.
36/// Specification element.
37pub mod atomic_op;
38/// Binary operator enum — all element-wise two-operand primitives.
39/// Specification element.
40/// Specification element.
41pub mod bin_op;
42/// Buffer access mode (ReadOnly / WriteOnly / ReadWrite) + enforcement helpers.
43/// Specification element.
44/// Specification element.
45pub mod buffer_access;
46/// Iterator returning op ids grouped by their `Category`.
47/// Specification element.
48/// Specification element.
49pub mod by_category;
50/// Reverse index from op id string to its canonical descriptor.
51/// Specification element.
52/// Specification element.
53pub mod by_id;
54/// Conformance invariant: the op catalog enumerates every known id.
55/// Specification element.
56/// Specification element.
57pub mod catalog_is_complete;
58/// Category enum (A/B/C) + backend-availability predicates.
59/// Specification element.
60/// Specification element.
61pub mod category;
62/// Calling conventions between CPU host and GPU kernels.
63/// Specification element.
64/// Specification element.
65pub mod convention;
66/// Primitive data-type enum (U32/F32/Bool/etc.) + size helpers.
67/// Specification element.
68/// Specification element.
69pub mod data_type;
70/// Invariants the engine itself must preserve (wire round-trip, CSE stability, …).
71/// Specification element.
72/// Specification element.
73pub mod engine_invariant;
74/// Frozen catalog of core `Expr` variant names used by coverage tests.
75/// Specification element.
76/// Specification element.
77pub mod expr_variant;
78/// Dialect extension descriptor — marks non-core ops carried by extensions.
79/// Specification element.
80/// Specification element.
81pub mod extension;
82/// Floating-point type subset (F16/F32/F64) with associated properties.
83/// Specification element.
84/// Specification element.
85pub mod float_type;
86/// Golden reference samples — tiny fixtures every backend must reproduce exactly.
87/// Specification element.
88/// Specification element.
89pub mod golden_sample;
90/// Table of hardware intrinsics exposed by vyre-intrinsics.
91/// Specification element.
92/// Specification element.
93pub mod intrinsic_table;
94/// Abstract invariant type + provenance tracking.
95/// Specification element.
96/// Specification element.
97pub mod invariant;
98/// Classification buckets grouping related invariants (numeric, memory, …).
99/// Specification element.
100/// Specification element.
101pub mod invariant_category;
102/// Catalog of invariants every registered op is checked against.
103/// Specification element.
104/// Specification element.
105pub mod invariants;
106/// Known-answer test vector type — deterministic input/output pairs.
107/// Specification element.
108/// Specification element.
109pub mod kat_vector;
110/// Canonical catalog of algebraic laws exposed via `law_catalog()`.
111/// Specification element.
112/// Specification element.
113pub mod law_catalog;
114/// Layer enum (IR / backend / runtime) — coarse module placement.
115/// Specification element.
116/// Specification element.
117pub mod layer;
118/// Metadata classification for `OpMetadata` entries.
119/// Specification element.
120/// Specification element.
121pub mod metadata_category;
122/// Monotonicity direction (increasing / decreasing / none) for op outputs.
123/// Specification element.
124/// Specification element.
125pub mod monotonic_direction;
126/// Operation contract: capability requirements, determinism, cost hints.
127/// Specification element.
128/// Specification element.
129pub mod op_contract;
130/// Op metadata struct — human-facing description and discoverability hooks.
131/// Specification element.
132/// Specification element.
133pub mod op_metadata;
134/// Op signature — stable type profile every backend lowers against.
135/// Specification element.
136/// Specification element.
137pub mod op_signature;
138/// Packed graph node kinds for language-agnostic analysis.
139/// Specification element.
140/// Specification element.
141pub mod pg_node_kind;
142/// Ternary operator enum — select, FMA, mask-merge.
143/// Specification element.
144/// Specification element.
145pub mod ternary_op;
146/// Structured test descriptor — op id, input sampler, expected shape.
147/// Specification element.
148/// Specification element.
149pub mod test_descriptor;
150#[cfg(test)]
151mod tests;
152/// Unary operator enum — single-operand element-wise primitives.
153/// Specification element.
154/// Specification element.
155pub mod un_op;
156/// Conformance verification driver — runs the law + invariant battery.
157/// Specification element.
158/// Specification element.
159pub mod verification;
160
161/// See [`adversarial_input::AdversarialInput`].
162/// Specification element.
163/// Specification element.
164pub use adversarial_input::AdversarialInput;
165/// See [`algebraic_law::AlgebraicLaw`].
166/// Specification element.
167/// Specification element.
168pub use algebraic_law::{AlgebraicLaw, LawCheckFn};
169/// See [`all_algebraic_laws::all_algebraic_laws`].
170/// Specification element.
171/// Specification element.
172pub use all_algebraic_laws::all_algebraic_laws;
173/// See [`atomic_op::AtomicOp`].
174/// Specification element.
175/// Specification element.
176pub use atomic_op::AtomicOp;
177/// See [`bin_op::BinOp`].
178/// Specification element.
179/// Specification element.
180pub use bin_op::BinOp;
181/// See [`buffer_access::BufferAccess`].
182/// Specification element.
183/// Specification element.
184pub use buffer_access::BufferAccess;
185/// See [`by_category::by_category`].
186/// Specification element.
187/// Specification element.
188pub use by_category::by_category;
189/// See [`by_id::by_id`].
190/// Specification element.
191/// Specification element.
192pub use by_id::by_id;
193/// See [`catalog_is_complete::catalog_is_complete`].
194/// Specification element.
195/// Specification element.
196pub use catalog_is_complete::catalog_is_complete;
197/// See [`category::Category`] + backend-availability helpers.
198/// Specification element.
199/// Specification element.
200pub use category::{BackendAvailability, BackendAvailabilityPredicate, Category};
201/// See [`convention::Convention`].
202/// Specification element.
203/// Specification element.
204pub use convention::Convention;
205/// See [`data_type::DataType`].
206/// Specification element.
207/// Specification element.
208pub use data_type::DataType;
209/// See [`engine_invariant::EngineInvariant`].
210/// Specification element.
211/// Specification element.
212pub use engine_invariant::{EngineInvariant, InvariantId};
213/// See [`expr_variant::expr_variants`].
214/// Specification element.
215/// Specification element.
216pub use expr_variant::expr_variants;
217/// See [`float_type::FloatType`].
218/// Specification element.
219/// Specification element.
220pub use float_type::FloatType;
221/// See [`golden_sample::GoldenSample`].
222/// Specification element.
223/// Specification element.
224pub use golden_sample::GoldenSample;
225/// See [`intrinsic_table::IntrinsicTable`].
226/// Specification element.
227/// Specification element.
228pub use intrinsic_table::{IntrinsicLowering, IntrinsicTable};
229/// See [`invariant::Invariant`].
230/// Specification element.
231/// Specification element.
232pub use invariant::Invariant;
233/// See [`invariant_category::InvariantCategory`].
234/// Specification element.
235/// Specification element.
236pub use invariant_category::InvariantCategory;
237/// See [`invariants::invariants`].
238/// Specification element.
239/// Specification element.
240pub use invariants::{empty_test_family, invariants};
241/// See [`kat_vector::KatVector`].
242/// Specification element.
243/// Specification element.
244pub use kat_vector::KatVector;
245/// See [`law_catalog::law_catalog`].
246/// Specification element.
247/// Specification element.
248pub use law_catalog::law_catalog;
249/// See [`layer::Layer`].
250/// Specification element.
251/// Specification element.
252pub use layer::Layer;
253/// See [`metadata_category::MetadataCategory`].
254/// Specification element.
255/// Specification element.
256pub use metadata_category::MetadataCategory;
257/// See [`monotonic_direction::MonotonicDirection`].
258/// Specification element.
259/// Specification element.
260pub use monotonic_direction::MonotonicDirection;
261/// See [`op_contract::OperationContract`] and its component types.
262pub use op_contract::{
263    CapabilityId, CostHint, DeterminismClass, OperationContract, SideEffectClass,
264};
265/// See [`op_metadata::OpMetadata`].
266/// Specification element.
267/// Specification element.
268pub use op_metadata::OpMetadata;
269/// See [`op_signature::OpSignature`].
270/// Specification element.
271/// Specification element.
272pub use op_signature::OpSignature;
273/// See [`pg_node_kind::PgNodeKind`].
274/// Specification element.
275/// Specification element.
276pub use pg_node_kind::PgNodeKind;
277/// See [`ternary_op::TernaryOp`].
278/// Specification element.
279/// Specification element.
280pub use ternary_op::TernaryOp;
281/// See [`test_descriptor::TestDescriptor`].
282/// Specification element.
283/// Specification element.
284pub use test_descriptor::TestDescriptor;
285/// See [`un_op::UnOp`].
286/// Specification element.
287/// Specification element.
288pub use un_op::UnOp;
289/// See [`verification::Verification`].
290/// Specification element.
291/// Specification element.
292pub use verification::Verification;
293
294/// Intrinsic descriptors.
295/// Specification element.
296/// Specification element.
297pub mod intrinsic_descriptor;
298/// See [`intrinsic_descriptor::IntrinsicDescriptor`] and its identifying types.
299pub use intrinsic_descriptor::{Backend, BackendId, CpuFn, IntrinsicDescriptor};