code: def grad_log_q(self,z):
                  
          param_count = 0
          grad = np.zeros((np.sum(self.approx_param_no),self.sims))
          for core_param in range(len(self.q)):
              for approx_param in range(self.q[core_param].param_no):
                  grad[param_count] = self.q[core_param].vi_score(z[core_param],approx_param)        
                  param_count += 1
          return grad
docs: The gradients of the approximating distributions