#!/usr/bin/env python3 # SPDX-FileCopyrightText: 2023 Blender Authors # # SPDX-License-Identifier: GPL-2.0-or-later """ The intent of this map is to be able to a single canonical author for every ``Name `` combination. This data is used for: - Extracting a list of authors to create the ``AUTHORS`` file (in the projects root), see ``./git_data_canonical_authors.py``. - Generating the credits page: ``https://www.blender.org/about/credits/`` see ``./credits_git_gen.py``. """ __all__ = ( "canonical_author_map", ) def canonical_author_map() -> dict[str, str]: """ Return a map of authors to their canonical author & email. """ # NOTE: # - Keys must be ordered, # - Values must also be ordered. author_map_valid_to_invalid = { "20kdc ": ( "20kdc <20kdc@noreply.localhost>", ), "Aaron Carlisle ": ( "Aaron ", "Aaron ", "Aaron Carlisle ", "Aaron Carlisle ", "Aaron Carlisle ", "Your Name ", ), "Alan Troth ": ( "Alan ", ), "Alaska ": ( "Alaska ", "Alaska ", "Alaska ", ), "Aleksandr Zinovev ": ( "raa ", ), "Alexander Gavrilov ": ( "Alexander Gavrilov ", ), "Alexander Romanov ": ( "Romanov Alexander ", ), "Alexandr Kuznetsov ": ( "Alexandr Kuznetsov ", ), "Alexandre-Cardaillac ": ( "Alexandre Cardaillac ", ), "Aleš Jelovčan ": ( "Aleš Jelovčan ", "frogstomp ", ), "Almaz Shinbay ": ( "Almaz-Shinbay ", ), "Amélie Fondevilla ": ( "Amelie ", "Amelie Fondevilla ", "Amelie Fondevilla ", "Amelie Fondevilla ", "Amelie Fondevilla ", "Amélie Fondevilla ", ), "Andrew Oates ": ( "Andrew Oates ", "Andrew Oates ", ), "Andrii Symkin ": ( "Andrii ", "pembem22 ", ), "Andy Beers ": ( "Andy Beers ", ), "Ankit Meel ": ( "Ankit ", "Ankit Meel ", "Ankit Meel ", ), "Anthony Edlin ": ( "Anthony Edlin ", ), "Anthony Roberts ": ( "Anthony ", ), "Antonio Vazquez ": ( "Antonio Vazquez ", "Antonio Vazquez ", "Antonio Vazquez ", "Antonioya ", ), "Antony Riakiotakis ": ( "Antony Ryakiotakis ", ), "Aras Pranckevicius ": ( "Aras Pranckevicius ", "Aras Pranckevicius ", ), "Arye Ramaty ": ( "Arye Ramaty ", "Arye Ramaty ", ), "Attila Afra ": ( "Attila Áfra ", ), "Bastien Montagne ": ( "Bastien Montagne (@mont29) <>", "Bastien Montagne ", "Bastien Montagne ", "Bastien Montagne ", "Bastien Montagne ", "bastien ", "mont29 ", ), "Bill Spitzak ": ( "Bill-Spitzak ", ), "Bogdan Nagirniak ": ( "Bogdan Nagirniak ", ), "Brecht Van Lommel ": ( "Brecht Van Lommel ", "Brecht Van Lommel ", "Brecht Van Lommel ", "Brecht Van Lommel ", "Brecht Van Lommel ", "Brecht Van Lömmel ", "Brecht van Lommel ", "recht Van Lommel ", ), "Brendon Murphy ": ( "meta-androcto ", ), "Brian Savery ": ( "Brian Savery (AMD) ", "Brian Savery ", "bsavery ", ), "Campbell Barton ": ( "Campbell Barton ", "Campbell Barton ", ), "Casey Bianco-Davis ": ( "casey bianco-davis ", "casey-bianco-davis ", ), "Charles Flèche ": ( "Charles Flèche ", "Charles Flèche ", ), "Charles Wardlaw ": ( "Charles Wardlaw (@CharlesWardlaw) <>", "Charles Wardlaw ", "Charles Wardlaw ", ), "Charlie Jolly ": ( "Charlie Jolly ", "Charlie Jolly ", "charlie ", ), "Chris Clyne ": ( "Chris Clyne ", ), "Christian Brinkmann ": ( "christian brinkmann <>", ), "Christian Rauch ": ( "Christian Rauch ", ), "Christoph Lendenfeld ": ( "Christoph Lendenfeld ", "Christoph Lendenfeld ", "Christoph Lendenfeld ", ), "Clément Foucault ": ( "Clment Foucault ", "Clment Foucault ", "Clément Foucault ", "Clément ", "Clément FOUCAULT ", "Clément Foucault ", "Clément Foucault ", "fclem ", ), "Colin Basnett ": ( "Colin Basnett ", "Colin Basnett ", ), "Colin Marmond ": ( "Colin ", "Colin Marmond ", "Colin Marmond ", "Colin Marmont ", ), "Dalai Felinto ": ( "Dalai Felinto ", "Dalai Felinto ", "Dalai Felinto ", ), "Damien Picard ": ( "Damien Picard ", "Damien Picard ", "Damien Picard ", ), "Dan-Gry ": ( "Dangry98 ", ), "Daniel Salazar ": ( "Daniel Salazar ", "Daniel Salazar ", "ZanQdo ", "zanqdo ", ), "David Friedli ": ( "David ", ), "Demeter Dzadik ": ( "Demeter Dzadik ", "demeterdzadik@gmail.com ", ), "Diego Borghetti ": ( "Diego Hernan Borghetti ", ), "Dilith Jayakody ": ( "dilithjay ", ), "Dmitry Dygalo ": ( "Dmitry Dygalo <>", ), "Dontsov Valentin <@blend4web.com>": ( "Dotsnov Valentin ", ), "Eitan Traurig ": ( "Eitan ", "EitanSomething ", "EitanSomething ", ), "Ejner Fergo ": ( "Ejner Fergo ", ), "Emmett Lalish ": ( "Emmett-Lalish ", ), "Eoin Mcloughlin ": ( "Eoin Mcloughlin ", ), "Eric Cosky ": ( "Eric Cosky ", ), "Erik Abrahamsson ": ( "Eric Abrahamsson ", "Erick Abrahammson ", "Erik ", "Erik Abrahamsson ", "Erik Abrahamsson ", ), "Ethan Hall ": ( "Ethan-Hall ", ), "Fabian Schempp ": ( "Fabian Schempp ", ), "Fabricio Luis ": ( "Fabrício Luis ", ), "Falk David ": ( "Falk David ", "Falk David ", "Falk David ", "filedescriptor ", ), "Francesco Siddi ": ( "Francesco Siddi ", "Francesco Siddi ", ), "Fynn Grotehans ": ( "Fynn Grotehans <68659993+Fynn-G@users.noreply.github.com>", "Fynn Grotehans ", ), "Félix ": ( "Flix ", ), "Gaia Clary ": ( "Gaia Clary ", "gaiaclary ", ), "George Mavroeidis ": ( "George Mavroeidis ", ), "Georgiy Markelov ": ( "georgiy.m.markelov@gmail.com ", ), "Gerard Taulats ": ( "Gerard Taulats ", ), "Germain Le Chapelain ": ( "Germain-Le-Chapelain ", ), "Germano Cavalcante ": ( "Germano ", "Germano Cavalcante ", "Germano Cavalcante ", "Germano Cavalcante ", "Germano Cavalcantemano-wii ", "mano-wii ", "mano-wii ", ), "Gilberto Rodrigues ": ( "Gilberto Rodrigues ", "Gilberto.R ", ), "Guillermo S. Romero ": ( "gsr b3d ", ), "Guillermo Venegas ": ( "Guillermo ", "guishe ", ), "Habib Gahbiche ": ( "Habib Gahbiche ", "Habib Gahbiche ", "Habib Gahbiche ", ), "Hallam Roberts ": ( "Hallam Roberts ", ), "Hans Goudey ": ( "Hans Goudey ", "Hans Goudey ", "Hans Goudey ", ), "Harley Acheson ": ( "Harley Acheson ", "Harley Acheson ", ), "Henrik Dick ": ( "Henrik Dick (weasel) <>", "Henrik Dick ", ), "Himanshi Kalra ": ( "Himanshi Kalra ", ), "Howard Trickey ": ( "Howard Trickey ", "Howard Trickey ", "howardt ", ), "Hristo Gueorguiev ": ( "Hristo Gueorguiev <>", ), "IRIE Shinsuke ": ( "Irie Shinsuke ", ), "Iliya Katueshenock ": ( "Iliay Katueshenock ", "Iliya Katueshenock ", "Iliya Katueshenock ", "Iliya Katushenock ", "Iliya Katushenock ", "MOD ", "illua1 ", "\u0438\u043b\u044c\u044f _ ", ), "Inês Almeida ": ( "Ines Almeida ", "brita ", ), "Ish Bosamiya ": ( "Ish Bosamiya ", "Ish Bosamiya ", ), "Ivan Kosarev ": ( "kosarev ", ), "Iyad Ahmed ": ( "Iyad Ahmed ", ), "Jacques Lucke ": ( "Jacques Lucke ", "Jacques Lucke ", ), "Jason Fielder ": ( "Jason Fielder ", ), "Jens Ole Wund ": ( "bjornmose ", ), "Jens Verwiebe ": ( "Jens ", "Jens Verwiebe ", "jensverwiebe ", ), "Jeroen Bakker ": ( "Jeroen Bakker <88891617+jeroen-blender@users.noreply.github.com>", "Jeroen Bakker ", "Jeroen Bakker ", "jeroen@blender.org ", "jeroen@blender.org ", ), "Jesse Yurkovich ": ( "Jesse Y ", "Jesse Yurkovich ", "Jesse Yurkovich ", ), "Johan Walles ": ( "Johan Walles ", ), "Johannes J ": ( "Johannes J ", ), "John Kiril Swenson ": ( "John Swenson ", ), "Johnny Matthews ": ( "Johnny Matthews (guitargeek) ", "Johnny Matthews ", "Johnny Matthews ", "guitargeek ", ), "Jorijn de Graaf ": ( "Jorijn de Graaf ", "bonj ", ), "Joseph Eagar ": ( "Joe Eagar ", "Joseph Eagar ", "Joseph Eagar ", ), "Josh Maros ": ( "Josh Maros <60271685+joshua-maros@users.noreply.github.com>", "joshua-maros <60271685+joshua-maros@users.noreply.github.com>", ), "Julian Eisel ": ( "Julian Eisel ", "Julian Eisel ", "Julian Eisel ", "Julian Eisel ", "Julian Eisel ", "Julian Eisel ", "Severin ", "Severin ", "julianeisel ", ), "Julien Kaspar ": ( "Julien Kaspar ", ), "Jun Mizutani ": ( "Jun Mizutani ", "Jun Mizutani ", ), "Jörg Müller ": ( "Joerg Mueller ", ), "Jürgen Herrmann ": ( "Juergen Herrmann ", ), "Kamil Galik ": ( "kgalik ", ), "Kaspian Jakobsson ": ( "\x96kaspian.jakobssongmail.com ", ), "Kazashi Yoshioka ": ( "AgAmemnno ", "Kazashi Yoshioka ", "vnapdv ", ), "Kevin C. Burke ": ( "Kevin C. Burke ", ), "Kévin Dietrich ": ( "Kevin Dietrich ", "Kévin Dietrich ", ), "Laurynas Duburas ": ( "Laurynas Duburas ", "laurynas ", ), "Leon Schittek ": ( "Leon Leno ", "Leon Schittek ", "Leon Schittek ", ), "Lictex Steaven ": ( "lictex_ ", ), "Lleu Yang ": ( "megakite ", ), "Lorenzo-Carpaneto ": ( "lolloz98 ", ), "Luca Rood ": ( "Luca Rood ", ), "Lucas Tadeu Teixeira ": ( "Lucas Tadeu ", ), "Lukas Stockner ": ( "Lukas Stockner ", "Lukas Stockner ", ), "Lukas Tönne ": ( "Lukas Toenne ", "Lukas Tönne ", "Lukas Tönne ", ), "Léo Depoix ": ( "PiloeGAO ", ), "Mai Lavelle ": ( "Mai Lavelle ", ), "Mal Duffin ": ( "Mal Duffin ", ), "Mangal Kushwah ": ( "Mangal Kushwah ", ), "Manuel Castilla ": ( "Manuel Castilla ", ), "Marc Chehab ": ( "Marc Chéhab ", "Marc Chéhab ", ), "Marcos Perez ": ( "Marcos Perez ", ), "Martijn Berger ": ( "Martijn Berger ", "Martijn Berger ", "Martijn Berger ", ), "Martijn Versteegh ": ( "Martijn Versteegh ", "Martijn Versteegh ", "Martijn Versteegh ", ), "Martin Vignali ": ( "Martin-Vignali <33432858+mvji@users.noreply.github.com>", "Martin-Vignali ", "mvji <33432858+mvji@users.noreply.github.com>", ), "Mateusz Grzeliński ": ( "Mateusz Grzeliński ", ), "Matias Mendiola ": ( "Matias Mendiola ", ), "Matt Heimlich ": ( "Matt Heimlich ", ), "Matteo F. Vescovi ": ( "Matteo F. Vescovi ", ), "Matthieu Carteron ": ( "Matthieu Carteron ", ), "Mattias Fredriksson ": ( "Mattias Fredriksson ", ), "Max Schlecht ": ( "Max Schlecht ", ), "Maxime Casas ": ( "Maxime Casas ", ), "Michael Jones ": ( "Michael Jones (Apple) ", "Michael Jones ", ), "Michael Kowalski ": ( "Michael Kowalski ", "Michael Kowalski ", ), "Miguel Pozo ": ( "Miguel Pozo ", "Miguel Pozo ", ), "Mikhail Matrosov ": ( "Mikhail ", "Mikhail Matrosov ", ), "Monique Dewanchand ": ( "Monique Dewanchand ", "Monique Dewanchand ", ), "Nate Rupsis ": ( "Nate Rupsis ", "Nate Rupsis ", "Nate Rupsis ", "Nate Rupsis ", ), "Nathan Craddock ": ( "Nathan Craddock ", ), "Nathan Letwory ": ( "Nathan Letwory ", "Nathan Letwory ", "Nathan Letwory ", ), "Nathan Vegdahl ": ( "Nathan Vegdahl ", ), "Nicholas Bishop ": ( "Nicholas Bishop ", ), "Nicholas Rishel ": ( "Nicholas Rishel ", ), "Nick Milios ": ( "milios ", ), "Nikhil Shringarpurey ": ( "Nikhil Shringarpurey ", ), "Nikita Sirgienko ": ( "Nikita Sirgienko ", ), "Omar Emara ": ( "Omar Emara ", "Omar Emara ", "OmarSquircleArt ", "OmarSquircleArt ", ), "Oscar Blumberg ": ( "carnaval ", ), "Pablo Dobarro ": ( "Pablo Dobarro ", ), "Pablo Vazquez ": ( "Pablo Vazquez ", "Pablo Vazquez ", "Pablo Vazquez ", "Pablo Vazquez ", ), "Padraig O Cinneide ": ( "Padraig-O-Cinneide ", ), "Paolo Amadini ": ( "Paolo Amadini ", ), "Pasang Bomjan ": ( "IREXTIA ", ), "Pascal Schoen ": ( "Pascal Schön ", ), "Patrick Busch ": ( "Patrick Busch ", ), "Patrick Huang ": ( "Patrick Huang ", ), "Patrick Mours ": ( "Patrick Mours ", ), "Paul Golter ": ( "Paul Golter ", ), "Philipp Oeser ": ( "Philipp Oeser ", "Philipp Oeser ", "Philipp Oeser ", "Philipp Oeser ", "Philipp Oeser ", ), "Phoenix Katsch ": ( "Phoenix Katsch ", ), "Pratik Borhade ": ( "Prakhar-Singh-Chouhan ", "Pratik Borhade ", "Pratik Borhade ", ), "Quentin ": ( "Eqkoss / T1NT1N ", "Eqkoss ", ), "Rajesh Malviya ": ( "rajveermalviya ", ), "Ramon Klauck ": ( "ernst-ellert ", "lucid3dr ", ), "Raul Fernandez ": ( "Raul Fernandez Hernandez ", ), "Ray Molenkamp ": ( "Lazydodo ", "Ray Molenkamp ", "Ray molenkamp ", "Ray molenkamp ", "lazydodo ", ), "Red Mser ": ( "RedMser ", "RedMser ", ), "Richard Antalik ": ( "Richard Antalik ", "Richard Antalik ", ), "Rob-Blair ": ( "Rob Blair ", ), "Robert Guetzkow ": ( "Robert Guetzkow ", ), "Robin Hohnsbeen ": ( "Robin Hohnsbeen ", ), "Sahar A. Kashi ": ( "Sahar A. Kashi ", "Sahar Kashi ", "salipourto ", ), "Scurest ": ( "Scurest ", "scurest ", ), "Sean ": ( "sean-murray ", ), "Sean Kim ": ( "Sean Kim ", ), "Sebastian Herholz ": ( "Sebastian Herholz ", "Sebastian Herholz ", "Sebastian Herholz ", "Sebastian Herhoz ", ), "Sebastian Koenig ": ( "Sebastian Koenig ", "Sebastian Koenig ", ), "Sebastian Parborg ": ( "Sebastian Parborg ", "Sebastian Parborg ", "Sebastian Parborg ", ), "Sergey Sharybin ": ( "Sergey Sharybin ", "Sergey Sharybin ", "Sergey Sharybin ", "blender ", ), "Shane Ambler ": ( "Shane Ambler ", ), "Shashank Shekhar ": ( "Shashank Shekhar ", ), "Siddhartha Jejurkar ": ( "Siddhartha Jejurkar ", ), "Sietse Brouwer ": ( "Sietse Brouwer ", ), "Simon G ": ( "Simon ", ), "Sonny Campbell ": ( "DESKTOP-ON14TH5\\Sonny Campbell ", "Sonny Campbell (@SonnyCampbell_Unity) <>", "Sonny Campbell ", "Sonny Campbell ", ), "Stefan Werner ": ( "Stefan Werner ", "Stefan Werner ", "Stefan Werner ", "Stefan Werner ", "Stefan Werner ", "Werner, Stefan ", ), "Stephan Seitz ": ( "Stephan ", ), "Sun Kim ": ( "Sun Kim ", "persun ", ), "Sybren A. Stüvel ": ( "Sybren A. St\xC3\x83\xC2\xBCvel ", "Sybren A. Stüvel ", "Sybren A. Stüvel ", ), "T0MIS0N ": ( "T0MIS0N <50230774+T0MIS0N@users.noreply.github.com>", ), "Thomas Dinges ": ( "Thomas Dinges ", "Thomas Dinges ", "Thomas Dinges ", ), "Thomas Lachmann ": ( "Thomas Lachmann ", ), "Thomas Szepe ": ( "HG1 ", ), "Tom Edwards ": ( "Tom Edwards ", ), "Torsten Keßler ": ( "Torsten Keßler ", ), "Tristan Porteries ": ( "Porteries Tristan ", ), "Troy Sobotka ": ( "Troy Sobotka ", ), "Tuomo Keskitalo ": ( "Tuomo Keskitalo ", ), "Ulysse Martin ": ( "Ulysse Martin ", ), "Urko Mauduit ": ( "Urko ", ), "Vasyl Pidhirskyi ": ( "Vasyl-Pidhirskyi ", ), "Vitalijs Komasilovs ": ( "Vitaljok <11552222+Vitaljok@users.noreply.github.com>", ), "Vitor Boschi ": ( "Vitor Boschi ", "Vitor Boschi da Silva " ), "Vuk Gardašević ": ( "Vuk Garda\xC5¡evi\xC4\x87 ", ), "Wannes Malfait ": ( "Wannes Malfait ", ), "Wayde Moss ": ( "Wayde Moss ", ), "Weikang Qiu ": ( "Boltzmachine ", ), "Weizhen Huang ": ( "RiverIntheSky ", "Weizhen Huang ", "Weizhen Huang ", "weizhen ", ), "Welp ": ( "Jake ", ), "William Leeson ": ( "William Leeson ", "William Leeson ", ), "William Reynish ": ( "William Reynish ", "William Reynish ", "William Reynish ", ), "Willian Padovani Germano ": ( "ianwill ", ), "Xavier Hallade ": ( "Xavier Hallade ", "Xavier Hallade ", ), "Yann Lanthony ": ( "@yann-lty <>", ), "Yiming Wu ": ( "ChengduLittleA ", "YimingWu ", "YimingWu ", "YimingWu ", "YimingWu ", ), "dupoxy ": ( "dupoxy ", ), "jon denning ": ( "Jon Denning ", ), "nBurn ": ( "nBurn ", ), "nutti ": ( "nutti ", ), "ok_what ": ( "ok what ", ), } # Some validation, ensure ordered, consistent to help with maintenance. keys = list(author_map_valid_to_invalid.keys()) for i, (key, key_ordered) in enumerate(zip(keys, sorted(keys))): if key != key_ordered: raise RuntimeError(( "Names unordered: {:d}\n" " {:s} ~ (found)\n" " {:s} ~ (expected)\n" "" ).format(i, key, key_ordered)) for i, (key, value) in enumerate(author_map_valid_to_invalid.items()): if value != tuple(sorted(value)): raise RuntimeError("Name values: {:s} at index {:d} is not ordered".format(key, i)) if len(set(value)) != len(value): raise RuntimeError("Name values: {:s} at index {:d} contains duplicate values".format(key, i)) if key in value: raise RuntimeError("Name values: {:s} at index {:d} contains the key in the values body".format(key, i)) table = {} for key, values in author_map_valid_to_invalid.items(): for value_old in values: table[value_old] = key return table