def make_vertical_pitch_fields_score():

    duration = Fraction(1, 16)

    pitch_fields = manifolds.etc.pitch.pitch_fields
    pitch_fields = [Chord(x, duration) for x in pitch_fields]

    score = Score([])
    score.append(PianoStaff([]))

    score[0].extend([Staff([]), Staff([])])
    treble_staff = score[0][0]
    bass_staff = score[0][1]

    treble_staff.clef.forced = Clef('treble')
    treble_staff.accidental.style = 'forget'
    treble_staff.meter.forced = Meter(2 * len(pitch_fields), duration._d)

    bass_staff.clef.forced = Clef('bass')
    bass_staff.accidental.style = 'forget'
    bass_staff.meter.forced = Meter(2 * len(pitch_fields), duration._d)

    for pitch_field in pitch_fields:
        t, b = chordtools.split(pitch_field)
        treble_staff.extend([t, Skip(duration)])
        bass_staff.extend([b, Skip(duration)])

    treble_staff.breaks.line = True
    score.rest.transparent = True
    score.meter.transparent = True

    return score
def make_mixed_segmented_fields_score():

    score = Score([])

    staff = Staff([])
    staff.accidental.style = 'forget'

    score.append(staff)

    duration = Fraction(1, 16)
    for field in manifolds.etc.pitch.mixed_segmented_fields:
        for segment in field:
            measure = AnonymousMeasure([])
            measure.denominator = 16
            tuplet = FixedDurationTuplet((3, 8), [])
            measure.append(tuplet)
            if min(segment) <= -1:
                measure.clef.forced = Clef('bass')
            else:
                measure.clef.forced = Clef('treble')
            notes = [Note(x, duration) for x in segment]
            tuplet.extend(notes)
            if 31 < max(segment):
                spanner = Octavation(tuplet)
                spanner.start = 1
            measure.insert(0, Rest((1, 16)))
            measure.append(Rest((1, 16)))
            staff.append(measure)
            measure.formatter.number.self = 'comment'
        measure.barline.kind = '||'
        measure.breaks.line = True

    measure.barline.kind = '|.'
    score.rest.transparent = True
    score.meter.break_visibility = Function('end-of-line-invisible')
    score.clef.break_visibility = Function('end-of-line-invisible')
    pitchtools.make_sharp(score)

    score.tupletnumber.stencil = False
    score.tupletbracket.stencil = False

    #indicator = FixedSystemsIndicator(
    #    (0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200), 1)
    #layout.apply_fixed_systems_indicator(staff, indicator)

    staves = StaffAlignmentOffsets(0)
    systems = SystemYOffsets(20, 10, 1)
    positioning = FixedStaffPositioning(systems, staves)
    layout.apply_fixed_staff_positioning(staff, positioning)

    return score
def make_color_score():

    duration = Fraction(1, 16)

    pitch_fields = manifolds.etc.pitch.pitch_fields
    pitch_fields = [Chord(x, duration) for x in pitch_fields]

    score = Score([])
    score.append(PianoStaff([]))
    piano_staff = score[0]

    piano_staff.extend([Staff([]), Staff([])])
    treble = piano_staff[0]
    bass = piano_staff[1]

    treble.clef.forced = Clef('treble')
    treble.accidental.style = 'forget'

    bass.clef.forced = Clef('bass')
    bass.accidental.style = 'forget'

    for pitch_field in pitch_fields:
        treble_measure = DynamicMeasure()
        bass_measure = DynamicMeasure()
        treble_measure.denominator = 16
        bass_measure.denominator = 16
        for note in chordtools.arpeggiate(pitch_field):
            t, b = chordtools.split(note)
            treble_measure.append(t)
            bass_measure.append(b)
        treble_measure.breaks.line = True
        bass_measure.breaks.line = True
        treble.append(treble_measure)
        bass.append(bass_measure)

    score.rest.transparent = True
    score.meter.break_visibility = Function('end-of-line-invisible')
    score.meter.transparent = True
    pitchtools.make_sharp(score)
    label.leaf_pcs(score, color = True)
    score.text.staff_padding = 4

    return score
def make_set_theoretic_chords_score():

    score = Score([])
    duration = Fraction(1, 16)

    aggregate_chords = manifolds.etc.pitch.aggregates
    aggregate_chords = [Chord(x, duration) for x in aggregate_chords]
    aggregate_piano_staff = make_piano_staff(aggregate_chords)
    score.append(aggregate_piano_staff)

    union_chords = manifolds.etc.pitch.union_chords
    union_chords = [Chord(x, duration) for x in union_chords]
    union_piano_staff = make_piano_staff(union_chords)
    score.append(union_piano_staff)

    intersection_chords = manifolds.etc.pitch.intersection_chords
    intersection_chords = [Chord(x, duration) for x in intersection_chords]
    intersection_piano_staff = make_piano_staff(intersection_chords)
    score.append(intersection_piano_staff)

    aggregate_piano_staff[0].breaks.line = True
    score.rest.transparent = True
    score.meter.transparent = True

    return score
def make_two_staff_unordered_cells_score():

    cells = manifolds.etc.pitch.unordered_cells_sequence
    directions = manifolds.etc.pitch.segmentation_series
    harmonic_walk = sequencetools.flatten_sequence(manifolds.etc.pitch.harmonic_walk)

    score = Score([])
    piano_staff = PianoStaff([])
    score.append(piano_staff)

    treble = Staff([])
    treble.accidental.style = "forget"
    treble.clef.forced = Clef("treble")

    bass = Staff([])
    bass.accidental.style = "forget"
    bass.clef.forced = Clef("bass")

    piano_staff.append(treble)
    piano_staff.append(bass)

    duration = Fraction(1, 16)
    for cell_number, cell in enumerate(cells):
        measure = AnonymousMeasure([])
        notes = [Note(pitch, duration) for pitch in cell]
        measure.extend(notes)

        rest_measure = clone.unspan([measure])[0]
        for i, note in enumerate(rest_measure):
            rest_measure[i] = Rest(note.duration.written)

        pitches = [note.pitch for note in notes]
        clef = pitchtools.suggest_clef(pitches)

        if clef == Clef("treble"):
            treble.append(measure)
            bass.append(rest_measure)
        else:
            treble.append(rest_measure)
            bass.append(measure)

        if 26 < max(cell):
            octavation = Octavation(measure[:])
            octavation.start = 1

        if directions[cell_number % 16] == -1:
            direction = "L"
        else:
            direction = "R"

        field_number = (cell_number + 6) % 8 + 1
        center_pitch = harmonic_walk[cell_number % len(harmonic_walk)]

        chord = Chord(measure[0])
        notehead = NoteHead(None, center_pitch)
        notehead.style = "harmonic"
        notehead.color = "blue"
        chord.append(notehead)

        first_leaf = treble[-1].leaves[0]
        first_leaf.markup.up.append(str(cell_number))

        label = r"\line { %s%s \with-color #blue (%s) }" % (direction, field_number, center_pitch)
        first_leaf.markup.up.append(label)

    front, back = Fraction(1, 16), Fraction(1, 32)
    layout.insert_measure_padding(score, front, back)

    lengths = manifolds.etc.pitch.harmonic_walk_lengths
    parts = sequencetools.partition_by_lengths(treble[:], lengths, cyclic=True)

    for part in parts:
        if 1 < len(part):
            bracket = Bracket(part)
            bracket.staff_padding = None

    parts = sequencetools.partition_by_lengths(bass[:], lengths, cyclic=True)
    for part_number, part in enumerate(parts):
        label = r"\with-color #blue \circle{ %s }" % (part_number + 1)
        part[0][1].markup.down.append(label)

    layout.line_break_every_prolated(treble, Fraction(58, 16))
    layout.line_break_every_prolated(bass, Fraction(58, 16))

    staves = StaffAlignmentOffsets(0, -10)
    systems = SystemYOffsets(45, 5)
    positioning = FixedStaffPositioning(systems, staves)
    layout.apply_fixed_staff_positioning(treble, positioning)

    score.rest.transparent = True

    return score
def make_labeled_mixed_fields_score():

    score = Score([])
    segmentation_series = manifolds.etc.pitch.segmentation_series
    fields = manifolds.etc.pitch.mixed_segmented_fields
    duration = Fraction(1, 16)

    measures_per_line = 6

    ## for eight *pairs of* fields
    for i in range(len(fields) / 2):

        ## for the first or second member of each pair
        for member in ('first', 'second'):

            ## find a sequence between 0 and 15, inclusive
            if member == 'first':
                field_sequence = i
            else:
                field_sequence = i + 8

            ## find a field number between 1 and 8, inclusive
            field_number = (field_sequence + 6) % 8 + 1

            ## find direction of segmentation
            if segmentation_series[field_sequence] == -1:
                direction = 'L'
            elif segmentation_series[field_sequence] == 1:
                direction = 'R'
            else:
                raise ValueError

            ## find name for first system
            name = Markup(
                r'\hcenter-in #12 \box \pad-markup #1 \bold { %s%s }' % (
                direction, field_number))

            ## find name for second system
            if direction == 'L':
                second_system_direction = 'R'
            else:
                second_system_direction = 'L'
            short_name = Markup(
                r'\hcenter-in #12 \box \pad-markup #1 \bold { %s%s }' % (
                second_system_direction, field_number))

            ## if first field in pair
            if member == 'first':

                ## set up a staff
                staff = Staff([])
                staff.accidental.style = 'forget'
                staff.instrument.name = name
                staff.instrument.short_name = short_name
                score.append(staff)

            ## get field to lay out, from 0 to 15, inclusive
            field = fields[field_sequence]

            ## lay out field as a single line of music
            for segment_number, segment in enumerate(field):
                measure = AnonymousMeasure([])
                measure.denominator = 16

#            if segment_number == 0:
#               if member == 'second':
#                  print name
#                  directive = r'\set Staff.shortInstrumentName = %s'
#                  directive %= name.format
#                  measure.directives.before.append(directive)

                tuplet = FixedDurationTuplet((3, 8), [])
                measure.append(tuplet)
                if min(segment) <= -1:
                    measure.clef.forced = Clef('bass')
                else:
                    measure.clef.forced = Clef('treble')
                notes = [Note(x, duration) for x in segment]
                tuplet.extend(notes)
                if 31 < max(segment) < 36:
                    spanner = Octavation(tuplet)
                    spanner.start = 1
                elif 36 <= max(segment):
                    spanner = Octavation(tuplet)
                    spanner.start = 2
                measure.insert(0, Rest((1, 16)))
                measure.append(Rest((1, 16)))
                staff.append(measure)

#            segment_letter = chr(ord('a') + segment_number)
#            segment_id = r'\circle \pad-markup #0.25 { %s }'
#            segment_id %= segment_letter
#            tuplet.leaves[0].markup.up.append(segment_id)

                segment_center = float(sum(segment)) / len(segment)
                segment_center = round(segment_center, 1)
                if int(segment_center) == segment_center:
                    markup = r'\bold { %s }' % int(segment_center)
                else:
                    markup = r'\bold { %.1f }' % segment_center
                tuplet.leaves[0].markup.down.append(markup)

            extra_measure_count = measures_per_line - (segment_number + 1)
            for j in range(extra_measure_count):
                measure = AnonymousMeasure([])
                measure.extend(construct.rests([(1, 16), (3, 8), (1, 16)]))
                measure.dots.transparent = True
                staff.append(measure)
            measure.barline.kind = '||'
            measure.breaks.line = True

    measure.barline.kind = '|.'
    score.rest.transparent = True
    score.meter.break_visibility = Function('end-of-line-invisible')
    #score.clef.break_visibility = Function('end-of-line-invisible')
    pitchtools.make_sharp(score)

    for i, measure in enumerate(iterate.naive(score, AnonymousMeasure)):
        measure.formatter.number.self = 'comment'
        if not i % 6 == 5:
            measure.breaks.whitespace = Fraction(1, 16)

    score.tupletnumber.stencil = False
    score.tupletbracket.stencil = False

    score[0][measures_per_line - 1].breaks.page = True

    alignment_offsets = [-25 * x for x in range(8)]

    score[0][0].breaks.x = 10
    score[0][0].breaks.y = 30
    score[0][0].breaks.alignment_offsets = alignment_offsets

    score[0][measures_per_line].breaks.x = 10
    score[0][measures_per_line].breaks.y = 15
    score[0][measures_per_line].breaks.alignment_offsets = alignment_offsets

    return score
def make_segmented_pitch_fields_score(bigger):

    duration = Fraction(1, 16)

    score = Score([])
    score.append(PianoStaff([]))
    piano_staff = score[0]

    piano_staff.extend([Staff([]), Staff([])])
    treble = piano_staff[0]
    bass = piano_staff[1]

    treble.clef.forced = Clef('treble')
    treble.accidental.style = 'forget'

    bass.clef.forced = Clef('bass')
    bass.accidental.style = 'forget'

    if bigger == 'left':
        segmented_pitch_fields = manifolds.etc.pitch.left_segmented_fields
    elif bigger == 'right':
        segmented_pitch_fields = manifolds.etc.pitch.right_segmented_fields
    else:
        raise ValueError

    for i, segmented_pitch_field in enumerate(segmented_pitch_fields):
        field_number = (i + 6) % 8 + 1
        segment_number = 0
        for segment in segmented_pitch_field:
            segment = Chord(segment, duration)
            treble_measure = AnonymousMeasure()
            bass_measure = AnonymousMeasure()
            treble_measure.denominator = 16
            bass_measure.denominator = 16
            for note in chordtools.arpeggiate(segment):
                t, b = chordtools.split(note)
                treble_measure.append(t)
                bass_measure.append(b)
            treble.append(treble_measure)
            bass.append(bass_measure)
            segment_letter = chr(ord('a') + segment_number)
            treble_measure.leaves[0].markup.up.append(
                r'\circle { %s-%s }' % (field_number, segment_letter))
            segment_number += 1
        treble_measure.breaks.line = True
        bass_measure.breaks.line = True

    score.rest.transparent = True
    score.meter.break_visibility = Function('end-of-line-invisible')
    pitchtools.make_sharp(score)
    label.leaf_pcs(score, color = True)
    score.text.staff_padding = 4

    #indicator = FixedSystemsIndicator((0, 40, 80, 120), 1)
    #layout.apply_fixed_systems_indicator(treble, indicator)

    staves = StaffAlignmentOffsets(0, -12)
    systems = SystemYOffsets(40, 4, 1)
    positioning = FixedStaffPositioning(systems, staves)
    layout.apply_fixed_staff_positioning(treble, positioning)

    return score
def make_unordered_cells_score():

    cells = manifolds.etc.pitch.unordered_cells_sequence
    directions = manifolds.etc.pitch.segmentation_series
    harmonic_walk = sequencetools.flatten_sequence(manifolds.etc.pitch.harmonic_walk)

    score = Score([])
    staff = Staff([])
    staff.accidental.style = 'forget'
    score.append(staff)

    duration = Fraction(1, 16)
    for cell_number, cell in enumerate(cells):
        measure = AnonymousMeasure([])
        notes = [Note(pitch, duration) for pitch in cell]
        measure.extend(notes)
        pitches = [note.pitch for note in notes]
        clef = pitchtools.suggest_clef(pitches)
        measure.clef.forced = clef

        if 26 < max(cell):
            octavation = Octavation(measure[:])
            octavation.start = 1

        measure.formatter.number.self = 'comment'
        staff.append(measure)

        if directions[cell_number % 16] == -1:
            direction = 'L'
        else:
            direction = 'R'

        field_number = (cell_number + 6) % 8 + 1
        center_pitch = harmonic_walk[cell_number % len(harmonic_walk)]

        chord = Chord(measure[0])
        notehead = NoteHead(None, center_pitch)
        notehead.style = 'harmonic'
        notehead.color = 'blue'
        chord.append(notehead)

        first_leaf = measure.leaves[0]
        first_leaf.markup.up.append(str(cell_number))

        label = r'\line { %s%s \with-color #blue (%s) }' % (
            direction, field_number, center_pitch)
        first_leaf.markup.up.append(label)

        front, back = Fraction(1, 16), Fraction(1, 32)
        layout.insert_measure_padding(measure, front, back)

    lengths = manifolds.etc.pitch.harmonic_walk_lengths
    parts = sequencetools.partition_by_lengths(staff[:], lengths, cyclic = True)
    spacing_voice = Voice([])

    for part_number, part in enumerate(parts):
        if 1 < len(part):
            bracket = Bracket(part)
            bracket.staff_padding = None

        skip = Skip((1, 16))
        spacing_voice.append(skip)

        skip = Skip((1, 1))
        skip.duration.multiplier = durationtools.sum_prolated(part) - Fraction(1, 16)
        spacing_voice.append(skip)

        label = r'\with-color #blue \circle { %s }' % (part_number + 1)
        skip.markup.down.append(label)

    spacing_voice.text.staff_padding = 4

    Voice(staff[:])
    staff.parallel = True
    staff.append(spacing_voice)

    lines = Fraction(58, 16)
    systems = SystemYOffsets(33, 7, 1)
    positioning = FixedStaffPositioning(systems)
    layout.line_break_every_prolated(staff, lines)
    layout.apply_fixed_staff_positioning(staff, positioning)

    score.rest.transparent = True

    return score