{ "metadata": { "name": "", "signature": "sha256:58bd36c9cae537ca609a1003ddb872775d007694326808c63b787346e9a15de4" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Preamble" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This was taken and slightly adapted from the example section of the abjad documentation. I am not the author of the content (only the porting to notebook format). I have removed all diacritics for now." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import Image\n", "\n", "from abjad import *\n", "from abjad.tools import scoretools\n", "%load_ext abjad.ext.ipython" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use and extra import here" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from abjad.demos import mozart" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Mozart - Musikalisches Wurfelspiel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mozart\u2019s dice game is a method for aleatorically generating sixteen-measure-long minuets. For each measure, two six-sided dice are rolled, and the sum of the dice used to look up a measure number in one of two tables (one for each half of the minuet). The measure number then locates a single measure from a collection of musical fragments. The fragments are concatenated together, and \u201cmusic\u201d results.\n", "\n", "Implementing the dice game in a composition environment is somewhat akin to (although also somewhat more complicated than) the ubiquitous hello world program which every programming language uses to demonstrate its basic syntax." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image(url='http://abjad.mbrsi.org/_images/mozart-tables.png', width=500)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The materials" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At the heart of the dice game is a large collection, or corpus, of musical fragments. Each fragment is a single 3/8 measure, consisting of a treble voice and a bass voice. Traditionally, these fragments are stored in a \u201cscore\u201d, or \u201ctable of measures\u201d, and located via two tables of measure numbers, which act as lookups, indexing into that collection.\n", "\n", "Duplicate measures in the original corpus are common. Notably, the 8th measure - actually a pair of measures represent the first and second alternate ending of the first half of the minuet - are always identical. The last measure of the piece is similarly limited - there are only two possibilities rather than the usual eleven (for the numbers 2 to 12, being all the possible sums of two 6-sided dice).\n", "\n", "How might we store this corpus compactly?\n", "\n", "Some basic musical information in Abjad can be stored as strings, rather than actual collections of class instances. Abjad can parse simple LilyPond strings via p, which interprets a subset of LilyPond syntax, and understands basic concepts like notes, chords, rests and skips, as well as beams, slurs, ties, and articulations." ] }, { "cell_type": "code", "collapsed": false, "input": [ "staff = Staff(\"\"\"\n", " c'4 ( d'4 8 ) -. r8\n", " 4 ^ \\marcato ~ 1\n", " \"\"\")\n", "f(staff)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\\new Staff {\n", "\tc'4 (\n", "\td'4\n", "\t8 -\\staccato )\n", "\tr8\n", "\t4 ^\\marcato ~\n", "\t1\n", "}\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "show(staff)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ndCA5LjE0nbNcWAAAAABJRU5ErkJggg==\n" } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, instead of storing our musical information as Abjad components, we\u2019ll represent each fragment in the corpus as a pair of strings: one representing the bass voice contents, and the other representing the treble. This pair of strings can be packaged together into a collection. For this implementation, we\u2019ll package them into a dictionary. Python dictionaries are cheap, and often provide more clarity than lists; the composer does not have to rely on remembering a convention for what data should appear in which position in a list - they can simply label that data semantically. In our musical dictionary, the treble voice will use the key \u2018t\u2019 and the bass voice will use the key \u2018b\u2019." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fragment = {'t': \"g''8 ( e''8 c''8 )\", 'b': '4 r8'}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of relying on measure number tables to find our fragments - as in the original implementation, we\u2019ll package our fragment dictionaries into a list of lists of fragment dictionaries. That is to say, each of the sixteen measures in the piece will be represented by a list of fragment dictionaries. Furthermore, the 8th measure, which breaks the pattern, will simply be a list of two fragment dictionaries. Structuring our information in this way lets us avoid using measure number tables entirely; Python\u2019s list-indexing affordances will take care of that for us. The complete corpus looks like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_mozart_measure_corpus():\n", " r'''Makes Mozart measure corpus.\n", " '''\n", "\n", " return [\n", " [\n", " {'b': 'c4 r8', 't': \"e''8 c''8 g'8\"},\n", " {'b': '4 r8', 't': \"g'8 c''8 e''8\"},\n", " {'b': '4 r8', 't': \"g''8 ( e''8 c''8 )\"},\n", " {'b': '4 r8', 't': \"c''16 b'16 c''16 e''16 g'16 c''16\"},\n", " {'b': '4 r8', 't': \"c'''16 b''16 c'''16 g''16 e''16 c''16\"},\n", " {'b': 'c4 r8', 't': \"e''16 d''16 e''16 g''16 c'''16 g''16\"},\n", " {'b': '4 r8', 't': \"g''8 f''16 e''16 d''16 c''16\"},\n", " {'b': '4 r8', 't': \"e''16 c''16 g''16 e''16 c'''16 g''16\"},\n", " {'b': '16 g16 16 g16 16 g16', 't': \"c''8 g'8 e''8\"},\n", " {'b': '4 r8', 't': \"g''8 c''8 e''8\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " ],\n", " [\n", " {'b': 'c4 r8', 't': \"e''8 c''8 g'8\"},\n", " {'b': '4 r8', 't': \"g'8 c''8 e''8\"},\n", " {'b': '4 r8', 't': \"g''8 e''8 c''8\"},\n", " {'b': '4 r8', 't': \"c''16 g'16 c''16 e''16 g'16 c''16\"},\n", " {'b': '4 r8', 't': \"c'''16 b''16 c'''16 g''16 e''16 c''16\"},\n", " {'b': 'c4 r8', 't': \"e''16 d''16 e''16 g''16 c'''16 g''16\"},\n", " {'b': '4 r8', 't': \"g''8 f''16 e''16 d''16 c''16\"},\n", " {'b': '4 r8', 't': \"c''16 g'16 e''16 c''16 g''16 e''16\"},\n", " {'b': '4 r8', 't': \"c''8 g'8 e''8\"},\n", " {'b': '4 8', 't': \"g''8 c''8 e''8\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " ],\n", " [\n", " {'b': '4 g,8', 't': \"d''16 e''16 f''16 d''16 c''16 b'16\"},\n", " {'b': 'g,4 r8', 't': \"b'8 d''8 g''8\"},\n", " {'b': 'g,4 r8', 't': \"b'8 d''16 b'16 a'16 g'16\"},\n", " {'b': '4 r8', 't': \"f''8 d''8 b'8\"},\n", " {'b': '4 r8', 't': \"g''16 fs''16 g''16 d''16 b'16 g'16\"},\n", " {'b': '4 r8', 't': \"f''16 e''16 f''16 d''16 c''16 b'16\"},\n", " {'b': '4 8',\n", " 't': \"b'16 c''16 d''16 e''16 f''16 d''16\"},\n", " {'b': 'g8 g8 g8', 't': \"8 8 8\"},\n", " {'b': 'g,4 r8', 't': \"b'16 c''16 d''16 b'16 a'16 g'16\"},\n", " {'b': 'b,4 r8', 't': \"d''8 ( b'8 g'8 )\"},\n", " {'b': 'g4 r8', 't': \"b'16 a'16 b'16 c''16 d''16 b'16\"},\n", " ],\n", " [\n", " {'b': '4 r8', 't': \"c''16 b'16 c''16 e''16 g'8\"},\n", " {'b': 'c4 r8', 't': \"e''16 c''16 b'16 c''16 g'8\"},\n", " {'b': '4 r8', 't': \"c''8 ( g'8 e'8 )\"},\n", " {'b': '4 r8', 't': \"c''8 e''8 g'8\"},\n", " {'b': '4 r8', 't': \"c''16 b'16 c''16 g'16 e'16 c'16\"},\n", " {'b': '4 r8', 't': \"c''8 c''16 d''16 e''8\"},\n", " {'b': 'c4 r8',\n", " 't': \"8 16 16 8\"},\n", " {'b': '4 r8', 't': \"c''8 e''16 c''16 g'8\"},\n", " {'b': '4 r8', 't': \"c''16 g'16 e''16 c''16 g''8\"},\n", " {'b': '4 r8', 't': \"c''8 e''16 c''16 g''8\"},\n", " {'b': '4 r8', 't': \"c''16 e''16 c''16 g'16 e'8\"},\n", " ],\n", " [\n", " {'b': 'c4 r8', 't': \"fs''8 a''16 fs''16 d''16 fs''16\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " {'b': 'c4 r8', 't': \"d''16 a'16 fs''16 d''16 a''16 fs''16\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " {'b': 'c4 r8', 't': \"d''8 a'8 ^\\\\turn fs''8\"},\n", " {'b': 'c4 r8', 't': \"d''16 cs''16 d''16 fs''16 a''16 fs''16\"},\n", " {'b': '4 8', 't': \"fs''8 a''8 d''8\"},\n", " {'b': '8 8 8', 't': \"a'8 a'16 d''16 fs''8\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " {'b': '8 8 8', 't': \"fs''8 fs''16 d''16 a''8\"},\n", " {'b': '4 r8', 't': \"fs''16 d''16 a'16 a''16 fs''16 d''16\"},\n", " ],\n", " [\n", " {'b': '8 8 8',\n", " 't': \"g''16 fs''16 g''16 b''16 d''8\"},\n", " {'b': '4 r8', 't': \"g''8 b''16 g''16 d''16 b'16\"},\n", " {'b': '4 r8', 't': \"g''8 b''8 d''8\"},\n", " {'b': '4 r8', 't': \"a'8 fs'16 g'16 b'16 g''16\"},\n", " {'b': '4 8',\n", " 't': \"g''16 fs''16 g''16 d''16 b'16 g'16\"},\n", " {'b': 'b,4 r8', 't': \"g''8 b''16 g''16 d''16 g''16\"},\n", " {'b': '4 r8', 't': \"d''8 g''16 d''16 b'16 d''16\"},\n", " {'b': '4 r8', 't': \"d''8 d''16 g''16 b''8\"},\n", " {'b': '8 8 8',\n", " 't': \"a''16 g''16 fs''16 g''16 d''8\"},\n", " {'b': '4 r8', 't': \"g''8 g''16 d''16 b''8\"},\n", " {'b': '4 r8', 't': \"g''16 b''16 g''16 d''16 b'8\"},\n", " ],\n", " [\n", " {'b': 'c8 d8 d,8', 't': \"e''16 c''16 b'16 a'16 g'16 fs'16\"},\n", " {'b': 'c8 d8 d,8',\n", " 't': \"a'16 e''16 16 16 16 16\"},\n", " {'b': 'c8 d8 d,8',\n", " 't': \"16 ( 16 ) 16 ( 16 ) \"\n", " \"16 ( 16 )\"},\n", " {'b': 'c8 d8 d,8', 't': \"e''16 g''16 d''16 c''16 b'16 a'16\"},\n", " {'b': 'c8 d8 d,8', 't': \"a'16 e''16 d''16 g''16 fs''16 a''16\"},\n", " {'b': 'c8 d8 d,8', 't': \"e''16 a''16 g''16 b''16 fs''16 a''16\"},\n", " {'b': 'c8 d8 d,8', 't': \"c''16 e''16 g''16 d''16 a'16 fs''16\"},\n", " {'b': 'c8 d8 d,8', 't': \"e''16 g''16 d''16 g''16 a'16 fs''16\"},\n", " {'b': 'c8 d8 d,8', 't': \"e''16 c''16 b'16 g'16 a'16 fs'16\"},\n", " {'b': 'c8 d8 d,8', 't': \"e''16 c'''16 b''16 g''16 a''16 fs''16\"},\n", " {'b': 'c8 d8 d,8', 't': \"a'8 d''16 c''16 b'16 a'16\"},\n", " ],\n", " [\n", " {'b': 'g,8 g16 f16 e16 d16', 't': \"4 r8\"},\n", " {'b': 'g,8 b16 g16 fs16 e16', 't': \"4 r8\"},\n", " ],\n", " [\n", " {'b': 'd4 c8', 't': \"fs''8 a''16 fs''16 d''16 fs''16\"},\n", " {'b': '4 r8', 't': \"d''16 a'16 d''16 fs''16 a''16 fs''16\"},\n", " {'b': '8 8 8', 't': \"fs''8 a''8 fs''8\"},\n", " {'b': '4 8',\n", " 't': \"fs''16 a''16 d'''16 a''16 fs''16 a''16\"},\n", " {'b': 'd4 c8', 't': \"d'16 fs'16 a'16 d''16 fs''16 a''16\"},\n", " {'b': 'd,16 d16 cs16 d16 c16 d16',\n", " 't': \"8 fs''4 ^\\\\trill\"},\n", " {'b': '4 8', 't': \"a''8 ( fs''8 d''8 )\"},\n", " {'b': '4 8', 't': \"d'''8 a''16 fs''16 d''16 a'16\"},\n", " {'b': '4 r8', 't': \"d''16 a'16 d''8 fs''8\"},\n", " {'b': '4 8', 't': \"fs''16 d''16 a'8 fs''8\"},\n", " {'b': '4 8', 't': \"a'8 d''8 fs''8\"},\n", " ],\n", " [\n", " {'b': '4 r8', 't': \"g''8 b''16 g''16 d''8\"},\n", " {'b': 'b,16 d16 g16 d16 b,16 g,16', 't': \"g''8 g'8 g'8\"},\n", " {'b': 'b,4 r8', 't': \"g''16 b''16 g''16 b''16 d''8\"},\n", " {'b': '4 8',\n", " 't': \"a''16 g''16 b''16 g''16 d''16 g''16\"},\n", " {'b': '4 8', 't': \"g''8 d''16 b'16 g'8\"},\n", " {'b': '4 8', 't': \"g''16 b''16 d'''16 b''16 g''8\"},\n", " {'b': '4 r8', 't': \"g''16 b''16 g''16 d''16 b'16 g'16\"},\n", " {'b': '4 8',\n", " 't': \"g''16 d''16 g''16 b''16 g''16 d''16\"},\n", " {'b': '4 8', 't': \"g''16 b''16 g''8 d''8\"},\n", " {'b': 'g,16 b,16 g8 b,8', 't': \"g''8 d''4 ^\\\\trill\"},\n", " {'b': 'b,4 r8', 't': \"g''8 b''16 d'''16 d''8\"},\n", " ],\n", " [\n", " {'b': \"c16 e16 g16 e16 c'16 c16\",\n", " 't': \"8 8 8\"},\n", " {'b': 'e4 e16 c16',\n", " 't': \"c''16 g'16 c''16 e''16 g''16 16\"},\n", " {'b': '4 8', 't': \"e''8 g''16 e''16 c''8\"},\n", " {'b': '4 r8', 't': \"e''16 c''16 e''16 g''16 c'''16 g''16\"},\n", " {'b': '4 8',\n", " 't': \"e''16 g''16 c'''16 g''16 e''16 c''16\"},\n", " {'b': 'c16 b,16 c16 d16 e16 fs16',\n", " 't': \"8 e''4 ^\\\\trill\"},\n", " {'b': '16 g16 16 g16 16 g16', 't': \"e''8 c''8 g'8\"},\n", " {'b': '4 8', 't': \"e''8 c''16 e''16 g''16 c'''16\"},\n", " {'b': '4 8', 't': \"e''16 c''16 e''8 g''8\"},\n", " {'b': '4 8', 't': \"e''16 c''16 g'8 e''8\"},\n", " {'b': '4 8', 't': \"e''8 ( g''8 c'''8 )\"},\n", " ],\n", " [\n", " {'b': 'g4 g,8', 't': \"8 8 r8\"},\n", " {'b': '4 g8', 't': \"d''16 b'16 g'8 r8\"},\n", " {'b': 'g8 g,8 r8', 't': \"8 16 16 g'8\"},\n", " {'b': 'g4 r8', 't': \"e''16 c''16 d''16 b'16 g'8\"},\n", " {'b': 'g8 g,8 r8', 't': \"g''16 e''16 d''16 b'16 g'8\"},\n", " {'b': 'g4 g,8', 't': \"b'16 d''16 g''16 d''16 b'8\"},\n", " {'b': 'g8 g,8 r8', 't': \"e''16 c''16 b'16 d''16 g''8\"},\n", " {'b': '4 r8', 't': \"d''16 b''16 g''16 d''16 b'8\"},\n", " {'b': '4 8', 't': \"d''16 b'16 g'8 g''8\"},\n", " {'b': 'g16 fs16 g16 d16 b,16 g,16', 't': \"d''8 g'4\"},\n", " ],\n", " [\n", " {'b': '16 g16 16 g16 16 g16', 't': \"e''8 c''8 g'8\"},\n", " {'b': '16 g16 16 g16 16 g16', 't': \"g'8 c''8 e''8\"},\n", " {'b': '16 g16 16 g16 16 g16',\n", " 't': \"g''8 e''8 c''8\"},\n", " {'b': '4 8', 't': \"c''16 b'16 c''16 e''16 g'16 c''16\"},\n", " {'b': '4 8',\n", " 't': \"c'''16 b''16 c'''16 g''16 e''16 c''16\"},\n", " {'b': '4 8',\n", " 't': \"e''16 d''16 e''16 g''16 c'''16 g''16\"},\n", " {'b': '4 r8', 't': \"g''8 f''16 e''16 d''16 c''16\"},\n", " {'b': '4 r8', 't': \"c''16 g'16 e''16 c''16 g''16 e''16\"},\n", " {'b': '16 g16 16 g16 16 g16', 't': \"c''8 g'8 e''8\"},\n", " {'b': '16 g16 16 g16 16 g16',\n", " 't': \"g''8 c''8 e''8\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " ],\n", " [\n", " {'b': '16 g16 16 g16 16 g16',\n", " 't': \"e''8 ( c''8 g'8 )\"},\n", " {'b': '4 8', 't': \"g'8 ( c''8 e''8 )\"},\n", " {'b': '16 g16 16 g16 16 g16',\n", " 't': \"g''8 e''8 c''8\"},\n", " {'b': '4 8', 't': \"c''16 b'16 c''16 e''16 g'16 c''16\"},\n", " {'b': '4 r8', 't': \"c'''16 b''16 c'''16 g''16 e''16 c''16\"},\n", " {'b': '4 8',\n", " 't': \"e''16 d''16 e''16 g''16 c'''16 g''16\"},\n", " {'b': '4 8', 't': \"g''8 f''16 e''16 d''16 c''16\"},\n", " {'b': '4 r8', 't': \"c''16 g'16 e''16 c''16 g''16 e''16\"},\n", " {'b': '16 g16 16 g16 16 g16', 't': \"c''8 g'8 e''8\"},\n", " {'b': '16 g16 16 g16 16 g16',\n", " 't': \"g''8 c''8 e''8\"},\n", " {'b': 'c8 c8 c8', 't': \"8 8 8\"},\n", " ],\n", " [\n", " {'b': \"4 8\", 't': \"d''16 f''16 d''16 f''16 b'16 d''16\"},\n", " {'b': 'f4 g8', 't': \"d''16 f''16 a''16 f''16 d''16 b'16\"},\n", " {'b': 'f4 g8', 't': \"d''16 f''16 a'16 d''16 b'16 d''16\"},\n", " {'b': 'f4 g8', 't': \"d''16 ( cs''16 ) d''16 f''16 g'16 b'16\"},\n", " {'b': 'f8 d8 g8', 't': \"f''8 d''8 g''8\"},\n", " {'b': 'f16 e16 d16 e16 f16 g16',\n", " 't': \"f''16 e''16 d''16 e''16 f''16 g''16\"},\n", " {'b': 'f16 e16 d8 g8', 't': \"f''16 e''16 d''8 g''8\"},\n", " {'b': 'f4 g8', 't': \"f''16 e''16 d''16 c''16 b'16 d''16\"},\n", " {'b': 'f4 g8', 't': \"f''16 d''16 a'8 b'8\"},\n", " {'b': 'f4 g8', 't': \"f''16 a''16 a'8 b'16 d''16\"},\n", " {'b': 'f4 g8', 't': \"a'8 f''16 d''16 a'16 b'16\"},\n", " ],\n", " [\n", " {'b': 'c8 g,8 c,8', 't': \"c''4 r8\"},\n", " {'b': 'c4 c,8', 't': \"c''8 c'8 r8\"},\n", " ],\n", " ]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can then use the p() function we saw earlier to \u201cbuild\u201d the treble and bass components of a measure like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_mozart_measure(measure_dict):\n", " r'''Makes Mozart measure.\n", " '''\n", "\n", " # parse the contents of a measure definition dictionary\n", " # wrap the expression to be parsed inside a LilyPond { } block\n", " treble = parse('{{ {} }}'.format(measure_dict['t']))\n", " bass = parse('{{ {} }}'.format(measure_dict['b']))\n", " return treble, bass" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let\u2019s try with a measure-definition of our own:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "my_measure_dict = {'b': r'c4 ^\\trill r8', 't': \"e''8 ( c''8 g'8 )\"}\n", "treble, bass = make_mozart_measure(my_measure_dict)\n", "f(treble), f(bass)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{\n", "\te''8 (\n", "\tc''8\n", "\tg'8 )\n", "}\n", "{\n", "\tc4 ^\\trill\n", "\tr8\n", "}\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "(None, None)" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now with one from the Mozart measure collection defined earlier. We\u2019ll grab the very last choice for the very last measure:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "my_measure_dict = make_mozart_measure_corpus()[-1][-1]\n", "treble, bass = make_mozart_measure(my_measure_dict)\n", "f(treble), f(bass)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{\n", "\tc''8\n", "\tc'8\n", "\tr8\n", "}\n", "{\n", "\tc4\n", "\tc,8\n", "}\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "(None, None)" ] } ], "prompt_number": 10 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After storing all of the musical fragments into a corpus, concatenating those elements into a musical structure is relatively trivial. We\u2019ll use the choice() function from Python\u2019s random module. random.choice() randomly selects one element from an input list." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import random\n", "my_list = [1, 'b', 3]\n", "my_result = [random.choice(my_list) for i in range(20)]\n", "my_result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "[3, 'b', 3, 3, 1, 1, 'b', 1, 'b', 'b', 'b', 3, 3, 'b', 3, 1, 1, 1, 'b', 1]" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our corpus is a list comprising sixteen sublists, one for each measure in the minuet. To build our musical structure, we can simply iterate through the corpus and call choice on each sublist, appending the chosen results to another list. The only catch is that the eighth measure of our minuet is actually the first-and-second-ending for the repeat of the first phrase. The sublist of the corpus for measure eight contains only the first and second ending definitions, and both of those measures should appear in the final piece, always in the same order. We\u2019ll have to intercept that sublist while we iterate through the corpus and apply some different logic.\n", "\n", "The easist way to intercept measure eight is to use the Python builtin enumerate, which allows you to iterate through a collection while also getting the index of each element in that collection:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def choose_mozart_measures():\n", " r'''Chooses Mozart measures.\n", " '''\n", "\n", " measure_corpus = make_mozart_measure_corpus()\n", " chosen_measures = []\n", " for i, choices in enumerate(measure_corpus):\n", " if i == 7: # get both alternative endings for mm. 8\n", " chosen_measures.extend(choices)\n", " else:\n", " choice = random.choice(choices)\n", " chosen_measures.append(choice)\n", " return chosen_measures" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result will be a seventeen-item-long list of measure definitions:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "choices = choose_mozart_measures()\n", "for i, measure in enumerate(choices):\n", " print (i, measure)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(0, {'b': '4 r8', 't': \"g'8 c''8 e''8\"})\n", "(1, {'b': 'c4 r8', 't': \"e''16 d''16 e''16 g''16 c'''16 g''16\"})\n", "(2, {'b': 'g4 r8', 't': \"b'16 a'16 b'16 c''16 d''16 b'16\"})\n", "(3, {'b': 'c4 r8', 't': \"e''16 c''16 b'16 c''16 g'8\"})\n", "(4, {'b': '8 8 8', 't': \"a'8 a'16 d''16 fs''8\"})\n", "(5, {'b': '4 r8', 't': \"g''8 b''16 g''16 d''16 b'16\"})\n", "(6, {'b': 'c8 d8 d,8', 't': \"a'16 e''16 16 16 16 16\"})\n", "(7, {'b': 'g,8 g16 f16 e16 d16', 't': \"4 r8\"})\n", "(8, {'b': 'g,8 b16 g16 fs16 e16', 't': \"4 r8\"})\n", "(9, {'b': '4 8', 't': \"d'''8 a''16 fs''16 d''16 a'16\"})\n", "(10, {'b': '4 r8', 't': \"g''8 b''16 g''16 d''8\"})\n", "(11, {'b': '4 8', 't': \"e''16 c''16 g'8 e''8\"})\n", "(12, {'b': '4 8', 't': \"d''16 b'16 g'8 g''8\"})\n", "(13, {'b': '16 g16 16 g16 16 g16', 't': \"g'8 c''8 e''8\"})\n", "(14, {'b': '4 8', 't': \"g'8 ( c''8 e''8 )\"})\n", "(15, {'b': 'f4 g8', 't': \"f''16 e''16 d''16 c''16 b'16 d''16\"})\n", "(16, {'b': 'c8 g,8 c,8', 't': \"c''4 r8\"})\n" ] } ], "prompt_number": 13 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have our raw materials, and a way to organize them, we can start building our score. The tricky part here is figuring out how to implement LilyPond\u2019s repeat structure in Abjad. LilyPond structures its repeats something like this:\n", "\n", " \\repeat volta n {\n", " music to be repeated\n", " }\n", "\n", " \\alternative {\n", " { ending 1 }\n", " { ending 2 }\n", " { ending n }\n", " }\n", "\n", "...music after the repeat...\n", "\n", "What you see above is really just two containers, each with a little text (\u201crepeat volta n\u201d and \u201calternative\u201d) prepended to their opening curly brace. To create that structure in Abjad, we\u2019ll need to use the LilyPondCommand class, which allows you to place LilyPond commands like \u201cbreak\u201d relative to any score component:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "container = Container(\"c'4 d'4 e'4 f'4\")\n", "command = indicatortools.LilyPondCommand('before-the-container', 'before')\n", "attach(command, container)\n", "command = indicatortools.LilyPondCommand('after-the-container', 'after')\n", "attach(command, container)\n", "command = indicatortools.LilyPondCommand('opening-of-the-container', 'opening')\n", "attach(command, container)\n", "command = indicatortools.LilyPondCommand('closing-of-the-container', 'closing')\n", "attach(command, container)\n", "command = indicatortools.LilyPondCommand('to-the-right-of-a-note', 'right')\n", "attach(command, container[2])\n", "f(container)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\\before-the-container\n", "{\n", "\t\\opening-of-the-container\n", "\tc'4\n", "\td'4\n", "\te'4 \\to-the-right-of-a-note\n", "\tf'4\n", "\t\\closing-of-the-container\n", "}\n", "\\after-the-container\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice the second argument to each LilyPondCommand above, like before and closing. These are format slot indications, which control where the command is placed in the LilyPond code relative to the score element it is attached to. To mimic LilyPond\u2019s repeat syntax, we\u2019ll have to create two LilyPondCommand instances, both using the \u201cbefore\u201d format slot, insuring that their command is placed before their container\u2019s opening curly brace.\n", "\n", "Now let\u2019s take a look at the code that puts our score together:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_mozart_score():\n", " r'''Makes Mozart score.\n", " '''\n", "\n", " score_template = templatetools.TwoStaffPianoScoreTemplate()\n", " score = score_template()\n", "\n", " # select the measures to use\n", " choices = choose_mozart_measures()\n", "\n", " # create and populate the volta containers\n", " treble_volta = Container()\n", " bass_volta = Container()\n", " for choice in choices[:7]:\n", " treble, bass = make_mozart_measure(choice)\n", " treble_volta.append(treble)\n", " bass_volta.append(bass)\n", "\n", " # attach indicators to the volta containers\n", " command = indicatortools.LilyPondCommand(\n", " 'repeat volta 2', 'before'\n", " )\n", " attach(command, treble_volta)\n", " command = indicatortools.LilyPondCommand(\n", " 'repeat volta 2', 'before'\n", " )\n", " attach(command, bass_volta)\n", "\n", " # append the volta containers to our staves\n", " score['RH Voice'].append(treble_volta)\n", " score['LH Voice'].append(bass_volta)\n", "\n", " # create and populate the alternative ending containers\n", " treble_alternative = Container()\n", " bass_alternative = Container()\n", " for choice in choices[7:9]:\n", " treble, bass = make_mozart_measure(choice)\n", " treble_alternative.append(treble)\n", " bass_alternative.append(bass)\n", "\n", " # attach indicators to the alternative containers\n", " command = indicatortools.LilyPondCommand(\n", " 'alternative', 'before'\n", " )\n", " attach(command, treble_alternative)\n", " command = indicatortools.LilyPondCommand(\n", " 'alternative', 'before'\n", " )\n", " attach(command, bass_alternative)\n", "\n", " # append the alternative containers to our staves\n", " score['RH Voice'].append(treble_alternative)\n", " score['LH Voice'].append(bass_alternative)\n", "\n", " # create the remaining measures\n", " for choice in choices[9:]:\n", " treble, bass = make_mozart_measure(choice)\n", " score['RH Voice'].append(treble)\n", " score['LH Voice'].append(bass)\n", "\n", " # attach indicators\n", " time_signature = indicatortools.TimeSignature((3, 8))\n", " attach(time_signature, score['RH Staff'])\n", " bar_line = indicatortools.BarLine('|.')\n", " attach(bar_line, score['RH Voice'][-1])\n", " bar_line = indicatortools.BarLine('|.')\n", " attach(bar_line, score['LH Voice'][-1])\n", "\n", " # remove the old, default piano instrument attached to the piano staff\n", " # and attach a custom instrument mark\n", " detach(instrumenttools.Instrument, score['Piano Staff'])\n", "\n", " klavier = instrumenttools.Piano(\n", " instrument_name='Katzenklavier',\n", " short_instrument_name='kk.',\n", " )\n", " attach(klavier, score['Piano Staff'])\n", "\n", " return score" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "score = make_mozart_score()\n", "show(score)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n" } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The document" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see above, we\u2019ve now got our randomized minuet. However, we can still go a bit further. LilyPond provides a wide variety of settings for controlling the overall look of a musical document, often through its header, layout and paper blocks. Abjad, in turn, gives us object-oriented access to these settings through the its lilypondfiletools module.\n", "\n", "We\u2019ll use abjad.tools.lilypondfiletools.make_basic_lilypond_file() to wrap our Score inside a LilyPondFile instance. From there we can access the other \u201cblocks\u201d of our document to add a title, a composer\u2019s name, change the global staff size, paper size, staff spacing and so forth." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_mozart_lilypond_file():\n", " r'''Makes Mozart LilyPond file.\n", " '''\n", "\n", " score = make_mozart_score()\n", " lily = lilypondfiletools.make_basic_lilypond_file(score)\n", " title = markuptools.Markup(r'\\bold \\sans \"Ein Musikalisches Wuerfelspiel\"')\n", " composer = schemetools.Scheme(\"W. A. Mozart (maybe?)\")\n", " lily.global_staff_size = 12\n", " lily.header_block.title = title\n", " lily.header_block.composer = composer\n", " lily.layout_block.ragged_right = True\n", " lily.paper_block.markup_system_spacing__basic_distance = 8\n", " lily.paper_block.paper_width = 180\n", " return lily" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "lilypond_file = make_mozart_lilypond_file()\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "print(lilypond_file)\n", "print(lilypond_file.header_block)\n", "print(lilypond_file.layout_block)\n", "print(f(lilypond_file.layout_block))\n", "print(lilypond_file.paper_block)\n", "print(f(lilypond_file.paper_block))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "\n", "\\layout {\n", "\tragged-right = ##t\n", "}\n", "None\n", "\n", "\\paper {\n", "\tmarkup-system-spacing #'basic-distance = #8\n", "\tpaper-width = #180\n", "}\n", "None\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now, the final result" ] }, { "cell_type": "code", "collapsed": false, "input": [ "show(lilypond_file)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nuqCkq0N6sJL+pMPunu4Yk5T8uqT1pfKLPznP50Ylk641XIathrpO9XJcSZKE/vCq/vn5Gp0d0oOV\n/NdJh9093TFegZKaPPvuEdHeqOQvQbOsjN7TaFgu8NO0mtnMHDk7pAcreV3kN6c7xqtQct5DZzO4\neSypBhX7JPkx9JfW4oSq3VRm6uW45o42nKW8VslpXLvC+K+aG55HPs9VSjYahkvfH6yR+TRnVbip\nzHguGV6Cbf2ZP+DbPPe6ZBguHUu1PpUrrd9ZQxDNlVdsLzNTSR8NoeaOP9hYzFTyHRrCg7nX7G8A\ndwIlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMl\nQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgo\nCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJA\nSRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAG\nSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIw\nUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKE\ngZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIg\nDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQE\nYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAk\nCAMlQRgoCcJASRAGSoIwUBKEgZIgDJQEYaAkCAMlQRgoCcJASRAGSoIwvnEl95tU/Y23WbcpnRay\nd1hqvt9vtsfykH3cJpOmR/P4bLsv/0nrlHO191i/aTeezXlsJjCgjv9b5BtXski9U3EovWyY+FH2\nDsti812c1Yd43YZDaCes0zxkxaaMaB9myshitzc3nsezEhgWLL0cxevkm1dyu1OfXprnRZarz3if\n55lqsnZli6b+yfN8d9Lt1mGnXu7VC3VgdsoydZixTyu5V4KUu4paSR2TV29SGzK/yHanJtCuVCbd\nNOroAzbFYW9tLDORHTOdqfrf5q2Oukygyk2e6dRVzHb8dYr7OpPfBt+8koeoVDIuduo/9Xnmnmo1\n1Vv1cW5OcR7u0m1xSIsoy6N9mG+K6JiVByojun3q4PCkJMijYq/e1Ep6pTflpnibxvssPW2qQCrq\nMFWHnI6nMCvzoUPEfnSyNmpUanGW75p/m7dl1DqBMv7cVw7q6As7/jJFle86k98G37yShb/LlUyx\n/swPoRpUesUmO6kWs9hu0zAL9fa9+kTLqjgddA8bHXflO2OfGruVfXecpzpWLZiOSf9Xbiod3ejW\nsgyU7puGsBnF6p49PW63zca04RieNuleqVr/27ytY/eq+NWgwC+jL6z4y026h68y+W3w7SuZ6may\nVvJ0iFWJ1ZmB7ri3h+J0KrfnqRrfqUN0k6g+9f2mGsQZ+3Svq/7T/beOVRu4qaUpN5VKqgjjvAyU\n7mol1QhhV9Qh0jKQubFkFx2jtPu3edsqWcbvF6ewjL6w4q9TbDL5bfCNK7n393maxXEWp9swS9Ns\nl3l5HpefZx7v0i/hcR8ed3G8OWZhXuy2O+2DapPUYVm3T7eSh61uWsvGaB9u0m2sD/HyctM+1Kfg\nx81hWwU6xiqY2pJGcaQHDUWq2ud8q0aq6k25scui+laUZ+D1v+U/Wuwydp2ATjLcbfY6+sKI/x9x\nnaLKd5XJb4NvXMmOk/G3OFr/FOqcRnV93Rbz02336aD5aXCqbG06OV4ZuK05tXk7mW+t+ONy46kY\nxH/qFeAb4Fej5Dn2+sxkyr54NzjMsemulPHnm/zqArw6/j+UWIjrcL8IRAAAACV0RVh0ZGF0ZTpj\ncmVhdGUAMjAxNC0xMi0wMlQwOTo0NDoyNyswMDowMAmONPgAAAAldEVYdGRhdGU6bW9kaWZ5ADIw\nMTQtMTItMDJUMDk6NDQ6MjcrMDA6MDB404xEAAAAHXRFWHRTb2Z0d2FyZQBHUEwgR2hvc3RzY3Jp\ncHQgOS4xNJ2zXFgAAAAASUVORK5CYII=\n" } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }