From 22b2243b60fd5cebee054b7d2189c815df7422a6 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Sun, 13 Oct 2024 16:34:49 -0700 Subject: [PATCH 1/2] set a minimum variable value for logic paths --- substrate/src/logic/delay.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/substrate/src/logic/delay.rs b/substrate/src/logic/delay.rs index 6cc00d7..fde2252 100644 --- a/substrate/src/logic/delay.rs +++ b/substrate/src/logic/delay.rs @@ -5,13 +5,24 @@ new_key_type! { pub struct VarKey; } -#[derive(Debug, Default, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct LogicPath { segments: Vec, variables: SlotMap, + min_var_value: f64, } -#[derive(Debug, Clone, Serialize, Deserialize)] +impl Default for LogicPath { + fn default() -> Self { + Self { + segments: Vec::new(), + variables: Default::default(), + min_var_value: 1., + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] struct VarState { value: f64, } @@ -198,7 +209,7 @@ impl LogicPath { #[inline] pub fn value(&self, var: VarKey) -> f64 { - self.variables[var].value + f64::max(self.variables[var].value, self.min_var_value) } fn segment_delay_grad(&self, idx: usize, grad: &mut Gradient) -> f64 { From 62e1d45ef7a4d55d7220a22c9a6c1e5033c49c22 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Date: Sun, 13 Oct 2024 16:51:09 -0700 Subject: [PATCH 2/2] add api for setting min var value --- substrate/src/logic/delay.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/substrate/src/logic/delay.rs b/substrate/src/logic/delay.rs index fde2252..2d5a566 100644 --- a/substrate/src/logic/delay.rs +++ b/substrate/src/logic/delay.rs @@ -97,6 +97,10 @@ impl LogicPath { Self::default() } + pub fn set_min_var_value(&mut self, min_var_value: f64) { + self.min_var_value = min_var_value; + } + pub fn create_variable(&mut self) -> VarKey { self.variables.insert(VarState::default()) }