gam_terms/analytic_penalties/
manifest.rs1use super::*;
18
19pub trait PenaltyManifest: AnalyticPenalty {
20 const KIND_TAG: &'static str;
21 const PYTHON_WRAPPER: &'static str;
22 const ROW_BLOCK_DIAGONAL: bool;
23
24 fn dispatch_tier(&self) -> PenaltyTier {
25 self.tier()
26 }
27}
28
29impl PenaltyManifest for ARDPenalty {
30 const KIND_TAG: &'static str = "ard";
31 const PYTHON_WRAPPER: &'static str = "ARDPenalty";
32 const ROW_BLOCK_DIAGONAL: bool = true;
33}
34
35impl PenaltyManifest for BlockOrthogonalityPenalty {
36 const KIND_TAG: &'static str = "block_orthogonality";
37 const PYTHON_WRAPPER: &'static str = "BlockOrthogonalityPenalty";
38 const ROW_BLOCK_DIAGONAL: bool = false;
39}
40
41impl PenaltyManifest for BlockSparsityPenalty {
42 const KIND_TAG: &'static str = "block_sparsity";
43 const PYTHON_WRAPPER: &'static str = "BlockSparsityPenalty";
44 const ROW_BLOCK_DIAGONAL: bool = false;
45}
46
47impl PenaltyManifest for DecoderIncoherencePenalty {
48 const KIND_TAG: &'static str = "decoder_incoherence";
49 const PYTHON_WRAPPER: &'static str = "DecoderIncoherencePenalty";
50 const ROW_BLOCK_DIAGONAL: bool = false;
51}
52
53impl PenaltyManifest for HarmonicRoughnessPenalty {
54 const KIND_TAG: &'static str = "harmonic_roughness";
55 const PYTHON_WRAPPER: &'static str = "HarmonicRoughnessPenalty";
56 const ROW_BLOCK_DIAGONAL: bool = true;
57}
58
59impl PenaltyManifest for IBPAssignmentPenalty {
60 const KIND_TAG: &'static str = "ibp_assignment";
61 const PYTHON_WRAPPER: &'static str = "IBPAssignmentPenalty";
62 const ROW_BLOCK_DIAGONAL: bool = true;
63}
64
65impl PenaltyManifest for IsometryPenalty {
66 const KIND_TAG: &'static str = "isometry";
67 const PYTHON_WRAPPER: &'static str = "IsometryPenalty";
68 const ROW_BLOCK_DIAGONAL: bool = false;
69}
70
71impl PenaltyManifest for IvaeRidgeMeanGauge {
72 const KIND_TAG: &'static str = "ivae_ridge_mean_gauge";
73 const PYTHON_WRAPPER: &'static str = "IvaeRidgeMeanGauge";
74 const ROW_BLOCK_DIAGONAL: bool = false;
75}
76
77impl PenaltyManifest for JumpReLUPenalty {
78 const KIND_TAG: &'static str = "jumprelu";
79 const PYTHON_WRAPPER: &'static str = "JumpReLUPenalty";
80 const ROW_BLOCK_DIAGONAL: bool = true;
81}
82
83impl PenaltyManifest for MechanismSparsityPenalty {
84 const KIND_TAG: &'static str = "mechanism_sparsity";
85 const PYTHON_WRAPPER: &'static str = "MechanismSparsityPenalty";
86 const ROW_BLOCK_DIAGONAL: bool = false;
87}
88
89impl PenaltyManifest for ShapeMonotonicityPenalty {
90 const KIND_TAG: &'static str = "monotonicity";
91 const PYTHON_WRAPPER: &'static str = "MonotonicityPenalty";
92 const ROW_BLOCK_DIAGONAL: bool = false;
93}
94
95impl PenaltyManifest for NestedPrefixPenalty {
96 const KIND_TAG: &'static str = "nested_prefix";
97 const PYTHON_WRAPPER: &'static str = "NestedPrefixPenalty";
98 const ROW_BLOCK_DIAGONAL: bool = true;
99}
100
101impl PenaltyManifest for NuclearNormPenalty {
102 const KIND_TAG: &'static str = "nuclear_norm";
103 const PYTHON_WRAPPER: &'static str = "NuclearNormPenalty";
104 const ROW_BLOCK_DIAGONAL: bool = false;
105}
106
107impl PenaltyManifest for OrthogonalityPenalty {
108 const KIND_TAG: &'static str = "orthogonality";
109 const PYTHON_WRAPPER: &'static str = "OrthogonalityPenalty";
110 const ROW_BLOCK_DIAGONAL: bool = false;
111}
112
113impl PenaltyManifest for ParametricRowPrecisionPriorPenalty {
114 const KIND_TAG: &'static str = "parametric_row_precision_prior";
115 const PYTHON_WRAPPER: &'static str = "ParametricAuxConditionalPriorPenalty";
116 const ROW_BLOCK_DIAGONAL: bool = true;
117}
118
119impl PenaltyManifest for RowPrecisionPriorPenalty {
120 const KIND_TAG: &'static str = "row_precision_prior";
121 const PYTHON_WRAPPER: &'static str = "AuxConditionalPriorPenalty";
122 const ROW_BLOCK_DIAGONAL: bool = true;
123}
124
125impl PenaltyManifest for ScadMcpPenalty {
126 const KIND_TAG: &'static str = "scad_mcp";
127 const PYTHON_WRAPPER: &'static str = "ScadMcpPenalty";
128 const ROW_BLOCK_DIAGONAL: bool = true;
129}
130
131impl PenaltyManifest for SheafConsistencyPenalty {
132 const KIND_TAG: &'static str = "sheaf_consistency";
133 const PYTHON_WRAPPER: &'static str = "SheafConsistencyPenalty";
134 const ROW_BLOCK_DIAGONAL: bool = false;
135}
136
137impl PenaltyManifest for SoftmaxAssignmentSparsityPenalty {
138 const KIND_TAG: &'static str = "softmax_assignment_sparsity";
139 const PYTHON_WRAPPER: &'static str = "SoftmaxAssignmentSparsityPenalty";
140 const ROW_BLOCK_DIAGONAL: bool = true;
141}
142
143impl PenaltyManifest for SparsityPenalty {
144 const KIND_TAG: &'static str = "sparsity";
145 const PYTHON_WRAPPER: &'static str = "SparsityPenalty";
146 const ROW_BLOCK_DIAGONAL: bool = true;
147}
148
149impl PenaltyManifest for TopKActivationPenalty {
150 const KIND_TAG: &'static str = "topk_activation";
151 const PYTHON_WRAPPER: &'static str = "TopKActivationPenalty";
152 const ROW_BLOCK_DIAGONAL: bool = true;
153}
154
155impl PenaltyManifest for TotalVariationPenalty {
156 const KIND_TAG: &'static str = "total_variation";
157 const PYTHON_WRAPPER: &'static str = "TotalVariationPenalty";
158 const ROW_BLOCK_DIAGONAL: bool = false;
159}
160
161#[macro_export]
162macro_rules! analytic_penalty_registry {
163 ($macro:ident) => {
164 $macro! {
165 register!(Isometry, IsometryPenalty);
166 register!(Sparsity, SparsityPenalty);
167 register!(SoftmaxAssignmentSparsity, SoftmaxAssignmentSparsityPenalty);
168 register!(IBPAssignment, IBPAssignmentPenalty);
169 register!(Ard, ARDPenalty);
170 register!(TopKActivation, TopKActivationPenalty);
171 register!(JumpReLU, JumpReLUPenalty);
172 register!(TotalVariation, TotalVariationPenalty);
173 register!(HarmonicRoughness, HarmonicRoughnessPenalty);
174 register!(NuclearNorm, NuclearNormPenalty);
175 register!(BlockSparsity, BlockSparsityPenalty);
176 register!(MechanismSparsity, MechanismSparsityPenalty);
177 register!(Monotonicity, ShapeMonotonicityPenalty);
178 register!(NestedPrefix, NestedPrefixPenalty);
179 register!(RowPrecisionPrior, RowPrecisionPriorPenalty);
180 register!(IvaeRidgeMeanGauge, IvaeRidgeMeanGauge);
181 register!(ParametricRowPrecisionPrior, ParametricRowPrecisionPriorPenalty);
182 register!(ScadMcp, ScadMcpPenalty);
183 register!(BlockOrthogonality, BlockOrthogonalityPenalty);
184 register!(DecoderIncoherence, DecoderIncoherencePenalty);
185 register!(Orthogonality, OrthogonalityPenalty);
186 register!(SheafConsistency, SheafConsistencyPenalty);
187 }
188 };
189}