From 52561a870b4f9a3c8ad04c795a730100531c8fb6 Mon Sep 17 00:00:00 2001 From: guille <guillermopolito@gmail.com> Date: Fri, 28 Oct 2016 15:10:12 +0200 Subject: [PATCH] Collapsing N2S3InputStream and InputStream --- .../features/io/input/AERInputStream.scala | 9 +--- .../io/input/DigitalHexInputStream.scala | 4 +- .../io/input/EndStageOnStreamEnd.scala | 26 ----------- .../features/io/input/FontInputStream.scala | 7 ++- .../n2s3/features/io/input/LFWReader.scala | 6 +-- .../io/input/MnistFileInputStream.scala | 4 +- .../features/io/input/N2S3InputStream.scala | 44 +++---------------- .../features/io/input/SeventSegment.scala | 4 +- .../features/io/input/StreamSupport.scala | 9 ++-- .../emeraude/n2s3/core/TestInput.scala | 4 +- .../n2s3/features/io/TestAERInputStream.scala | 11 ----- .../integration/TestIntegrationN2S3.scala | 17 +++---- .../emeraude/n2s3/apps/bio/Masquelier.scala | 6 +-- .../n2s3/apps/bio/SmallReservoir.scala | 4 +- .../n2s3/apps/bio/SupervisedDelay.scala | 8 ++-- .../n2s3/apps/bio/SupervisedXOR.scala | 8 ++-- .../n2s3/apps/ternary/BitStream.scala | 6 +-- .../n2s3/apps/ternary/PatternStart.scala | 6 +-- .../n2s3/apps/ternary/SmallReservoir.scala | 4 +- 19 files changed, 48 insertions(+), 139 deletions(-) delete mode 100644 n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/EndStageOnStreamEnd.scala diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/AERInputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/AERInputStream.scala index aee00288..e374002a 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/AERInputStream.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/AERInputStream.scala @@ -4,7 +4,7 @@ import java.io.{EOFException, File} import fr.univ_lille.cristal.emeraude.n2s3.core.actors.ShapelessSpike import fr.univ_lille.cristal.emeraude.n2s3.support.GlobalTypesAlias.Timestamp -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{Input, InputSeq, N2S3Input, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import net.sf.jaer.aemonitor.AEPacketRaw import net.sf.jaer.eventio.AEFileInputStream @@ -92,17 +92,14 @@ case class AERInput(timestamp: Timestamp, address : Int) extends Input { * @param filename: String, the name of the file to read from */ //TODO: expliquer la relation entre AERInputStream AERInput -class AERInputStream(filename: String, s : Shape, chunkSize : Int = 64) extends N2S3InputStream[InputSeq[AERInput]] with StreamTimestampsManager { +class AERInputStream(filename: String, s : Shape, chunkSize : Int = 64) extends InputStream[InputSeq[AERInput]] with StreamTimestampsManager { val aeis = new AEFileInputStream(new File(filename)) val startTime = aeis.getFirstTimestamp val numberImage = aeis.size().toInt var peekEvent: Option[Seq[AERInput]] = None - var lastPrint = 0 - this.stageStrategy = new EndStageOnStreamEnd - aeis.mark() /** @@ -110,7 +107,6 @@ class AERInputStream(filename: String, s : Shape, chunkSize : Int = 64) extends */ override def reset() : Unit = { maxPrefix() - this.stageStrategy.streamFinished() this.peekEvent = None aeis.rewind() } @@ -142,7 +138,6 @@ class AERInputStream(filename: String, s : Shape, chunkSize : Int = 64) extends */ def readAllEvents() = eventsFromAEPacket(aeis.readPacketByNumber(aeis.size().toInt)) - override def shape: Shape = s override def next() = this.innerNext(chunkSize) def innerNext(n: Int): InputSeq[AERInput] = { diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/DigitalHexInputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/DigitalHexInputStream.scala index bfd38230..9a0117b8 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/DigitalHexInputStream.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/DigitalHexInputStream.scala @@ -1,5 +1,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input +import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStream + /** * Factory for [[DigitalHexInputStream]]. */ @@ -12,7 +14,7 @@ object DigitalHexEntry { * An input stream that generates hexadecimal chars in a 3x5 picture of binary pixels. * This stream is generated in memory. */ -class DigitalHexInputStream extends N2S3InputStream[SampleInput] { +class DigitalHexInputStream extends InputStream[SampleInput] { val characters = List( diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/EndStageOnStreamEnd.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/EndStageOnStreamEnd.scala deleted file mode 100644 index 197b58a3..00000000 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/EndStageOnStreamEnd.scala +++ /dev/null @@ -1,26 +0,0 @@ -package fr.univ_lille.cristal.emeraude.n2s3.features.io.input - -import fr.univ_lille.cristal.emeraude.n2s3.core.InputLayer - -/** - * Created by guille on 6/10/16. - */ - -abstract class InputStageStrategy() { - var inputLayer: Option[InputLayer] = None - protected def doEndOfStage() = this.inputLayer match{ - case Some(layer) => - case None => - } - - def streamFinished() = { this.doEndOfStage() } - def itemProcessed() -} - -class EndStageOnItemProcessed() extends InputStageStrategy { - override def itemProcessed(): Unit = { this.doEndOfStage() } -} - -class EndStageOnStreamEnd() extends InputStageStrategy { - override def itemProcessed(): Unit = { /*Do Nothing*/ } -} diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/FontInputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/FontInputStream.scala index ff8e9845..5ca5f6b2 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/FontInputStream.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/FontInputStream.scala @@ -2,6 +2,8 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input import java.io.File import javax.imageio.ImageIO + +import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStream /* object FontInput { @@ -17,8 +19,7 @@ object FontInput { /** * Created by falezp on 20/04/16. */ -class FontInputStream(filename : String, characterWidth : Int, characterHeight : Int, labels : List[String]) extends -N2S3InputStream[SampleInput]{ +class FontInputStream(filename : String, characterWidth : Int, characterHeight : Int, labels : List[String]) extends InputStream[SampleInput]{ val image = ImageIO.read(new File(filename)) val characters = labels.zipWithIndex.map{ case (name, c) => @@ -45,6 +46,4 @@ N2S3InputStream[SampleInput]{ def reset() = { cursor = 0 } - - override def shape: Shape = Shape(characterWidth, characterHeight) } diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/LFWReader.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/LFWReader.scala index 8ff3178e..6dc60b64 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/LFWReader.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/LFWReader.scala @@ -3,6 +3,8 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input import java.io.File import javax.imageio.ImageIO +import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStream + import scala.util.Random /** * Created by falezp on 18/08/16. @@ -14,12 +16,10 @@ object LFWEntry { def apply() = new StreamEntry[SampleInput](Shape(width, height)) } -class LFWReader(directoryPath : String) extends N2S3InputStream[SampleInput] { +class LFWReader(directoryPath : String) extends InputStream[SampleInput] { val mainDirectory = new File(directoryPath) - override def shape: Shape = Shape(LFWEntry.width, LFWEntry.height) - override def next(): SampleInput = { val subDirectories = mainDirectory.listFiles() diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala index e3ad522d..d326c0a0 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/MnistFileInputStream.scala @@ -2,6 +2,8 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input import java.io.{DataInputStream, FileInputStream, IOException} +import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStream + /** * Class Reader for mnist file */ @@ -10,7 +12,7 @@ object MnistEntry { def apply() = new StreamEntry[SampleInput](Shape(28, 28)) } -class MnistFileInputStream(val imageFile: String, val labelFile: String, val sizeOfChunk: Int = 64) extends N2S3InputStream[SampleInput] { +class MnistFileInputStream(val imageFile: String, val labelFile: String, val sizeOfChunk: Int = 64) extends InputStream[SampleInput] { //Magic number diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/N2S3InputStream.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/N2S3InputStream.scala index f9bf5b3b..bedcb62f 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/N2S3InputStream.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/N2S3InputStream.scala @@ -1,39 +1,18 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input -import fr.univ_lille.cristal.emeraude.n2s3.core.InputLayer import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStreamCombinators._ import fr.univ_lille.cristal.emeraude.n2s3.support.io._ -/** - * Created by guille on 6/3/16. - */ - -abstract class N2S3InputStream[T] extends InputStream[T]{ - - def shape : Shape - - var stageStrategy: InputStageStrategy = new EndStageOnItemProcessed() - def getStageManagementStrategy() = this.stageStrategy - - def labelChange(label : String) = { - //stageStrategy.inputLayer.get.labelChange(label) - } - - def setContainer(container : InputLayer) : Unit = { - stageStrategy.inputLayer = Some(container) - } -} - abstract class StreamConverter[I <: InputSeq[_], O <: InputSeq[_]] { - private var inputStream : N2S3InputStream[I] = _ + private var inputStream : InputStream[I] = _ protected var shape = Shape() def setShape(shape : Shape) : Unit = { this.shape = shape } - def setStream(inputStream : N2S3InputStream[I]) = { + def setStream(inputStream : InputStream[I]) = { this.inputStream = inputStream } def atEnd() = inputStream.atEnd() @@ -52,27 +31,17 @@ abstract class StreamConverter[I <: InputSeq[_], O <: InputSeq[_]] { } object N2S3InputStreamCombinators{ - implicit def streamCombinator[T](stream: N2S3InputStream[T]): N2S3InputStreamCombinator[T, T] = { + implicit def streamCombinator[T](stream: InputStream[T]): N2S3InputStreamCombinator[T, T] = { new N2S3InputStreamCombinator(stream) } } -class N2S3InputStreamCombinator[T, T2](originalStream: N2S3InputStream[T], combinedStream: InputStream[T2]) extends N2S3InputStream[T2] { +class N2S3InputStreamCombinator[T, T2](originalStream: InputStream[T], combinedStream: InputStream[T2]) extends InputStream[T2] { - def this(stream: N2S3InputStream[T]) { + def this(stream: InputStream[T]) { this(stream, stream.asInstanceOf[InputStream[T2]]) } - override def setContainer(container : InputLayer) : Unit = { - super.setContainer(container) - originalStream.setContainer(container) - - combinedStream match { - case value: N2S3InputStream[_] => value.setContainer(container) - case _ => - } - } - def take(i: Int) = { val newCombinedStream = combinedStream.take(i) new N2S3InputStreamCombinator(originalStream, newCombinedStream) @@ -103,9 +72,6 @@ class N2S3InputStreamCombinator[T, T2](originalStream: N2S3InputStream[T], combi new N2S3InputStreamCombinator(originalStream, newCombinedStream) } - override def shape : Shape = originalStream.shape - override def getStageManagementStrategy() = originalStream.getStageManagementStrategy() - override def next(): T2 = combinedStream.next() override def atEnd(): Boolean = combinedStream.atEnd() override def reset(): Unit = combinedStream.reset() diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/SeventSegment.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/SeventSegment.scala index da6c375a..7e9778b8 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/SeventSegment.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/SeventSegment.scala @@ -1,5 +1,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input +import fr.univ_lille.cristal.emeraude.n2s3.support.io.InputStream + /** * Created by falezp on 31/08/16. */ @@ -8,7 +10,7 @@ object SevenSegmentEntry { def apply() = new StreamEntry[SampleInput](Shape(7, 2)) } -class SevenSegmentInputStream extends N2S3InputStream[SampleInput] { +class SevenSegmentInputStream extends InputStream[SampleInput] { val characters = List( diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/StreamSupport.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/StreamSupport.scala index 5f23bfe6..156b9cd4 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/StreamSupport.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/input/StreamSupport.scala @@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.io.input import java.io.EOFException import fr.univ_lille.cristal.emeraude.n2s3.support.GlobalTypesAlias.Timestamp -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{Input, InputSeq, N2S3Input} +import fr.univ_lille.cristal.emeraude.n2s3.support.io.{Input, InputSeq, InputStream, N2S3Input} import scala.collection.mutable.ArrayBuffer @@ -82,7 +82,7 @@ class StreamSupport[I <: InputSeq[_ <: Input], O <: InputSeq[_ <: Input]](val s output.innerProcess(outputConverter.dataConverter(data)) } - def append(stream : N2S3InputStream[I]) : Unit = { + def append(stream : InputStream[I]) : Unit = { input.append(stream) } @@ -97,15 +97,14 @@ class StreamSupport[I <: InputSeq[_ <: Input], O <: InputSeq[_ <: Input]](val s class StreamEntry[I <: InputSeq[_ <: Input]](shape : Shape) extends StreamSupport[I, I](shape) { - private val entryStreams = new ArrayBuffer[N2S3InputStream[I]] + private val entryStreams = new ArrayBuffer[InputStream[I]] private var entryCursor = 0 override def getEntry : StreamEntry[I] = { this } - override def append(stream : N2S3InputStream[I]) : Unit = { - assert(stream.shape == this.shape) + override def append(stream : InputStream[I]) : Unit = { entryStreams += stream } diff --git a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/core/TestInput.scala b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/core/TestInput.scala index 394ce772..28038789 100644 --- a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/core/TestInput.scala +++ b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/core/TestInput.scala @@ -13,7 +13,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.support.io._ * Created by falezp on 03/05/16. */ -class MockStream(numberOfInput : Int, timeLength : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { +class MockStream(numberOfInput : Int, timeLength : Int) extends InputStream[InputSeq[N2S3Input]] { var currentTimestamp : Timestamp = 0 @@ -27,8 +27,6 @@ class MockStream(numberOfInput : Int, timeLength : Int) extends N2S3InputStream[ def reset() : Unit = { currentTimestamp = 0 } - - override def shape: Shape = Shape(numberOfInput) } class TestInput extends UnitActorSpec { diff --git a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/TestAERInputStream.scala b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/TestAERInputStream.scala index 65f963cc..17e8a61a 100644 --- a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/TestAERInputStream.scala +++ b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/features/io/TestAERInputStream.scala @@ -46,17 +46,6 @@ class TestAERInputStream extends UnitSpec { inputStream.numberImage shouldBe 6505992 } - "AERInputStream" should "know number of rows per image" in { - val inputStream = new AERInputStream(filename, Shape(128, 128)) - inputStream.shape(0) shouldBe 128 - } - - "AERInputStream" should "know number of columns per image" in { - val inputStream = new AERInputStream(filename, Shape(128, 128)) - inputStream.shape(1) shouldBe 128 - } - - "AERInputStream next" should "be able to read all images without throwing an exception" in { val inputStream = new AERInputStream(filename, Shape(128, 128), 1) for (i <- 0 until inputStream.numberImage) { diff --git a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala index 5b602066..a996d8dc 100644 --- a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala +++ b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala @@ -8,7 +8,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._ import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorPerNeuronGroupPolicy, LocalActorDeploymentStrategy} -import fr.univ_lille.cristal.emeraude.n2s3.support.io.SequenceInputStream +import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputStream, SequenceInputStream} @@ -22,8 +22,8 @@ class TestIntegrationN2S3 extends UnitSpec { stream >> new SampleToSpikeTrainConverter(0, 23, 150 MilliSecond, 350 MilliSecond) } - def newTestInputStream: N2S3InputStream[SampleInput] = { - new N2S3InputStream[SampleInput] { + def newTestInputStream: InputStream[SampleInput] = { + new InputStream[SampleInput] { val stream = new SequenceInputStream[SampleInput](List(SampleInput(label = "label", sample = List(SampleUnitInput(1, 0, 1), SampleUnitInput(1, 0, 1))))) override def next(): SampleInput = stream.next() @@ -31,8 +31,6 @@ class TestIntegrationN2S3 extends UnitSpec { override def atEnd(): Boolean = stream.atEnd() override def reset(): Unit = stream.reset() - - override def shape: Shape = Shape(1, 2) } } @@ -61,6 +59,9 @@ class TestIntegrationN2S3 extends UnitSpec { val inputStream = this.newTestStreamEntry() val inputLayer = n2s3.createInput(inputStream) + n2s3 + .createNeuronGroup("group", 2) + .setNeuronModel(MockNeuron) n2s3.run() val actorBeforeSecondStart = inputLayer.actorPath.get.actor @@ -97,11 +98,6 @@ class TestIntegrationN2S3 extends UnitSpec { var called = 0 inputLayer.connectTo(rbmLayer, new ConnectionPolicy{ - override def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = { - called = called + 1 - List() - } - override def generate(from: NeuronGroupRef, to: NeuronGroupRef): Traversable[Connection] = { called = called + 1 List() @@ -159,6 +155,7 @@ class TestIntegrationN2S3 extends UnitSpec { "Change input stream" should "change stream in actor if already deployed" in { val n2s3 = new N2S3() val inputStream = this.newTestStreamEntry() + n2s3.createInput(inputStream) n2s3.createNeuronGroup("group", 2) .setNeuronModel(MockNeuron) n2s3.run() diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/Masquelier.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/Masquelier.scala index ba662d7e..6e319625 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/Masquelier.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/Masquelier.scala @@ -20,13 +20,13 @@ import fr.univ_lille.cristal.emeraude.n2s3.models.qbg.NeuronPotentialEvent import fr.univ_lille.cristal.emeraude.n2s3.support.GlobalTypesAlias.Timestamp import fr.univ_lille.cristal.emeraude.n2s3.support.actors.LocalActorDeploymentStrategy import fr.univ_lille.cristal.emeraude.n2s3.support.event.Subscribe -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputSeq, N2S3Input, N2S3InputEnd, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import fr.univ_lille.cristal.emeraude.n2s3.support.{InputDistribution, Time} import scala.concurrent.Await import scala.util.Random -class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFrequency : Float, patternFrequency : Float) extends N2S3InputStream[InputSeq[N2S3Input]] { +class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFrequency : Float, patternFrequency : Float) extends InputStream[InputSeq[N2S3Input]] { private val pattern = (0 until entryNumber/2).map { _ => InputDistribution.poisson(Random, 0, patternDuration.timestamp, patternDuration.asSecond*spikeFrequency) @@ -85,8 +85,6 @@ class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFreq writer.close() } - override def shape: Shape = Shape(entryNumber) - override def next(): InputSeq[N2S3Input] = { val chunkSize = 64 diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SmallReservoir.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SmallReservoir.scala index 04bac8e6..5091b25a 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SmallReservoir.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SmallReservoir.scala @@ -29,7 +29,7 @@ import scala.util.Random * Created by falezp on 14/10/16. */ -class MoveEntry extends N2S3InputStream[InputSeq[N2S3Input]] { +class MoveEntry extends InputStream[InputSeq[N2S3Input]] { val entrySize = 10 val velocity = 2 MilliSecond // per entry point @@ -61,8 +61,6 @@ class MoveEntry extends N2S3InputStream[InputSeq[N2S3Input]] { }.sortBy(_._1) } - override def shape: Shape = Shape(entrySize) - override def next(): InputSeq[N2S3Input] = { /* val chunkSize = 64 diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedDelay.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedDelay.scala index 5f90beef..cfcb86cd 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedDelay.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedDelay.scala @@ -3,24 +3,22 @@ package fr.univ_lille.cristal.emeraude.n2s3.apps.bio import fr.univ_lille.cristal.emeraude.n2s3.core.actors.ShapelessSpike import fr.univ_lille.cristal.emeraude.n2s3.core.models.properties.MembraneThresholdFloat import fr.univ_lille.cristal.emeraude.n2s3.features.builder.N2S3 -import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.{N2S3InputStream, Shape, StreamEntry} +import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.{Shape, StreamEntry} import fr.univ_lille.cristal.emeraude.n2s3.features.learning.SpikeProp import fr.univ_lille.cristal.emeraude.n2s3.models.bio.{FixedSynapse, SRM2Neuron} import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputSeq, N2S3Input, N2S3InputLabel, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import scala.util.Random /** * Created by falezp on 21/10/16. */ -class DelayEntry(n : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { +class DelayEntry(n : Int) extends InputStream[InputSeq[N2S3Input]] { val inputInterval = 50 MilliSecond var cursor = 0 - override def shape: Shape = Shape(1) - override def next(): InputSeq[N2S3Input] = { cursor += 1 new InputSeq(Seq(N2S3InputSpike(ShapelessSpike, inputInterval.timestamp*(cursor-1), Seq(0)), diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala index 0322e05a..bb7d8361 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala @@ -11,14 +11,14 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.logging.ExportNetworkTopolog import fr.univ_lille.cristal.emeraude.n2s3.models.bio._ import fr.univ_lille.cristal.emeraude.n2s3.support.Time import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputSeq, N2S3Input, N2S3InputLabel, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import scala.util.Random /** * Created by falezp on 19/10/16. */ -class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { +class XOREntry(val limit : Int) extends InputStream[InputSeq[N2S3Input]] { val inputDelay = 6 MilliSecond val inputInterval = 50 MilliSecond @@ -31,8 +31,6 @@ class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { Seq(1.0, 1.0, 0.0) -> "0" ) - override def shape: Shape = Shape(3) - override def next(): InputSeq[N2S3Input] = { val currData = data(Random.nextInt(data.size)) @@ -53,7 +51,7 @@ class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { } class MultipleDelayConnection(delays : Seq[Time], neuronConnectionConstructor : (Int, Int, Time) => NeuronConnection) extends ConnectionPolicy { - def generate(from : NeuronIterable, to : NeuronIterable) = { + override def generate(from : NeuronIterable, to : NeuronIterable) = { for { (in, in_index) <- from.toSeq.zipWithIndex (out, out_index) <- to.toSeq.zipWithIndex diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/BitStream.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/BitStream.scala index 76b4b4bc..ff4a1266 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/BitStream.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/BitStream.scala @@ -19,7 +19,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.support.GlobalTypesAlias.Timestamp import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ import fr.univ_lille.cristal.emeraude.n2s3.support.actors.LocalActorDeploymentStrategy import fr.univ_lille.cristal.emeraude.n2s3.support.event.Subscribe -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputSeq, N2S3Input, N2S3InputEnd, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import scala.collection.mutable.ListBuffer import scala.concurrent.Await @@ -28,7 +28,7 @@ import scala.util.Random * Created by falezp on 14/10/16. */ -class BitStreamEntry(pattern : Seq[Boolean]) extends N2S3InputStream[InputSeq[N2S3Input]] { +class BitStreamEntry(pattern : Seq[Boolean]) extends InputStream[InputSeq[N2S3Input]] { var inputData = Seq[Float]() var labelTimestamps = ListBuffer[Timestamp]() @@ -48,8 +48,6 @@ class BitStreamEntry(pattern : Seq[Boolean]) extends N2S3InputStream[InputSeq[N2 var currentTimestamp : Timestamp = 0L - override def shape: Shape = Shape(1) - override def next(): InputSeq[N2S3Input] = { while(currentTimestamp.toInt < inputData.size && inputData(currentTimestamp.toInt) != 1f) currentTimestamp += 1 diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/PatternStart.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/PatternStart.scala index 93602a30..ea6439cb 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/PatternStart.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/PatternStart.scala @@ -20,13 +20,13 @@ import fr.univ_lille.cristal.emeraude.n2s3.support.GlobalTypesAlias.Timestamp import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ import fr.univ_lille.cristal.emeraude.n2s3.support.actors.LocalActorDeploymentStrategy import fr.univ_lille.cristal.emeraude.n2s3.support.event.Subscribe -import fr.univ_lille.cristal.emeraude.n2s3.support.io.{InputSeq, N2S3Input, N2S3InputEnd, N2S3InputSpike} +import fr.univ_lille.cristal.emeraude.n2s3.support.io._ import fr.univ_lille.cristal.emeraude.n2s3.support.{InputDistribution, Time} import scala.concurrent.Await import scala.util.Random -class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFrequency : Float, patternFrequency : Float) extends N2S3InputStream[InputSeq[N2S3Input]] { +class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFrequency : Float, patternFrequency : Float) extends InputStream[InputSeq[N2S3Input]] { private val pattern = (0 until entryNumber/2).map { _ => InputDistribution.poisson(Random, 0, patternDuration.timestamp, patternDuration.asSecond*spikeFrequency) @@ -77,8 +77,6 @@ class SpikePatternGenerator(entryNumber : Int, patternDuration : Time, spikeFreq writer.close() } - override def shape: Shape = Shape(entryNumber) - override def next(): InputSeq[N2S3Input] = { val chunkSize = 64 diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/SmallReservoir.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/SmallReservoir.scala index a3936bf9..4350a259 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/SmallReservoir.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/ternary/SmallReservoir.scala @@ -23,7 +23,7 @@ import scala.util.Random * Created by falezp on 14/10/16. */ -class MoveEntry extends N2S3InputStream[InputSeq[N2S3Input]] { +class MoveEntry extends InputStream[InputSeq[N2S3Input]] { val entrySize = 10 val velocity = 10 MicroSecond // per entry point @@ -52,8 +52,6 @@ class MoveEntry extends N2S3InputStream[InputSeq[N2S3Input]] { }.sortBy(_._1) } - override def shape: Shape = Shape(entrySize) - override def next(): InputSeq[N2S3Input] = { val chunkSize = 64 -- GitLab