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 aee002881980fdb2c602eb68115e2181afd1968e..e374002aae5f80069bf2f9e5d08b4532b9177aa8 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 bfd382305eb093019043759613a69841a91ecdce..9a0117b8199aabdb5c17666304cff43febdd3572 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 197b58a3f4ba8ebf6fef9d0b2c820a33bf4fb72f..0000000000000000000000000000000000000000
--- 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 ff8e984554e09f554bba9f52470e2fe975205ddc..5ca5f6b2b1f801797ee2452361fa8c556ad0a968 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 8ff3178ee4f95f3c78026bf1cdaa309f104577b0..6dc60b644178f065a7db3c8569fdd5163e904e48 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 e3ad522dc1a9a7159fe3be049066754fb1838061..d326c0a005f70933dc5639660981b2d87190d1c5 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 f9bf5b3b71b9a72a5a0324d414808497c8b6752b..bedcb62fe29c9e376b210e91d3405ec42a972391 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 da6c375ab08c91ac4e0177e3f6f675a7047116e8..7e9778b8312e0f03955ff6e01b305c2b5bab2e3b 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 5f23bfe6af86e4c431eaab682d781ebfd638ac01..156b9cd4b5046a98b5d608ce50a4d4e647c8bec2 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 394ce772b2865ec90f39612d43b2829a047cd659..2803878947cf3c99780cb2d9f63a855fedd62123 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 65f963cc3567402b9d4020a644f953bb6cc62cd4..17e8a61a728e46d51bf9e6d6c46f1173d2b7d8c5 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 5b6020661ee50ad4fdfcb5961c34a75fcf2deb09..a996d8dc99eae1116262f4e241b5d991ffd43302 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 ba662d7e0852798651c59ca99f5306ac52109c3d..6e3196254017194fefa2b7c1022cdf42748a1e8a 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 04bac8e64cca61f82e33feb5ff8629efd90b21f7..5091b25a8c1b7ae87188b28a680cbe341cee2a31 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 5f90beefbcd98a9d9e41f406c9ad05416400a3b3..cfcb86cdfe7bde3ef8e4b356cf01abd12c33604d 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 0322e05a52caedec89b29bdaa4f02eb89cb63744..bb7d8361cd5ba148b01d4a002e5c167797cf47c9 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 76b4b4bc3722aa0ed070194e1332fc27b34372dc..ff4a12664b3452f3a3137b7f550a6645860b2e2d 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 93602a3049bf99d59d6f0be2f96192c17cd61cd2..ea6439cbe9088ad56750d8bfa91da4ed257cfb11 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 a3936bf926c4c2186b808c0bb258e903bb72af5a..4350a2590c67c87184b5ff1c9ac742167ee35569 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