docs: public List<SDVariable> diff(List<SDVariable> i_v1) {
          List<SDVariable> vals = doDiff(i_v1);
          if(vals == null){
              throw new IllegalStateException("Error executing diff operation: doDiff returned null for op: " + this.opName());
          }
  
          val outputVars = args();
          boolean copied = false;
          for(int i = 0; i < vals.size(); i++) {
              SDVariable var = outputVars[i];
              SDVariable grad = var.hasGradient() ? var.getGradient() : null;
              if(grad != null) {
                  if(!copied){
                      //Don't mutate the original - this could mess with the original op's state!
                      vals = new ArrayList<>(vals);
                      copied = true;
                  }
  
                  SDVariable gradVar =  f().add(grad, vals.get(i));
                  vals.set(i, gradVar);
                  sameDiff.setGradientForVariableName(var.getVarName(), gradVar);
              } else {
                  SDVariable gradVar = vals.get(i);
                  sameDiff.updateVariableNameAndReference(gradVar,var.getVarName() + "-grad");
                  sameDiff.setGradientForVariableName(var.getVarName(), gradVar);
                  sameDiff.setForwardVariableForVarName(gradVar.getVarName(),var);
  
              }
          }
  
          return vals;
      }