Skip to main content

sim_lib_music_serial/
lib.rs

1//! Immutable serial plans with stable identity, provenance, and partial order.
2//!
3//! This crate owns the score-adjacent structural source for serial practice:
4//! validated row-instance identity, event identity, explicit role/origin
5//! provenance, chord-safe simultaneous placement groups, and a precedence DAG
6//! over immutable planned events. It does not realize MIDI, audio, notation,
7//! transforms, or search.
8#![forbid(unsafe_code)]
9#![deny(missing_docs)]
10
11mod additive;
12mod allowance;
13mod anchor;
14mod array;
15mod audition;
16mod candidate_filter;
17mod canon;
18mod chromatic;
19mod completion;
20mod cycle;
21mod deploy;
22mod derived;
23mod error;
24mod event;
25mod evidence;
26mod extract;
27mod hypothesis;
28mod integral;
29mod invariant;
30mod modal;
31mod nesting;
32mod order;
33mod origin;
34mod parameter;
35mod pitch_map;
36mod plan;
37mod practice;
38mod practice_builtin;
39mod reading;
40mod realization;
41mod realizer;
42mod referential;
43mod registry;
44mod render;
45mod report;
46mod spine;
47mod strict;
48mod techniques;
49mod time_point;
50
51pub use additive::AdditiveStaffPatch;
52pub use allowance::{
53    ReferentialSubsetAllowance, SerialAllowanceKind, SerialAllowanceMatch,
54    SerialCompletionAllowances,
55};
56pub use anchor::ReferentialEmphasis;
57pub use array::{
58    AggregateArrayReport, AggregatePartitionReport, ColumnPartition, PartitionCoverageReport,
59    SerialArray, SerialArrayError, SerialArrayRow, VerticalAggregateRequirement,
60};
61pub use audition::{
62    SerialSurfaceError, lower_serial_score, render_serial_audition_score, write_serial_smf,
63};
64pub use canon::{
65    CanonDeployment, CanonError, CanonOrchestration, CanonRealizationEvent, CanonSpec,
66    CanonSymmetryCertificate, CanonSymmetryRequirement, CanonVoiceProfile, CanonVoiceSpec,
67    build_canon,
68};
69pub use chromatic::{ChromaticSerialRealizer, strict_chromatic_realizer_id};
70pub use completion::{
71    AcceptedSerialAddition, AcceptedSerialCategory, AcceptedSerialNote, AdditionKind,
72    ChordAddition, CompletionCandidate, CompletionError, CompletionProvenance, CompletionRequest,
73    CompletionResult, DoublingAddition, NoteAddition, OrnamentAddition, PedalAddition,
74    PitchRangeConstraint, SerialCompletionError, SerialCompletionRequest, SerialCompletionResult,
75    VoiceAddition, complete_serial,
76};
77pub use cycle::{
78    CyclicOrder, CyclicProjection, CyclicProjectionSpec, ParameterTrackKind, project_cyclic_order,
79};
80pub use deploy::{
81    AggregateRotationSpec, InterlockingPartitionSpec, MelodyAccompanimentSpec, SerialDeployError,
82    SerialDeployer, SerialDeployerKind, SerialDeployerParameter, SerialDeployerSpec,
83    SimultaneousFormsSpec, TechniquePlan, TechniquePlanBuilder, VerticalBlocksSpec,
84    complete_horizontal_statement, interlocking_partition, melody_accompaniment_distribution,
85    motivic_partition, schoenberg_partitioned, simultaneous_forms, strict_aggregate,
86    verticalize_selected_blocks,
87};
88pub use derived::{
89    DerivedCellDeployment, DerivedCellOccurrence, InvariantCertificate, InvariantFormCandidate,
90    InvariantFormCandidates, InvariantRequirement, SymmetryCertificate, SymmetryRequirement,
91    UnsatisfiedInvariantRequest, deploy_derived_cells, forms_with_invariant,
92};
93pub use error::SerialPlanError;
94pub use event::{
95    EventPlacement, OrdinalRef, PlannedSerialEvent, RowInstanceId, SerialEventId,
96    SimultaneousGroupId, StructuralLicense, StructuralReadingId, VoiceId,
97};
98pub use evidence::{ExtractionEvidence, ExtractionOutcome};
99pub use extract::{
100    SerialExtractionError, SerialExtractionRequest, SerialExtractionServices,
101    extract_serial_hypotheses,
102};
103pub use hypothesis::{
104    RankedSerialHypothesis, SerialAliasEvidence, SerialObservation, SerialObservationBlock,
105    SerialReadingOrder, SerialStableRank, SerialTimeSpan,
106};
107pub use integral::{
108    ArticulationTrack, BoundParameterTrack, DurationTrack, DynamicsTrack, ErasedParameterBinding,
109    Exhaustion, IntegralError, IntegralPlan, ParameterOrdinalLedgerEntry, ParameterProjection,
110    ParameterStep, ParameterTrack, RegisterTrack, TimbreTrack,
111};
112pub use invariant::{EvidenceId, InvariantLedger, InvariantLedgerEntry, InvariantStatus, WaiverId};
113pub use modal::{
114    MarkedChromaticInflectionRealizer, ModalDegreeCycleRealizer, NearestScaleToneRealizer,
115    NonPitchSpineRealizer,
116};
117pub use nesting::{
118    NestedSerialValue, NestingError, NestingExpansion, NestingLimits, expand_nested,
119    rotate_sequence_left,
120};
121pub use order::PrecedenceGraph;
122pub use origin::{SerialOrigin, SerialRole};
123pub use parameter::{ParameterAlphabet, ParameterError, ParameterSeries, ParameterValue};
124pub use pitch_map::MapWitness;
125pub use plan::SerialPlan;
126pub use practice::{
127    BuiltInPracticeRule, DeclaredWaivers, PracticeId, PracticeRule, PracticeRuleId,
128    PracticeRuleKind, PracticeRuleParameter, PracticeRuleSpec, SerialPractice,
129};
130pub use reading::SerialReading;
131pub use realization::{
132    RealizedSerialEvent, RealizedSerialNote, RealizedSerialOrigin, SerialRealization,
133    StrictRealizationError,
134};
135pub use realizer::{
136    EventSound, RealizationContext, RealizationService, RealizationServices, RealizerId,
137    RegisterBounds, SerialRealizer, SimultaneousRenderPolicy, StrictEventSpec, StrictPitchLayout,
138    StrictRealizationContext, TiePolicy, VoiceBounds,
139};
140pub use referential::{
141    ReferentialClaim, ReferentialContextReport, ReferentialEvidence, ReferentialEvidenceKind,
142    ReferentialRatioSummary, ReferentialReport, ReferentialRequest, analyze_referential_subset,
143};
144pub use registry::{SerialRealizerRegistry, default_realizer_registry};
145pub use render::{
146    SerialRenderOptions, render_serial_piano_roll, render_serial_score, render_serial_staff,
147};
148pub use report::SerialPracticeReport;
149pub use spine::{
150    ChromaticAggregateIdentity, SerialRepeatedDegree, SerialSonanceContext, SerialSpineCollision,
151    SerialSpineEntry, SerialSpineKind, SerialSpineLabel, SerialSpineReport,
152};
153pub use strict::realize_strict;
154pub use time_point::{TimePointAlphabet, TimePointError, TimePointRow, TimePointSystem};
155
156/// Cookbook recipes for this lib, embedded at build time.
157pub static RECIPES: sim_cookbook::EmbeddedDir =
158    include!(concat!(env!("OUT_DIR"), "/cookbook_recipes.rs"));
159
160#[cfg(test)]
161mod tests;
162#[cfg(test)]
163mod tests_array_time_point;
164#[cfg(test)]
165mod tests_audition;
166#[cfg(test)]
167mod tests_completion;
168#[cfg(test)]
169mod tests_deploy;
170#[cfg(test)]
171mod tests_extract;
172#[cfg(test)]
173mod tests_integral;
174#[cfg(test)]
175mod tests_realizer;
176#[cfg(test)]
177mod tests_techniques;