aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2012-11-01 13:01:29 +0100
committerJakob Odersky <jodersky@gmail.com>2012-11-01 13:01:29 +0100
commit2dfddf1c5f8f43d32a1a60af4263f5b338c15bd0 (patch)
treec5a8adbbdda55554e5f4f88f0add78dbf3308bc5
parentcde13945605fb9f543cfb960728c5c7d48d6f3f5 (diff)
downloadscalam-2dfddf1c5f8f43d32a1a60af4263f5b338c15bd0.tar.gz
scalam-2dfddf1c5f8f43d32a1a60af4263f5b338c15bd0.tar.bz2
scalam-2dfddf1c5f8f43d32a1a60af4263f5b338c15bd0.zip
add default dataset name check
-rw-r--r--src/main/scala/scalam/m/ast/Identifier.scala20
-rw-r--r--src/main/scala/scalam/plotting/DataSet.scala11
-rw-r--r--src/main/scala/scalam/plotting/Plot.scala6
3 files changed, 25 insertions, 12 deletions
diff --git a/src/main/scala/scalam/m/ast/Identifier.scala b/src/main/scala/scalam/m/ast/Identifier.scala
index 6778e74..45dd967 100644
--- a/src/main/scala/scalam/m/ast/Identifier.scala
+++ b/src/main/scala/scalam/m/ast/Identifier.scala
@@ -7,15 +7,21 @@ package scalam.m.ast
* @define construct identifier
*/
case class Identifier(name: String) extends Mable {
-
def m = name
+}
+
+object Identifier {
+
+ def makeValid(raw: String) = {
+ val transformSymbols = Map(' ' -> '_').withDefault(c => c)
- def toValid = {
- val word = name.filter(c => c.isLetterOrDigit || c == '_')
- val id = word.headOption match {
- case None => "x"
- case Some(c) => if (!c.isLetter) 'x' + word else word
+ val validChars = raw.map(c => transformSymbols(c))
+
+ validChars.headOption match {
+ case Some(c) if (!c.isLetter) => 'x' + validChars
+ case Some(c) => validChars
+ case None => "id"
}
- Identifier(id)
}
+
} \ No newline at end of file
diff --git a/src/main/scala/scalam/plotting/DataSet.scala b/src/main/scala/scalam/plotting/DataSet.scala
index 768189c..31e65c7 100644
--- a/src/main/scala/scalam/plotting/DataSet.scala
+++ b/src/main/scala/scalam/plotting/DataSet.scala
@@ -1,12 +1,13 @@
package scalam.plotting
+import scalam.m.ast.Identifier
import scalax.file.Path
import breeze.linalg.{ Vector, DenseVector }
-case class DataSet(points: Seq[(Double, Double)], label: String) {
- val name = scalam.m.ast.Identifier(label).toValid.name
+case class DataSet(points: Seq[(Double, Double)], label: String, name: String) {
lazy val (xs, ys) = points.unzip
+
def save(path: Path) = {
path.createFile(createParents = true, failIfExists = false)
for (processor <- path.outputProcessor; out = processor.asOutput)
@@ -15,3 +16,9 @@ case class DataSet(points: Seq[(Double, Double)], label: String) {
}
+object DataSet {
+
+ def apply(points: Seq[(Double, Double)], label: String) = new DataSet(points, label, Identifier.makeValid(label))
+
+}
+
diff --git a/src/main/scala/scalam/plotting/Plot.scala b/src/main/scala/scalam/plotting/Plot.scala
index 3c96a22..45d755e 100644
--- a/src/main/scala/scalam/plotting/Plot.scala
+++ b/src/main/scala/scalam/plotting/Plot.scala
@@ -116,12 +116,12 @@ object Plot {
import scala.util.Random
val data = for (i <- 0 until length) yield (i * 1.0, Random.nextDouble() * 10)
val name = "a"
- new DataSet(data, name)
+ DataSet(data, name)
}
val ds = Seq(
- new DataSet(Seq((0.0, 1.0), (1.0, 1.0), (2.0, 1.0), (3.0, 0.0), (4.0, 1.0), (5.0, 1.0)), "temperature"),
- new DataSet(Seq((0.0, 0.0), (1.0, 1.0), (2.0, 4.0), (3.0, 9.0)), """\alpha""")) ++ (0 to 10).map(_ => randomDataSet(10))
+ DataSet(Seq((0.0, 1.0), (1.0, 1.0), (2.0, 1.0), (3.0, 0.0), (4.0, 1.0), (5.0, 1.0)), "temperature"),
+ DataSet(Seq((0.0, 0.0), (1.0, 1.0), (2.0, 4.0), (3.0, 9.0)), """\alpha""")) ++ (0 to 10).map(_ => randomDataSet(10))
val test = new Plot(ds, "title", "x", "y")