in core/src/main/scala/com/spotify/featran/transformers/PolynomialExpansion.scala [200:243]
def gcd(p: Int, q: Int): Int =
if (p == 0 || q == 0) {
require(p != Int.MinValue && q != Int.MinValue, s"overflow: gcd($p, $q) is 2^31")
abs(p + q)
} else {
var a = p
var b = q
var al = a.toLong
var bl = b.toLong
var useLong = false
if (a < 0) {
if (a == Int.MinValue) {
useLong = true
} else {
a = -a
}
al = -al
}
if (b < 0) {
if (b == Int.MinValue) {
useLong = true
} else {
b = -b
}
bl = -bl
}
if (useLong) {
require(al != bl, s"overflow: gcd($p, $q) is 2^31")
}
var blbu = bl
bl = al
al = blbu % al
if (al == 0) {
require(bl <= Int.MaxValue, s"overflow: gcd($p, $q) is 2^31")
bl.toInt
} else {
blbu = bl
// Now "al" and "bl" fit in an "int".
b = al.toInt
a = (blbu % al).toInt
gcdPositive(a, b)
}
}