code: def dlogpdf_dlink_dvar(self, link_f, y, Y_metadata=None):
          
          c = np.zeros_like(y)
          if Y_metadata is not None and 'censored' in Y_metadata.keys():
              c = Y_metadata['censored']
  
          val = np.log(y) - link_f
          val_scaled = val/np.sqrt(self.variance)
          val_scaled2 = val/self.variance
          a = (1 - stats.norm.cdf(val_scaled))
          uncensored = (1-c)*(-val/(self.variance**2))
          censored = c * (-val*np.exp(-val**2/self.variance)/( 4*np.pi*(self.variance**2)*(a**2)) +
                           (-1 + (val**2)/self.variance)*np.exp(-val**2/(2*self.variance) ) /
                          ( a*(np.sqrt(2.*np.pi)*2*self.variance**1.5)) )
          dlik_grad_dsigma = uncensored + censored
          # dlik_grad_dsigma = dlik_grad_dsigma*self.variance
          return dlik_grad_dsigma
docs: :param link_f: latent variables link(f)
          :type link_f: Nx1 array
          :param y: data
          :type y: Nx1 array
          :param Y_metadata: Y_metadata not used in gaussian
          :returns: derivative of log likelihood evaluated at points link(f) w.r.t variance parameter
          :rtype: Nx1 array