fn div()

in gad/src/analytic.rs [455:478]


            fn div(&mut self, v0: &Value<D>, v1: &Value<D>) -> Result<Value<D>> {
                let result = self.eval().div(v0.data(), v1.data())?;
                let value = self.make_node(result, vec![v0.input(), v1.input()], {
                    let v0 = v0.clone();
                    let v1 = v1.clone();
                    move |graph, store, gradient| {
                        let c1 = graph.link(&v1);
                        let r1 = graph.reciprocal(&c1);
                        let g0 = graph.mul(&gradient, &r1)?;
                        if let Some(id) = v0.id() {
                            store.add_gradient(graph, id, &g0)?;
                        }
                        if let Some(id) = v1.id() {
                            let c0 = graph.link(&v0);
                            let c = graph.mul(&g0, &r1)?;
                            let c = graph.mul(&c, &c0)?;
                            let g1 = graph.neg(&c);
                            store.add_gradient(graph, id, &g1)?;
                        }
                        Ok(())
                    }
                });
                Ok(value)
            }