///|
/// Valid FFT lengths, sorted ascending.
///
/// Taken verbatim from `edu.mines.jtk.dsp.Pfacc` in the
/// `edu.mines:mines-jtk` artifact that the original imglib2-fft
/// depends on, so that size arithmetic matches the Java original.
let ntable : Array[Int32] = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 24, 26,
28, 30, 33, 35, 36, 39, 40, 42, 44, 45, 48, 52, 55, 56, 60, 63, 65, 66, 70, 72,
77, 78, 80, 84, 88, 90, 91, 99, 104, 105, 110, 112, 117, 120, 126, 130, 132, 140,
143, 144, 154, 156, 165, 168, 176, 180, 182, 195, 198, 208, 210, 220, 231, 234,
240, 252, 260, 264, 273, 280, 286, 308, 312, 315, 330, 336, 360, 364, 385, 390,
396, 420, 429, 440, 455, 462, 468, 495, 504, 520, 528, 546, 560, 572, 585, 616,
624, 630, 660, 693, 715, 720, 728, 770, 780, 792, 819, 840, 858, 880, 910, 924,
936, 990, 1001, 1008, 1040, 1092, 1144, 1155, 1170, 1232, 1260, 1287, 1320, 1365,
1386, 1430, 1456, 1540, 1560, 1584, 1638, 1680, 1716, 1820, 1848, 1872, 1980, 2002,
2145, 2184, 2288, 2310, 2340, 2520, 2574, 2640, 2730, 2772, 2860, 3003, 3080, 3120,
3276, 3432, 3465, 3640, 3696, 3960, 4004, 4095, 4290, 4368, 4620, 4680, 5005, 5040,
5148, 5460, 5544, 5720, 6006, 6160, 6435, 6552, 6864, 6930, 7280, 7920, 8008, 8190,
8580, 9009, 9240, 9360, 10010, 10296, 10920, 11088, 11440, 12012, 12870, 13104,
13860, 15015, 16016, 16380, 17160, 18018, 18480, 20020, 20592, 21840, 24024, 25740,
27720, 30030, 32760, 34320, 36036, 40040, 45045, 48048, 51480, 55440, 60060, 65520,
72072, 80080, 90090, 102960, 120120, 144144, 180180, 240240, 360360, 720720,
]
///|
/// Relative cost of each entry of `ntable`, used to pick the
/// "fast" transform length. Also taken verbatim from JTransforms.
let ctable : Array[Double] = [
1.54844595E-6, 1.60858985E-6, 1.73777398E-6, 1.78300246E-6, 1.86692603E-6, 2.02796424E-6,
2.05593203E-6, 2.03027471E-6, 2.13199871E-6, 2.23464061E-6, 2.45504197E-6, 2.24507775E-6,
2.77484785E-6, 2.71335681E-6, 2.60084271E-6, 2.66712117E-6, 2.77849063E-6, 2.84002694E-6,
3.17837121E-6, 3.73373597E-6, 3.15791133E-6, 4.24124687E-6, 3.58681599E-6, 3.74904075E-6,
4.74708669E-6, 4.38838644E-6, 4.01250829E-6, 5.62735292E-6, 4.3411639E-6, 5.17084182E-6,
5.52020262E-6, 4.98530294E-6, 5.2024893E-6, 6.81986102E-6, 7.10553295E-6, 5.93798174E-6,
5.87481339E-6, 7.01743322E-6, 8.61901953E-6, 8.32813604E-6, 7.91730898E-6, 6.8840368E-6,
1.002803645E-5, 1.02678457E-5, 8.19893573E-6, 8.28260941E-6, 1.014724144E-5, 9.34954606E-6,
1.232645727E-5, 1.214189591E-5, 1.269497208E-5, 1.102202755E-5, 1.388176589E-5,
1.172641106E-5, 1.503375461E-5, 1.113972204E-5, 1.364655225E-5, 1.703912278E-5,
1.477596306E-5, 1.424973677E-5, 2.127456187E-5, 1.398938399E-5, 2.00864429E-5,
1.869909587E-5, 1.986433148E-5, 1.651781665E-5, 2.092824006E-5, 1.702478496E-5,
2.499906394E-5, 2.500343282E-5, 2.465807389E-5, 2.632305568E-5, 2.308853872E-5,
2.566435179E-5, 2.996843066E-5, 3.179869821E-5, 2.372351388E-5, 2.578195392E-5,
3.236648622E-5, 3.062192175E-5, 3.688562326E-5, 2.903319322E-5, 4.464405117E-5,
3.835181037E-5, 3.890755813E-5, 3.489790229E-5, 4.193095941E-5, 3.661590772E-5,
3.585050946E-5, 4.948000296E-5, 5.19463679E-5, 5.316664012E-5, 4.831628715E-5,
4.470982143E-5, 6.71179171E-5, 5.416880764E-5, 6.503589644E-5, 6.376341005E-5,
6.060697752E-5, 6.481361636E-5, 5.49474666E-5, 6.84295036E-5, 6.725764749E-5, 7.9550419E-5,
6.51735139E-5, 8.783546746E-5, 8.145918907E-5, 8.208007212E-5, 8.453260181E-5,
7.714824943E-5, 8.332986646E-5, 9.686623465E-5, 1.1742291007E-4, 8.016979016E-5,
1.0372863801E-4, 1.1169975463E-4, 1.0527145635E-4, 1.0259693695E-4, 1.2171112596E-4,
9.645574497E-5, 1.4179527113E-4, 1.1871442125E-4, 1.4121545403E-4, 1.2558781115E-4,
1.2962723272E-4, 1.4012872534E-4, 1.7282139776E-4, 1.2333743842E-4, 1.5017243965E-4,
1.5933147632E-4, 1.8467637839E-4, 1.6783978549E-4, 1.7760241178E-4, 1.8111945022E-4,
1.5790303508E-4, 2.1759913091E-4, 1.7785473273E-4, 2.1290391156E-4, 2.1022786937E-4,
2.5198138131E-4, 2.2553766468E-4, 2.2349921892E-4, 2.2576645627E-4, 2.2422478451E-4,
2.6572035023E-4, 2.1417878529E-4, 2.8409252164E-4, 2.8290960452E-4, 2.6774495388E-4,
2.8504340401E-4, 2.8006152125E-4, 3.7010347376E-4, 3.7949981053E-4, 3.3613022319E-4,
4.0431974162E-4, 3.6459661264E-4, 3.535121779E-4, 3.3107438017E-4, 4.668997669E-4,
3.9452432539E-4, 4.564721969E-4, 4.2150673401E-4, 5.0466112371E-4, 5.5797101449E-4,
4.7941598851E-4, 4.9189587426E-4, 5.2933403805E-4, 6.056849108E-4, 5.6200897868E-4,
6.0222489477E-4, 5.884253819E-4, 6.0084033613E-4, 7.4850523169E-4, 7.0305370305E-4,
8.1422764228E-4, 7.3423753666E-4, 7.3504587156E-4, 7.5785092698E-4, 9.8138167565E-4,
7.3504587156E-4, 9.3946503989E-4, 9.1880733945E-4, 9.0674513354E-4, 0.00105810882198,
0.0012059000602, 0.00104322916667, 0.00124255583127, 0.00113291855204, 0.00130338541667,
0.00122432762836, 0.00130234070221, 0.0013344437042, 0.00158214849921, 0.00153958493467,
0.00166694421316, 0.00183424908425, 0.00157344854674, 0.00164180327869, 0.00210620399579,
0.00198316831683, 0.00195414634146, 0.00197145669291, 0.00228132118451, 0.00241495778046,
0.00264248021108, 0.00243970767357, 0.00246068796069, 0.00314937106918, 0.00341226575809,
0.00304407294833, 0.00342979452055, 0.00391780821918, 0.00339491525424, 0.00423467230444,
0.00427991452991, 0.00422573839662, 0.0051358974359, 0.00532712765957, 0.00522976501305,
0.00671812080537, 0.00644051446945, 0.00747388059701, 0.00785490196078, 0.00890222222222,
0.01032474226804, 0.01088586956522, 0.01131638418079, 0.01125280898876, 0.01371232876712,
0.01390972222222, 0.01663636363636, 0.01917142857143, 0.02201098901099, 0.02425301204819,
0.02849295774648, 0.03531578947368, 0.04575, 0.06190909090909, 0.10542105263158,
0.24033333333333,
]