use crate::expression::compiler::call::{default_callables, VegaFusionCallable};
use crate::task_graph::timezone::RuntimeTzConfig;
use num_traits::float::FloatConst;
use std::collections::HashMap;
use vegafusion_common::data::table::VegaFusionTable;
use vegafusion_common::datafusion_common::ScalarValue;
#[derive(Clone)]
pub struct CompilationConfig {
pub signal_scope: HashMap<String, ScalarValue>,
pub data_scope: HashMap<String, VegaFusionTable>,
pub callable_scope: HashMap<String, VegaFusionCallable>,
pub constants: HashMap<String, ScalarValue>,
pub tz_config: Option<RuntimeTzConfig>,
}
impl Default for CompilationConfig {
fn default() -> Self {
Self {
signal_scope: Default::default(),
data_scope: Default::default(),
callable_scope: default_callables(),
constants: default_constants(),
tz_config: None,
}
}
}
fn default_constants() -> HashMap<String, ScalarValue> {
let mut constants = HashMap::new();
constants.insert("NaN".to_string(), ScalarValue::from(f64::NAN));
constants.insert("E".to_string(), ScalarValue::from(f64::E()));
constants.insert("LN2".to_string(), ScalarValue::from(f64::LN_2()));
constants.insert("LN10".to_string(), ScalarValue::from(f64::LN_10()));
constants.insert("LOG2E".to_string(), ScalarValue::from(f64::LOG2_E()));
constants.insert("LOG10E".to_string(), ScalarValue::from(f64::LOG10_E()));
constants.insert("MAX_VALUE".to_string(), ScalarValue::from(f64::MAX));
constants.insert(
"MIN_VALUE".to_string(),
ScalarValue::from(f64::MIN_POSITIVE),
);
constants.insert("PI".to_string(), ScalarValue::from(f64::PI()));
constants.insert(
"SQRT1_2".to_string(),
ScalarValue::from(f64::FRAC_1_SQRT_2()),
);
constants.insert("SQRT2".to_string(), ScalarValue::from(f64::SQRT_2()));
constants
}