Skip to main content

music21_rs/tuningsystem/
temperaments_generated.rs

1//! Regular temperaments, generated from `data/temperaments.toml`.
2//!
3//! Do not edit by hand: run `cargo run -p xtask -- emit-temperaments`.
4//! The TOML itself is collected from the Xenharmonic Wiki by hand, which
5//! is why there is no `regenerate` command to run instead.
6
7use crate::defaults::{FloatType, IntegerType, UnsignedIntegerType};
8
9/// The day the wiki was last read for this table.
10pub const COLLECTED: &str = "2026-09-08";
11
12/// The wiki this table was collected from.
13pub const SOURCE: &str = "https://en.xen.wiki";
14
15/// A regular temperament the Xenharmonic Wiki names and publishes a mapping for.
16///
17/// This is the published *description*; [`NamedTemperament::temperament`]
18/// turns it into a [`crate::tuningsystem::Temperament`] that can answer
19/// questions.
20///
21/// No `Eq` or `Hash`: a generator is a width in cents, and a float is not
22/// a thing to compare exactly or to key a map by.
23#[derive(Clone, Copy, Debug, PartialEq)]
24#[must_use]
25pub struct NamedTemperament {
26    /// The name it goes by.
27    pub name: &'static str,
28    /// The wiki page it was read from.
29    pub page: &'static str,
30    /// The revision of that page, so a later collection can diff.
31    pub revision: u64,
32    /// The primes it is written over; the first is the equave.
33    pub subgroup: &'static [IntegerType],
34    /// How many periods there are to an equave.
35    pub periods_per_equave: UnsignedIntegerType,
36    /// One row per generator, over the primes after the equave.
37    pub generator_rows: &'static [&'static [IntegerType]],
38    /// Each generator written as the ratio it approximates.
39    pub generator_ratios: &'static [&'static str],
40    /// Each generator's width in cents, under `optimization`.
41    pub generator_cents: &'static [FloatType],
42    /// Which optimum those widths are.
43    pub optimization: &'static str,
44    /// The infobox's own `Title`, empty unless the page names more
45    /// than one temperament.
46    ///
47    /// The constant is named after the *page*, not after this: which
48    /// of several names goes with which of the subgroups a page lists
49    /// is not something the infobox states, so it is recorded here
50    /// rather than guessed at.
51    pub titles: &'static str,
52    /// The commas it tempers out, as the wiki lists them.
53    pub commas: &'static [&'static str],
54    /// The moment-of-symmetry scales the wiki lists for it, if any.
55    ///
56    /// Empty above rank 2: a moment of symmetry comes of stacking one
57    /// generator, and a rank-3 temperament has two.
58    pub moments: &'static [&'static str],
59}
60
61impl NamedTemperament {
62    /// How many rows the mapping has: one for the period, one per generator.
63    #[must_use]
64    pub const fn rank(&self) -> usize {
65        1 + self.generator_rows.len()
66    }
67
68    /// The prime it repeats at — 2 for an octave, 3 for a tritave.
69    #[must_use]
70    pub const fn equave(&self) -> IntegerType {
71        self.subgroup[0]
72    }
73}
74
75/// Every regular temperament collected from the wiki, by name.
76///
77/// A `static` rather than a `const`: at this size a const would be
78/// copied into every place that reads it.
79pub static WIKI_TEMPERAMENTS: [NamedTemperament; 95] = [
80    ABERSCHISMIC,
81    AMITY,
82    ANTONIAN,
83    ARCHYTAS,
84    AUGMENTED,
85    BLACKWOOD,
86    BOHPIER,
87    BPS,
88    BUG,
89    BUNYA,
90    BUZZARD,
91    CANOPUS,
92    CATAKLEISMIC,
93    COMPTON,
94    COTONEUM,
95    DECIMAL,
96    DEEPTONE,
97    DIASCHISMIC,
98    DICOT,
99    DIDACUS,
100    DIMINISHED,
101    DOMINANT,
102    ENNEALIMMAL,
103    FATHER,
104    FLATTONE,
105    GAMELISMIC,
106    GARIBALDI,
107    GRAVITY,
108    GUNN,
109    HARRY,
110    HEMIFIFTHS,
111    JOVE,
112    KEEMUN,
113    KLEISMIC,
114    LAKA,
115    LEAPDAY,
116    LEMBA,
117    LUNA,
118    MAGIC,
119    MARVEL,
120    MAVILA,
121    MEANTONE,
122    MINTAKA,
123    MIRACLE,
124    MISTY,
125    MODUS,
126    MOHAJIRA,
127    MONKEY,
128    MOTHRA,
129    MUGGLES,
130    MYNA,
131    MYSTERY,
132    NEGRI,
133    NEUTROMINANT,
134    OCTOID,
135    OOLONG,
136    OPOSSUM,
137    ORWELL,
138    PAJARA,
139    PARAKLEISMIC,
140    PARAPYTH,
141    PELE,
142    PENTADACUS,
143    PONTIAC,
144    PORCUPINE,
145    QUARTKEENLIG,
146    QUASISUPER,
147    RODAN,
148    SCHISMIC,
149    SEMAPHORE,
150    SENSAMAGIC,
151    SENSI,
152    SEPTISCHISMIC,
153    SHALLOWTONE,
154    SIRIUS,
155    SLENDRIC,
156    SQUARES,
157    STARLING,
158    SUBMERGED,
159    SUPERKLEISMIC,
160    SUPERPYTH,
161    TETRACOT,
162    TRISECTED,
163    TRISMEGISTUS,
164    TRITIKLEISMIC,
165    ULTRAPYTH,
166    UNIDEC,
167    VALENTINE,
168    VENGEANCE,
169    WHITEWOOD,
170    WIZARD,
171    WOLLEMIA,
172    WURSCHMIDT,
173    XENIAL,
174    ZEUS,
175];
176
177/// A wiki page carrying a temperament infobox that this crate does not model.
178///
179/// Listed rather than dropped, so a later collection can tell a page it has
180/// never handled from one deliberately left alone.
181#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
182#[must_use]
183pub struct UnmodelledTemperament {
184    /// The wiki page.
185    pub page: &'static str,
186    /// The revision it was judged at.
187    pub revision: u64,
188    /// Why the crate does not carry it.
189    pub reason: &'static str,
190}
191
192/// The wiki's temperaments this crate does not model, and why.
193pub const UNMODELLED_TEMPERAMENTS: [UnmodelledTemperament; 0] = [];
194
195/// Aberschismic (2.3.5.7), rank 3, generator 3/2, 5/4 at 702.8, 386.5 cents.
196pub const ABERSCHISMIC: NamedTemperament = NamedTemperament {
197    name: "ABERSCHISMIC",
198    page: "Aberschismic",
199    revision: 236716,
200    subgroup: &[2, 3, 5, 7],
201    periods_per_equave: 1,
202    generator_rows: &[&[1, 0, -6], &[0, 1, 1]],
203    generator_ratios: &["3/2", "5/4"],
204    generator_cents: &[702.8, 386.5],
205    optimization: "CWE",
206    titles: "",
207    commas: &["5120/5103"],
208    moments: &[],
209};
210
211/// Amity (2.3.5.7), rank 2, generator 243/200 at 339.4 cents.
212pub const AMITY: NamedTemperament = NamedTemperament {
213    name: "AMITY",
214    page: "Amity",
215    revision: 231767,
216    subgroup: &[2, 3, 5, 7],
217    periods_per_equave: 1,
218    generator_rows: &[&[-5, -13, 17]],
219    generator_ratios: &["243/200"],
220    generator_cents: &[339.4],
221    optimization: "CWE",
222    titles: "",
223    commas: &["4375/4374", "5120/5103"],
224    moments: &["7L 4s", "7L 11s", "7L 18s", "7L 25s"],
225};
226
227/// Antonian (2.3.5.7), rank 2, generator 3/2 at 743.086 cents.
228pub const ANTONIAN: NamedTemperament = NamedTemperament {
229    name: "ANTONIAN",
230    page: "Antonian",
231    revision: 225047,
232    subgroup: &[2, 3, 5, 7],
233    periods_per_equave: 1,
234    generator_rows: &[&[1, 2, 3]],
235    generator_ratios: &["3/2"],
236    generator_cents: &[743.086],
237    optimization: "CWE",
238    titles: "",
239    commas: &["10/9", "10/9", "15/14"],
240    moments: &["1L 1s", "2L 1s", "3L 2s"],
241};
242
243/// Archytas and ares (2.3.5.7.11), rank 3, generator 3/2, 5/4 at 709.7, 390.0 cents.
244pub const ARCHYTAS: NamedTemperament = NamedTemperament {
245    name: "ARCHYTAS",
246    page: "Archytas and ares",
247    revision: 226335,
248    subgroup: &[2, 3, 5, 7, 11],
249    periods_per_equave: 1,
250    generator_rows: &[&[1, 0, -2, -2], &[0, 1, 0, 2]],
251    generator_ratios: &["3/2", "5/4"],
252    generator_cents: &[709.7, 390.0],
253    optimization: "CWE",
254    titles: "Archytas; ares",
255    commas: &["64/63", "100/99"],
256    moments: &[],
257};
258
259/// Augmented (temperament) (2.3.5.7.11), rank 2, generator 3/2 at 711.6 cents.
260pub const AUGMENTED: NamedTemperament = NamedTemperament {
261    name: "AUGMENTED",
262    page: "Augmented (temperament)",
263    revision: 235640,
264    subgroup: &[2, 3, 5, 7, 11],
265    periods_per_equave: 3,
266    generator_rows: &[&[1, 0, -2, -2]],
267    generator_ratios: &["3/2"],
268    generator_cents: &[711.6],
269    optimization: "CWE",
270    titles: "",
271    commas: &["56/55", "64/63", "100/99"],
272    moments: &["3L 3s", "3L 6s", "3L 9s", "12L 3s"],
273};
274
275/// Blackwood (2.3.5.7), rank 2, generator 5/4 at 391.1 cents.
276pub const BLACKWOOD: NamedTemperament = NamedTemperament {
277    name: "BLACKWOOD",
278    page: "Blackwood",
279    revision: 232912,
280    subgroup: &[2, 3, 5, 7],
281    periods_per_equave: 5,
282    generator_rows: &[&[0, 1, 0]],
283    generator_ratios: &["5/4"],
284    generator_cents: &[391.1],
285    optimization: "CWE",
286    titles: "",
287    commas: &["28/27", "49/48"],
288    moments: &["5L 5s", "10L 5s"],
289};
290
291/// Bohpier (2.3.5.7.11.13), rank 2, generator 12/11 at 146.5 cents.
292pub const BOHPIER: NamedTemperament = NamedTemperament {
293    name: "BOHPIER",
294    page: "Bohpier",
295    revision: 234402,
296    subgroup: &[2, 3, 5, 7, 11, 13],
297    periods_per_equave: 1,
298    generator_rows: &[&[13, 19, 23, 12, 14]],
299    generator_ratios: &["12/11"],
300    generator_cents: &[146.5],
301    optimization: "CWE",
302    titles: "",
303    commas: &["100/99", "144/143", "196/195", "275/273"],
304    moments: &["1L 7s", "8L 1s", "8L 9s", "8L 17s"],
305};
306
307/// BPS (3.5.7), rank 2, generator 9/7 at 440.7 cents.
308pub const BPS: NamedTemperament = NamedTemperament {
309    name: "BPS",
310    page: "BPS",
311    revision: 236047,
312    subgroup: &[3, 5, 7],
313    periods_per_equave: 1,
314    generator_rows: &[&[2, -1]],
315    generator_ratios: &["9/7"],
316    generator_cents: &[440.7],
317    optimization: "CWE",
318    titles: "",
319    commas: &["245/243"],
320    moments: &[],
321};
322
323/// Bug and beep (2.3.5.7), rank 2, generator 5/3 at 938.0 cents.
324pub const BUG: NamedTemperament = NamedTemperament {
325    name: "BUG",
326    page: "Bug and beep",
327    revision: 230456,
328    subgroup: &[2, 3, 5, 7],
329    periods_per_equave: 1,
330    generator_rows: &[&[2, 3, 1]],
331    generator_ratios: &["5/3"],
332    generator_cents: &[938.0],
333    optimization: "CWE",
334    titles: "Bug / Beep",
335    commas: &["21/20", "27/25"],
336    moments: &["1L 3s", "4L 1s", "5L 4s"],
337};
338
339/// Bunya (2.3.5.7.11.13), rank 2, generator 10/9 at 175.9 cents.
340pub const BUNYA: NamedTemperament = NamedTemperament {
341    name: "BUNYA",
342    page: "Bunya",
343    revision: 232103,
344    subgroup: &[2, 3, 5, 7, 11, 13],
345    periods_per_equave: 1,
346    generator_rows: &[&[4, 9, 26, 10, -2]],
347    generator_ratios: &["10/9"],
348    generator_cents: &[175.9],
349    optimization: "CWE",
350    titles: "",
351    commas: &[
352        "100/99", "225/224", "243/242", "100/99", "144/143", "225/224", "243/242",
353    ],
354    moments: &["6L 1s", "7L 6s", "7L 13s", "7L 20s"],
355};
356
357/// Buzzard (2.3.5.7.11.13), rank 2, generator 21/16 at 475.7 cents.
358pub const BUZZARD: NamedTemperament = NamedTemperament {
359    name: "BUZZARD",
360    page: "Buzzard",
361    revision: 233828,
362    subgroup: &[2, 3, 5, 7, 11, 13],
363    periods_per_equave: 1,
364    generator_rows: &[&[4, 21, -3, 39, 27]],
365    generator_ratios: &["21/16"],
366    generator_cents: &[475.7],
367    optimization: "CWE",
368    titles: "",
369    commas: &["176/175", "351/350", "540/539", "676/675"],
370    moments: &["3L 2s"],
371};
372
373/// Canopus (3.5.7), rank 2, generator 7/5 at 583.986 cents.
374pub const CANOPUS: NamedTemperament = NamedTemperament {
375    name: "CANOPUS",
376    page: "Canopus",
377    revision: 231671,
378    subgroup: &[3, 5, 7],
379    periods_per_equave: 1,
380    generator_rows: &[&[-5, -4]],
381    generator_ratios: &["7/5"],
382    generator_cents: &[583.986],
383    optimization: "CWE",
384    titles: "",
385    commas: &["16875/16807"],
386    moments: &[],
387};
388
389/// Catakleismic (2.3.5.7.11.13), rank 2, generator 6/5 at 316.7 cents.
390pub const CATAKLEISMIC: NamedTemperament = NamedTemperament {
391    name: "CATAKLEISMIC",
392    page: "Catakleismic",
393    revision: 235730,
394    subgroup: &[2, 3, 5, 7, 11, 13],
395    periods_per_equave: 1,
396    generator_rows: &[&[6, 5, 22, -21, 14]],
397    generator_ratios: &["6/5"],
398    generator_cents: &[316.7],
399    optimization: "CWE",
400    titles: "",
401    commas: &["169/168", "225/224", "325/324", "385/384"],
402    moments: &["4L 7s", "4L 11s", "15L 4s", "15L 19s"],
403};
404
405/// Compton (2.3.5.7), rank 2, generator 5/4 at 384.1 cents.
406pub const COMPTON: NamedTemperament = NamedTemperament {
407    name: "COMPTON",
408    page: "Compton",
409    revision: 225555,
410    subgroup: &[2, 3, 5, 7],
411    periods_per_equave: 12,
412    generator_rows: &[&[0, 1, 2]],
413    generator_ratios: &["5/4"],
414    generator_cents: &[384.1],
415    optimization: "CWE",
416    titles: "",
417    commas: &["225/224", "250047/250000"],
418    moments: &["12L 12s", "12L 24s"],
419};
420
421/// Cotoneum (2.3.5.7.11.13.17.19), rank 2, generator 3/2 at 702.31 cents.
422pub const COTONEUM: NamedTemperament = NamedTemperament {
423    name: "COTONEUM",
424    page: "Cotoneum",
425    revision: 235863,
426    subgroup: &[2, 3, 5, 7, 11, 13, 17, 19],
427    periods_per_equave: 1,
428    generator_rows: &[&[1, -49, -14, 23, 61, 89, -44]],
429    generator_ratios: &["3/2"],
430    generator_cents: &[702.31],
431    optimization: "CWE",
432    titles: "",
433    commas: &[
434        "343/342",
435        "364/363",
436        "441/440",
437        "595/594",
438        "1216/1215",
439        "1729/1728",
440    ],
441    moments: &["12L 17s", "12L 29s", "41L 12s", "41L 53s"],
442};
443
444/// Decimal (2.3.5.7), rank 2, generator 7/4 at 951.0 cents.
445pub const DECIMAL: NamedTemperament = NamedTemperament {
446    name: "DECIMAL",
447    page: "Decimal",
448    revision: 223634,
449    subgroup: &[2, 3, 5, 7],
450    periods_per_equave: 2,
451    generator_rows: &[&[2, 1, 1]],
452    generator_ratios: &["7/4"],
453    generator_cents: &[951.0],
454    optimization: "CWE",
455    titles: "",
456    commas: &["25/24", "49/48"],
457    moments: &["4L 2s", "4L 6s", "10L 4s"],
458};
459
460/// Deeptone (2.3.5.13), rank 2, generator 3/2 at 689.6 cents.
461pub const DEEPTONE: NamedTemperament = NamedTemperament {
462    name: "DEEPTONE",
463    page: "Deeptone",
464    revision: 223673,
465    subgroup: &[2, 3, 5, 13],
466    periods_per_equave: 1,
467    generator_rows: &[&[1, 11, -4]],
468    generator_ratios: &["3/2"],
469    generator_cents: &[689.6],
470    optimization: "CWE",
471    titles: "",
472    commas: &["1053/1024", "2187/2080"],
473    moments: &["5L 2s", "7L 5s", "7L 12s"],
474};
475
476/// Diaschismic (2.3.5.7.11.13.17), rank 2, generator 3/2 at 703.9 cents.
477pub const DIASCHISMIC: NamedTemperament = NamedTemperament {
478    name: "DIASCHISMIC",
479    page: "Diaschismic",
480    revision: 232513,
481    subgroup: &[2, 3, 5, 7, 11, 13, 17],
482    periods_per_equave: 2,
483    generator_rows: &[&[1, -2, -8, -12, -15, 1]],
484    generator_ratios: &["3/2"],
485    generator_cents: &[703.9],
486    optimization: "CWE",
487    titles: "",
488    commas: &["126/125", "136/135", "176/175", "196/195", "256/255"],
489    moments: &["2L 8s", "10L 2s", "12L 10s"],
490};
491
492/// Dicot (2.3.5.11), rank 2, generator 6/5 at 351.1 cents.
493pub const DICOT: NamedTemperament = NamedTemperament {
494    name: "DICOT",
495    page: "Dicot",
496    revision: 232876,
497    subgroup: &[2, 3, 5, 11],
498    periods_per_equave: 1,
499    generator_rows: &[&[2, 1, 5]],
500    generator_ratios: &["6/5"],
501    generator_cents: &[351.1],
502    optimization: "CWE",
503    titles: "",
504    commas: &["25/24", "45/44"],
505    moments: &["3L 1s", "3L 4s", "7L 3s"],
506};
507
508/// Didacus (2.5.7.11), rank 2, generator 28/25 at 194.4 cents.
509pub const DIDACUS: NamedTemperament = NamedTemperament {
510    name: "DIDACUS",
511    page: "Didacus",
512    revision: 223688,
513    subgroup: &[2, 5, 7, 11],
514    periods_per_equave: 1,
515    generator_rows: &[&[2, 5, 9]],
516    generator_ratios: &["28/25"],
517    generator_cents: &[194.4],
518    optimization: "CWE",
519    titles: "",
520    commas: &["176/175", "1375/1372"],
521    moments: &["1L 5s", "6L 1s", "6L 7s", "6L 13s", "6L 19s"],
522};
523
524/// Diminished (temperament) (2.3.5.7), rank 2, generator 3/2 at 696.0 cents.
525pub const DIMINISHED: NamedTemperament = NamedTemperament {
526    name: "DIMINISHED",
527    page: "Diminished (temperament)",
528    revision: 226097,
529    subgroup: &[2, 3, 5, 7],
530    periods_per_equave: 4,
531    generator_rows: &[&[1, 1, 1]],
532    generator_ratios: &["3/2"],
533    generator_cents: &[696.0],
534    optimization: "CWE",
535    titles: "",
536    commas: &["36/35", "50/49"],
537    moments: &["4L 4s", "4L 8s", "12L 4s"],
538};
539
540/// Dominant (temperament) (2.3.5.7), rank 2, generator 3/2 at 701.1 cents.
541pub const DOMINANT: NamedTemperament = NamedTemperament {
542    name: "DOMINANT",
543    page: "Dominant (temperament)",
544    revision: 223637,
545    subgroup: &[2, 3, 5, 7],
546    periods_per_equave: 1,
547    generator_rows: &[&[1, 4, -2]],
548    generator_ratios: &["3/2"],
549    generator_cents: &[701.1],
550    optimization: "CWE",
551    titles: "",
552    commas: &["36/35", "64/63"],
553    moments: &["2L 3s", "5L 2s", "5L 7s"],
554};
555
556/// Ennealimmal (2.3.5.7), rank 2, generator 5/3 at 884.322 cents.
557pub const ENNEALIMMAL: NamedTemperament = NamedTemperament {
558    name: "ENNEALIMMAL",
559    page: "Ennealimmal",
560    revision: 231237,
561    subgroup: &[2, 3, 5, 7],
562    periods_per_equave: 9,
563    generator_rows: &[&[2, 3, 2]],
564    generator_ratios: &["5/3"],
565    generator_cents: &[884.322],
566    optimization: "CWE",
567    titles: "",
568    commas: &["2401/2400", "4375/4374"],
569    moments: &["18L 9s", "27L 18s", "27L 45s"],
570};
571
572/// Father (2.3.5.7), rank 2, generator 3/2 at 738.443 cents.
573pub const FATHER: NamedTemperament = NamedTemperament {
574    name: "FATHER",
575    page: "Father",
576    revision: 223994,
577    subgroup: &[2, 3, 5, 7],
578    periods_per_equave: 1,
579    generator_rows: &[&[1, -1, 3]],
580    generator_ratios: &["3/2"],
581    generator_cents: &[738.443],
582    optimization: "CWE",
583    titles: "",
584    commas: &["16/15", "16/15", "28/27"],
585    moments: &["1L 1s", "2L 1s", "3L 2s"],
586};
587
588/// Flattone (2.3.5.7.11.13), rank 2, generator 3/2 at 693.1 cents.
589pub const FLATTONE: NamedTemperament = NamedTemperament {
590    name: "FLATTONE",
591    page: "Flattone",
592    revision: 223639,
593    subgroup: &[2, 3, 5, 7, 11, 13],
594    periods_per_equave: 1,
595    generator_rows: &[&[1, 4, -9, 6, -4]],
596    generator_ratios: &["3/2"],
597    generator_cents: &[693.1],
598    optimization: "CWE",
599    titles: "",
600    commas: &["45/44", "65/64", "78/77", "81/80"],
601    moments: &["5L 2s", "7L 5s", "7L 12s"],
602};
603
604/// Gamelismic and portent (2.3.5.7.11), rank 3, generator 8/7, 5/4 at 233.8, 385.3 cents.
605pub const GAMELISMIC: NamedTemperament = NamedTemperament {
606    name: "GAMELISMIC",
607    page: "Gamelismic and portent",
608    revision: 231995,
609    subgroup: &[2, 3, 5, 7, 11],
610    periods_per_equave: 1,
611    generator_rows: &[&[3, 0, -1, 4], &[0, 1, 0, -1]],
612    generator_ratios: &["8/7", "5/4"],
613    generator_cents: &[233.8, 385.3],
614    optimization: "CWE",
615    titles: "Gamelismic; portent",
616    commas: &["385/384", "441/440"],
617    moments: &[],
618};
619
620/// Garibaldi (2.3.5.7.19), rank 2, generator 3/2 at 702.1 cents.
621pub const GARIBALDI: NamedTemperament = NamedTemperament {
622    name: "GARIBALDI",
623    page: "Garibaldi",
624    revision: 231769,
625    subgroup: &[2, 3, 5, 7, 19],
626    periods_per_equave: 1,
627    generator_rows: &[&[1, -8, -14, -3]],
628    generator_ratios: &["3/2"],
629    generator_cents: &[702.1],
630    optimization: "CWE",
631    titles: "",
632    commas: &["190/189", "225/224", "361/360"],
633    moments: &["5L 2s", "5L 7s", "12L 5s", "12L 17s"],
634};
635
636/// Gravity (2.3.5.11), rank 2, generator 27/20 at 516.8 cents.
637pub const GRAVITY: NamedTemperament = NamedTemperament {
638    name: "GRAVITY",
639    page: "Gravity",
640    revision: 227055,
641    subgroup: &[2, 3, 5, 11],
642    periods_per_equave: 1,
643    generator_rows: &[&[6, 17, 15]],
644    generator_ratios: &["27/20"],
645    generator_cents: &[516.8],
646    optimization: "CWE",
647    titles: "Gravity; Larry",
648    commas: &["243/242", "4000/3993"],
649    moments: &["2L 5s", "7L 2s", "7L 9s", "7L 51s"],
650};
651
652/// Gunn (2.3.5.7.11.13.17.19), rank 3, generator 5/4, 7/4 at 384.84, 965.14 cents.
653pub const GUNN: NamedTemperament = NamedTemperament {
654    name: "GUNN",
655    page: "Gunn",
656    revision: 235544,
657    subgroup: &[2, 3, 5, 7, 11, 13, 17, 19],
658    periods_per_equave: 24,
659    generator_rows: &[&[0, 1, 0, 0, 0, 0, 0], &[0, 0, 1, 0, -1, 0, 0]],
660    generator_ratios: &["5/4", "7/4"],
661    generator_cents: &[384.84, 965.14],
662    optimization: "CWE",
663    titles: "",
664    commas: &["729/728", "273/272", "153/152", "364/363", "1729/1728"],
665    moments: &[],
666};
667
668/// Harry (2.3.5.7.11.13), rank 2, generator 21/20 at 83.1 cents.
669pub const HARRY: NamedTemperament = NamedTemperament {
670    name: "HARRY",
671    page: "Harry",
672    revision: 227469,
673    subgroup: &[2, 3, 5, 7, 11, 13],
674    periods_per_equave: 2,
675    generator_rows: &[&[-6, -17, -10, -15, -26]],
676    generator_ratios: &["21/20"],
677    generator_cents: &[83.1],
678    optimization: "CWE",
679    titles: "",
680    commas: &["243/242", "351/350", "364/363", "441/440"],
681    moments: &["2L 12s", "14L 2s", "14L 16s", "14L 30s"],
682};
683
684/// Hemififths (2.3.5.7.11.13), rank 2, generator 49/40 at 351.5 cents.
685pub const HEMIFIFTHS: NamedTemperament = NamedTemperament {
686    name: "HEMIFIFTHS",
687    page: "Hemififths",
688    revision: 231760,
689    subgroup: &[2, 3, 5, 7, 11, 13],
690    periods_per_equave: 1,
691    generator_rows: &[&[2, 25, 13, 5, -1]],
692    generator_ratios: &["49/40"],
693    generator_cents: &[351.5],
694    optimization: "CWE",
695    titles: "",
696    commas: &["144/143", "196/195", "243/242", "364/363"],
697    moments: &["3L 4s", "7L 3s", "7L 10s", "17L 7s", "17L 24s"],
698};
699
700/// Jove (2.3.5.7.11), rank 3, generator 11/9, 10/7 at 350.5, 617.9 cents.
701pub const JOVE: NamedTemperament = NamedTemperament {
702    name: "JOVE",
703    page: "Jove",
704    revision: 231992,
705    subgroup: &[2, 3, 5, 7, 11],
706    periods_per_equave: 1,
707    generator_rows: &[&[2, 1, 1, 5], &[0, 2, 1, 0]],
708    generator_ratios: &["11/9", "10/7"],
709    generator_cents: &[350.5, 617.9],
710    optimization: "CWE",
711    titles: "",
712    commas: &["243/242", "441/440"],
713    moments: &[],
714};
715
716/// Keemun (2.3.5.7.11), rank 2, generator 6/5 at 317.6 cents.
717pub const KEEMUN: NamedTemperament = NamedTemperament {
718    name: "KEEMUN",
719    page: "Keemun",
720    revision: 227969,
721    subgroup: &[2, 3, 5, 7, 11],
722    periods_per_equave: 1,
723    generator_rows: &[&[6, 5, 3, -2]],
724    generator_ratios: &["6/5"],
725    generator_cents: &[317.6],
726    optimization: "CWE",
727    titles: "",
728    commas: &["49/48", "126/125", "49/48", "56/55", "100/99"],
729    moments: &["4L 3s", "4L 7s", "4L 11s", "15L 4s"],
730};
731
732/// Kleismic (2.3.5.13), rank 2, generator 6/5 at 317.1 cents.
733pub const KLEISMIC: NamedTemperament = NamedTemperament {
734    name: "KLEISMIC",
735    page: "Kleismic",
736    revision: 226929,
737    subgroup: &[2, 3, 5, 13],
738    periods_per_equave: 1,
739    generator_rows: &[&[6, 5, 14]],
740    generator_ratios: &["6/5"],
741    generator_cents: &[317.1],
742    optimization: "CWE",
743    titles: "",
744    commas: &["325/324", "625/624"],
745    moments: &["3L 1s", "4L 3s", "4L 7s", "4L 11s", "15L 4s"],
746};
747
748/// Laka (2.3.5.7.11.13), rank 3, generator 3/2, 5/4 at 702.6, 386.8 cents.
749pub const LAKA: NamedTemperament = NamedTemperament {
750    name: "LAKA",
751    page: "Laka",
752    revision: 234653,
753    subgroup: &[2, 3, 5, 7, 11, 13],
754    periods_per_equave: 1,
755    generator_rows: &[&[1, 0, -6, 15, 12], &[0, 1, 1, -1, -1]],
756    generator_ratios: &["3/2", "5/4"],
757    generator_cents: &[702.6, 386.8],
758    optimization: "CWE",
759    titles: "",
760    commas: &[],
761    moments: &[],
762};
763
764/// Leapday (2.3.5.7.11.13), rank 2, generator 3/2 at 704.2 cents.
765pub const LEAPDAY: NamedTemperament = NamedTemperament {
766    name: "LEAPDAY",
767    page: "Leapday",
768    revision: 235394,
769    subgroup: &[2, 3, 5, 7, 11, 13],
770    periods_per_equave: 1,
771    generator_rows: &[&[1, 21, 15, 11, 8]],
772    generator_ratios: &["3/2"],
773    generator_cents: &[704.2],
774    optimization: "CWE",
775    titles: "",
776    commas: &["91/90", "121/120", "169/168", "352/351"],
777    moments: &["2L 3s", "5L 2s", "5L 7s", "12L 5s"],
778};
779
780/// Lemba (2.3.5.7.11.13), rank 2, generator 8/7 at 231.2 cents.
781pub const LEMBA: NamedTemperament = NamedTemperament {
782    name: "LEMBA",
783    page: "Lemba",
784    revision: 224710,
785    subgroup: &[2, 3, 5, 7, 11, 13],
786    periods_per_equave: 2,
787    generator_rows: &[&[3, -1, -1, 5, 1]],
788    generator_ratios: &["8/7"],
789    generator_cents: &[231.2],
790    optimization: "CWE",
791    titles: "",
792    commas: &["45/44", "50/49", "65/64", "78/77"],
793    moments: &["4L 2s", "6L 4s", "10L 6s"],
794};
795
796/// Luna and hemithirds (2.3.5.7), rank 2, generator 28/25 at 193.2 cents.
797pub const LUNA: NamedTemperament = NamedTemperament {
798    name: "LUNA",
799    page: "Luna and hemithirds",
800    revision: 223644,
801    subgroup: &[2, 3, 5, 7],
802    periods_per_equave: 1,
803    generator_rows: &[&[-15, 2, 5]],
804    generator_ratios: &["28/25"],
805    generator_cents: &[193.2],
806    optimization: "CWE",
807    titles: "Hemithirds",
808    commas: &["1029/1024", "3136/3125"],
809    moments: &["1L 5s", "6L 1s", "6L 7s", "6L 13s", "6L 19s", "25L 6s"],
810};
811
812/// Magic (2.3.5.7), rank 2, generator 5/4 at 380.5 cents.
813pub const MAGIC: NamedTemperament = NamedTemperament {
814    name: "MAGIC",
815    page: "Magic",
816    revision: 231155,
817    subgroup: &[2, 3, 5, 7],
818    periods_per_equave: 1,
819    generator_rows: &[&[5, 1, 12]],
820    generator_ratios: &["5/4"],
821    generator_cents: &[380.5],
822    optimization: "CWE",
823    titles: "",
824    commas: &["225/224", "245/243"],
825    moments: &["3L 4s", "3L 7s", "3L 16s", "19L 3s"],
826};
827
828/// Marvel (2.3.5.7.11), rank 3, generator 3/2, 5/4 at 700.6, 383.5 cents.
829pub const MARVEL: NamedTemperament = NamedTemperament {
830    name: "MARVEL",
831    page: "Marvel",
832    revision: 231983,
833    subgroup: &[2, 3, 5, 7, 11],
834    periods_per_equave: 1,
835    generator_rows: &[&[1, 0, 2, -1], &[0, 1, 2, -3]],
836    generator_ratios: &["3/2", "5/4"],
837    generator_cents: &[700.6, 383.5],
838    optimization: "CWE",
839    titles: "",
840    commas: &["225/224", "385/384"],
841    moments: &[],
842};
843
844/// Mavila (2.3.5.11), rank 2, generator 3/2 at 679.0 cents.
845pub const MAVILA: NamedTemperament = NamedTemperament {
846    name: "MAVILA",
847    page: "Mavila",
848    revision: 225302,
849    subgroup: &[2, 3, 5, 11],
850    periods_per_equave: 1,
851    generator_rows: &[&[1, -3, -1]],
852    generator_ratios: &["3/2"],
853    generator_cents: &[679.0],
854    optimization: "CWE",
855    titles: "",
856    commas: &["135/128", "33/32", "45/44"],
857    moments: &["2L 3s", "2L 5s", "7L 2s"],
858};
859
860/// Meantone (2.3.5.7), rank 2, generator 3/2 at 696.7 cents.
861pub const MEANTONE: NamedTemperament = NamedTemperament {
862    name: "MEANTONE",
863    page: "Meantone",
864    revision: 234286,
865    subgroup: &[2, 3, 5, 7],
866    periods_per_equave: 1,
867    generator_rows: &[&[1, 4, 10]],
868    generator_ratios: &["3/2"],
869    generator_cents: &[696.7],
870    optimization: "CWE",
871    titles: "",
872    commas: &["81/80", "126/125"],
873    moments: &["2L 3s", "5L 2s", "7L 5s", "12L 7s"],
874};
875
876/// Mintaka (3.7.11), rank 2, generator 11/7 at 778.7 cents.
877pub const MINTAKA: NamedTemperament = NamedTemperament {
878    name: "MINTAKA",
879    page: "Mintaka",
880    revision: 223712,
881    subgroup: &[3, 7, 11],
882    periods_per_equave: 1,
883    generator_rows: &[&[-3, -2]],
884    generator_ratios: &["11/7"],
885    generator_cents: &[778.7],
886    optimization: "CWE",
887    titles: "",
888    commas: &["1331/1323"],
889    moments: &["2L 3s", "5L 2s", "5L 7s", "5L 12s"],
890};
891
892/// Miracle (2.3.5.7.11), rank 2, generator 15/14 at 116.7 cents.
893pub const MIRACLE: NamedTemperament = NamedTemperament {
894    name: "MIRACLE",
895    page: "Miracle",
896    revision: 233546,
897    subgroup: &[2, 3, 5, 7, 11],
898    periods_per_equave: 1,
899    generator_rows: &[&[6, -7, -2, 15]],
900    generator_ratios: &["15/14"],
901    generator_cents: &[116.7],
902    optimization: "CTE",
903    titles: "",
904    commas: &["225/224", "243/242", "385/384"],
905    moments: &["1L 9s", "10L 1s", "10L 11s", "10L 21s"],
906};
907
908/// Misty (2.3.5.7.17.19), rank 2, generator 3/2 at 703.1 cents.
909pub const MISTY: NamedTemperament = NamedTemperament {
910    name: "MISTY",
911    page: "Misty",
912    revision: 231776,
913    subgroup: &[2, 3, 5, 7, 17, 19],
914    periods_per_equave: 3,
915    generator_rows: &[&[1, -4, -10, 3, 1]],
916    generator_ratios: &["3/2"],
917    generator_cents: &[703.1],
918    optimization: "CWE",
919    titles: "",
920    commas: &["256/255", "324/323", "400/399", "476/475"],
921    moments: &["3L 9s", "12L 3s", "12L 15s", "12L 27s"],
922};
923
924/// Modus (2.3.5.7.11.13), rank 2, generator 10/9 at 176.8 cents.
925pub const MODUS: NamedTemperament = NamedTemperament {
926    name: "MODUS",
927    page: "Modus",
928    revision: 234650,
929    subgroup: &[2, 3, 5, 7, 11, 13],
930    periods_per_equave: 1,
931    generator_rows: &[&[4, 9, -8, 10, -2]],
932    generator_ratios: &["10/9"],
933    generator_cents: &[176.8],
934    optimization: "CWE",
935    titles: "",
936    commas: &[
937        "64/63", "100/99", "243/242", "64/63", "78/77", "100/99", "144/143",
938    ],
939    moments: &["6L 1s", "7L 6s", "7L 13s", "7L 20s"],
940};
941
942/// Mohajira (2.3.5.7.11), rank 2, generator 11/9 at 348.5 cents.
943pub const MOHAJIRA: NamedTemperament = NamedTemperament {
944    name: "MOHAJIRA",
945    page: "Mohajira",
946    revision: 227468,
947    subgroup: &[2, 3, 5, 7, 11],
948    periods_per_equave: 1,
949    generator_rows: &[&[2, 8, -11, 5]],
950    generator_ratios: &["11/9"],
951    generator_cents: &[348.5],
952    optimization: "CWE",
953    titles: "",
954    commas: &["81/80", "121/120", "176/175"],
955    moments: &["3L 4s", "7L 3s", "7L 10s", "7L 17s"],
956};
957
958/// Monkey (2.3.5.7.11.13), rank 2, generator 10/9 at 175.6 cents.
959pub const MONKEY: NamedTemperament = NamedTemperament {
960    name: "MONKEY",
961    page: "Monkey",
962    revision: 231770,
963    subgroup: &[2, 3, 5, 7, 11, 13],
964    periods_per_equave: 1,
965    generator_rows: &[&[4, 9, -15, 10, -2]],
966    generator_ratios: &["10/9"],
967    generator_cents: &[175.6],
968    optimization: "CWE",
969    titles: "",
970    commas: &[
971        "100/99", "243/242", "385/384", "100/99", "144/143", "243/242", "385/384",
972    ],
973    moments: &["6L 1s", "7L 6s", "7L 13s", "7L 20s"],
974};
975
976/// Mothra (2.3.5.7), rank 2, generator 8/7 at 232.3 cents.
977pub const MOTHRA: NamedTemperament = NamedTemperament {
978    name: "MOTHRA",
979    page: "Mothra",
980    revision: 226452,
981    subgroup: &[2, 3, 5, 7],
982    periods_per_equave: 1,
983    generator_rows: &[&[3, 12, -1]],
984    generator_ratios: &["8/7"],
985    generator_cents: &[232.3],
986    optimization: "CWE",
987    titles: "",
988    commas: &["81/80", "1029/1024"],
989    moments: &["1L 4s", "5L 1s", "5L 6s", "5L 21s"],
990};
991
992/// Muggles (2.3.5.7.11.13), rank 2, generator 5/4 at 377.7 cents.
993pub const MUGGLES: NamedTemperament = NamedTemperament {
994    name: "MUGGLES",
995    page: "Muggles",
996    revision: 227466,
997    subgroup: &[2, 3, 5, 7, 11, 13],
998    periods_per_equave: 1,
999    generator_rows: &[&[5, 1, -7, 11, -1]],
1000    generator_ratios: &["5/4"],
1001    generator_cents: &[377.7],
1002    optimization: "CWE",
1003    titles: "",
1004    commas: &["45/44", "65/64", "78/77", "126/125"],
1005    moments: &["3L 7s", "3L 10s", "3L 13s", "16L 3s"],
1006};
1007
1008/// Myna (2.3.5.7.11), rank 2, generator 6/5 at 310.1 cents.
1009pub const MYNA: NamedTemperament = NamedTemperament {
1010    name: "MYNA",
1011    page: "Myna",
1012    revision: 230321,
1013    subgroup: &[2, 3, 5, 7, 11],
1014    periods_per_equave: 1,
1015    generator_rows: &[&[10, 9, 7, 25]],
1016    generator_ratios: &["6/5"],
1017    generator_cents: &[310.1],
1018    optimization: "CWE",
1019    titles: "",
1020    commas: &["126/125", "176/175", "243/242"],
1021    moments: &["3L 1s", "4L 3s", "4L 7s", "4L 23s", "27L 4s"],
1022};
1023
1024/// Mystery (2.3.5.7.11.13), rank 2, generator 5/4 at 387.9 cents.
1025pub const MYSTERY: NamedTemperament = NamedTemperament {
1026    name: "MYSTERY",
1027    page: "Mystery",
1028    revision: 231766,
1029    subgroup: &[2, 3, 5, 7, 11, 13],
1030    periods_per_equave: 29,
1031    generator_rows: &[&[0, 1, 1, 1, 1]],
1032    generator_ratios: &["5/4"],
1033    generator_cents: &[387.9],
1034    optimization: "CWE",
1035    titles: "",
1036    commas: &["196/195", "352/351", "364/363", "676/675"],
1037    moments: &["29L 29s", "58L 29s"],
1038};
1039
1040/// Negri (2.3.5.7.13), rank 2, generator 16/15 at 125.4 cents.
1041pub const NEGRI: NamedTemperament = NamedTemperament {
1042    name: "NEGRI",
1043    page: "Negri",
1044    revision: 233544,
1045    subgroup: &[2, 3, 5, 7, 13],
1046    periods_per_equave: 1,
1047    generator_rows: &[&[-4, 3, -2, -3]],
1048    generator_ratios: &["16/15"],
1049    generator_cents: &[125.4],
1050    optimization: "CWE",
1051    titles: "",
1052    commas: &["49/48", "65/64", "91/90"],
1053    moments: &["1L 8s", "9L 1s", "10L 9s"],
1054};
1055
1056/// Neutrominant (2.3.5.7.11.13), rank 2, generator 11/9 at 350.7 cents.
1057pub const NEUTROMINANT: NamedTemperament = NamedTemperament {
1058    name: "NEUTROMINANT",
1059    page: "Neutrominant",
1060    revision: 227457,
1061    subgroup: &[2, 3, 5, 7, 11, 13],
1062    periods_per_equave: 1,
1063    generator_rows: &[&[2, 8, -4, 5, -1]],
1064    generator_ratios: &["11/9"],
1065    generator_cents: &[350.7],
1066    optimization: "CWE",
1067    titles: "",
1068    commas: &["36/35", "64/63", "66/65", "121/120"],
1069    moments: &["3L 4s", "7L 3s", "7L 10s"],
1070};
1071
1072/// Octoid (2.3.5.7.11), rank 2, generator 7/5 at 583.948 cents.
1073pub const OCTOID: NamedTemperament = NamedTemperament {
1074    name: "OCTOID",
1075    page: "Octoid",
1076    revision: 231672,
1077    subgroup: &[2, 3, 5, 7, 11],
1078    periods_per_equave: 8,
1079    generator_rows: &[&[3, 4, 5, 3]],
1080    generator_ratios: &["7/5"],
1081    generator_cents: &[583.948],
1082    optimization: "CWE",
1083    titles: "",
1084    commas: &["540/539", "1375/1372", "4000/3993"],
1085    moments: &["8L 64s", "72L 8s"],
1086};
1087
1088/// Oolong (2.3.5.7.13), rank 2, generator 6/5 at 311.7 cents.
1089pub const OOLONG: NamedTemperament = NamedTemperament {
1090    name: "OOLONG",
1091    page: "Oolong",
1092    revision: 229456,
1093    subgroup: &[2, 3, 5, 7, 13],
1094    periods_per_equave: 1,
1095    generator_rows: &[&[-17, -18, -20, -5]],
1096    generator_ratios: &["6/5"],
1097    generator_cents: &[311.7],
1098    optimization: "CWE",
1099    titles: "",
1100    commas: &["126/125", "196/195", "15379/15360"],
1101    moments: &["4L 3s", "4L 7s", "4L 11s", "4L 15s", "4L 19s", "23L 4s"],
1102};
1103
1104/// Opossum (2.3.5.7.11), rank 2, generator 11/10 at 160.5 cents.
1105pub const OPOSSUM: NamedTemperament = NamedTemperament {
1106    name: "OPOSSUM",
1107    page: "Opossum",
1108    revision: 227460,
1109    subgroup: &[2, 3, 5, 7, 11],
1110    periods_per_equave: 1,
1111    generator_rows: &[&[-3, -5, -9, -4]],
1112    generator_ratios: &["11/10"],
1113    generator_cents: &[160.5],
1114    optimization: "CWE",
1115    titles: "",
1116    commas: &["28/27", "55/54", "77/75"],
1117    moments: &["1L 6s", "7L 1s"],
1118};
1119
1120/// Orwell (2.3.5.7.11), rank 2, generator 7/6 at 271.5 cents.
1121pub const ORWELL: NamedTemperament = NamedTemperament {
1122    name: "ORWELL",
1123    page: "Orwell",
1124    revision: 233021,
1125    subgroup: &[2, 3, 5, 7, 11],
1126    periods_per_equave: 1,
1127    generator_rows: &[&[7, -3, 8, 2]],
1128    generator_ratios: &["7/6"],
1129    generator_cents: &[271.5],
1130    optimization: "CWE",
1131    titles: "",
1132    commas: &["99/98", "121/120", "176/175"],
1133    moments: &["4L 1s", "4L 5s", "9L 4s", "9L 13s"],
1134};
1135
1136/// Pajara (2.3.5.7.11.17), rank 2, generator 3/2 at 707.4 cents.
1137pub const PAJARA: NamedTemperament = NamedTemperament {
1138    name: "PAJARA",
1139    page: "Pajara",
1140    revision: 231604,
1141    subgroup: &[2, 3, 5, 7, 11, 17],
1142    periods_per_equave: 2,
1143    generator_rows: &[&[1, -2, -2, -6, 1]],
1144    generator_ratios: &["3/2"],
1145    generator_cents: &[707.4],
1146    optimization: "CWE",
1147    titles: "",
1148    commas: &["50/49", "64/63", "85/84", "99/98"],
1149    moments: &["2L 8s", "10L 2s", "12L 10s"],
1150};
1151
1152/// Parakleismic (2.3.5.7), rank 2, generator 5/3 at 884.81 cents.
1153pub const PARAKLEISMIC: NamedTemperament = NamedTemperament {
1154    name: "PARAKLEISMIC",
1155    page: "Parakleismic",
1156    revision: 235440,
1157    subgroup: &[2, 3, 5, 7],
1158    periods_per_equave: 1,
1159    generator_rows: &[&[13, 14, 35]],
1160    generator_ratios: &["5/3"],
1161    generator_cents: &[884.81],
1162    optimization: "CWE",
1163    titles: "",
1164    commas: &["3136/3125", "4375/4374"],
1165    moments: &["4L 15s", "19L 4s", "19L 23s"],
1166};
1167
1168/// Parapyth (2.3.7.11.13), rank 3, generator 3/2, 7/4 at 703.8, 969.2 cents.
1169pub const PARAPYTH: NamedTemperament = NamedTemperament {
1170    name: "PARAPYTH",
1171    page: "Parapyth",
1172    revision: 231575,
1173    subgroup: &[2, 3, 7, 11, 13],
1174    periods_per_equave: 1,
1175    generator_rows: &[&[1, 0, -4, -7], &[0, 1, 1, 1]],
1176    generator_ratios: &["3/2", "7/4"],
1177    generator_cents: &[703.8, 969.2],
1178    optimization: "CWE",
1179    titles: "",
1180    commas: &["352/351", "364/363"],
1181    moments: &[],
1182};
1183
1184/// Pele (2.3.5.7.11.13), rank 3, generator 3/2, 5/4 at 703.4, 387.8 cents.
1185pub const PELE: NamedTemperament = NamedTemperament {
1186    name: "PELE",
1187    page: "Pele",
1188    revision: 234652,
1189    subgroup: &[2, 3, 5, 7, 11, 13],
1190    periods_per_equave: 1,
1191    generator_rows: &[&[1, 0, -6, -10, -13], &[0, 1, 1, 1, 1]],
1192    generator_ratios: &["3/2", "5/4"],
1193    generator_cents: &[703.4, 387.8],
1194    optimization: "CWE",
1195    titles: "",
1196    commas: &[],
1197    moments: &[],
1198};
1199
1200/// Pentadacus (5.7.11), rank 2, generator 55/49 at 194.8 cents.
1201pub const PENTADACUS: NamedTemperament = NamedTemperament {
1202    name: "PENTADACUS",
1203    page: "Pentadacus",
1204    revision: 236333,
1205    subgroup: &[5, 7, 11],
1206    periods_per_equave: 1,
1207    generator_rows: &[&[3, 7]],
1208    generator_ratios: &["55/49"],
1209    generator_cents: &[194.8],
1210    optimization: "CWE",
1211    titles: "",
1212    commas: &["831875/823543"],
1213    moments: &[],
1214};
1215
1216/// Pontiac (2.3.5.7), rank 2, generator 3/2 at 701.758 cents.
1217pub const PONTIAC: NamedTemperament = NamedTemperament {
1218    name: "PONTIAC",
1219    page: "Pontiac",
1220    revision: 223671,
1221    subgroup: &[2, 3, 5, 7],
1222    periods_per_equave: 1,
1223    generator_rows: &[&[1, -8, 39]],
1224    generator_ratios: &["3/2"],
1225    generator_cents: &[701.758],
1226    optimization: "CWE",
1227    titles: "",
1228    commas: &["4375/4374", "32805/32768"],
1229    moments: &["12L 17s", "12L 29s", "12L 41s", "53L 12s"],
1230};
1231
1232/// Porcupine (2.3.5.7.11), rank 2, generator 10/9 at 163.0 cents.
1233pub const PORCUPINE: NamedTemperament = NamedTemperament {
1234    name: "PORCUPINE",
1235    page: "Porcupine",
1236    revision: 229003,
1237    subgroup: &[2, 3, 5, 7, 11],
1238    periods_per_equave: 1,
1239    generator_rows: &[&[-3, -5, 6, -4]],
1240    generator_ratios: &["10/9"],
1241    generator_cents: &[163.0],
1242    optimization: "CWE",
1243    titles: "",
1244    commas: &["55/54", "64/63", "100/99"],
1245    moments: &["1L 6s", "7L 1s", "7L 8s"],
1246};
1247
1248/// Quartkeenlig (2.3.5.7.11), rank 2, generator 36/35 at 52.845 cents.
1249pub const QUARTKEENLIG: NamedTemperament = NamedTemperament {
1250    name: "QUARTKEENLIG",
1251    page: "Quartkeenlig",
1252    revision: 235979,
1253    subgroup: &[2, 3, 5, 7, 11],
1254    periods_per_equave: 1,
1255    generator_rows: &[&[36, 30, 41, -35]],
1256    generator_ratios: &["36/35"],
1257    generator_cents: &[52.845],
1258    optimization: "CWE",
1259    titles: "",
1260    commas: &["385/384", "6250/6237", "67228/66825"],
1261    moments: &["22L 1s"],
1262};
1263
1264/// Quasisuper (2.3.5.7.11), rank 2, generator 3/2 at 708.3 cents.
1265pub const QUASISUPER: NamedTemperament = NamedTemperament {
1266    name: "QUASISUPER",
1267    page: "Quasisuper",
1268    revision: 224309,
1269    subgroup: &[2, 3, 5, 7, 11],
1270    periods_per_equave: 1,
1271    generator_rows: &[&[1, -13, -2, -6]],
1272    generator_ratios: &["3/2"],
1273    generator_cents: &[708.3],
1274    optimization: "CWE",
1275    titles: "Quasisuper; quasisupra",
1276    commas: &["64/63", "99/98", "121/120"],
1277    moments: &["5L 2s", "5L 7s", "5L 12s", "17L 5s"],
1278};
1279
1280/// Rodan (2.3.5.7.11), rank 2, generator 8/7 at 234.4 cents.
1281pub const RODAN: NamedTemperament = NamedTemperament {
1282    name: "RODAN",
1283    page: "Rodan",
1284    revision: 231761,
1285    subgroup: &[2, 3, 5, 7, 11],
1286    periods_per_equave: 1,
1287    generator_rows: &[&[3, 17, -1, -13]],
1288    generator_ratios: &["8/7"],
1289    generator_cents: &[234.4],
1290    optimization: "CWE",
1291    titles: "",
1292    commas: &["245/243", "385/384", "441/440"],
1293    moments: &["1L 4s", "5L 1s", "5L 6s", "5L 36s", "41L 5s"],
1294};
1295
1296/// Schismic (2.3.5), rank 2, generator 3/2 at 701.731 cents.
1297pub const SCHISMIC: NamedTemperament = NamedTemperament {
1298    name: "SCHISMIC",
1299    page: "Schismic",
1300    revision: 235694,
1301    subgroup: &[2, 3, 5],
1302    periods_per_equave: 1,
1303    generator_rows: &[&[1, -8]],
1304    generator_ratios: &["3/2"],
1305    generator_cents: &[701.731],
1306    optimization: "CWE",
1307    titles: "",
1308    commas: &["32805/32768"],
1309    moments: &["2L 3s", "5L 2s", "5L 7s", "12L 5s"],
1310};
1311
1312/// Semaphore and godzilla (2.3.5.7.13), rank 2, generator 7/4 at 948.0 cents.
1313pub const SEMAPHORE: NamedTemperament = NamedTemperament {
1314    name: "SEMAPHORE",
1315    page: "Semaphore and godzilla",
1316    revision: 233995,
1317    subgroup: &[2, 3, 5, 7, 13],
1318    periods_per_equave: 1,
1319    generator_rows: &[&[2, 8, 1, 11]],
1320    generator_ratios: &["7/4"],
1321    generator_cents: &[948.0],
1322    optimization: "CWE",
1323    titles: "",
1324    commas: &[],
1325    moments: &["4L 1s", "5L 4s", "5L 9s", "5L 14s"],
1326};
1327
1328/// Sensamagic (2.3.5.7.11), rank 3, generator 3/2, 9/7 at 703.8, 440.9 cents.
1329pub const SENSAMAGIC: NamedTemperament = NamedTemperament {
1330    name: "SENSAMAGIC",
1331    page: "Sensamagic",
1332    revision: 231982,
1333    subgroup: &[2, 3, 5, 7, 11],
1334    periods_per_equave: 1,
1335    generator_rows: &[&[1, 1, 2, -2], &[0, 2, -1, -1]],
1336    generator_ratios: &["3/2", "9/7"],
1337    generator_cents: &[703.8, 440.9],
1338    optimization: "CWE",
1339    titles: "",
1340    commas: &["245/243", "385/384"],
1341    moments: &[],
1342};
1343
1344/// Sensi (2.3.5.7.13), rank 2, generator 9/7 at 443.3 cents.
1345pub const SENSI: NamedTemperament = NamedTemperament {
1346    name: "SENSI",
1347    page: "Sensi",
1348    revision: 229838,
1349    subgroup: &[2, 3, 5, 7, 13],
1350    periods_per_equave: 1,
1351    generator_rows: &[&[7, 9, 13, 10]],
1352    generator_ratios: &["9/7"],
1353    generator_cents: &[443.3],
1354    optimization: "CWE",
1355    titles: "",
1356    commas: &["91/90", "126/125", "169/168"],
1357    moments: &["3L 2s", "3L 5s", "8L 3s", "8L 11s"],
1358};
1359
1360/// Septischismic (2.3.5.7.11.13.19), rank 3, generator 3/2, 5/4 at 702.2307, 386.3245 cents.
1361pub const SEPTISCHISMIC: NamedTemperament = NamedTemperament {
1362    name: "SEPTISCHISMIC",
1363    page: "Septischismic",
1364    revision: 235909,
1365    subgroup: &[2, 3, 5, 7, 11, 13, 19],
1366    periods_per_equave: 1,
1367    generator_rows: &[&[1, 0, -14, 23, 12, 5], &[0, 1, 0, 0, -1, 1]],
1368    generator_ratios: &["3/2", "5/4"],
1369    generator_cents: &[702.2307, 386.3245],
1370    optimization: "CWE",
1371    titles: "",
1372    commas: &["1216/1215", "1540/1539", "1729/1728", "2080/2079"],
1373    moments: &[],
1374};
1375
1376/// Shallowtone (2.3.5.7), rank 2, generator 3/2 at 681.2 cents.
1377pub const SHALLOWTONE: NamedTemperament = NamedTemperament {
1378    name: "SHALLOWTONE",
1379    page: "Shallowtone",
1380    revision: 233303,
1381    subgroup: &[2, 3, 5, 7],
1382    periods_per_equave: 1,
1383    generator_rows: &[&[1, -10, 12]],
1384    generator_ratios: &["3/2"],
1385    generator_cents: &[681.2],
1386    optimization: "CWE",
1387    titles: "",
1388    commas: &["295245/262144", "36/35", "295245/262144"],
1389    moments: &["2L 3s", "2L 5s", "7L 2s"],
1390};
1391
1392/// Sirius (3.5.7), rank 2, generator 25/21 at 293.759 cents.
1393pub const SIRIUS: NamedTemperament = NamedTemperament {
1394    name: "SIRIUS",
1395    page: "Sirius",
1396    revision: 225422,
1397    subgroup: &[3, 5, 7],
1398    periods_per_equave: 1,
1399    generator_rows: &[&[3, 5]],
1400    generator_ratios: &["25/21"],
1401    generator_cents: &[293.759],
1402    optimization: "CWE",
1403    titles: "",
1404    commas: &["3125/3087"],
1405    moments: &[],
1406};
1407
1408/// Slendric (2.3.7), rank 2, generator 8/7 at 233.7 cents.
1409pub const SLENDRIC: NamedTemperament = NamedTemperament {
1410    name: "SLENDRIC",
1411    page: "Slendric",
1412    revision: 223660,
1413    subgroup: &[2, 3, 7],
1414    periods_per_equave: 1,
1415    generator_rows: &[&[3, -1]],
1416    generator_ratios: &["8/7"],
1417    generator_cents: &[233.7],
1418    optimization: "CWE",
1419    titles: "",
1420    commas: &["1029/1024"],
1421    moments: &["1L 4s", "5L 1s", "5L 6s", "5L 11s"],
1422};
1423
1424/// Squares (2.3.5.7.11), rank 2, generator 9/7 at 426.0 cents.
1425pub const SQUARES: NamedTemperament = NamedTemperament {
1426    name: "SQUARES",
1427    page: "Squares",
1428    revision: 223661,
1429    subgroup: &[2, 3, 5, 7, 11],
1430    periods_per_equave: 1,
1431    generator_rows: &[&[-4, -16, -9, -10]],
1432    generator_ratios: &["9/7"],
1433    generator_cents: &[426.0],
1434    optimization: "CWE",
1435    titles: "Skwares; Squares",
1436    commas: &["81/80", "99/98", "121/120"],
1437    moments: &["3L 2s", "3L 5s", "3L 8s", "3L 11s", "14L 3s"],
1438};
1439
1440/// Starling and thrush (2.3.5.7.11), rank 3, generator 3/2, 5/4 at 701.6, 390.9 cents.
1441pub const STARLING: NamedTemperament = NamedTemperament {
1442    name: "STARLING",
1443    page: "Starling and thrush",
1444    revision: 231979,
1445    subgroup: &[2, 3, 5, 7, 11],
1446    periods_per_equave: 1,
1447    generator_rows: &[&[1, 0, -2, -2], &[0, 1, 3, 5]],
1448    generator_ratios: &["3/2", "5/4"],
1449    generator_cents: &[701.6, 390.9],
1450    optimization: "CWE",
1451    titles: "Starling; thrush",
1452    commas: &["126/125", "176/175"],
1453    moments: &[],
1454};
1455
1456/// Submerged (2.3.5.7.11.13), rank 2, generator 8/5 at 827.0 cents.
1457pub const SUBMERGED: NamedTemperament = NamedTemperament {
1458    name: "SUBMERGED",
1459    page: "Submerged",
1460    revision: 235409,
1461    subgroup: &[2, 3, 5, 7, 11, 13],
1462    periods_per_equave: 1,
1463    generator_rows: &[&[11, -1, -9, 5, 1]],
1464    generator_ratios: &["8/5"],
1465    generator_cents: &[827.0],
1466    optimization: "CWE",
1467    titles: "",
1468    commas: &["65/64", "105/104", "121/120", "441/440"],
1469    moments: &["3L 7s", "3L 10s", "13L 3s"],
1470};
1471
1472/// Superkleismic (2.3.5.7.11.19), rank 2, generator 5/3 at 878.2 cents.
1473pub const SUPERKLEISMIC: NamedTemperament = NamedTemperament {
1474    name: "SUPERKLEISMIC",
1475    page: "Superkleismic",
1476    revision: 225040,
1477    subgroup: &[2, 3, 5, 7, 11, 19],
1478    periods_per_equave: 1,
1479    generator_rows: &[&[9, 10, -3, 2, 14]],
1480    generator_ratios: &["5/3"],
1481    generator_cents: &[878.2],
1482    optimization: "CWE",
1483    titles: "",
1484    commas: &[],
1485    moments: &["3L 1s", "4L 3s", "4L 7s", "11L 4s", "15L 11s"],
1486};
1487
1488/// Superpyth (2.3.5.7.11), rank 2, generator 3/2 at 710.1 cents.
1489pub const SUPERPYTH: NamedTemperament = NamedTemperament {
1490    name: "SUPERPYTH",
1491    page: "Superpyth",
1492    revision: 228424,
1493    subgroup: &[2, 3, 5, 7, 11],
1494    periods_per_equave: 1,
1495    generator_rows: &[&[1, 9, -2, 16]],
1496    generator_ratios: &["3/2"],
1497    generator_cents: &[710.1],
1498    optimization: "CWE",
1499    titles: "Archy; superpyth",
1500    commas: &["64/63", "100/99", "245/243"],
1501    moments: &["2L 3s", "5L 2s", "5L 7s", "5L 12s", "5L 17s"],
1502};
1503
1504/// Tetracot (2.3.5.11.13), rank 2, generator 10/9 at 176.1 cents.
1505pub const TETRACOT: NamedTemperament = NamedTemperament {
1506    name: "TETRACOT",
1507    page: "Tetracot",
1508    revision: 232444,
1509    subgroup: &[2, 3, 5, 11, 13],
1510    periods_per_equave: 1,
1511    generator_rows: &[&[4, 9, 10, -2]],
1512    generator_ratios: &["10/9"],
1513    generator_cents: &[176.1],
1514    optimization: "CWE",
1515    titles: "",
1516    commas: &["100/99", "243/242", "100/99", "144/143", "243/242"],
1517    moments: &["6L 1s", "7L 6s", "7L 13s"],
1518};
1519
1520/// Trisected (2.3.5.7.11.13), rank 2, generator 10/7 at 635.0 cents.
1521pub const TRISECTED: NamedTemperament = NamedTemperament {
1522    name: "TRISECTED",
1523    page: "Trisected",
1524    revision: 233786,
1525    subgroup: &[2, 3, 5, 7, 11, 13],
1526    periods_per_equave: 3,
1527    generator_rows: &[&[3, 0, -1, -1, 7]],
1528    generator_ratios: &["10/7"],
1529    generator_cents: &[635.0],
1530    optimization: "CWE",
1531    titles: "",
1532    commas: &["56/55", "91/90", "128/125", "1029/1000"],
1533    moments: &["6L 9s", "15L 6s", "15L 21s"],
1534};
1535
1536/// Mabilic and trismegistus (2.3.5.7), rank 2, generator 175/128 at 526.7 cents.
1537pub const TRISMEGISTUS: NamedTemperament = NamedTemperament {
1538    name: "TRISMEGISTUS",
1539    page: "Mabilic and trismegistus",
1540    revision: 232517,
1541    subgroup: &[2, 3, 5, 7],
1542    periods_per_equave: 1,
1543    generator_rows: &[&[-15, -3, 5]],
1544    generator_ratios: &["175/128"],
1545    generator_cents: &[526.7],
1546    optimization: "CWE",
1547    titles: "Mabilic; Trismegistus",
1548    commas: &["1029/1024", "3125/3072"],
1549    moments: &["7L 2s", "9L 7s"],
1550};
1551
1552/// Tritikleismic (2.3.5.7.11.13.17), rank 2, generator 6/5 at 316.938 cents.
1553pub const TRITIKLEISMIC: NamedTemperament = NamedTemperament {
1554    name: "TRITIKLEISMIC",
1555    page: "Tritikleismic",
1556    revision: 230636,
1557    subgroup: &[2, 3, 5, 7, 11, 13, 17],
1558    periods_per_equave: 3,
1559    generator_rows: &[&[6, 5, -2, 3, 14, 18]],
1560    generator_ratios: &["6/5"],
1561    generator_cents: &[316.938],
1562    optimization: "CWE",
1563    titles: "",
1564    commas: &[],
1565    moments: &["3L 6s", "9L 3s", "12L 3s", "15L 12s"],
1566};
1567
1568/// Ultrapyth (2.3.5.7.13), rank 2, generator 3/2 at 713.6 cents.
1569pub const ULTRAPYTH: NamedTemperament = NamedTemperament {
1570    name: "ULTRAPYTH",
1571    page: "Ultrapyth",
1572    revision: 223678,
1573    subgroup: &[2, 3, 5, 7, 13],
1574    periods_per_equave: 1,
1575    generator_rows: &[&[1, 14, -2, 18]],
1576    generator_ratios: &["3/2"],
1577    generator_cents: &[713.6],
1578    optimization: "CWE",
1579    titles: "",
1580    commas: &["64/63", "6860/6561", "64/63", "91/90", "6125/6084"],
1581    moments: &["5L 7s", "5L 12s", "5L 17s", "5L 22s"],
1582};
1583
1584/// Unidec (2.3.5.7.11), rank 2, generator 14/11 at 416.9 cents.
1585pub const UNIDEC: NamedTemperament = NamedTemperament {
1586    name: "UNIDEC",
1587    page: "Unidec",
1588    revision: 236473,
1589    subgroup: &[2, 3, 5, 7, 11],
1590    periods_per_equave: 2,
1591    generator_rows: &[&[6, 11, -2, -3]],
1592    generator_ratios: &["14/11"],
1593    generator_cents: &[416.9],
1594    optimization: "CWE",
1595    titles: "",
1596    commas: &["385/384", "441/440", "4375/4374"],
1597    moments: &["6L 2s", "6L 8s", "6L 14s", "20L 6s"],
1598};
1599
1600/// Valentine (2.3.5.7.11), rank 2, generator 22/21 at 77.9 cents.
1601pub const VALENTINE: NamedTemperament = NamedTemperament {
1602    name: "VALENTINE",
1603    page: "Valentine",
1604    revision: 236084,
1605    subgroup: &[2, 3, 5, 7, 11],
1606    periods_per_equave: 1,
1607    generator_rows: &[&[9, 5, -3, 7]],
1608    generator_ratios: &["22/21"],
1609    generator_cents: &[77.9],
1610    optimization: "CWE",
1611    titles: "",
1612    commas: &["121/120", "126/125", "176/175"],
1613    moments: &["1L 14s", "15L 1s", "15L 16s"],
1614};
1615
1616/// Vengeance (2.5.7.17), rank 2, generator 34/25 at 527.718 cents.
1617pub const VENGEANCE: NamedTemperament = NamedTemperament {
1618    name: "VENGEANCE",
1619    page: "Vengeance",
1620    revision: 231841,
1621    subgroup: &[2, 5, 7, 17],
1622    periods_per_equave: 1,
1623    generator_rows: &[&[3, -5, 7]],
1624    generator_ratios: &["34/25"],
1625    generator_cents: &[527.718],
1626    optimization: "CWE",
1627    titles: "",
1628    commas: &["78608/78125", "2023/2000", "4165/4096"],
1629    moments: &["2L 5s", "7L 2s"],
1630};
1631
1632/// Whitewood (2.3.5.7), rank 2, generator 5/4 at 392.7 cents.
1633pub const WHITEWOOD: NamedTemperament = NamedTemperament {
1634    name: "WHITEWOOD",
1635    page: "Whitewood",
1636    revision: 232189,
1637    subgroup: &[2, 3, 5, 7],
1638    periods_per_equave: 7,
1639    generator_rows: &[&[0, 1, -1]],
1640    generator_ratios: &["5/4"],
1641    generator_cents: &[392.7],
1642    optimization: "CWE",
1643    titles: "",
1644    commas: &["36/35", "2187/2048"],
1645    moments: &["7L 7s", "7L 14s"],
1646};
1647
1648/// Wizard (2.3.5.7.11.17), rank 2, generator 17/15 at 216.8 cents.
1649pub const WIZARD: NamedTemperament = NamedTemperament {
1650    name: "WIZARD",
1651    page: "Wizard",
1652    revision: 226921,
1653    subgroup: &[2, 3, 5, 7, 11, 17],
1654    periods_per_equave: 2,
1655    generator_rows: &[&[6, -1, 10, -3, 6]],
1656    generator_ratios: &["17/15"],
1657    generator_cents: &[216.8],
1658    optimization: "CWE",
1659    titles: "",
1660    commas: &["225/224", "289/288", "385/384", "561/560"],
1661    moments: &["6L 4s", "6L 10s", "6L 16s", "22L 6s"],
1662};
1663
1664/// Wollemia (2.3.5.7.11.13), rank 2, generator 10/9 at 177.1 cents.
1665pub const WOLLEMIA: NamedTemperament = NamedTemperament {
1666    name: "WOLLEMIA",
1667    page: "Wollemia",
1668    revision: 231333,
1669    subgroup: &[2, 3, 5, 7, 11, 13],
1670    periods_per_equave: 1,
1671    generator_rows: &[&[4, 9, 19, 10, -2]],
1672    generator_ratios: &["10/9"],
1673    generator_cents: &[177.1],
1674    optimization: "CWE",
1675    titles: "",
1676    commas: &[
1677        "56/55", "100/99", "243/242", "56/55", "91/90", "100/99", "243/242",
1678    ],
1679    moments: &["6L 1s", "7L 6s", "7L 13s", "7L 20s"],
1680};
1681
1682/// Würschmidt (2.3.5.23), rank 2, generator 5/4 at 387.8 cents.
1683pub const WURSCHMIDT: NamedTemperament = NamedTemperament {
1684    name: "WURSCHMIDT",
1685    page: "Würschmidt",
1686    revision: 232954,
1687    subgroup: &[2, 3, 5, 23],
1688    periods_per_equave: 1,
1689    generator_rows: &[&[8, 1, 14]],
1690    generator_ratios: &["5/4"],
1691    generator_cents: &[387.8],
1692    optimization: "CWE",
1693    titles: "",
1694    commas: &["576/575", "12167/12150"],
1695    moments: &["3L 1s", "3L 4s", "3L 28s", "31L 3s"],
1696};
1697
1698/// Xenial (2.3.5.7.11.13.17.19.23), rank 2, generator 10/9 at 188.8 cents.
1699pub const XENIAL: NamedTemperament = NamedTemperament {
1700    name: "XENIAL",
1701    page: "Xenial",
1702    revision: 233320,
1703    subgroup: &[2, 3, 5, 7, 11, 13, 17, 19, 23],
1704    periods_per_equave: 1,
1705    generator_rows: &[&[-9, -17, -33, 22, -21, 26, 27, -3]],
1706    generator_ratios: &["10/9"],
1707    generator_cents: &[188.8],
1708    optimization: "CWE",
1709    titles: "",
1710    commas: &[
1711        "126/125", "162/161", "169/168", "171/170", "208/207", "221/220", "231/230",
1712    ],
1713    moments: &["6L 1s", "6L 7s", "13L 6s", "19L 13s", "19L 32s", "19L 51s"],
1714};
1715
1716/// Zeus (2.3.5.7.11.13), rank 3, generator 3/2, 12/11 at 701.9, 157.0 cents.
1717pub const ZEUS: NamedTemperament = NamedTemperament {
1718    name: "ZEUS",
1719    page: "Zeus",
1720    revision: 233799,
1721    subgroup: &[2, 3, 5, 7, 11, 13],
1722    periods_per_equave: 1,
1723    generator_rows: &[&[1, 1, -1, 1, -2], &[0, -2, 3, -1, -1]],
1724    generator_ratios: &["3/2", "12/11"],
1725    generator_cents: &[701.9, 157.0],
1726    optimization: "CWE",
1727    titles: "",
1728    commas: &["121/120", "176/175", "351/350"],
1729    moments: &[],
1730};