.into(),
);
}
- dbg!(entry);
}
}
}
.with_marker(footnote.marker.map(|s| Value::new_user_text(s))),
);
}
- dbg!(&footnotes);
let footnotes = pivot::Footnotes::from_iter(footnotes);
for (purpose, area) in [
}
}
- let mut series = HashMap::<&str, Series>::new();
+ let mut series = BTreeMap::<&str, Series>::new();
while let n_source = source_variables.len()
&& let n_derived = derived_variables.len()
&& (n_source > 0 || n_derived > 0)
for sv in take(&mut source_variables) {
match sv.decode(&data, &series) {
Ok(s) => {
+ dbg!(&sv.id);
series.insert(&sv.id, s);
}
Err(()) => source_variables.push(sv),
for dv in take(&mut derived_variables) {
match dv.decode(&series) {
Ok(s) => {
+ eprintln!("{:?} {:?} {:?}", &dv.id, dv.depends_on, &dv.value);
series.insert(&dv.id, s);
}
Err(()) => derived_variables.push(dv),
let mut coordinate_to_index = HashMap::new();
let mut next_cats = Vec::with_capacity(cats.len());
let mut start = 0;
- dbg!(&variable.name, &variable.values);
for end in 1..=cats.len() {
let dv1 = &variable.values[cats[start].index];
- if end < cats.len() && &variable.values[cats[end].index].value == &dv1.value {
- println!("categories {start}..={end} have same value {dv1:?}");
- } else {
- dbg!(start..end);
+ if end >= cats.len() || &variable.values[cats[end].index].value != &dv1.value {
let name = variable.map.lookup(dv1);
if name.is_number_or(|s| !s.is_empty()) {
- dbg!();
let name = variable.new_name(dv1, footnotes);
let mut group = Group::new(name);
for i in start..end {
next_cats.push(next_cat);
} else {
// XXX coordinate_to_index?
- dbg!();
for cat in &cats[start..end] {
next_cats.push(cat.clone());
}
}
*variable.coordinate_to_index.borrow_mut() = coordinate_to_index;
cats = next_cats;
- dbg!(&cats);
}
let dimension = Dimension::new(
fn decode_dimensions<'a, 'b>(
variables: impl IntoIterator<Item = &'a str>,
- series: &'b HashMap<&str, Series>,
+ series: &'b BTreeMap<&str, Series>,
axes: &HashMap<usize, &Axis>,
styles: &HashMap<&str, &Style>,
a: Axis3,
// XXX indexing
let dv = &cell_footnotes.values[i];
if let Some(s) = dv.value.as_string() {
- dbg!(dv);
for part in s.split(',') {
if let Ok(index) = part.parse::<usize>()
&& let Some(index) = index.checked_sub(1)
&& let Some(footnote) = footnotes.get(index)
{
- dbg!(footnote);
value = value.with_footnote(footnote);
}
}
&self,
intersect: &Intersect,
look: &mut Look,
- series: &HashMap<&str, Series>,
+ series: &BTreeMap<&str, Series>,
dims: &mut [Dim],
data: &mut HashMap<Vec<usize>, Value>,
) {
.with_footnotes(footnotes)
.with_data(data)
.with_layer(¤t_layer);
- let decimal = dbg!(Decimal::for_lang(dbg!(&self.lang)));
+ let decimal = Decimal::for_lang(&self.lang);
if pivot_table.style.settings.decimal != decimal {
Arc::make_mut(&mut pivot_table.style.settings).decimal = decimal;
}
fn decode(
&self,
data: &IndexMap<String, IndexMap<String, Vec<DataValue>>>,
- series: &HashMap<&str, Series>,
+ series: &BTreeMap<&str, Series>,
) -> Result<Series, ()> {
let label_series = if let Some(label_variable) = &self.label_variable {
let Some(label_series) = series.get(label_variable.references.as_str()) else {
string_format: Option<StringFormat>,
#[serde(default, rename = "valueMapEntry")]
value_map: Vec<ValueMapEntry>,
+ #[serde(rename = "@dependsOn")]
+ depends_on: Option<String>,
}
impl DerivedVariable {
- fn decode(&self, series: &HashMap<&str, Series>) -> Result<Series, ()> {
- let mut values = if self.value == "constant(0)" {
- let n_values = if let Some(series) = series.values().next() {
- series.values.len()
- } else {
- return Err(());
- };
+ fn decode(&self, series: &BTreeMap<&str, Series>) -> Result<Series, ()> {
+ let mut values = if self.id == "column" || self.id == "row" {
+ vec![]
+ } else if let Some(rest) = self.id.strip_prefix("dimension")
+ && rest.parse::<usize>().is_ok()
+ {
+ vec![]
+ } else if self.value == "constant(0)" {
+ let n_values = series
+ .values()
+ .find_map(|series| {
+ if !series.values.is_empty() {
+ Some(series.values.len())
+ } else {
+ None
+ }
+ })
+ .ok_or(())?;
(0..n_values)
.map(|_| DataValue {
index: Some(0.0),
impl Labeling {
fn decode_format_map<'a>(
&self,
- series: &'a HashMap<&str, Series>,
+ series: &'a BTreeMap<&str, Series>,
) -> (Option<&'a Series>, HashMap<i64, crate::format::Format>) {
let mut map = HashMap::new();
let mut cell_format = None;