private static int[][] compileDerivativesIndirection(final int parameters,final int order,final DSCompiler valueCompiler,final DSCompiler derivativeCompiler){
  if (parameters == 0 || order == 0) {
    return new int[1][parameters];
  }
  final int vSize=valueCompiler.derivativesIndirection.length;
  final int dSize=derivativeCompiler.derivativesIndirection.length;
  final int[][] derivativesIndirection=new int[vSize + dSize][parameters];
  for (int i=0; i < vSize; ++i) {
    System.arraycopy(valueCompiler.derivativesIndirection[i],0,derivativesIndirection[i],0,parameters - 1);
  }
  for (int i=0; i < dSize; ++i) {
    System.arraycopy(derivativeCompiler.derivativesIndirection[i],0,derivativesIndirection[vSize + i],0,parameters);
    derivativesIndirection[vSize + i][parameters - 1]++;
  }
  return derivativesIndirection;
}

private static int [ ] [ ] compileDerivativesIndirection ( final int parameters , final int order , final DSCompiler valueCompiler , final DSCompiler derivativeCompiler ) { if ( parameters == 0 || order == 0 ) { return new int [ 1 ] [ parameters ] ; } final int vSize = valueCompiler . derivativesIndirection . length ; final int dSize = derivativeCompiler . derivativesIndirection . length ; final int [ ] [ ] derivativesIndirection = new int [ vSize + dSize ] [ parameters ] ; for ( int i = 0 ; i < vSize ; ++ i ) { System . arraycopy ( valueCompiler . derivativesIndirection [ i ] , 0 , derivativesIndirection [ i ] , 0 , parameters - 1 ) ; } for ( int i = 0 ; i < dSize ; ++ i ) { System . arraycopy ( derivativeCompiler . derivativesIndirection [ i ] , 0 , derivativesIndirection [ vSize + i ] , 0 , parameters ) ; derivativesIndirection [ vSize + i ] [ parameters - 1 ] ++ ; } return derivativesIndirection ; }
compile the derivatives indirection array .
