Skip to main content

gammaloop_api/
completion.rs

1use gammalooprs::model::ParameterType;
2
3use crate::integrand_info::IntegrandKind;
4
5use clap::builder::ArgExt;
6use clap::Arg;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub(crate) enum SelectorKind {
10    Any,
11    Amplitude,
12    CrossSection,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub(crate) enum SelectRaisedSignatureScope {
17    All,
18    Massive,
19    Massless,
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23pub(crate) enum ArgValueCompletion {
24    ProcessSelector(SelectorKind),
25    IntegrandSelector(SelectorKind),
26    SelectedIntegrandTarget,
27    SelectedMasterGraph,
28    SelectedIntegrandCategory,
29    SelectRaisedSignature(SelectRaisedSignatureScope),
30    SelectRaisedCutSignature(SelectRaisedSignatureScope),
31    SelectCycleSignature,
32    SelectVertexSignature,
33    SelectParticleSignature,
34    Disabled,
35}
36
37impl ArgExt for ArgValueCompletion {}
38
39pub(crate) trait CompletionArgExt {
40    fn completion_process_selector(self, kind: SelectorKind) -> Self;
41    fn completion_integrand_selector(self, kind: SelectorKind) -> Self;
42    fn completion_selected_integrand_target(self) -> Self;
43    fn completion_selected_master_graph(self) -> Self;
44    fn completion_selected_integrand_category(self) -> Self;
45    fn completion_select_raised_signature(self, scope: SelectRaisedSignatureScope) -> Self;
46    fn completion_select_raised_cut_signature(self, scope: SelectRaisedSignatureScope) -> Self;
47    fn completion_select_cycle_signature(self) -> Self;
48    fn completion_select_vertex_signature(self) -> Self;
49    fn completion_select_particle_signature(self) -> Self;
50    fn completion_disable_special_value(self) -> Self;
51}
52
53impl CompletionArgExt for Arg {
54    fn completion_process_selector(self, kind: SelectorKind) -> Self {
55        self.add(ArgValueCompletion::ProcessSelector(kind))
56    }
57
58    fn completion_integrand_selector(self, kind: SelectorKind) -> Self {
59        self.add(ArgValueCompletion::IntegrandSelector(kind))
60    }
61
62    fn completion_selected_integrand_target(self) -> Self {
63        self.add(ArgValueCompletion::SelectedIntegrandTarget)
64    }
65
66    fn completion_selected_master_graph(self) -> Self {
67        self.add(ArgValueCompletion::SelectedMasterGraph)
68    }
69
70    fn completion_selected_integrand_category(self) -> Self {
71        self.add(ArgValueCompletion::SelectedIntegrandCategory)
72    }
73
74    fn completion_select_raised_signature(self, scope: SelectRaisedSignatureScope) -> Self {
75        self.add(ArgValueCompletion::SelectRaisedSignature(scope))
76    }
77
78    fn completion_select_raised_cut_signature(self, scope: SelectRaisedSignatureScope) -> Self {
79        self.add(ArgValueCompletion::SelectRaisedCutSignature(scope))
80    }
81
82    fn completion_select_cycle_signature(self) -> Self {
83        self.add(ArgValueCompletion::SelectCycleSignature)
84    }
85
86    fn completion_select_vertex_signature(self) -> Self {
87        self.add(ArgValueCompletion::SelectVertexSignature)
88    }
89
90    fn completion_select_particle_signature(self) -> Self {
91        self.add(ArgValueCompletion::SelectParticleSignature)
92    }
93
94    fn completion_disable_special_value(self) -> Self {
95        self.add(ArgValueCompletion::Disabled)
96    }
97}
98
99#[cfg(feature = "cli")]
100pub(crate) fn arg_value_completion(arg: &Arg) -> Option<ArgValueCompletion> {
101    arg.get::<ArgValueCompletion>().copied()
102}
103
104#[derive(Debug, Clone, PartialEq, Eq)]
105pub struct ModelParameterCompletionEntry {
106    pub name: String,
107    pub parameter_type: ParameterType,
108}
109
110#[derive(Debug, Clone, PartialEq, Eq)]
111pub struct ModelVertexCompletionEntry {
112    pub name: String,
113    pub particles: Vec<String>,
114}
115
116#[derive(Debug, Clone, Copy, PartialEq, Eq)]
117pub enum ProcessKind {
118    Amplitude,
119    CrossSection,
120}
121
122#[derive(Debug, Clone, PartialEq, Eq)]
123pub struct ProcessCompletionEntry {
124    pub id: usize,
125    pub name: String,
126    pub kind: ProcessKind,
127    pub integrand_names: Vec<String>,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq)]
131pub struct IntegrandDetailCompletionEntry {
132    pub process_name: String,
133    pub integrand_name: String,
134    pub kind: IntegrandKind,
135    pub master_graph_names: Vec<String>,
136    pub raised_all_signatures: Vec<String>,
137    pub raised_massive_signatures: Vec<String>,
138    pub raised_massless_signatures: Vec<String>,
139    pub cycle_signatures: Vec<String>,
140    pub amplitude_raised_all_signatures: Vec<String>,
141    pub amplitude_raised_massive_signatures: Vec<String>,
142    pub amplitude_raised_massless_signatures: Vec<String>,
143    pub amplitude_cycle_signatures: Vec<String>,
144    pub raised_cut_all_signatures: Vec<String>,
145    pub raised_cut_massive_signatures: Vec<String>,
146    pub raised_cut_massless_signatures: Vec<String>,
147    pub categories: Vec<String>,
148}
149
150#[derive(Debug, Clone, PartialEq, Eq)]
151pub struct IrProfileCompletionEntry {
152    pub process_name: String,
153    pub integrand_name: String,
154    pub graph_names: Vec<String>,
155    pub graph_limit_entries: Vec<String>,
156}