Files
pytheory/pyproject.toml
T
kennethreitz 91b78aa8f5 MIDI round-trip fixes, analyze song.mid, more polish; release 0.57.2
- save_midi() now exports all parts (each on its own MIDI channel), not
  just the default part — multi-part scores no longer export empty
- from_midi() groups simultaneous notes into Chords instead of flattening
  polyphony into a sequence; sequential melodies left unchanged
- new: `pytheory analyze song.mid` — detect key + chord timeline with
  Roman numerals (text/--json), reading raw MIDI events for true harmony
- Score.repeat() copies the full Note (bend/articulation/lyric/_hold),
  no longer dropping them
- Chord gains __eq__/__hash__ (by voicing) — usable in sets/dict keys
- tones.py: one _require_system() guard replaces three broad
  try/except AttributeError blocks; clearer messages

New tests: polyphony round-trip, multi-part export, melody-not-grouped,
analyze-midi CLI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 08:02:29 -04:00

57 lines
1.5 KiB
TOML

[project]
name = "pytheory"
version = "0.57.2"
description = "Music Theory for Humans"
readme = "README.md"
license = "MIT"
requires-python = ">=3.10"
authors = [
{ name = "Kenneth Reitz", email = "me@kennethreitz.org" },
]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"Topic :: Multimedia :: Sound/Audio",
"Topic :: Multimedia :: Sound/Audio :: Analysis",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
dependencies = [
"sounddevice",
"scipy",
"rich>=14.3.3",
]
[project.optional-dependencies]
live = ["python-rtmidi"]
link = ["LinkPython-extern"]
diagrams = ["cairosvg"] # PNG rasterization of SVG fretboard diagrams
[project.urls]
Homepage = "https://github.com/kennethreitz/pytheory"
Documentation = "https://pytheory.org"
Repository = "https://github.com/kennethreitz/pytheory"
Issues = "https://github.com/kennethreitz/pytheory/issues"
[project.scripts]
pytheory = "pytheory.cli:main"
[dependency-groups]
dev = ["pytest", "LinkPython-extern"]
docs = ["sphinx", "myst-parser"]
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
testpaths = ["tests"]
markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"]
[tool.setuptools]
packages = ["pytheory"]