algebra/module/homomorphism/
generic_zero_homomorphism.rs1use std::sync::Arc;
2
3use fp::vector::FpSliceMut;
4
5use crate::module::{
6 Module,
7 homomorphism::{ModuleHomomorphism, ZeroHomomorphism},
8};
9
10pub struct GenericZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>> {
11 source: Arc<S>,
12 target: Arc<T>,
13 degree_shift: i32,
14}
15
16impl<S: Module, T: Module<Algebra = S::Algebra>> GenericZeroHomomorphism<S, T> {
17 pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self {
18 Self {
19 source,
20 target,
21 degree_shift,
22 }
23 }
24}
25
26impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism
27 for GenericZeroHomomorphism<S, T>
28{
29 type Source = S;
30 type Target = T;
31
32 fn source(&self) -> Arc<Self::Source> {
33 Arc::clone(&self.source)
34 }
35
36 fn target(&self) -> Arc<Self::Target> {
37 Arc::clone(&self.target)
38 }
39
40 fn degree_shift(&self) -> i32 {
41 self.degree_shift
42 }
43
44 fn apply_to_basis_element(&self, _: FpSliceMut, _: u32, _: i32, _: usize) {}
45}
46
47impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T>
48 for GenericZeroHomomorphism<S, T>
49{
50 fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self {
51 Self::new(source, target, degree_shift)
52 }
53}