input = new Channel(Float.TYPE); output = new Channel(Float.TYPE);
streamInput = input; streamOutput = output;
         public void Init() {            SetSplitter(WEIGHTED_ROUND_ROBIN(N, N));            Add(new Filter() {                public void InitIO ()                {                    input = new Channel(Float.TYPE);                    output = new Channel(Float.TYPE);                }                public void InitCount ()                {                    inCount = 1;                    outCount = 1;                }                float calcWeight (int i, int N, int W)                {                    //ASSERT (false); // must implement this function!                    return 1;                }               float weights[] = new float[W];               int curr;               public void Init() {                  for(int i=0; i<W; i++)                     weights[i] = calcWeight(i, N, W);                  curr = 0;               }               public void Work() {                  output.PushFloat(input.PopFloat()*weights[curr++]);                  if(curr>= W) curr = 0;               }            });            Add(new Identity(Float.TYPE));            SetJoiner(ROUND_ROBIN ());      }});