subsequence 0.6.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- subsequence-0.6.4/.github/workflows/docs.yml +52 -0
- subsequence-0.6.4/.github/workflows/publish.yml +46 -0
- subsequence-0.6.4/.github/workflows/tests.yml +29 -0
- subsequence-0.6.4/.github/workflows/type-check.yml +26 -0
- subsequence-0.6.4/.gitignore +28 -0
- subsequence-0.6.4/LICENSE +661 -0
- subsequence-0.6.4/PKG-INFO +208 -0
- subsequence-0.6.4/README.md +179 -0
- subsequence-0.6.4/api-cheatsheet.md +506 -0
- subsequence-0.6.4/benchmarks/clock_jitter.py +173 -0
- subsequence-0.6.4/docs/README.md +21 -0
- subsequence-0.6.4/docs/build.sh +3 -0
- subsequence-0.6.4/examples/arpeggiator.py +97 -0
- subsequence-0.6.4/examples/assets/Swing 16ths 57.agr +145 -0
- subsequence-0.6.4/examples/bresenham_poly.py +275 -0
- subsequence-0.6.4/examples/demo.py +39 -0
- subsequence-0.6.4/examples/demo_advanced.py +101 -0
- subsequence-0.6.4/examples/emergence.py +425 -0
- subsequence-0.6.4/examples/frozen.py +139 -0
- subsequence-0.6.4/examples/iss.py +291 -0
- subsequence-0.6.4/examples/labyrinth.py +335 -0
- subsequence-0.6.4/examples/link_sync.py +52 -0
- subsequence-0.6.4/examples/live_init.py +46 -0
- subsequence-0.6.4/examples/live_patterns.py +29 -0
- subsequence-0.6.4/examples/live_single_file.py +69 -0
- subsequence-0.6.4/examples/load_patterns.py +54 -0
- subsequence-0.6.4/examples/subharmonicon.py +436 -0
- subsequence-0.6.4/pyproject.toml +85 -0
- subsequence-0.6.4/pytest.ini +6 -0
- subsequence-0.6.4/sandbox/.gitignore +11 -0
- subsequence-0.6.4/sandbox/README.md +25 -0
- subsequence-0.6.4/scripts/check_docstring_markup.py +132 -0
- subsequence-0.6.4/scripts/generate_cheatsheet.py +304 -0
- subsequence-0.6.4/scripts/midi_in_observer.py +157 -0
- subsequence-0.6.4/scripts/simulation_gravity.py +149 -0
- subsequence-0.6.4/scripts/tuner_tone.py +109 -0
- subsequence-0.6.4/setup.cfg +4 -0
- subsequence-0.6.4/subsequence/__init__.py +231 -0
- subsequence-0.6.4/subsequence/__main__.py +24 -0
- subsequence-0.6.4/subsequence/assets/web/index.html +345 -0
- subsequence-0.6.4/subsequence/cadences.py +113 -0
- subsequence-0.6.4/subsequence/chord_graphs/__init__.py +100 -0
- subsequence-0.6.4/subsequence/chord_graphs/aeolian_minor.py +158 -0
- subsequence-0.6.4/subsequence/chord_graphs/chromatic_mediant.py +113 -0
- subsequence-0.6.4/subsequence/chord_graphs/diminished.py +97 -0
- subsequence-0.6.4/subsequence/chord_graphs/dorian_minor.py +127 -0
- subsequence-0.6.4/subsequence/chord_graphs/functional_major.py +102 -0
- subsequence-0.6.4/subsequence/chord_graphs/hooktheory_major.py +88 -0
- subsequence-0.6.4/subsequence/chord_graphs/lydian_major.py +130 -0
- subsequence-0.6.4/subsequence/chord_graphs/mixolydian.py +98 -0
- subsequence-0.6.4/subsequence/chord_graphs/phrygian_minor.py +76 -0
- subsequence-0.6.4/subsequence/chord_graphs/suspended.py +109 -0
- subsequence-0.6.4/subsequence/chord_graphs/turnaround_global.py +157 -0
- subsequence-0.6.4/subsequence/chord_graphs/whole_tone.py +77 -0
- subsequence-0.6.4/subsequence/chords.py +419 -0
- subsequence-0.6.4/subsequence/composition.py +6099 -0
- subsequence-0.6.4/subsequence/conductor.py +238 -0
- subsequence-0.6.4/subsequence/constants/__init__.py +24 -0
- subsequence-0.6.4/subsequence/constants/durations.py +37 -0
- subsequence-0.6.4/subsequence/constants/instruments/__init__.py +13 -0
- subsequence-0.6.4/subsequence/constants/instruments/gm_cc.py +46 -0
- subsequence-0.6.4/subsequence/constants/instruments/gm_drums.py +53 -0
- subsequence-0.6.4/subsequence/constants/instruments/gm_instruments.py +32 -0
- subsequence-0.6.4/subsequence/constants/instruments/roland_tr8s.py +320 -0
- subsequence-0.6.4/subsequence/constants/instruments/vermona_drm1_drums.py +87 -0
- subsequence-0.6.4/subsequence/constants/midi_notes.py +29 -0
- subsequence-0.6.4/subsequence/constants/pulses.py +17 -0
- subsequence-0.6.4/subsequence/constants/velocity.py +22 -0
- subsequence-0.6.4/subsequence/definitions.py +232 -0
- subsequence-0.6.4/subsequence/display.py +617 -0
- subsequence-0.6.4/subsequence/easing.py +347 -0
- subsequence-0.6.4/subsequence/event_emitter.py +109 -0
- subsequence-0.6.4/subsequence/form_state.py +665 -0
- subsequence-0.6.4/subsequence/forms.py +257 -0
- subsequence-0.6.4/subsequence/groove.py +323 -0
- subsequence-0.6.4/subsequence/harmonic_rhythm.py +83 -0
- subsequence-0.6.4/subsequence/harmonic_state.py +352 -0
- subsequence-0.6.4/subsequence/harmony.py +197 -0
- subsequence-0.6.4/subsequence/held_notes.py +91 -0
- subsequence-0.6.4/subsequence/helpers/__init__.py +0 -0
- subsequence-0.6.4/subsequence/helpers/network.py +58 -0
- subsequence-0.6.4/subsequence/helpers/wing.py +430 -0
- subsequence-0.6.4/subsequence/intervals.py +436 -0
- subsequence-0.6.4/subsequence/keystroke.py +249 -0
- subsequence-0.6.4/subsequence/link_clock.py +128 -0
- subsequence-0.6.4/subsequence/live_client.py +187 -0
- subsequence-0.6.4/subsequence/live_reloader.py +298 -0
- subsequence-0.6.4/subsequence/live_server.py +161 -0
- subsequence-0.6.4/subsequence/melodic_state.py +483 -0
- subsequence-0.6.4/subsequence/midi.py +97 -0
- subsequence-0.6.4/subsequence/midi_utils.py +329 -0
- subsequence-0.6.4/subsequence/mini_notation.py +164 -0
- subsequence-0.6.4/subsequence/motifs.py +2356 -0
- subsequence-0.6.4/subsequence/osc.py +194 -0
- subsequence-0.6.4/subsequence/pattern.py +363 -0
- subsequence-0.6.4/subsequence/pattern_algorithmic.py +2010 -0
- subsequence-0.6.4/subsequence/pattern_builder.py +2589 -0
- subsequence-0.6.4/subsequence/pattern_midi.py +1208 -0
- subsequence-0.6.4/subsequence/progressions.py +1913 -0
- subsequence-0.6.4/subsequence/py.typed +0 -0
- subsequence-0.6.4/subsequence/roles.py +63 -0
- subsequence-0.6.4/subsequence/sequence_utils.py +3123 -0
- subsequence-0.6.4/subsequence/sequencer.py +2086 -0
- subsequence-0.6.4/subsequence/tuning.py +453 -0
- subsequence-0.6.4/subsequence/voicings.py +151 -0
- subsequence-0.6.4/subsequence/web_ui.py +337 -0
- subsequence-0.6.4/subsequence/weighted_graph.py +156 -0
- subsequence-0.6.4/subsequence.egg-info/PKG-INFO +208 -0
- subsequence-0.6.4/subsequence.egg-info/SOURCES.txt +197 -0
- subsequence-0.6.4/subsequence.egg-info/dependency_links.txt +1 -0
- subsequence-0.6.4/subsequence.egg-info/entry_points.txt +2 -0
- subsequence-0.6.4/subsequence.egg-info/requires.txt +19 -0
- subsequence-0.6.4/subsequence.egg-info/scm_file_list.json +193 -0
- subsequence-0.6.4/subsequence.egg-info/scm_version.json +8 -0
- subsequence-0.6.4/subsequence.egg-info/top_level.txt +1 -0
- subsequence-0.6.4/tests/conftest.py +169 -0
- subsequence-0.6.4/tests/test_api_consistency.py +195 -0
- subsequence-0.6.4/tests/test_cadences.py +719 -0
- subsequence-0.6.4/tests/test_callback_sequence.py +285 -0
- subsequence-0.6.4/tests/test_cc_forward.py +391 -0
- subsequence-0.6.4/tests/test_cc_name_map.py +168 -0
- subsequence-0.6.4/tests/test_chord_graphs.py +280 -0
- subsequence-0.6.4/tests/test_chord_quality_registry.py +143 -0
- subsequence-0.6.4/tests/test_clock_output.py +72 -0
- subsequence-0.6.4/tests/test_composition.py +1994 -0
- subsequence-0.6.4/tests/test_conductor.py +298 -0
- subsequence-0.6.4/tests/test_custom_scales.py +305 -0
- subsequence-0.6.4/tests/test_definitions.py +265 -0
- subsequence-0.6.4/tests/test_detached.py +141 -0
- subsequence-0.6.4/tests/test_determinism.py +336 -0
- subsequence-0.6.4/tests/test_display.py +1107 -0
- subsequence-0.6.4/tests/test_duration.py +94 -0
- subsequence-0.6.4/tests/test_eased_value.py +192 -0
- subsequence-0.6.4/tests/test_easing.py +302 -0
- subsequence-0.6.4/tests/test_event_emitter.py +151 -0
- subsequence-0.6.4/tests/test_form.py +780 -0
- subsequence-0.6.4/tests/test_forms.py +840 -0
- subsequence-0.6.4/tests/test_groove.py +508 -0
- subsequence-0.6.4/tests/test_harmonic_gravity.py +374 -0
- subsequence-0.6.4/tests/test_harmony.py +240 -0
- subsequence-0.6.4/tests/test_harmony_window.py +385 -0
- subsequence-0.6.4/tests/test_held_notes.py +225 -0
- subsequence-0.6.4/tests/test_hotkeys.py +357 -0
- subsequence-0.6.4/tests/test_instrument_drum_maps.py +173 -0
- subsequence-0.6.4/tests/test_intervals.py +82 -0
- subsequence-0.6.4/tests/test_key_resolution.py +430 -0
- subsequence-0.6.4/tests/test_keystroke.py +89 -0
- subsequence-0.6.4/tests/test_latency_compensation.py +438 -0
- subsequence-0.6.4/tests/test_legato.py +113 -0
- subsequence-0.6.4/tests/test_link.py +165 -0
- subsequence-0.6.4/tests/test_live_reloader.py +477 -0
- subsequence-0.6.4/tests/test_live_server.py +547 -0
- subsequence-0.6.4/tests/test_load_patterns.py +276 -0
- subsequence-0.6.4/tests/test_low_fixes_2026_07.py +417 -0
- subsequence-0.6.4/tests/test_melodic_state.py +417 -0
- subsequence-0.6.4/tests/test_melody_v2.py +459 -0
- subsequence-0.6.4/tests/test_midi_helpers.py +68 -0
- subsequence-0.6.4/tests/test_midi_input.py +387 -0
- subsequence-0.6.4/tests/test_midi_recording.py +188 -0
- subsequence-0.6.4/tests/test_mini_notation.py +177 -0
- subsequence-0.6.4/tests/test_mini_notation_integration.py +44 -0
- subsequence-0.6.4/tests/test_mirror.py +804 -0
- subsequence-0.6.4/tests/test_motif_placement.py +486 -0
- subsequence-0.6.4/tests/test_motifs.py +706 -0
- subsequence-0.6.4/tests/test_multi_device.py +728 -0
- subsequence-0.6.4/tests/test_new_chord_graphs.py +734 -0
- subsequence-0.6.4/tests/test_osc.py +157 -0
- subsequence-0.6.4/tests/test_pattern_algorithmic.py +592 -0
- subsequence-0.6.4/tests/test_pattern_builder.py +5717 -0
- subsequence-0.6.4/tests/test_phrases.py +516 -0
- subsequence-0.6.4/tests/test_presets.py +320 -0
- subsequence-0.6.4/tests/test_progressions.py +1018 -0
- subsequence-0.6.4/tests/test_render.py +182 -0
- subsequence-0.6.4/tests/test_rescheduling.py +171 -0
- subsequence-0.6.4/tests/test_review_fixes.py +266 -0
- subsequence-0.6.4/tests/test_review_fixes_2026_07.py +780 -0
- subsequence-0.6.4/tests/test_schedule_context.py +145 -0
- subsequence-0.6.4/tests/test_scheduled_tasks.py +255 -0
- subsequence-0.6.4/tests/test_sequence_utils.py +1892 -0
- subsequence-0.6.4/tests/test_sequence_utils_density_combine.py +267 -0
- subsequence-0.6.4/tests/test_sequence_utils_density_spread.py +300 -0
- subsequence-0.6.4/tests/test_sequence_utils_density_to_steps.py +94 -0
- subsequence-0.6.4/tests/test_sequence_utils_density_warp.py +198 -0
- subsequence-0.6.4/tests/test_sequence_utils_morse_code.py +116 -0
- subsequence-0.6.4/tests/test_sequence_utils_scale.py +48 -0
- subsequence-0.6.4/tests/test_sequence_utils_transforms_list.py +318 -0
- subsequence-0.6.4/tests/test_sequence_utils_transforms_value.py +188 -0
- subsequence-0.6.4/tests/test_sequencer_dispatch_safety.py +90 -0
- subsequence-0.6.4/tests/test_sequencer_events.py +333 -0
- subsequence-0.6.4/tests/test_tier1_fixes_2026_07.py +244 -0
- subsequence-0.6.4/tests/test_trigger.py +250 -0
- subsequence-0.6.4/tests/test_tuning.py +531 -0
- subsequence-0.6.4/tests/test_turnaround_graph.py +79 -0
- subsequence-0.6.4/tests/test_unregister.py +221 -0
- subsequence-0.6.4/tests/test_velocity_tuple.py +288 -0
- subsequence-0.6.4/tests/test_voicings.py +276 -0
- subsequence-0.6.4/tests/test_web_ui.py +81 -0
- subsequence-0.6.4/tests/test_weighted_graph.py +74 -0
- subsequence-0.6.4/tests/test_wing_helper.py +217 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Deploy pdoc to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
pages: write
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: "pages"
|
|
14
|
+
cancel-in-progress: false
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: '3.10'
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: |
|
|
29
|
+
python -m pip install --upgrade pip
|
|
30
|
+
pip install .[docs]
|
|
31
|
+
|
|
32
|
+
- name: Build documentation
|
|
33
|
+
run: |
|
|
34
|
+
# Generate HTML using the existing project build script
|
|
35
|
+
chmod +x docs/build.sh
|
|
36
|
+
./docs/build.sh
|
|
37
|
+
|
|
38
|
+
- name: Upload artifact
|
|
39
|
+
uses: actions/upload-pages-artifact@v3
|
|
40
|
+
with:
|
|
41
|
+
path: 'docs/html'
|
|
42
|
+
|
|
43
|
+
deploy:
|
|
44
|
+
environment:
|
|
45
|
+
name: github-pages
|
|
46
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
needs: build
|
|
49
|
+
steps:
|
|
50
|
+
- name: Deploy to GitHub Pages
|
|
51
|
+
id: deployment
|
|
52
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# Publishes a release whenever a version tag is pushed. Versioning is driven by
|
|
4
|
+
# git tags via setuptools-scm, so `git tag v0.7.0 && git push --tags` is the
|
|
5
|
+
# whole release flow. Uses PyPI Trusted Publishing (OIDC) — no API token is
|
|
6
|
+
# stored. Action versions matter: older majors run on a retired Node runtime
|
|
7
|
+
# and GitHub fails the job (same fix as PyMidiDefs' publish workflow).
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
tags:
|
|
12
|
+
- "v*"
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
name: Build distributions
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v7
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0 # full history + tags so setuptools-scm can derive the version
|
|
22
|
+
- uses: actions/setup-python@v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Build sdist and wheel
|
|
26
|
+
run: pipx run build
|
|
27
|
+
- name: Check metadata
|
|
28
|
+
run: pipx run twine check dist/*
|
|
29
|
+
- uses: actions/upload-artifact@v7
|
|
30
|
+
with:
|
|
31
|
+
name: dist
|
|
32
|
+
path: dist/
|
|
33
|
+
|
|
34
|
+
publish:
|
|
35
|
+
name: Publish to PyPI
|
|
36
|
+
needs: build
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
environment: pypi
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write # required for Trusted Publishing
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/download-artifact@v8
|
|
43
|
+
with:
|
|
44
|
+
name: dist
|
|
45
|
+
path: dist/
|
|
46
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
pytest:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.10'
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install -e ".[test]"
|
|
24
|
+
|
|
25
|
+
- name: Check docstring markup
|
|
26
|
+
run: python scripts/check_docstring_markup.py subsequence
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: python -m pytest tests/ -q
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Type Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
mypy:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.10'
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install -e ".[dev]"
|
|
24
|
+
|
|
25
|
+
- name: Run mypy
|
|
26
|
+
run: mypy subsequence
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
|
|
9
|
+
# Logs
|
|
10
|
+
*.log
|
|
11
|
+
|
|
12
|
+
# Generated MIDI recordings
|
|
13
|
+
*.mid
|
|
14
|
+
session_*.mid
|
|
15
|
+
|
|
16
|
+
# Documentation build output
|
|
17
|
+
docs/html/
|
|
18
|
+
docs/*.html
|
|
19
|
+
|
|
20
|
+
# Project metadata and instructions
|
|
21
|
+
README-AGENTS.md
|
|
22
|
+
AGENT-INSTRUCTIONS.md
|
|
23
|
+
DESIGN-COMPOSITION.md
|
|
24
|
+
.vscode/
|
|
25
|
+
|
|
26
|
+
# Claude Code — local only, never commit
|
|
27
|
+
CLAUDE.local.md
|
|
28
|
+
.claude/
|