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::*; |