1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use std::ops::Mul;

use num::complex::ComplexFloat;

use crate::{MaybeList, MaybeLists, Normalize, Polynomial, Tf};

impl<T1, T2, T3, B1, B2, B3, A1, A2, A3> Mul<Tf<T2, B2, A2>> for Tf<T1, B1, A1>
where
    T1: ComplexFloat,
    T2: ComplexFloat,
    T3: ComplexFloat,
    B1: MaybeLists<T1>,
    A1: MaybeList<T1>,
    B2: MaybeLists<T2>,
    A2: MaybeList<T2>,
    B3: MaybeLists<T3>,
    A3: MaybeList<T3>,
    Polynomial<T1, B1>: Mul<Polynomial<T2, B2>, Output = Polynomial<T3, B3>>,
    Polynomial<T1, A1>: Mul<Polynomial<T2, A2>, Output = Polynomial<T3, A3>>,
    Tf<T3, B3, A3>: Normalize
{
    type Output = <Tf<T3, B3, A3> as Normalize>::Output;

    fn mul(self, rhs: Tf<T2, B2, A2>) -> Self::Output
    {
        Tf {
            b: self.b*rhs.b,
            a: self.a*rhs.a
        }.normalize()
    }
}