{"id":17200635,"url":"https://github.com/perlence/pcsets","last_synced_at":"2025-07-27T19:31:29.683Z","repository":{"id":26605878,"uuid":"30060938","full_name":"Perlence/pcsets","owner":"Perlence","description":"Pitch Class Sets for Python","archived":false,"fork":false,"pushed_at":"2015-01-31T08:18:55.000Z","size":204,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-12-01T13:52:31.766Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Perlence.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-30T07:15:09.000Z","updated_at":"2023-08-29T04:25:17.000Z","dependencies_parsed_at":"2022-08-17T17:31:19.891Z","dependency_job_id":null,"html_url":"https://github.com/Perlence/pcsets","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perlence%2Fpcsets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perlence%2Fpcsets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perlence%2Fpcsets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perlence%2Fpcsets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Perlence","download_url":"https://codeload.github.com/Perlence/pcsets/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227830444,"owners_count":17826039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T02:09:17.150Z","updated_at":"2024-12-03T01:09:11.070Z","avatar_url":"https://github.com/Perlence.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"pcsets\n======\n\n\u003e Pitch Class Sets for Python\n\n\u003e version 2.0.2\n\n\u003e Bruce H. McCosar\n\nWelcome, and thank you for downloading pcsets. This is the third\nofficial (non-beta) release. With this release, I start the pcsets\ntutorial see \"About this Package\", below).\n\nLearning about Pitch Class Sets is easy -- the four modules presented\nhere are, like many Python programs, self documenting. They work well\nwith [pydoc](https://docs.python.org/library/pydoc.html).\n\nLearning how to use these for practical compositional purposes, on the\nother hand ... well, that takes a lot of individual experimentation. I\nhave started a short tutorial, which will eventually demonstrate some\nof the techniques I've learned. However, you are a much better judge\nof what you want to know than I -- please, try the module out, and\nmost of all, have fun learning something new.\n\n\nAbout Pitch Class Sets\n----------------------\n\nPitch Class Sets are a mathematical model for analyzing and composing\nmusic. Each note 'C' through 'B' has an equivalent pitch class number\n0 through 11. Sets of these numbers may be operated on by mathematical\nfunctions such as transpose and invert.\n\nThe goal of this project is to, eventually, have:\n\n* A Python library capable of fully implementing Pitch Class Sets\n  and their common operations, as well as several convenience\n  functions to bring these abstract concepts to the real world.\n  (Mapping pitch classes to note names, for instance).\n\n* A tool for composition.  Some applications are harmonization,\n  chord voicing generation, and melodic motif creation.\n\n* More exotic goals -- creation of new chordal elements, musical\n  progressions, and harmonic relationships.\n\n\nAbout this Package\n------------------\n\nThe API will not change for any of the modules referred to as 'core'.\nBugs will be fixed and new modules will be added, but you won't wake\nup one day and find that PcSets wants input in statcoulombs or Dutch\nGuldens. In the version 2 series, the core will always behave like\nthe core. Occasionally new functionality will be introduced, but the\noriginal functionality will never be 'broken' -- that's why I spent all\nthat time writing unit tests.\n\n\n### The Core\n\nThis is the core as of 2.0.0:\n\n* `pcsets.pcset`\n\n  The base class, PcSet, includes methods that operate on single\n  sets, such as inversion and transposition.\n\n* `pcsets.pcops`\n\n  Operations on two or more sets, such as `subset_of(a, b)`.\n\n* `pcsets.catalog`\n\n  Generates the entire catalog of 224 prime sets as a Python\n  object. Since this takes a while to generate, it saves the\n  catalog in a pickle file (`catalog.pkl`) for future use.\n\n* `pcsets.noteops`\n\n  The 'universal translator' from PcSets to named notes and\n  vice versa.\n\nAny *new* modules will enter as 'experimental', however, not core.\nExperimental modules can change at any time.\n\n\n### Experimental Modules\n\nWith version 2.0.1, I introduced the first experimental module:\n\n* `pcsets.tonerow`\n\n  Implements the ToneRow class.  Unlike PcSets, which are\n  unordered, a ToneRow consists of all 12 pitches in an\n  *ordered* arrangement.\n\nThere is a lot of good information on this subject in the Straus book\nreferenced below. I've also put a lot of time into writing documentation\nstrings for the module; a run through it with pydoc will probably tell\nyou somewhere between too much and far too much ;-)\n\nAnother experimental module in development (and still in hiding,\nuntil I settle on a usable, workable interface):\n\n* Operations on the familiar chords and scales -- sort of a noteops\n  for the common language of chord-scale theory.\n\nThese modules won't make it to the core until at least version 2.1.\n\n\n### The Tutorial\n\nFinally, I've made a start on the tutorial.  My hope is that working\nthrough the documentation -- even for features that haven't been added\nyet! -- will let me streamline the API and introduce more relevant\nfeatures in future releases.\n\nBe sure to check back at the project website for updates.  I seem to\nhave embraced Google Code's slogan, \"Release early, release often.\"\n\nhttp://code.google.com/p/pcsets/\n\n--BMC\n\n\nVersioning\n----------\n\nIn an official release, the version numbers A.B.C promise the following:\n\n\n* A = Major Number.  None of the modules referred to as 'core' will\n  change except to correct errors. Functionality may be added,\n  but none of the existing methods, classes, or functions\n  will be altered in terms of their expected input or output\n  characteristics.\n\n  Later 'experimental' modules may become part of the core, but\n  modules will never leave the core.\n\n* B = Minor Number.  Previously released, tested, and proven\n  experimental modules may be moved into 'core'.  New abilities\n  may be added to core modules, but no existing core interface\n  will change.\n\n* C = Patch Number.  New modules may be added as 'experimental'.\n  Also incremented for bug fixes and added documentation,\n  including example code and tests.\n\n\n[Note: this scheme had to be corrected from the version 2.0.1 release;\nsee the ChangeLog for details.]\n\n\nAbout the Author\n----------------\n\nBruce H. McCosar is a middle and high school science teacher residing\nin Gainesville, Florida; he switched to teaching after a career in\nmedicinal chemistry. He is a member of the Mvskoke (Creek) Nation.\n\nBesides a lifelong interest in science, Bruce is a musician. He plays\nbass guitar, electric guitar, Hammond organ, and conga drums.\n\nIn 2006, he began releasing his music online under a Creative Commons\nlicense for free download at Jamendo. So far he has two albums,\n'evolution' (Nov. 2006) and 'handmade' (Feb. 2007), available from his\nartist page at: http://www.jamendo.com/us/artist/bruce.h.mccosar/\n\nAnd if all that wasn't enough, he then got into Python programming!\n\n\nReferences\n----------\n\n### Web\n\n* If you want a short introduction or tutorial, Jay Tomlin's site is\n  the best. Sort of the 'Classics Illustrated' of Pc theory.\n\n  http://www.jaytomlin.com/music/settheory/help.html\n\n* If you want a LOT of information without chasing down a book,\n  well... here's the next best thing.\n\n  http://solomonsmusic.net/setheory.htm\n\n### Text\n\n* The classic of the field, \"The Structure of Atonal Music\", by\n  Allen Forte (1973).\n\n* A relatively new (but extremely thorough and readable) work,\n  \"Introduction to Post-Tonal Theory\", by Joseph Straus (3rd ed.,\n  2005).\n\n\n```\npcsets 2.0.2 -- Pitch Class Sets for Python.\n\nCopyright 2007 Bruce H. McCosar\n\nThis file is part of the package 'pcsets'\n\nThe package 'pcsets' is free software; you can redistribute it\nand/or modify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 3 of\nthe License, or (at your option) any later version.\n\nThe package 'pcsets' is distributed in the hope that it will be\nuseful, but WITHOUT ANY WARRANTY; without even the implied warranty\nof MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n\n$Id: README 209 2007-08-19 16:41:44Z mccosar $\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlence%2Fpcsets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperlence%2Fpcsets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlence%2Fpcsets/lists"}