in core/src/main/scala/com/spotify/featran/transformers/Transformer.scala [120:170]
def unsafeBuildFeatures(a: Option[Any], c: Option[Any], fb: FeatureBuilder[_]): Unit =
optBuildFeatures(a.asInstanceOf[Option[A]], c.asInstanceOf[Option[C]], fb)
def unsafeFeatureDimension(c: Option[Any]): Int =
optFeatureDimension(c.asInstanceOf[Option[C]])
def flatRead[T: FlatReader]: T => Option[Any]
def flatWriter[T](implicit fw: FlatWriter[T]): Option[A] => fw.IF
def unsafeFlatWriter[T](implicit fw: FlatWriter[T]): Option[Any] => fw.IF =
(o: Option[Any]) => flatWriter.apply(o.asInstanceOf[Option[A]]).asInstanceOf[fw.IF]
// ================================================================================
// Transformer parameter and aggregator persistence
// ================================================================================
/** Encode aggregator summary of the current extraction. */
def encodeAggregator(c: C): String
/** Decode aggregator summary from a previous extraction. */
def decodeAggregator(s: String): C
/** Compile time parameters. */
def params: Map[String, String] = Map.empty
/**
* Settings including compile time parameters and runtime aggregator summary.
* @param c
* aggregator summary
*/
def settings(c: Option[C]): Settings =
Settings(
this.getClass.getCanonicalName,
name,
params,
optFeatureNames(c),
c.map(encodeAggregator)
)
}
case class Settings(
cls: String,
name: String,
params: Map[String, String],
featureNames: Seq[String],
aggregators: Option[String]
)
abstract private[featran] class OneDimensional[A, B, C](name: String)
extends Transformer[A, B, C](name) {