package org.jlayer.app; 

import javax.annotation.processing.Generated;
import java.util.Random;
import org.jlayer.model.*;
import org.jlayer.util.*;

@Generated("org.jlayer.Processor") 
public class Layer_Output_ extends ALayer_Output_ implements ILayer_Output_ {

   // class Layer_Output_.D1
   static public class D1 extends ALayer_Output_.D1 implements ILayer_Output_.D1 {
      // constructors 
      public D1(ILayer_Output_.D1 layerD1){ 
         super(layerD1); 
         // create adapters 
         y = new LayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal get(int x1) { return D1.this.get(x1).y; }
            public void set(int x1, MyUtils.Signal val){ D1.this.get(x1).y = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
         };
         x = new VectorLayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal[] get(int x1) { return D1.this.get(x1).x; }
            public void set(int x1, MyUtils.Signal[] val){ D1.this.get(x1).x = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal[] get(int x1) { return D1.this.get(x1).outErr; }
            public void set(int x1, MyUtils.Signal[] val){ D1.this.get(x1).outErr = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      public D1(Output[] array){ 
         super(array); 
         // create adapters 
         y = new LayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal get(int x1) { return D1.this.get(x1).y; }
            public void set(int x1, MyUtils.Signal val){ D1.this.get(x1).y = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
         };
         x = new VectorLayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal[] get(int x1) { return D1.this.get(x1).x; }
            public void set(int x1, MyUtils.Signal[] val){ D1.this.get(x1).x = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D1<Output,MyUtils.Signal>(){
            public int length() { return D1.this.length(); } 
            public MyUtils.Signal[] get(int x1) { return D1.this.get(x1).outErr; }
            public void set(int x1, MyUtils.Signal[] val){ D1.this.get(x1).outErr = val; }
            public Output getUnit(int x1) { return D1.this.getUnit(x1); }
            public void setUnit(int x1, Output unit){ D1.this.setUnit(x1, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      // method items 
      public void initSignals(Random r){
         XIterator.D1<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.initSignals(r);
         }
      }
      public void setTarget(Layer.D1<?,Double> target){
         XIterator.D1<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _unit.setTarget(target.get(_x1));
         }
      }
      public BasedLayer.D1<Double> getError(){
         Double[] _array = new Double[length()];
         XIterator.D1<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _array[_x1] = _unit.getError();
         }
         return new LayerBase.D1<Double>(_array);
      }
      public void Forward(){
         XIterator.D1<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Forward();
         }
      }
      public void Backward(double eta){
         XIterator.D1<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Backward(eta);
         }
      }
   }

   // class Layer_Output_.D2
   static public class D2 extends ALayer_Output_.D2 implements ILayer_Output_.D2 {
      // constructors 
      public D2(ILayer_Output_.D2 layerD2){ 
         super(layerD2); 
         // create adapters 
         y = new LayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal get(int x1, int x2) { return D2.this.get(x1, x2).y; }
            public void set(int x1, int x2, MyUtils.Signal val){ D2.this.get(x1, x2).y = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
         };
         x = new VectorLayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal[] get(int x1, int x2) { return D2.this.get(x1, x2).x; }
            public void set(int x1, int x2, MyUtils.Signal[] val){ D2.this.get(x1, x2).x = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal[] get(int x1, int x2) { return D2.this.get(x1, x2).outErr; }
            public void set(int x1, int x2, MyUtils.Signal[] val){ D2.this.get(x1, x2).outErr = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      public D2(Output[][] array){ 
         super(array); 
         // create adapters 
         y = new LayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal get(int x1, int x2) { return D2.this.get(x1, x2).y; }
            public void set(int x1, int x2, MyUtils.Signal val){ D2.this.get(x1, x2).y = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
         };
         x = new VectorLayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal[] get(int x1, int x2) { return D2.this.get(x1, x2).x; }
            public void set(int x1, int x2, MyUtils.Signal[] val){ D2.this.get(x1, x2).x = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D2<Output,MyUtils.Signal>(){
            public int length() { return D2.this.length(); }
            public int length(int x1) { return D2.this.length(x1); }
            public MyUtils.Signal[] get(int x1, int x2) { return D2.this.get(x1, x2).outErr; }
            public void set(int x1, int x2, MyUtils.Signal[] val){ D2.this.get(x1, x2).outErr = val; }
            public Output getUnit(int x1, int x2) { return D2.this.getUnit(x1, x2); }
            public void setUnit(int x1, int x2, Output unit){ D2.this.setUnit(x1, x2, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      // method items 
      public void initSignals(Random r){
         XIterator.D2<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.initSignals(r);
         }
      }
      public void setTarget(Layer.D2<?,Double> target){
         XIterator.D2<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x2 = iterator.getX2();
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _unit.setTarget(target.get(_x1,_x2));
         }
      }
      public BasedLayer.D2<Double> getError(){
         Double[][] _array = new Double[length()][];
         for (int _i = 0; _i < length(); _i++) {
            _array[_i] = new Double[length(_i)];
         }
         XIterator.D2<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x2 = iterator.getX2();
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _array[_x1][_x2] = _unit.getError();
         }
         return new LayerBase.D2<Double>(_array);
      }
      public void Forward(){
         XIterator.D2<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Forward();
         }
      }
      public void Backward(double eta){
         XIterator.D2<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Backward(eta);
         }
      }
   }

   // class Layer_Output_.D3
   static public class D3 extends ALayer_Output_.D3 implements ILayer_Output_.D3 {
      // constructors 
      public D3(ILayer_Output_.D3 layerD3){ 
         super(layerD3); 
         // create adapters 
         y = new LayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).y; }
            public void set(int x1, int x2, int x3, MyUtils.Signal val){ D3.this.get(x1, x2, x3).y = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
         };
         x = new VectorLayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal[] get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).x; }
            public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ D3.this.get(x1, x2, x3).x = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal[] get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).outErr; }
            public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ D3.this.get(x1, x2, x3).outErr = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      public D3(Output[][][] array){ 
         super(array); 
         // create adapters 
         y = new LayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).y; }
            public void set(int x1, int x2, int x3, MyUtils.Signal val){ D3.this.get(x1, x2, x3).y = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
         };
         x = new VectorLayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal[] get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).x; }
            public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ D3.this.get(x1, x2, x3).x = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
         outErr = new VectorLayerAdapter.D3<Output,MyUtils.Signal>(){
            public int length() { return D3.this.length(); }
            public int length(int x1) { return D3.this.length(x1); }
            public int length(int x1, int x2) { return D3.this.length(x1, x2); }
            public MyUtils.Signal[] get(int x1, int x2, int x3) { return D3.this.get(x1, x2, x3).outErr; }
            public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ D3.this.get(x1, x2, x3).outErr = val; }
            public Output getUnit(int x1, int x2, int x3) { return D3.this.getUnit(x1, x2, x3); }
            public void setUnit(int x1, int x2, int x3, Output unit){ D3.this.setUnit(x1, x2, x3, unit); }
            protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
            protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
         };
      }
      // method items 
      public void initSignals(Random r){
         XIterator.D3<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.initSignals(r);
         }
      }
      public void setTarget(Layer.D3<?,Double> target){
         XIterator.D3<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x3 = iterator.getX3();
            int _x2 = iterator.getX2();
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _unit.setTarget(target.get(_x1,_x2,_x3));
         }
      }
      public BasedLayer.D3<Double> getError(){
         Double[][][] _array = new Double[length()][][];
         for (int _i = 0; _i < length(); _i++) {
            _array[_i] = new Double[length(_i)][];
            for (int _j = 0; _j < length(_i); _j++) {
               _array[_i][_j] = new Double[length(_i, _j)];
            }
         }
         XIterator.D3<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            int _x3 = iterator.getX3();
            int _x2 = iterator.getX2();
            int _x1 = iterator.getX1();
            Output _unit = iterator.next();
            _array[_x1][_x2][_x3] = _unit.getError();
         }
         return new LayerBase.D3<Double>(_array);
      }
      public void Forward(){
         XIterator.D3<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Forward();
         }
      }
      public void Backward(double eta){
         XIterator.D3<Output> iterator = this.xIterator(); 
         while( iterator.hasNext() ){
            Output _unit = iterator.next();
            _unit.Backward(eta);
         }
      }
   }

// class Layer_Output_

   // constructors 
   public Layer_Output_(Output[] array){ 
      super(array); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }
   public Layer_Output_(Output[][] array){ 
      super(array); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }
   public Layer_Output_(Output[][][] array){ 
      super(array); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }

   public Layer_Output_(ILayer_Output_ layer){ 
      super(layer); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }
   public Layer_Output_(ILayer_Output_.D1 layer){ 
      super(layer); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }
   public Layer_Output_(ILayer_Output_.D2 layer){ 
      super(layer); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }
   public Layer_Output_(ILayer_Output_.D3 layer){ 
      super(layer); 
      // create adapters 
      y = new LayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal get(int... ix) { return Layer_Output_.this.get(ix).y; }
         public void set(int[] ix, MyUtils.Signal val){ Layer_Output_.this.get(ix).y = val; }
         public void set(int x1, MyUtils.Signal val){ Layer_Output_.this.get(x1).y = val; }
         public void set(int x1, int x2, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2).y = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal val){ Layer_Output_.this.get(x1, x2, x3).y = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
      };
      x = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).x; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).x = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).x = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).x = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).x = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
      outErr = new VectorLayerAdapter<Output,MyUtils.Signal>(){
         public int dims() { return Layer_Output_.this.dims(); } 
         public int length() { return Layer_Output_.this.length(); } 
         public int length(int... ix) { return Layer_Output_.this.length(ix); } 
         public MyUtils.Signal[] get(int... ix) { return Layer_Output_.this.get(ix).outErr; }
         public void set(int[] ix, MyUtils.Signal[] val){ Layer_Output_.this.get(ix).outErr = val; }
         public void set(int x1, MyUtils.Signal[] val){ Layer_Output_.this.get(x1).outErr = val; }
         public void set(int x1, int x2, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2).outErr = val; }
         public void set(int x1, int x2, int x3, MyUtils.Signal[] val){ Layer_Output_.this.get(x1, x2, x3).outErr = val; }
         public Output getUnit(int... ix) { return Layer_Output_.this.getUnit(ix); }
         public void setUnit(int[] ix, Output unit){ Layer_Output_.this.setUnit(ix, unit); }
         public void setUnit(int x1, Output unit){ Layer_Output_.this.setUnit(x1, unit); }
         public void setUnit(int x1, int x2, Output unit){ Layer_Output_.this.setUnit(x1, x2, unit); }
         public void setUnit(int x1, int x2, int x3, Output unit){ Layer_Output_.this.setUnit(x1, x2, x3, unit); }
         protected MyUtils.Signal newObject(){ return new MyUtils.Signal(); }
         protected MyUtils.Signal[] newArray(int len){ return new MyUtils.Signal[len]; }
      };
   }

   // getD1(), getD2(), getD3() 
   public D1 getD1() {
      if (this.dimensionality != 1) return null;
      return new D1(layerD1.getBase());
   }
   public D2 getD2() {
      if (this.dimensionality != 2) return null;
      return new D2(layerD2.getBase());
   }
   public D3 getD3() {
      if (this.dimensionality != 3) return null;
      return new D3(layerD3.getBase());
   }

   // further method items 
   public void initSignals(Random r){
      if (r==null) throw new JLayerException("Invocation of method layer initSignals(): parameter r==null");
      switch(this.dims()) {
         case 1:
            D1 _layerD1_ = new D1(layerD1.getBase());
            _layerD1_.initSignals(r); break;
         case 2:
            D2 _layerD2_ = new D2(layerD2.getBase());
            _layerD2_.initSignals(r); break;
         case 3:
            D3 _layerD3_ = new D3(layerD3.getBase());
            _layerD3_.initSignals(r); break;
         default: throw new JLayerException();
      }
   }
   public void setTarget(Layer<?,Double> target){
      if (this.dims() != target.dims()) throw new JLayerException("Invocation of method layer setTarget(): target.dims() does not fit");
      switch(this.dims()) {
         case 1:
            D1 _layerD1_ = new D1(layerD1.getBase());
            _layerD1_.setTarget(target.getD1()); break;
         case 2:
            D2 _layerD2_ = new D2(layerD2.getBase());
            _layerD2_.setTarget(target.getD2()); break;
         case 3:
            D3 _layerD3_ = new D3(layerD3.getBase());
            _layerD3_.setTarget(target.getD3()); break;
         default: throw new JLayerException();
      }
   }
   public BasedLayer<Double> getError(){
      switch(this.dims()) {
         case 1:
            D1 _layerD1_ = new D1(layerD1.getBase());
            return new LayerBase<Double>(_layerD1_.getError());
         case 2:
            D2 _layerD2_ = new D2(layerD2.getBase());
            return new LayerBase<Double>(_layerD2_.getError());
         case 3:
            D3 _layerD3_ = new D3(layerD3.getBase());
            return new LayerBase<Double>(_layerD3_.getError());
         default: throw new JLayerException();
      }
   }
   public void Forward(){
      switch(this.dims()) {
         case 1:
            D1 _layerD1_ = new D1(layerD1.getBase());
            _layerD1_.Forward(); break;
         case 2:
            D2 _layerD2_ = new D2(layerD2.getBase());
            _layerD2_.Forward(); break;
         case 3:
            D3 _layerD3_ = new D3(layerD3.getBase());
            _layerD3_.Forward(); break;
         default: throw new JLayerException();
      }
   }
   public void Backward(double eta){
      switch(this.dims()) {
         case 1:
            D1 _layerD1_ = new D1(layerD1.getBase());
            _layerD1_.Backward(eta); break;
         case 2:
            D2 _layerD2_ = new D2(layerD2.getBase());
            _layerD2_.Backward(eta); break;
         case 3:
            D3 _layerD3_ = new D3(layerD3.getBase());
            _layerD3_.Backward(eta); break;
         default: throw new JLayerException();
      }
   }

} // end of class Layer_Output_
