https://github.com/minikin/uncertain-rs
A Rust library for uncertainty-aware programming, implementing the approach from "Uncertain<T>: A First-Order Type for Uncertain Data" by Bornholt, Mytkowicz, and McKinley.
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.7%) to scientific vocabulary
Keywords
Repository
A Rust library for uncertainty-aware programming, implementing the approach from "Uncertain<T>: A First-Order Type for Uncertain Data" by Bornholt, Mytkowicz, and McKinley.
Basic Info
- Host: GitHub
- Owner: minikin
- License: mit
- Language: Rust
- Default Branch: main
- Homepage: https://crates.io/crates/uncertain-rs
- Size: 192 KB
Statistics
- Stars: 2
- Watchers: 0
- Forks: 1
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
uncertain-rs
A Rust library for uncertainty-aware programming, implementing the approach from
"Uncertain
Core Concept: Evidence-Based Conditionals
Instead of treating uncertain data as exact values (which leads to bugs), this library uses evidence-based conditionals that account for uncertainty:
```rust use uncertain_rs::Uncertain;
// Create uncertain values from probability distributions let speed = Uncertain::normal(55.2, 5.0); // GPS reading with ±5 mph error
// Evidence-based conditional (returns Uncertain
// Convert evidence to decision with confidence level if speedingevidence.probabilityexceeds(0.95) { // Only act if 95% confident println!("Issue speeding ticket"); } ```
Features
- Evidence-based conditionals: Comparisons return evidence, not boolean facts
- Uncertainty propagation: Arithmetic operations preserve uncertainty
- Lazy evaluation: Computation graphs built lazily for efficiency
- Graph optimization: Common subexpression elimination and caching for performance
- SPRT hypothesis testing: Sequential Probability Ratio Test for optimal sampling
- Rich distributions: Normal, uniform, exponential, binomial, categorical, etc.
- Statistical analysis: Mean, std dev, confidence intervals, CDF, etc.
Installation
Add this to your Cargo.toml:
toml
[dependencies]
uncertain-rs = "0.1.0"
Quick Start
```rust use uncertain_rs::Uncertain;
fn main() { // Create uncertain values let x = Uncertain::normal(5.0, 1.0); let y = Uncertain::normal(3.0, 0.5);
// Perform arithmetic operations
let sum = x.clone() + y.clone();
let product = x * y;
// Sample from the distributions
println!("Sum sample: {}", sum.sample());
println!("Product sample: {}", product.sample());
// Statistical analysis
println!("Sum mean: {}", sum.expected_value(1000));
println!("Sum std dev: {}", sum.standard_deviation(1000));
} ```
For more examples, see the examples directory.
Advanced Features
Graph Optimization
The library includes a computation graph optimizer that can eliminate common subexpressions and improve performance:
```rust use uncertain_rs::{Uncertain, computation::GraphOptimizer};
// Create an expression with common subexpressions let x = Uncertain::normal(2.0, 0.1); let y = Uncertain::normal(3.0, 0.1); let z = Uncertain::normal(1.0, 0.1);
// Expression: (x + y) * (x + y) + (x + y) * z // The subexpression (x + y) appears 3 times let sum = x.clone() + y.clone(); let expr = (sum.clone() * sum.clone()) + (sum * z);
// Apply optimization to eliminate common subexpressions let mut optimizer = GraphOptimizer::new(); let optimized = optimizer.eliminatecommonsubexpressions(expr.intocomputationnode());
// The optimized graph reuses the (x + y) subexpression println!("Cache size: {}", optimizer.subexpression_cache.len()); ```
Development Workflow
We use just as a task runner. Available commands:
just fmt- Format codejust lint- Run clippy lintingjust test- Run testsjust audit- Security audit (check for vulnerabilities)just dev- Run the full development workflow (format + lint + test + audit)
Security
This project takes security seriously. We run cargo audit to check for known vulnerabilities in dependencies:
- CI: Automated security audits run on every push and PR
- Local: Run
just auditorcargo auditbefore submitting changes - Installation: If you don't have
cargo-audit, runcargo install cargo-audit
The security audit checks all dependencies against the RustSec Advisory Database.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Owner
- Name: Oleksandr Prokhorenko
- Login: minikin
- Kind: user
- Location: Remote
- Website: https://minikin.me
- Repositories: 507
- Profile: https://github.com/minikin
GitHub Events
Total
- Watch event: 2
- Delete event: 5
- Public event: 1
- Push event: 21
- Pull request event: 10
- Fork event: 1
- Create event: 7
Last Year
- Watch event: 2
- Delete event: 5
- Public event: 1
- Push event: 21
- Pull request event: 10
- Fork event: 1
- Create event: 7
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 0
- Total pull requests: 6
- Average time to close issues: N/A
- Average time to close pull requests: 20 minutes
- Total issue authors: 0
- Total pull request authors: 2
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 4
- Bot issues: 0
- Bot pull requests: 1
Past Year
- Issues: 0
- Pull requests: 6
- Average time to close issues: N/A
- Average time to close pull requests: 20 minutes
- Issue authors: 0
- Pull request authors: 2
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 4
- Bot issues: 0
- Bot pull requests: 1
Top Authors
Issue Authors
Pull Request Authors
- minikin (5)
- dependabot[bot] (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- cargo 268 total
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 1
- Total maintainers: 1
crates.io: uncertain-rs
A Rust library for uncertainty-aware programming, implementing the approach from 'Uncertain<T>: A First-Order Type for Uncertain Data'
- Homepage: https://github.com/minikin/uncertain-rs
- Documentation: https://docs.rs/uncertain-rs/
- License: MIT
-
Latest release: 0.1.0
published 7 months ago
Rankings
Maintainers (1)
Dependencies
- actions/cache v3 composite
- dtolnay/rust-toolchain master composite
- ./.github/actions/build-project * composite
- ./.github/actions/quality-checks * composite
- ./.github/actions/run-tests * composite
- ./.github/actions/setup-rust * composite
- actions/checkout v4 composite
- codecov/codecov-action v5 composite
- taiki-e/install-action cargo-llvm-cov composite
- taiki-e/install-action cargo-audit composite
- approx 0.5 development
- rand 0.9.2
- uuid 1.0