mirror of
https://github.com/kennethreitz/pytheory.git
synced 2026-06-05 23:00:20 +00:00
da40189845
New features:
- Key.signature — sharps/flats count and accidental names
- Key.borrowed_chords — modal interchange from parallel key
- Key.random_progression(n) — weighted random diatonic progressions
- Chord.from_intervals("C", 4, 7) — build from root + semitones
- Chord.from_midi_message(60, 64, 67) — build from MIDI note numbers
- Chord.add_tone(tone) / remove_tone("B") — modify chords immutably
- Tone.letter — "C" from "C#" (letter without accidental)
- Fretboard.scale_diagram(scale) — ASCII neck diagram
- analyze_progression([chords], key="C") → ["I", "vi", "IV", "V"]
443 tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
45 lines
974 B
Python
45 lines
974 B
Python
import os
|
|
import sys
|
|
from unittest.mock import MagicMock
|
|
|
|
sys.path.insert(0, os.path.abspath(".."))
|
|
|
|
# Mock sounddevice so Sphinx can import pytheory.play without PortAudio
|
|
sys.modules["sounddevice"] = MagicMock()
|
|
|
|
project = "PyTheory"
|
|
copyright = "2026, Kenneth Reitz"
|
|
author = "Kenneth Reitz"
|
|
release = "0.4.0"
|
|
|
|
extensions = [
|
|
"sphinx.ext.autodoc",
|
|
"sphinx.ext.napoleon",
|
|
"sphinx.ext.viewcode",
|
|
"sphinx.ext.intersphinx",
|
|
]
|
|
|
|
autodoc_member_order = "bysource"
|
|
autodoc_default_options = {
|
|
"members": True,
|
|
"undoc-members": True,
|
|
"show-inheritance": True,
|
|
}
|
|
|
|
intersphinx_mapping = {
|
|
"python": ("https://docs.python.org/3", None),
|
|
}
|
|
|
|
templates_path = ["_templates"]
|
|
exclude_patterns = ["_build"]
|
|
|
|
html_theme = "alabaster"
|
|
html_theme_options = {
|
|
"github_user": "kennethreitz",
|
|
"github_repo": "pytheory",
|
|
"github_banner": True,
|
|
"description": "Music Theory for Humans",
|
|
}
|
|
html_static_path = ["_static"]
|
|
html_extra_path = ["CNAME"]
|