in core/src/main/scala/com/spotify/featran/FeatureSpec.scala [362:386]
def featureNames(c: ARRAY): Seq[String] = {
require(n == c.length)
val b = Seq.newBuilder[String]
var i = 0
val m = mutable.Map.empty[String, Seq[String]]
while (i < n) {
val f = features(i)
val names = f.unsafeFeatureNames(c(i))
b ++= names
val name = f.transformer.name
if (crossings.keys.contains(name)) {
m(name) = names
}
i += 1
}
crossings.map.keys.foreach { case (n1, n2) =>
for {
x <- m(n1)
y <- m(n2)
} {
b += Crossings.name(x, y)
}
}
b.result()
}