def _param_grad_helper(self, dL_dK, X, X2, target):
if X2 is None: X2 = X<EOL>dist = np.abs(X - X2.T)<EOL>ly=<NUM_LIT:1>/self.lengthscaleY<EOL>lu=np.sqrt(<NUM_LIT:3>)/self.lengthscaleU<EOL>dk1theta1 = np.exp(-ly*dist)*<NUM_LIT:2>*(-lu)/(lu+ly)**<NUM_LIT:3><EOL>dk2theta1 = <NUM_LIT:1>*( <EOL>np.exp(-lu*dist)*dist*(-ly+<NUM_LIT:2>*lu-lu*ly*dist+dist*lu**<NUM_LIT:2>)*(ly-lu)**(-<NUM_LIT:2>) + np.exp(-lu*dist)*(-<NUM_LIT:2>+ly*dist-<NUM_LIT:2>*dist*lu)*(ly-lu)**(-<NUM_LIT:2>) <EOL>+np.exp(-dist*lu)*(ly-<NUM_LIT:2>*lu+ly*lu*dist-dist*lu**<NUM_LIT:2>)*<NUM_LIT:2>*(ly-lu)**(-<NUM_LIT:3>) <EOL>+np.exp(-dist*ly)*<NUM_LIT:2>*(ly-lu)**(-<NUM_LIT:2>)<EOL>+np.exp(-dist*ly)*<NUM_LIT:2>*(<NUM_LIT:2>*lu-ly)*(ly-lu)**(-<NUM_LIT:3>)<EOL>)<EOL>dk3theta1 = np.exp(-dist*lu)*(lu+ly)**(-<NUM_LIT:2>)*((<NUM_LIT:2>*lu+ly+dist*lu**<NUM_LIT:2>+lu*ly*dist)*(-dist-<NUM_LIT:2>/(lu+ly))+<NUM_LIT:2>+<NUM_LIT:2>*lu*dist+ly*dist)<EOL>dktheta1 = self.varianceU*self.varianceY*(dk1theta1+dk2theta1+dk3theta1)<EOL>dk1theta2 = np.exp(-ly*dist) * ((lu+ly)**(-<NUM_LIT:2>)) * (  (-dist)*(<NUM_LIT:2>*lu+ly)  +  <NUM_LIT:1>  +  (-<NUM_LIT:2>)*(<NUM_LIT:2>*lu+ly)/(lu+ly)  )<EOL>dk2theta2 = <NUM_LIT:1>*(<EOL>np.exp(-dist*lu)*(ly-lu)**(-<NUM_LIT:2>) * ( <NUM_LIT:1>+lu*dist+(-<NUM_LIT:2>)*(ly-<NUM_LIT:2>*lu+lu*ly*dist-dist*lu**<NUM_LIT:2>)*(ly-lu)**(-<NUM_LIT:1>) )<EOL>+np.exp(-dist*ly)*(ly-lu)**(-<NUM_LIT:2>) * ( (-dist)*(<NUM_LIT:2>*lu-ly) -<NUM_LIT:1>+(<NUM_LIT:2>*lu-ly)*(-<NUM_LIT:2>)*(ly-lu)**(-<NUM_LIT:1>) )<EOL>)<EOL>dk3theta2 = np.exp(-dist*lu) * (-<NUM_LIT:3>*lu-ly-dist*lu**<NUM_LIT:2>-lu*ly*dist)/(lu+ly)**<NUM_LIT:3><EOL>dktheta2 = self.varianceU*self.varianceY*(dk1theta2 + dk2theta2 +dk3theta2)<EOL>k1 = np.exp(-ly*dist)*(<NUM_LIT:2>*lu+ly)/(lu+ly)**<NUM_LIT:2><EOL>k2 = (np.exp(-lu*dist)*(ly-<NUM_LIT:2>*lu+lu*ly*dist-lu**<NUM_LIT:2>*dist) + np.exp(-ly*dist)*(<NUM_LIT:2>*lu-ly) ) / (ly-lu)**<NUM_LIT:2> <EOL>k3 = np.exp(-lu*dist) * ( (<NUM_LIT:1>+lu*dist)/(lu+ly) + (lu)/(lu+ly)**<NUM_LIT:2> )<EOL>dkdvar = k1+k2+k3<EOL>target[<NUM_LIT:0>] += np.sum(self.varianceY*dkdvar * dL_dK)<EOL>target[<NUM_LIT:1>] += np.sum(self.varianceU*dkdvar * dL_dK)<EOL>target[<NUM_LIT:2>] += np.sum(dktheta1*(-np.sqrt(<NUM_LIT:3>)*self.lengthscaleU**(-<NUM_LIT:2>)) * dL_dK)<EOL>target[<NUM_LIT:3>] += np.sum(dktheta2*(-self.lengthscaleY**(-<NUM_LIT:2>)) * dL_dK)<EOL>
derivative of the covariance matrix with respect to the parameters.