From e7a401a8fee9a6a9a6e7ce17a7811d63b3962857 Mon Sep 17 00:00:00 2001 From: John Lapeyre Date: Mon, 16 Sep 2024 22:48:43 -0400 Subject: [PATCH] Ok this one compiles I have been observing a small number of sizes of array-like data. So I am trying to make these Array s i.e. with static size. But this is difficult. I plan to replace these with Vec. This commit starts this. --- crates/accelerate/src/xx_decompose/mod.rs | 1 + crates/accelerate/src/xx_decompose/paths.rs | 43 +++++++++++++++++++ .../accelerate/src/xx_decompose/polytopes.rs | 14 +++--- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/crates/accelerate/src/xx_decompose/mod.rs b/crates/accelerate/src/xx_decompose/mod.rs index 8f5b0a7fa10d..424a9569891c 100644 --- a/crates/accelerate/src/xx_decompose/mod.rs +++ b/crates/accelerate/src/xx_decompose/mod.rs @@ -19,3 +19,4 @@ pub mod utilities; mod types; mod weyl; mod polytopes; +mod paths; diff --git a/crates/accelerate/src/xx_decompose/paths.rs b/crates/accelerate/src/xx_decompose/paths.rs index 0b54f00b92d6..7bf04fb58e15 100644 --- a/crates/accelerate/src/xx_decompose/paths.rs +++ b/crates/accelerate/src/xx_decompose/paths.rs @@ -1 +1,44 @@ // from paths.py + +use crate::xx_decompose::polytopes::{ConvexPolytopeData, PolytopeData}; + +static MYDATA : PolytopeData<11, 29, 11, 1, 1> + = PolytopeData +{ + convex_subpolytopes: [ + ConvexPolytopeData { + inequalities : [ + [0., 0., 0., 0., 0., 0., 0., 1., -1., -1., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 1., -1., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.], + [1., 0., 0., 0., 0., 0., 0., 0., -2., 0., 0.], + [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., -2.], + [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.], + [0., 1., -1., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], + [1., -1., -1., 0., 0., 0., 0., 0., 0., 0., 0.], + [1., -1., 0., -1., 0., 0., 0., 0., 0., 0., 0.], + [0., -1., -1., -1., 0., 0., 0., 1., 0., 0., 0.], + [0., 1., -1., -1., 0., 0., 0., 1., -2., 0., 0.], + [0., 0., -1., 0., 0., 0., 0., 1., -1., -1., 0.], + [0., 0., 0., 0., 1., -1., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 1., -1., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], + [1., 0., 0., 0., -1., -1., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., -1., -1., -1., 1., 0., 0., 1.], + [0., 0., 0., 0., 1., -1., -1., 1., -2., 0., 1.], + [0., 0., 0., 0., 1., -1., -1., 1., 0., 0., -1.], + [0., 0., 0., 0., 0., 0., -1., 1., -1., -1., 1.], + [0., 0., 0., 0., 0., 0., -1., 1., -1., 0., 0.], + [0., -1., -1., 0., 1., 1., 0., 0., 0., 0., 1.], + [2., -1., -1., 0., -1., -1., 0., 0., 0., 0., -1.], + [0., 1., 1., 0., -1., -1., 0., 0., 0., 0., 1.], + [0., -1., 1., 0., 1., -1., 0., 0., 0., 0., 1.], + [0., 1., -1., 0., -1., 1., 0., 0., 0., 0., 1.], + [0., 1., -1., 0., 1., -1., 0., 0., 0., 0., -1.], + ], + equalities : [[0., 0., 0., 1., 0., 0., -1., 0., 0., 0., 0.]], + name : "I ∩ A alcove ∩ A unreflected ∩ ah slant ∩ al frustrum ∩ B alcove ∩ B unreflected ∩ AF=B3", + }, + ]}; diff --git a/crates/accelerate/src/xx_decompose/polytopes.rs b/crates/accelerate/src/xx_decompose/polytopes.rs index cbb316afdcc8..e05615159a71 100644 --- a/crates/accelerate/src/xx_decompose/polytopes.rs +++ b/crates/accelerate/src/xx_decompose/polytopes.rs @@ -9,21 +9,21 @@ use crate::xx_decompose::utilities::EPSILON; /// and /// /// equalities[j][0] + sum_i equalities[j][i] * xi == 0. -struct ConvexPolytopeData { - inequalities: [[f64; MI]; NI], - equalities: [[f64; ME]; NE], - name: String, +pub(crate) struct ConvexPolytopeData<'a, const MI:usize, const NI: usize, const ME:usize, const NE: usize> { + pub(crate) inequalities: [[f64; MI]; NI], + pub(crate) equalities: [[f64; ME]; NE], + pub(crate) name: &'a str, } /// The raw data of a union of convex polytopes. -struct PolytopeData { - convex_subpolytopes: Vec>, +pub(crate) struct PolytopeData<'a, const MI:usize, const NI: usize, const ME:usize, const NE: usize, const NC: usize> { + pub(crate) convex_subpolytopes: [ConvexPolytopeData<'a, MI, NI, ME, NE>; NC], } // TODO: In the original, this is not a class-instance method. Could be I think. /// Tests whether `polytope` contains `point. fn polytope_has_element - (polytope: ConvexPolytopeData, point: &[f64; MI - 1]) -> bool { + (polytope: ConvexPolytopeData, point: &Vec) -> bool { polytope.inequalities .iter() .all(|ie| (-EPSILON <= ie[0] + point.iter().zip(&ie[1..]).map(|(p, i)| p * i).sum::()))