From 810edcc50b328d6d82eadaaa239f647048178823 Mon Sep 17 00:00:00 2001 From: Michael Weil Date: Thu, 3 Jun 2021 17:13:33 -0400 Subject: [PATCH 1/4] Changing Name --- .../stages/impl/feature/DateMapToUnitCircleVectorizer.scala | 2 +- .../op/stages/impl/feature/DateToUnitCircleTransformer.scala | 4 ++-- .../impl/feature/DateMapToUnitCircleVectorizerTest.scala | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizer.scala b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizer.scala index 8c7a0e5358..09b9f8ca60 100644 --- a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizer.scala +++ b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizer.scala @@ -125,7 +125,7 @@ final class DateMapToUnitCircleVectorizerModel[T <: DateMap] private[op] val cleanedMap = cleanMap(map, shouldClean, shouldCleanValue = false) keys.map(k => { val vOpt = cleanedMap.get(k) - DateToUnitCircle.convertToRandians(vOpt, timePeriod) + DateToUnitCircle.convertToRadians(vOpt, timePeriod) }) }.toArray Vectors.dense(eachPivoted.flatten).compressed.toOPVector diff --git a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala index 00c34e7f18..251672967c 100644 --- a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala +++ b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala @@ -83,7 +83,7 @@ class DateToUnitCircleTransformer[T <: Date] ) with DateToUnitCircleParams { override def transformFn: Seq[T] => OPVector = timestamp => { - val randians = timestamp.flatMap(ts => DateToUnitCircle.convertToRandians(ts.v, getTimePeriod)).toArray + val randians = timestamp.flatMap(ts => DateToUnitCircle.convertToRadians(ts.v, getTimePeriod)).toArray Vectors.dense(randians).toOPVector } @@ -106,7 +106,7 @@ private[op] object DateToUnitCircle { def convertToBin(timestamp: Long, timePeriodDesired: TimePeriod): Double = getPeriodWithSize(timestamp, timePeriodDesired)._1 - def convertToRandians(timestamp: Option[Long], timePeriodDesired: TimePeriod): Array[Double] = + def convertToRadians(timestamp: Option[Long], timePeriodDesired: TimePeriod): Array[Double] = timestamp.map { ts => val (timePeriod, periodSize) = getPeriodWithSize(ts, timePeriodDesired) val radians = (2 * math.Pi * timePeriod) / periodSize diff --git a/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizerTest.scala b/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizerTest.scala index e56a1d0970..1098e452d2 100644 --- a/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizerTest.scala +++ b/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateMapToUnitCircleVectorizerTest.scala @@ -69,7 +69,7 @@ class DateMapToUnitCircleVectorizerTest extends OpEstimatorSpec[OPVector, Sequen */ override val expectedResult: Seq[OPVector] = sampleDateTimes .map{ v => - val rad = DateToUnitCircle.convertToRandians(Option(v.getMillis), TimePeriod.HourOfDay) + val rad = DateToUnitCircle.convertToRadians(Option(v.getMillis), TimePeriod.HourOfDay) (rad ++ rad).toOPVector } From 533e28115f8be9cc35d4ffabd03d77971aa96339 Mon Sep 17 00:00:00 2001 From: Michael Weil Date: Thu, 3 Jun 2021 17:25:20 -0400 Subject: [PATCH 2/4] Adding default radians for null --- .../stages/impl/feature/DateToUnitCircleTransformer.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala index 251672967c..10e3d0575f 100644 --- a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala +++ b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala @@ -101,17 +101,20 @@ class DateToUnitCircleTransformer[T <: Date] private[op] object DateToUnitCircle { + val defaultRadians: Array[Double] = Array(1.0, 0.0) + def metadataValues(timePeriod: TimePeriod): Seq[String] = Seq(s"x_$timePeriod", s"y_$timePeriod") def convertToBin(timestamp: Long, timePeriodDesired: TimePeriod): Double = getPeriodWithSize(timestamp, timePeriodDesired)._1 - def convertToRadians(timestamp: Option[Long], timePeriodDesired: TimePeriod): Array[Double] = + def convertToRadians(timestamp: Option[Long], timePeriodDesired: TimePeriod, + nullRadians: Array[Double] = defaultRadians): Array[Double] = timestamp.map { ts => val (timePeriod, periodSize) = getPeriodWithSize(ts, timePeriodDesired) val radians = (2 * math.Pi * timePeriod) / periodSize Array(math.cos(radians), math.sin(radians)) - }.getOrElse(Array(0.0, 0.0)) + }.getOrElse(nullRadians) private def getPeriodWithSize(timestamp: Long, timePeriod: TimePeriod): (Double, Int) = { val tpv = timePeriod.extractTimePeriodVal(timestamp) From 660c2694f9edcd09d30891dd902de04ba37c869a Mon Sep 17 00:00:00 2001 From: Michael Weil Date: Thu, 3 Jun 2021 17:31:55 -0400 Subject: [PATCH 3/4] radians instead of randians --- .../op/stages/impl/feature/DateToUnitCircleTransformer.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala index 10e3d0575f..f42ccd34d2 100644 --- a/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala +++ b/core/src/main/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformer.scala @@ -83,8 +83,8 @@ class DateToUnitCircleTransformer[T <: Date] ) with DateToUnitCircleParams { override def transformFn: Seq[T] => OPVector = timestamp => { - val randians = timestamp.flatMap(ts => DateToUnitCircle.convertToRadians(ts.v, getTimePeriod)).toArray - Vectors.dense(randians).toOPVector + val radians = timestamp.flatMap(ts => DateToUnitCircle.convertToRadians(ts.v, getTimePeriod)).toArray + Vectors.dense(radians).toOPVector } override def onGetMetadata(): Unit = { From 49425a8350f0690b8fbe3b9e631cc7b7976d4bb0 Mon Sep 17 00:00:00 2001 From: Michael Weil Date: Mon, 7 Jun 2021 11:14:30 -0400 Subject: [PATCH 4/4] Changing transformer test --- .../stages/impl/feature/DateToUnitCircleTransformerTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformerTest.scala b/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformerTest.scala index ec21ef4706..b3d182a1a5 100644 --- a/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformerTest.scala +++ b/core/src/test/scala/com/salesforce/op/stages/impl/feature/DateToUnitCircleTransformerTest.scala @@ -125,7 +125,7 @@ class DateToUnitCircleTransformerTest extends OpTransformerSpec[OPVector, DateTo val vector = vectorizer.getOutput() val actual = transformed.collect(vector) val expected = Array( - Array(0.0, 0.0), + Array(1.0, 0.0), Array(1.0, 0.0) ).map(Vectors.dense(_).toOPVector) all(actual.zip(expected).map(g => Vectors.sqdist(g._1.value, g._2.value))) should be < eps