pub struct RequiredReport {
pub schema_version: u32,
pub op: String,
pub backend: RequiredBackend,
pub seed: u64,
pub tolerance: Option<f64>,
pub tolerance_f64_bits: u64,
pub status: RequiredStatus,
pub reason: Option<String>,
pub reference: Option<RawOutput>,
pub actual: Option<RawOutput>,
pub metrics: Option<NumericalMetrics>,
}Fields§
§schema_version: u32§op: String§backend: RequiredBackend§seed: u64§tolerance: Option<f64>None only when the submitted tolerance was non-finite. Its original bits are always retained below so invalid inputs remain auditable.
tolerance_f64_bits: u64§status: RequiredStatus§reason: Option<String>§reference: Option<RawOutput>§actual: Option<RawOutput>§metrics: Option<NumericalMetrics>Implementations§
Source§impl RequiredReport
impl RequiredReport
Sourcepub fn is_passed(&self) -> bool
pub fn is_passed(&self) -> bool
This convenience describes a freshly generated report. Consumers of stored reports must replay the raw data and verify execution provenance; deserializing a self-reported status is not a release authorization.
Examples found in repository?
examples/backend_numerics.rs (line 156)
116fn run(args: Args) -> Result<(), String> {
117 let expected_elements = args.config.validate()?;
118 let mut file = OpenOptions::new()
119 .write(true)
120 .create_new(true)
121 .open(&args.report)
122 .map_err(|error| format!("create report {}: {error}", args.report.display()))?;
123 let is_context = matches!(args.config.op, config::Operation::MetalContext { .. });
124 let mut document = Document {
125 schema_version: 1,
126 output_shape: args.config.op.output_shape(),
127 expected_output_elements: expected_elements,
128 configured_precision: args.config.precision(),
129 executed_precision: None,
130 execution_path: args.config.op.execution_path(),
131 coverage: if is_context {
132 "Legacy MetalContext F32 compute/blit/compute, checked initial/reused/independent submissions and post-Drop data. Drop exposes no driver status. Excludes quantized kernels, production-plan dispatch and model performance."
133 } else {
134 "Only the selected Backend trait operation, shape and fixed adapter precision; excludes production-plan dispatch, quantized Marlin, paged attention, full models and performance claims"
135 },
136 submission_phases: is_context.then_some(&SUBMISSION_PHASES),
137 submission_metrics: None,
138 started_at: chrono::Utc::now().to_rfc3339(),
139 completed: false,
140 finished_at: None,
141 execution_elapsed_ms: None,
142 result: None,
143 config: args.config,
144 };
145 write_document(&mut file, &document)?;
146 let started = Instant::now();
147 let mut result = document.config.execute();
148 bind_output_shape(&mut result, expected_elements);
149 document.submission_metrics = bind_submission_segments(&mut result, &document.config);
150 document.execution_elapsed_ms = Some(started.elapsed().as_secs_f64() * 1000.0);
151 if result.actual.is_some() {
152 document.executed_precision = Some(document.config.precision());
153 }
154 document.completed = true;
155 document.finished_at = Some(chrono::Utc::now().to_rfc3339());
156 let passed = result.is_passed();
157 let failure = result
158 .reason
159 .clone()
160 .unwrap_or_else(|| format!("required backend result: {:?}", result.status));
161 document.result = Some(result);
162 write_document(&mut file, &document)?;
163 if passed {
164 println!(
165 "Numerical check completed; report: {}",
166 args.report.display()
167 );
168 Ok(())
169 } else {
170 Err(format!("{failure}; report: {}", args.report.display()))
171 }
172}Trait Implementations§
Source§impl Clone for RequiredReport
impl Clone for RequiredReport
Source§fn clone(&self) -> RequiredReport
fn clone(&self) -> RequiredReport
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RequiredReport
impl Debug for RequiredReport
Source§impl<'de> Deserialize<'de> for RequiredReport
impl<'de> Deserialize<'de> for RequiredReport
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for RequiredReport
impl PartialEq for RequiredReport
Source§impl Serialize for RequiredReport
impl Serialize for RequiredReport
impl StructuralPartialEq for RequiredReport
Auto Trait Implementations§
impl Freeze for RequiredReport
impl RefUnwindSafe for RequiredReport
impl Send for RequiredReport
impl Sync for RequiredReport
impl Unpin for RequiredReport
impl UnsafeUnpin for RequiredReport
impl UnwindSafe for RequiredReport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more