3.6 KiB
3.6 KiB
AGENTS.md - Codebase Guidelines
Project Overview
This repository contains research code for musical set theory and tonal space analysis, primarily implemented as a Jupyter notebook (compact_sets_optimized_2.ipynb). The code deals with harmonic series, pitch class sets, and related musical computations.
Build, Lint, and Test Commands
Jupyter Notebooks
- Run notebook:
jupyter notebook compact_sets_optimized_2.ipynborjupyter lab - Execute single cell: Select cell and press
Shift+Enter - Run all cells:
Cell > Run Allin Jupyter menu
Python Environment
No formal build system or package manager is configured. To run Python code:
python3 -m notebook compact_sets_optimized_2.ipynb
# or convert to script:
jupyter nbconvert --to python compact_sets_optimized_2.ipynb
Testing
No test framework is configured. Manual testing is done within the notebook using assert statements and cell-by-cell verification.
Linting
No linter is configured. For Python files, you may optionally use:
ruff check .
# or
pylint **/*.py
Code Style Guidelines
General Principles
- Write clear, readable code with meaningful variable names
- Add comments for complex mathematical or music theory operations
- Keep functions focused on single responsibilities
Python Code Style (for any .py files)
- Formatting: Follow PEP 8
- Line length: Maximum 100 characters
- Indentation: 4 spaces (no tabs)
- Naming:
- Functions/variables:
snake_case(e.g.,hs_array_to_fr,expand_pitch) - Constants:
UPPER_SNAKE_CASE(e.g.,MAX_OCTAVES) - Classes:
PascalCase(if applicable)
- Functions/variables:
- Imports: Standard library first, then third-party
from itertools import chain, combinations from math import prod, log import networkx as nx from fractions import Fraction - Type hints: Use when beneficial for clarity
- Error handling: Use specific exception types, provide meaningful messages
Jupyter Notebook Style
- Keep cells relatively small and focused
- Use markdown cells to explain music theory concepts
- Name notebook cells for navigation (view > collapse pnl)
- Restart kernel and run all before sharing
Key Patterns in This Codebase
Pitch Representation
- Pitches stored as tuples:
(octave, harmonic_series_index, ...) - Example:
(0, 1, 5)represents the 5th partial of the fundamental
Functions
hs_array_to_fr: Convert harmonic series array to frequency ratiohs_array_to_cents: Convert to cents (1200 per octave)expand_pitch/collapse_pitch: Manage pitch octave normalizationtranspose_pitch: Apply pitch transformations
File Organization
- Main code:
compact_sets_optimized_2.ipynb - Data:
sirens.txt(likely reference data for sonic examples) - Audio:
compact_sets_play_siren.scd(SuperCollider patch)
Notes for Agents
- Backup before edits: The notebook is complex; make backups before major changes
- Verify calculations: Musical intervals and frequency calculations should be verified
- No CI/CD: This is a research sketch repository; no automated pipelines exist
- Dependencies: Key libraries used include
networkx,itertools,math,fractions
Extending This Codebase
If adding Python files:
- Create a
src/directory for modules - Add
pyproject.tomlfor package management if needed - Consider adding
pytestfor testing - Add type hints to new functions
If adding notebooks:
- Follow existing naming:
{topic}_optimized_{version}.ipynb - Import from shared modules rather than duplicating code
- Use clear markdown headers