docs: private RandomVariableUniqueVariable apply(OperatorType operatortype, RandomVariable[] operatorVariables){
  
  		ArrayList<RandomVariableUniqueVariable> parentVariables = new ArrayList<>();
  
  		for(int i = 0; i < operatorVariables.length; i++){
  			/*
  			 * is variable upcastable to {@link RandomVariableUniqueVariable} ?
  			 */
  			if(!isUpcastableToRandomVariableUniqueVariable(operatorVariables[i])){
  				/*
  				 * if no then construct a new one and consider it constant
  				 */
  				operatorVariables[i] = new RandomVariableUniqueVariable(operatorVariables[i], /*isConstant*/ true);
  			}
  			/* add current function variable to parentVariables of new RandomVariableUniqueVariable*/
  			parentVariables.add(i, (RandomVariableUniqueVariable) operatorVariables[i]);
  
  			/* get the underlying RandomVariableFromDoubleArray from the factory */
  			operatorVariables[i] = parentVariables.get(i).getRandomVariable();
  		}
  
  		RandomVariable resultrandomvariable;
  
  		switch(operatortype){
  		/* functions with one argument  */
  		case SQUARED:
  			resultrandomvariable = operatorVariables[0].squared();
  			break;
  		case SQRT:
  			resultrandomvariable = operatorVariables[0].sqrt();
  			break;
  		case EXP:
  			resultrandomvariable = operatorVariables[0].exp();
  			break;
  		case LOG:
  			resultrandomvariable = operatorVariables[0].log();
  			break;
  		case SIN:
  			resultrandomvariable = operatorVariables[0].sin();
  			break;
  		case COS:
  			resultrandomvariable = operatorVariables[0].cos();
  			break;
  
  			/* functions with two arguments */
  		case ADD:
  			resultrandomvariable = operatorVariables[0].add(operatorVariables[1]);
  			break;
  		case SUB:
  			resultrandomvariable = operatorVariables[0].sub(operatorVariables[1]);
  			break;
  		case MULT:
  			resultrandomvariable = operatorVariables[0].mult(operatorVariables[1]);
  			break;
  		case DIV:
  			resultrandomvariable = operatorVariables[0].div(operatorVariables[1]);
  			break;
  
  			/* if non of the above throw exception */
  		default:
  			throw new IllegalArgumentException("Operation not supported!\n");
  		}
  
  		/* create new RandomVariableUniqueVariable which is definitely NOT Constant */
  		return new RandomVariableUniqueVariable(resultrandomvariable, /*isConstant*/ false, parentVariables, operatortype);
  	}