Skip to main content

dsfb_oil_gas/
lib.rs

1// DSFB Oil & Gas — Library Root
2//
3// Deterministic, read-only residual structuring framework for upstream
4// and midstream oil and gas systems.
5//
6// # Positioning
7// This crate does NOT replace RTTM, Kalman filters, SPC/CUSUM, ML
8// condition-monitoring systems, or any SCADA/DCS/historian system.
9// It structures the residuals those systems already produce into typed,
10// human-readable grammar episodes.
11//
12// # Feature flags
13// | Feature | Enables |
14// |---------|---------|
15// | *(none)*| Pure `no_std`/`no_alloc` core |
16// | `alloc` | Vec/String types; grammar engine, episode aggregation, domain frames |
17// | `std` (default, implies `alloc`) | CSV loaders, error types, report formatting, binary |
18//
19// # TRL: 3.  Computational validation on real Petrobras 3W (9,087 steps, 12 instances,
20// # 6 fault types), Equinor Volve 15/9-F-15 (5,326 depth-steps, TQA), and RPDBCS
21// # ESPset (6,032 vibration snapshots, 11 ESP units).  Hardware-in-the-loop and
22// # field-trial validation are Phase II (TRL 4-5).
23
24#![no_std]
25#![forbid(unsafe_code)]
26
27#[cfg(feature = "alloc")]
28extern crate alloc;
29
30#[cfg(feature = "std")]
31extern crate std;
32
33// ── Core modules (always available, no heap, no unsafe) ──────────────────────
34pub mod types;
35pub mod residual;
36pub mod envelope;
37pub mod grammar;
38pub mod integration;
39
40// ── Alloc-gated modules ───────────────────────────────────────────────────────
41#[cfg(feature = "alloc")]
42pub mod events;
43#[cfg(feature = "alloc")]
44pub mod oilwell;
45#[cfg(feature = "alloc")]
46pub mod pipeline;
47#[cfg(feature = "alloc")]
48pub mod subsea;
49#[cfg(feature = "alloc")]
50pub mod drilling;
51#[cfg(feature = "alloc")]
52pub mod drilling_real;
53#[cfg(feature = "alloc")]
54pub mod rotating;
55#[cfg(feature = "alloc")]
56pub mod rotating_real;
57#[cfg(feature = "alloc")]
58pub mod report;
59
60// ── Std-gated modules ─────────────────────────────────────────────────────────
61#[cfg(feature = "std")]
62pub mod loaders;
63#[cfg(feature = "std")]
64pub mod error;
65#[cfg(feature = "std")]
66pub mod figure_pipeline;
67#[cfg(feature = "std")]
68pub mod figure_traces;
69
70// ── Kani formal-verification harnesses (compiled only by `cargo kani`) ────────
71#[cfg(kani)]
72mod kani_proofs;
73
74// ── Re-exports — core (always) ────────────────────────────────────────────────
75pub use types::{AdmissibilityEnvelope, GrammarState, ReasonCode, ResidualTriple};
76pub use residual::SlewEstimator;
77pub use envelope::{evaluate, CoordClass, EnvelopeEval};
78pub use grammar::GrammarClassifier;
79pub use integration::NonIntrusiveGuarantee;
80
81// ── Re-exports — alloc ────────────────────────────────────────────────────────
82#[cfg(feature = "alloc")]
83pub use types::{AnnotatedStep, DsfbDomainFrame, Episode, EpisodeSummary, ResidualSample};
84#[cfg(feature = "alloc")]
85pub use residual::{DriftEstimator, ResidualProcessor};
86#[cfg(feature = "alloc")]
87pub use grammar::{DeterministicDsfb, DsfbEngine};
88#[cfg(feature = "alloc")]
89pub use integration::{deterministic_replay, process_read_only, ReadOnlySlice};
90#[cfg(feature = "alloc")]
91pub use events::{aggregate_episodes, episodes_to_csv, summarise};
92#[cfg(feature = "alloc")]
93pub use report::{format_episodes_table, format_summary, noise_compression_ratio};
94#[cfg(feature = "alloc")]
95pub use oilwell::OilwellFrame;
96#[cfg(feature = "alloc")]
97pub use pipeline::PipelineFrame;
98#[cfg(feature = "alloc")]
99pub use subsea::SubseaFrame;
100#[cfg(feature = "alloc")]
101pub use drilling::DrillingFrame;
102#[cfg(feature = "alloc")]
103pub use drilling_real::VolveFrame;
104#[cfg(feature = "alloc")]
105pub use rotating::RotatingFrame;
106#[cfg(feature = "alloc")]
107pub use rotating_real::EspFrame;
108
109// ── Re-exports — std ─────────────────────────────────────────────────────────
110#[cfg(feature = "std")]
111pub use loaders::{load_drilling_csv, load_esp_csv, load_oilwell_csv, load_pipeline_csv, load_rotating_csv, load_subsea_csv, load_volve_csv};
112#[cfg(feature = "std")]
113pub use error::DsfbError;
114#[cfg(feature = "std")]
115pub use figure_pipeline::{generate_all_figures, FigureGenerationResult};
116#[cfg(feature = "std")]
117pub use figure_traces::{export_grammar_traces, GrammarTraceExport};