fn matmul()

in gad/src/matrix.rs [153:179]


            fn matmul(
                &mut self,
                v1: &Value<D>,
                v2: &Value<D>,
                prop1: MatProp,
                prop2: MatProp,
            ) -> Result<Value<D>> {
                let result = self.eval().matmul(v1.data(), v2.data(), prop1, prop2)?;
                let value = self.make_node(result, vec![v1.input(), v2.input()], {
                    let v1 = v1.clone();
                    let v2 = v2.clone();
                    move |graph, store, gradient| {
                        if let Some(id) = v1.id() {
                            let c2 = graph.link(&v2);
                            let grad = graph.matmul(&gradient, c2, prop1, prop2.transpose())?;
                            store.add_gradient(graph, id, &grad)?;
                        }
                        if let Some(id) = v2.id() {
                            let c1 = graph.link(&v1);
                            let grad = graph.matmul(c1, &gradient, prop1.transpose(), prop2)?;
                            store.add_gradient(graph, id, &grad)?;
                        }
                        Ok(())
                    }
                });
                Ok(value)
            }