@@ -0,0 +1,969 @@
+from autograd import make_vjp%0A%0Aimport autograd.numpy as np%0Aimport autograd.numpy.random as npr%0A%0Adot_0 = lambda A, B, g: make_vjp(np.dot)(A, B)%5B0%5D(g)%0Adot_1 = lambda A, B, g: make_vjp(np.dot, argnum=1)(A, B)%5B0%5D(g)%0A%0Adot_0_0 = lambda A, B, g: make_vjp(dot_0)(A, B, g)%5B0%5D(A)%0Adot_0_1 = lambda A, B, g: make_vjp(dot_0)(A, B, g)%5B0%5D(A)%0Adot_0_2 = lambda A, B, g: make_vjp(dot_0)(A, B, g)%5B0%5D(A)%0A%0Adot_1_0 = lambda A, B, g: make_vjp(dot_1)(A, B, g)%5B0%5D(B)%0Adot_1_1 = lambda A, B, g: make_vjp(dot_1)(A, B, g)%5B0%5D(B)%0Adot_1_2 = lambda A, B, g: make_vjp(dot_1)(A, B, g)%5B0%5D(B)%0A%0AA = npr.randn(2, 3, 4, 5)%0AB = npr.randn(2, 3, 5, 4)%0Ag = npr.randn(2, 3, 4, 2, 3, 4)%0A%0Adef time_dot_0():%0A    dot_0(A, B, g)%0A%0Adef time_dot_1():%0A    dot_1(A, B, g)%0A%0Adef time_dot_0_0():%0A    dot_0_0(A, B, g)%0A%0Adef time_dot_0_1():%0A    dot_0_1(A, B, g)%0A%0Adef time_dot_0_2():%0A    dot_0_2(A, B, g)%0A%0Adef time_dot_1_0():%0A    dot_1_0(A, B, g)%0A%0Adef time_dot_1_1():%0A    dot_1_1(A, B, g)%0A%0Adef time_dot_1_2():%0A    dot_1_2(A, B, g)%0A

Add benchmarks demonstrating dot grads performance