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.
Files changed (199) hide show
  1. subsequence-0.6.4/.github/workflows/docs.yml +52 -0
  2. subsequence-0.6.4/.github/workflows/publish.yml +46 -0
  3. subsequence-0.6.4/.github/workflows/tests.yml +29 -0
  4. subsequence-0.6.4/.github/workflows/type-check.yml +26 -0
  5. subsequence-0.6.4/.gitignore +28 -0
  6. subsequence-0.6.4/LICENSE +661 -0
  7. subsequence-0.6.4/PKG-INFO +208 -0
  8. subsequence-0.6.4/README.md +179 -0
  9. subsequence-0.6.4/api-cheatsheet.md +506 -0
  10. subsequence-0.6.4/benchmarks/clock_jitter.py +173 -0
  11. subsequence-0.6.4/docs/README.md +21 -0
  12. subsequence-0.6.4/docs/build.sh +3 -0
  13. subsequence-0.6.4/examples/arpeggiator.py +97 -0
  14. subsequence-0.6.4/examples/assets/Swing 16ths 57.agr +145 -0
  15. subsequence-0.6.4/examples/bresenham_poly.py +275 -0
  16. subsequence-0.6.4/examples/demo.py +39 -0
  17. subsequence-0.6.4/examples/demo_advanced.py +101 -0
  18. subsequence-0.6.4/examples/emergence.py +425 -0
  19. subsequence-0.6.4/examples/frozen.py +139 -0
  20. subsequence-0.6.4/examples/iss.py +291 -0
  21. subsequence-0.6.4/examples/labyrinth.py +335 -0
  22. subsequence-0.6.4/examples/link_sync.py +52 -0
  23. subsequence-0.6.4/examples/live_init.py +46 -0
  24. subsequence-0.6.4/examples/live_patterns.py +29 -0
  25. subsequence-0.6.4/examples/live_single_file.py +69 -0
  26. subsequence-0.6.4/examples/load_patterns.py +54 -0
  27. subsequence-0.6.4/examples/subharmonicon.py +436 -0
  28. subsequence-0.6.4/pyproject.toml +85 -0
  29. subsequence-0.6.4/pytest.ini +6 -0
  30. subsequence-0.6.4/sandbox/.gitignore +11 -0
  31. subsequence-0.6.4/sandbox/README.md +25 -0
  32. subsequence-0.6.4/scripts/check_docstring_markup.py +132 -0
  33. subsequence-0.6.4/scripts/generate_cheatsheet.py +304 -0
  34. subsequence-0.6.4/scripts/midi_in_observer.py +157 -0
  35. subsequence-0.6.4/scripts/simulation_gravity.py +149 -0
  36. subsequence-0.6.4/scripts/tuner_tone.py +109 -0
  37. subsequence-0.6.4/setup.cfg +4 -0
  38. subsequence-0.6.4/subsequence/__init__.py +231 -0
  39. subsequence-0.6.4/subsequence/__main__.py +24 -0
  40. subsequence-0.6.4/subsequence/assets/web/index.html +345 -0
  41. subsequence-0.6.4/subsequence/cadences.py +113 -0
  42. subsequence-0.6.4/subsequence/chord_graphs/__init__.py +100 -0
  43. subsequence-0.6.4/subsequence/chord_graphs/aeolian_minor.py +158 -0
  44. subsequence-0.6.4/subsequence/chord_graphs/chromatic_mediant.py +113 -0
  45. subsequence-0.6.4/subsequence/chord_graphs/diminished.py +97 -0
  46. subsequence-0.6.4/subsequence/chord_graphs/dorian_minor.py +127 -0
  47. subsequence-0.6.4/subsequence/chord_graphs/functional_major.py +102 -0
  48. subsequence-0.6.4/subsequence/chord_graphs/hooktheory_major.py +88 -0
  49. subsequence-0.6.4/subsequence/chord_graphs/lydian_major.py +130 -0
  50. subsequence-0.6.4/subsequence/chord_graphs/mixolydian.py +98 -0
  51. subsequence-0.6.4/subsequence/chord_graphs/phrygian_minor.py +76 -0
  52. subsequence-0.6.4/subsequence/chord_graphs/suspended.py +109 -0
  53. subsequence-0.6.4/subsequence/chord_graphs/turnaround_global.py +157 -0
  54. subsequence-0.6.4/subsequence/chord_graphs/whole_tone.py +77 -0
  55. subsequence-0.6.4/subsequence/chords.py +419 -0
  56. subsequence-0.6.4/subsequence/composition.py +6099 -0
  57. subsequence-0.6.4/subsequence/conductor.py +238 -0
  58. subsequence-0.6.4/subsequence/constants/__init__.py +24 -0
  59. subsequence-0.6.4/subsequence/constants/durations.py +37 -0
  60. subsequence-0.6.4/subsequence/constants/instruments/__init__.py +13 -0
  61. subsequence-0.6.4/subsequence/constants/instruments/gm_cc.py +46 -0
  62. subsequence-0.6.4/subsequence/constants/instruments/gm_drums.py +53 -0
  63. subsequence-0.6.4/subsequence/constants/instruments/gm_instruments.py +32 -0
  64. subsequence-0.6.4/subsequence/constants/instruments/roland_tr8s.py +320 -0
  65. subsequence-0.6.4/subsequence/constants/instruments/vermona_drm1_drums.py +87 -0
  66. subsequence-0.6.4/subsequence/constants/midi_notes.py +29 -0
  67. subsequence-0.6.4/subsequence/constants/pulses.py +17 -0
  68. subsequence-0.6.4/subsequence/constants/velocity.py +22 -0
  69. subsequence-0.6.4/subsequence/definitions.py +232 -0
  70. subsequence-0.6.4/subsequence/display.py +617 -0
  71. subsequence-0.6.4/subsequence/easing.py +347 -0
  72. subsequence-0.6.4/subsequence/event_emitter.py +109 -0
  73. subsequence-0.6.4/subsequence/form_state.py +665 -0
  74. subsequence-0.6.4/subsequence/forms.py +257 -0
  75. subsequence-0.6.4/subsequence/groove.py +323 -0
  76. subsequence-0.6.4/subsequence/harmonic_rhythm.py +83 -0
  77. subsequence-0.6.4/subsequence/harmonic_state.py +352 -0
  78. subsequence-0.6.4/subsequence/harmony.py +197 -0
  79. subsequence-0.6.4/subsequence/held_notes.py +91 -0
  80. subsequence-0.6.4/subsequence/helpers/__init__.py +0 -0
  81. subsequence-0.6.4/subsequence/helpers/network.py +58 -0
  82. subsequence-0.6.4/subsequence/helpers/wing.py +430 -0
  83. subsequence-0.6.4/subsequence/intervals.py +436 -0
  84. subsequence-0.6.4/subsequence/keystroke.py +249 -0
  85. subsequence-0.6.4/subsequence/link_clock.py +128 -0
  86. subsequence-0.6.4/subsequence/live_client.py +187 -0
  87. subsequence-0.6.4/subsequence/live_reloader.py +298 -0
  88. subsequence-0.6.4/subsequence/live_server.py +161 -0
  89. subsequence-0.6.4/subsequence/melodic_state.py +483 -0
  90. subsequence-0.6.4/subsequence/midi.py +97 -0
  91. subsequence-0.6.4/subsequence/midi_utils.py +329 -0
  92. subsequence-0.6.4/subsequence/mini_notation.py +164 -0
  93. subsequence-0.6.4/subsequence/motifs.py +2356 -0
  94. subsequence-0.6.4/subsequence/osc.py +194 -0
  95. subsequence-0.6.4/subsequence/pattern.py +363 -0
  96. subsequence-0.6.4/subsequence/pattern_algorithmic.py +2010 -0
  97. subsequence-0.6.4/subsequence/pattern_builder.py +2589 -0
  98. subsequence-0.6.4/subsequence/pattern_midi.py +1208 -0
  99. subsequence-0.6.4/subsequence/progressions.py +1913 -0
  100. subsequence-0.6.4/subsequence/py.typed +0 -0
  101. subsequence-0.6.4/subsequence/roles.py +63 -0
  102. subsequence-0.6.4/subsequence/sequence_utils.py +3123 -0
  103. subsequence-0.6.4/subsequence/sequencer.py +2086 -0
  104. subsequence-0.6.4/subsequence/tuning.py +453 -0
  105. subsequence-0.6.4/subsequence/voicings.py +151 -0
  106. subsequence-0.6.4/subsequence/web_ui.py +337 -0
  107. subsequence-0.6.4/subsequence/weighted_graph.py +156 -0
  108. subsequence-0.6.4/subsequence.egg-info/PKG-INFO +208 -0
  109. subsequence-0.6.4/subsequence.egg-info/SOURCES.txt +197 -0
  110. subsequence-0.6.4/subsequence.egg-info/dependency_links.txt +1 -0
  111. subsequence-0.6.4/subsequence.egg-info/entry_points.txt +2 -0
  112. subsequence-0.6.4/subsequence.egg-info/requires.txt +19 -0
  113. subsequence-0.6.4/subsequence.egg-info/scm_file_list.json +193 -0
  114. subsequence-0.6.4/subsequence.egg-info/scm_version.json +8 -0
  115. subsequence-0.6.4/subsequence.egg-info/top_level.txt +1 -0
  116. subsequence-0.6.4/tests/conftest.py +169 -0
  117. subsequence-0.6.4/tests/test_api_consistency.py +195 -0
  118. subsequence-0.6.4/tests/test_cadences.py +719 -0
  119. subsequence-0.6.4/tests/test_callback_sequence.py +285 -0
  120. subsequence-0.6.4/tests/test_cc_forward.py +391 -0
  121. subsequence-0.6.4/tests/test_cc_name_map.py +168 -0
  122. subsequence-0.6.4/tests/test_chord_graphs.py +280 -0
  123. subsequence-0.6.4/tests/test_chord_quality_registry.py +143 -0
  124. subsequence-0.6.4/tests/test_clock_output.py +72 -0
  125. subsequence-0.6.4/tests/test_composition.py +1994 -0
  126. subsequence-0.6.4/tests/test_conductor.py +298 -0
  127. subsequence-0.6.4/tests/test_custom_scales.py +305 -0
  128. subsequence-0.6.4/tests/test_definitions.py +265 -0
  129. subsequence-0.6.4/tests/test_detached.py +141 -0
  130. subsequence-0.6.4/tests/test_determinism.py +336 -0
  131. subsequence-0.6.4/tests/test_display.py +1107 -0
  132. subsequence-0.6.4/tests/test_duration.py +94 -0
  133. subsequence-0.6.4/tests/test_eased_value.py +192 -0
  134. subsequence-0.6.4/tests/test_easing.py +302 -0
  135. subsequence-0.6.4/tests/test_event_emitter.py +151 -0
  136. subsequence-0.6.4/tests/test_form.py +780 -0
  137. subsequence-0.6.4/tests/test_forms.py +840 -0
  138. subsequence-0.6.4/tests/test_groove.py +508 -0
  139. subsequence-0.6.4/tests/test_harmonic_gravity.py +374 -0
  140. subsequence-0.6.4/tests/test_harmony.py +240 -0
  141. subsequence-0.6.4/tests/test_harmony_window.py +385 -0
  142. subsequence-0.6.4/tests/test_held_notes.py +225 -0
  143. subsequence-0.6.4/tests/test_hotkeys.py +357 -0
  144. subsequence-0.6.4/tests/test_instrument_drum_maps.py +173 -0
  145. subsequence-0.6.4/tests/test_intervals.py +82 -0
  146. subsequence-0.6.4/tests/test_key_resolution.py +430 -0
  147. subsequence-0.6.4/tests/test_keystroke.py +89 -0
  148. subsequence-0.6.4/tests/test_latency_compensation.py +438 -0
  149. subsequence-0.6.4/tests/test_legato.py +113 -0
  150. subsequence-0.6.4/tests/test_link.py +165 -0
  151. subsequence-0.6.4/tests/test_live_reloader.py +477 -0
  152. subsequence-0.6.4/tests/test_live_server.py +547 -0
  153. subsequence-0.6.4/tests/test_load_patterns.py +276 -0
  154. subsequence-0.6.4/tests/test_low_fixes_2026_07.py +417 -0
  155. subsequence-0.6.4/tests/test_melodic_state.py +417 -0
  156. subsequence-0.6.4/tests/test_melody_v2.py +459 -0
  157. subsequence-0.6.4/tests/test_midi_helpers.py +68 -0
  158. subsequence-0.6.4/tests/test_midi_input.py +387 -0
  159. subsequence-0.6.4/tests/test_midi_recording.py +188 -0
  160. subsequence-0.6.4/tests/test_mini_notation.py +177 -0
  161. subsequence-0.6.4/tests/test_mini_notation_integration.py +44 -0
  162. subsequence-0.6.4/tests/test_mirror.py +804 -0
  163. subsequence-0.6.4/tests/test_motif_placement.py +486 -0
  164. subsequence-0.6.4/tests/test_motifs.py +706 -0
  165. subsequence-0.6.4/tests/test_multi_device.py +728 -0
  166. subsequence-0.6.4/tests/test_new_chord_graphs.py +734 -0
  167. subsequence-0.6.4/tests/test_osc.py +157 -0
  168. subsequence-0.6.4/tests/test_pattern_algorithmic.py +592 -0
  169. subsequence-0.6.4/tests/test_pattern_builder.py +5717 -0
  170. subsequence-0.6.4/tests/test_phrases.py +516 -0
  171. subsequence-0.6.4/tests/test_presets.py +320 -0
  172. subsequence-0.6.4/tests/test_progressions.py +1018 -0
  173. subsequence-0.6.4/tests/test_render.py +182 -0
  174. subsequence-0.6.4/tests/test_rescheduling.py +171 -0
  175. subsequence-0.6.4/tests/test_review_fixes.py +266 -0
  176. subsequence-0.6.4/tests/test_review_fixes_2026_07.py +780 -0
  177. subsequence-0.6.4/tests/test_schedule_context.py +145 -0
  178. subsequence-0.6.4/tests/test_scheduled_tasks.py +255 -0
  179. subsequence-0.6.4/tests/test_sequence_utils.py +1892 -0
  180. subsequence-0.6.4/tests/test_sequence_utils_density_combine.py +267 -0
  181. subsequence-0.6.4/tests/test_sequence_utils_density_spread.py +300 -0
  182. subsequence-0.6.4/tests/test_sequence_utils_density_to_steps.py +94 -0
  183. subsequence-0.6.4/tests/test_sequence_utils_density_warp.py +198 -0
  184. subsequence-0.6.4/tests/test_sequence_utils_morse_code.py +116 -0
  185. subsequence-0.6.4/tests/test_sequence_utils_scale.py +48 -0
  186. subsequence-0.6.4/tests/test_sequence_utils_transforms_list.py +318 -0
  187. subsequence-0.6.4/tests/test_sequence_utils_transforms_value.py +188 -0
  188. subsequence-0.6.4/tests/test_sequencer_dispatch_safety.py +90 -0
  189. subsequence-0.6.4/tests/test_sequencer_events.py +333 -0
  190. subsequence-0.6.4/tests/test_tier1_fixes_2026_07.py +244 -0
  191. subsequence-0.6.4/tests/test_trigger.py +250 -0
  192. subsequence-0.6.4/tests/test_tuning.py +531 -0
  193. subsequence-0.6.4/tests/test_turnaround_graph.py +79 -0
  194. subsequence-0.6.4/tests/test_unregister.py +221 -0
  195. subsequence-0.6.4/tests/test_velocity_tuple.py +288 -0
  196. subsequence-0.6.4/tests/test_voicings.py +276 -0
  197. subsequence-0.6.4/tests/test_web_ui.py +81 -0
  198. subsequence-0.6.4/tests/test_weighted_graph.py +74 -0
  199. 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/