| 62 }; |
62 }; |
| 63 use crate::subproblem::InnerSettings; |
63 use crate::subproblem::InnerSettings; |
| 64 use crate::seminorms::*; |
64 use crate::seminorms::*; |
| 65 use crate::plot::*; |
65 use crate::plot::*; |
| 66 use crate::{AlgorithmOverrides, CommandLineArgs}; |
66 use crate::{AlgorithmOverrides, CommandLineArgs}; |
| |
67 use crate::tolerance::Tolerance; |
| 67 |
68 |
| 68 /// Available algorithms and their configurations |
69 /// Available algorithms and their configurations |
| 69 #[derive(Copy, Clone, Debug, Serialize, Deserialize)] |
70 #[derive(Copy, Clone, Debug, Serialize, Deserialize)] |
| 70 pub enum AlgorithmConfig<F : Float> { |
71 pub enum AlgorithmConfig<F : Float> { |
| 71 FB(FBConfig<F>), |
72 FB(FBConfig<F>), |
| 72 FW(FWConfig<F>), |
73 FW(FWConfig<F>), |
| 73 PDPS(PDPSConfig<F>), |
74 PDPS(PDPSConfig<F>), |
| |
75 } |
| |
76 |
| |
77 fn unpack_tolerance<F : Float>(v : &Vec<F>) -> Tolerance<F> { |
| |
78 assert!(v.len() == 3); |
| |
79 Tolerance::Power { initial : v[0], factor : v[1], exponent : v[2] } |
| 74 } |
80 } |
| 75 |
81 |
| 76 impl<F : ClapFloat> AlgorithmConfig<F> { |
82 impl<F : ClapFloat> AlgorithmConfig<F> { |
| 77 /// Override supported parameters based on the command line. |
83 /// Override supported parameters based on the command line. |
| 78 pub fn cli_override(self, cli : &AlgorithmOverrides<F>) -> Self { |
84 pub fn cli_override(self, cli : &AlgorithmOverrides<F>) -> Self { |
| 83 .map_or(g.bootstrap_insertions, |
89 .map_or(g.bootstrap_insertions, |
| 84 |n| Some((n[0], n[1]))), |
90 |n| Some((n[0], n[1]))), |
| 85 merge_every : cli.merge_every.unwrap_or(g.merge_every), |
91 merge_every : cli.merge_every.unwrap_or(g.merge_every), |
| 86 merging : cli.merging.clone().unwrap_or(g.merging), |
92 merging : cli.merging.clone().unwrap_or(g.merging), |
| 87 final_merging : cli.final_merging.clone().unwrap_or(g.final_merging), |
93 final_merging : cli.final_merging.clone().unwrap_or(g.final_merging), |
| |
94 tolerance: cli.tolerance.as_ref().map(unpack_tolerance).unwrap_or(g.tolerance), |
| 88 .. g |
95 .. g |
| 89 } |
96 } |
| 90 }; |
97 }; |
| 91 |
98 |
| 92 use AlgorithmConfig::*; |
99 use AlgorithmConfig::*; |