Core concepts ============= Perllan and trees. ------------------ `Perllan` is a welsh word for "orchard." When object modelling music notation, it becomes clear that most models take the graph form of a tree. The ``Perllan`` network of ``Python`` packages which wrap ``Abjad`` represents a location and a set of tools designed for the purpose of cultivating these trees. An analysis of a score tree can help in understanding the implications of parameter parentage. Traditional Western music notation is rooted firmly in Medieval formal architectures. Pitch notation is resolutely diatonic, non-power-of-two-denominator durations can only be represented with the assistance of a prolating tuplet bracket or time signature, and duration chains of prime-number-numerator durations greater than 3 can only be notated via tie-chained notes. A parent score can hold children as staves or staff-groups, staves hold children as voices. Staff groups may hold staves as well. A staff may hold one or more voices, but a voice, while not distinctly notated with unique symbols, is always implied. A voice may hold children as tuplet-prolated containers or (explicit or implied) tie-chained duration events. Tuplet-prolated containers may also hold tie-chained events. ``Abjad`` refers to these tie-chained events as `Logical Ties`. Logical ties may hold children as single-symbol (prime-number-numerator durations less than 3) leaves. While a pitch value persists through the duration of a logical tie, the notation of pitch is represented through the positioning of the note head of a leaf and when applicable, the affixing of an accidental symbol preceding the initial leaf of a logical tie. Since the positioning of note heads is required on a leaf-by-leaf basis within a logical tie, it can be implied that within the tree-structure of a musical score, the pitch value of a given note is not at the same depth as the duration value, rather pitch is a child of duration or at least a subordinate sibling. Another form of parentage increases the child-like nature of the pitch parameter. In abjad, leaves are object-modelled with an abstract base class ``abjad.Leaf()`` which has duration but no pitch. The classes which inherit from leaf are ``abjad.Skip()``, ``abjad.Rest()``, and ``abjad.Note()``. ``Note`` is the only class which carries a pitch attribute. Since the child class has an attribute which the parent class does not have, this attribute is a child of the parent class. There are several ramifications of this structure: - A voice (explicit or implied) is always present as the lowest level of context containers, even in abstract manipulations of structures like pitch and duration. - Regardless of when it is conceived by the composer, the tree of a score must be populated in a top-down fashion, gradually filling each parent with its children. Therefore, logical tie and leaf values must exist before pitch values can be affixed within a score. ``Perllan`` interfaces to pitch transforms require a selection of logical ties in order to apply pitch values. Not only is this consistent with the parentage model described above, the decoupling of parameters allows for a greater number of transformational possibilities, including those which would be possible if pitch and rhythm were not decoupled. Pitch rounding. --------------- The pitch utilities in ``abjad-ext-microtones`` do not coerce number rounding. The ``et`` package only models scales of `eighth`, `tenth`, and `twelfth` divisions of the octave. The ``ji`` package only models `23-limit` interval ratios. It is the composer's responsibility to round pitch numbers before deployment. Personal libraries. ------------------- Personal libraries such as ``evans`` can provide users with useful programming solutions, while holding a slightly less officially published quality.