Implementation:Avhz RustQuant Curve get rate
| Knowledge Sources | |
|---|---|
| Domains | Numerical_Methods, Interpolation, Fixed_Income |
| Last Updated | 2026-02-07 20:00 GMT |
Overview
Concrete tool for querying and interpolating rates from yield curves provided by the RustQuant data crate.
Description
The Curve struct provides several rate query methods. get_rate(date) returns the rate for a date if it exists in the curve nodes, otherwise falls back to the interpolator. get_rate_and_insert(date) additionally caches the interpolated result. Batch methods get_rates() and get_rates_and_insert() handle multiple dates.
The interpolation backend is selected at curve construction time and stored as an Arc<dyn Interpolator<Date, f64>>.
Usage
Call these methods on a constructed Curve object to retrieve rates for any date within the curve's range. The interpolation happens transparently.
Code Reference
Source Location
- Repository: RustQuant
- File: crates/RustQuant_data/src/curves.rs
- Lines: L174-200
Signature
impl Curve {
pub fn get_rate(&self, date: Date) -> Option<f64>
pub fn get_rate_and_insert(&mut self, date: Date) -> Option<f64>
pub fn get_rates(&self, dates: Vec<Date>) -> Vec<Option<f64>>
pub fn get_rates_and_insert(&mut self, dates: Vec<Date>) -> Vec<Option<f64>>
pub fn interpolation_method(&self) -> InterpolationMethod
}
Import
use RustQuant::data::Curve;
use time::Date;
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| self | &Curve or &mut Curve | Yes | The curve to query |
| date | Date | Yes | The date to retrieve the rate for |
| dates | Vec<Date> | Yes (batch) | Multiple dates for batch retrieval |
Outputs
| Name | Type | Description |
|---|---|---|
| get_rate | Option<f64> | Rate for the date, or None if out of interpolation range |
| get_rates | Vec<Option<f64>> | Rates for multiple dates |
Usage Examples
Single Rate Query
use RustQuant::data::{Curve, CurveType, InterpolationMethod};
use time::macros::date;
let dates = vec![
date!(2024 - 01 - 01),
date!(2025 - 01 - 01),
date!(2026 - 01 - 01),
];
let rates = vec![0.04, 0.045, 0.05];
let curve = Curve::new(dates, rates, CurveType::Spot, InterpolationMethod::Linear).unwrap();
// Exact match
let rate = curve.get_rate(date!(2025 - 01 - 01));
assert_eq!(rate, Some(0.045));
// Interpolated rate
let rate = curve.get_rate(date!(2024 - 07 - 01));
println!("Interpolated 6M rate: {:?}", rate);
Batch Query with Caching
let mut curve = Curve::new(
vec![date!(2024 - 01 - 01), date!(2026 - 01 - 01)],
vec![0.04, 0.05],
CurveType::Spot,
InterpolationMethod::Linear,
).unwrap();
let query_dates = vec![
date!(2024 - 06 - 01),
date!(2025 - 01 - 01),
date!(2025 - 06 - 01),
];
// Get rates and add them to the curve nodes
let rates = curve.get_rates_and_insert(query_dates);
println!("Rates: {:?}", rates);