docs: public INDArray getArr(boolean enforceExistence){
          if(sameDiff.arrayAlreadyExistsForVarName(getVarName()))
              return sameDiff.getArrForVarName(getVarName());
  
          //initialize value if it's actually a scalar constant (zero or 1 typically...)
          if(getScalarValue() != null && ArrayUtil.prod(getShape()) == 1) {
              INDArray arr = Nd4j.valueArrayOf(getShape(),getScalarValue().getDouble(0));
              sameDiff.associateArrayWithVariable(arr,this);
              if(log.isTraceEnabled()){
                  log.trace("getArr() for variable \"{}\" allocated new scalar array: shape {}", getVarName(), Arrays.toString(getShape()));
              }
          } else if(variableType == VariableType.VARIABLE && weightInitScheme != null && shape != null){
              INDArray arr = weightInitScheme.create(dataType, shape);
              sameDiff.associateArrayWithVariable(arr, this);
              if(log.isTraceEnabled()){
                  log.trace("getArr() for variable \"{}\" allocated new array: shape {}", getVarName(), Arrays.toString(getShape()));
              }
              return arr;
          } else if(sameDiff.getShapeForVarName(getVarName()) == null) {
              if (enforceExistence) {
                  throw new IllegalStateException("Cannot get array for SDVariable \"" + getVarName() + "\": no array has" +
                          " been defined, and array shape cannot be calculated");
              }
              if(log.isTraceEnabled()){
                  log.trace("SDVariable.getArr(): could not get array for variable {}: shape is null", getVarName());
              }
              return null;
          }
  //        else {
  //            long[] shape = sameDiff.getShapeForVarName(getVarName());
  //            INDArray newAlloc = getWeightInitScheme().create(dataType(), shape);
  //            sameDiff.associateArrayWithVariable(newAlloc,this);
  //            if(log.isTraceEnabled()){
  //                log.trace("getArr() for variable \"{}\" allocated new array with shape {}", getVarName(), Arrays.toString(getShape()));
  //            }
  //        }
  
          return sameDiff.getArrForVarName(getVarName());
      }