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}