{
"info": {
"author": "Ryan Heuser",
"author_email": "heuser@stanford.edu",
"bugtrack_url": null,
"classifiers": [],
"description": "# Prosodic\n\nProsodic is a metrical-phonological parser written in Python. It scans poems for their meter according to specified linguistic rules. The first line from Milton's *Paradise Lost*,\n\n```\nOf man's first disobedience, and the fruit \n```\nbecomes\n\n```\nof|MAN'S|first*|DIS|o|BE|dience|AND*|the|FRUIT\n```\n\nThe metrical scansion is shown as capitalization. Shown in asterisks (*) are the syllables at odds with the scansion, departing from its ideal template, or violating its linguistic rules.\n\nProsodic converts each word into its stressed, syllabified, phonetic transcription, either from a pronunciation dictionary or from text-to-speech algorithms. To scan the text metrically, it finds the best available metrical parse for each line of text in the style of Optimality Theory: nearly all possibile parses are attempted; the best parses are those that least depart from a set of customizable linguistic rules or constraints. By default, the constraints are those proposed by Kristin Hanson and Paul Kiparsky in their paper \"A Parametric Theory of Poetic Meter\" (Language, 1996).\n\nCurrently, Prosodic can parse English and Finnish text, but adding additional languages is easy with a pronunciation dictionary or a custom python function. Prosodic was built by [Ryan Heuser](https://github.com/quadrismegistus), [Josh Falk](https://github.com/jsfalk), and [Arto Anttila](http://web.stanford.edu/~anttila/), beginning in the summer of 2010. Josh also maintains [another repository](https://github.com/jsfalk/prosodic1b), in which he has rewritten the part of this project that does phonetic transcription for English and Finnish. [Sam Bowman](https://github.com/sleepinyourhat) has contributed to the codebase as well, adding several new metrical constraints.\n\n\n\n## Installation\n\n### Install Prosodic\n\nInstall from pip (preferred):\n\n```\npip install prosodic\n```\n\nOr install latest sources (advanced):\n\n```\ngit clone git@github.com:quadrismegistus/prosodic.git\ncd prosodic\npython setup.py develop\n```\n\nBoth of these methods will create a folder `prosodic_data` in your home directory, where you can configure Prosodic, store texts, and save results. See below (\"Configuring Prosodic\") for more information.\n\n### Install text-to-speech software\n\nProsodic uses TTS software in order to sound out unfamiliar words: otherwise, words not found in the CMU Pronunciation Dictionary will lack a phonology and so will deprive the line they appear in of the possibility of metrical parsing.\n\n[eSpeak](http://espeak.sourceforge.net/) is an open-source TTS engine for Windows and Unix systems (including Mac OS X). To install eSpeak, [download it here for your operating system](http://espeak.sourceforge.net/download.html). Or, if you're running Mac OS X, install eSpeak with the [HomeBrew package manager](http://brew.sh/):\n\n```\nbrew install espeak\n```\n\n*Note:* Espeak produces *un*-syllabified IPA transcriptions of any given (real or unreal) word. To syllabify these, the [syllabifier](https://p2tk.svn.sourceforge.net/svnroot/p2tk/python/syllabify/syllabifier.py) from the [Penn Phonetics Toolkit (P2TK)](https://www.ling.upenn.edu/phonetics/old_website_2015/p2tk/) is used. An extra plus from this pipeline is consistency: this same syllabifier is responsible for the syllable boundaries in the CMU pronunciation dictionary, which Prosodic draws from (if possible) before resorting to a TTS engine.\n\n\n## Quickstart\n\n### Running Prosodic interactively\n\n#### Run from command line: `prosodic`\n\n```\n################################################\n## welcome to prosodic! v1.2 ##\n################################################\n\n\n\t[please type a line of text, or enter one of the following commands:]\n\t\t/text\tload a text\n\t\t/corpus\tload folder of texts\n\t\t/paste\tenter multi-line text\n\n\t\t/eval\tevaluate this meter against a hand-tagged sample\n\t\t/weight\trun maximum entropy on a hand-tagged sample\n\n\t\t/mute\thide output from screen\n\t\t/exit\texit\n```\n\n#### Paste in a text: `/paste`\n\n```\n>> enter or paste your content here. press Ctrl-D when finished.\n\nTurning and turning in the widening gyre \nThe falcon cannot hear the falconer;\nThings fall apart; the centre cannot hold;\nMere anarchy is loosed upon the world,\nThe blood-dimmed tide is loosed, and everywhere \nThe ceremony of innocence is drowned;\nThe best lack all conviction, while the worst \nAre full of passionate intensity.\n```\n\n#### Parse metrically: `/parse` (according to the meter specified in `/meter`)\n\n#### Show results: `/scan` (per line, showing only the best parse)\n```\ntext \tparse \tmeter\tnum_parses\tnum_viols\tscore_viols\t[*footmin-f-resolution]\t[*footmin-w-resolution]\t[*strength.w=>-p]\t[*stress.s=>-u]\t[*stress.w=>-p]\nTurning and turning in the widening gyre \tTURN|ing.and*|TURN|ing|IN|the|WIDEN|ing|GY|re \tswwswswswsw\t3\t1\t5\t0\t0\t5\t0\t0\nThe falcon cannot hear the falconer; \tthe|FAL|con|CAN|not|HEAR|the|FAL|coner \twswswswsw\t1\t0\t0\t0\t0\t0\t0\t0\nThings fall apart; the centre cannot hold; \tthings*|FALL|ap|ART|the|CEN|tre|CAN|not|HOLD \twswswswsws\t2\t1\t1\t0\t0\t0\t0\t1\nMere anarchy is loosed upon the world, \tmere*|AN|ar|CHY*|is|LOOSED|up|ON|the|WORLD \twswswswsws\t4\t2\t2\t0\t0\t0\t1\t1\nThe blood- dimmed tide is loosed, and everywhere \tthe|BLOOD|dimmed*|TIDE|is|LOOSED|and|EV|ery|WHERE \twswswswsws\t1\t1\t1\t0\t0\t0\t0\t1\nThe ceremony of innocence is drowned; \tthe|CER|e|MO|ny.of*|IN|no|CENCE*|is|DROWNED \twswswwswsws\t6\t2\t6\t0\t0\t5\t1\t0\nThe best lack all conviction, while the worst \tthe|BEST|lack*|ALL|con|VIC|tion|WHILE|the|WORST \twswswswsws\t3\t1\t1\t0\t0\t0\t0\t1\nAre full of passionate intensity. \tare|FULL|of|PAS|sion|ATE*|in|TEN|si|TY* \twswswswsws\t2\t2\t2\t0\t0\t0\t2\t0\n```\n#### Save statistics: `/stats all`\n\n\n### Running Prosodic as a python module\n\n```python\n# import\nimport prosodic as p\n\n# create a Text object\ntext = p.Text(string_or_filename)`\n\n# parse metrically\ntext.parse()\n\n# save stats\ntext.save_stats()\n\n# iterate over features\nfor line in text.lines():\n best_parse = line.bestParse() # most plausible parse\n all_parses = line.allParses() # all plausible parses\n\n first_word = line.words()[0]\n last_syllable = line.syllables()[-1]\n last_syllable_rime = line.rimes()[-1]\n last_syllable_rime_phonemes = last_syllable_rime.phonemes()\n```\n\n\n## Configuration\n\nAll configuration of Prosodic takes place in the `~/prosodic_data` folder located in your home directory, created upon installation (either through `pip install prosodic` or `python setup.py install` from sources).\n\n### Main settings\n\n* In order to configure Prosodic, copy or rename 'config_default.py' to 'config.py', and edit that file according to its instructions.\n* [Note: 'config_default.py' will be overwritten if you update Prosodic, but 'config.py' will not be.]\n\nThis file configures the following options:\n\n* Technical options about how Prosodic works:\n\t* The paths used for corpora, results, and tagged samples\n\t* The language used (currently, English or Finnish)\n\t* Which Text-to-Speech engine, if any, is used for parsing unknown English words\n\t* Whether to print output to screen\n\n* Options about words and tokenization:\n\t* The regular expression used for word tokenization\n\t* For words with multiple stress profiles (e.g. \"INto\" and \"inTO\"), whether to allow the metrical parser to choose the stress profile based on whichever works best metrically in the line\n\t* Whether to allow elided pronunciations (e.g. \"Plu-ton-ian\" for \"Plu-ton-i-an\") as metrical possibilities also\n\t* How to display the phonetic output for words (IPA, orthography, CMU notation)\n\n\n### Meters\n* To edit or create your own meter, copy or rename 'meters/meter_default.py' to 'meters/your_meter_name.py', and edit that file according to its instructions.\n* Then consider changing the default 'meter' setting in your config.py to 'your_meter_name'.\n* You can also select 'your_meter_name' from within Prosodic.\n* [Note: 'meters/meter_default.py' will be overwritten if you update Prosodic, but 'meters/your_meter_name.py' will not be.]\n\nThese files configure the following options:\n\n* The minimum and maximum size of metrical positions: from a syllable (or even a half-syllable, or mora), to two or more syllables.\n* The constraints used in metrical parsing, some of which are:\n\t* Constraints proposed by Kiparsky and Hanson in \"A Parametric Theory of Poetic Meter\" (*Language*, 1996):\n\t\t* *Strength*: A weak/strong syllable should not be in a strong/weak metrical position.\n\t\t* *Stress*: An unstressed/stressed syllable should not bein a strong/weak metrical position.\n\t\t* *Weight*: A light/heavy syllable should not be in a strong/weak metrical position.\n\t\t* *Minimal foot*: a disyllabic metrical position should not contain more than a minimal foot (only if the syllables are weighted light-heavy or light-light is a disyllabic position allowed).\n\t* Other constraints regulating disyllabic metrical positions\n\t* Constraints allowing the initial parts of lines to be extrametrical\n\t* Constraints regulating word elisions (e.g. \"Plu-ton-i-an\" becoming \"Plu-ton-ian\")\n* What to pass to the metrical parser: a line in the text file, a line between punctuation markers, etc.\n\n\n### Tagged samples\n* To run Prosodic against your own tagged sample, create a file like 'tagged_samples/tagged-sample-litlab-2016.txt', which has at least a column for the line (e.g. \"From fairest creatures we desire increase\") and a column for the parse (e.g. \"wswswswsws\").\n* [Note: 'tagged_samples/tagged-sample-litlab-2016.txt' will be overwritten if you update Prosodic, but your own files will not be.]\n\n### Results\n* By default, results will be saved to the 'results' folder here.\n* You can change this option in the 'folder_results' option in 'config.py'.\n\n### Corpora and texts\n* By default, Prosodic will look for texts within the 'corpora' folder here.\n* You can change this option in the 'folder_corpora' option in config.py.\n\n### For more information\n\nPlease see the documentation within `~/prosodic_data/README.txt`, `~/prosodic_data/config.py` and ~/`prosodic_data/meter/meter_default.py` for more information.\n\n\n## Usage\n\nThere are two main ways of using Prosodic: in interactive mode, and, for more Python-advanced users, as a Python module.\n\n### Interactive mode\n\nYou can enter the interactive mode of prosodic by running `python prosodic.py`. This will bring you to an interface like this:\n\n\t################################################\n\t## welcome to prosodic! v1.1 ##\n\t################################################\n\n\n\t\t[please type a line of text, or enter one of the following commands:]\n\t\t\t/text\tload a text\n\t\t\t/corpus\tload folder of texts\n\t\t\t/paste\tenter multi-line text\n\n\t\t\t/eval\tevaluate this meter against a hand-tagged sample\n\t\t\t/mute\thide output from screen\n\t\t\t/save\tsave previous output to file\n\t\t\t/exit\texit\n\n\t>> [0.0s] prosodic:en$\n\n#### Loading text\n\nThe first thing to do when using Prosodic is to give it some text to work with. There's a few ways of doing this. The simplest way is to simply a type in a line, one at a time. You can also type `/paste`, and then enter or copy/paste multiple lines in at a time. You can also type `/text` to load a text, or `/corpus` to load a folder of text files. If you do, you'll be given instructions on how either to specify a relative path from within Prosodic's corpus folder, or an absolute path to another file or folder on your disk. You can also define the text you want to work with as an argument for the command you use to boot Prosodic with: `python prosodic.py /path/to/my/file.txt`.\n\n#### Checking phonetic/phonological annotations\n\nEven before metrically parsing the text you've loaded (see below), you can run a few commands to test out how Prosodic has interpreted the text in terms of its phonetics and phonology. The command `/show` will show the phonetic transcription and stress- and weight-profiles for each word:\n\n 000001 of P:\u028cv S:U W:L\n 000002 mans P:'m\u00e6nz S:P W:H\n 000003 first P:'f\u025b\u02d0st S:P W:H\n 000004 disobedience P:`d\u026a.s\u0259.'bi\u02d0.di\u02d0.\u0259ns S:SUPUU W:LLHHH\n 000005 and P:\u00e6nd S:U W:L\n 000006 the P:\u00f0\u0259 S:U W:L\n 000007 fruit P:'fru\u02d0t S:P W:H\n\nThe command `/tree` shows a hierarchical description of each word's phonology, as it is embedded in the hierarchical organization of the text. For instance, the beginning of the output from `/tree` for this line would be:\n\n\t-----| (S1) \n\t |\n\t |-----| (S1.L1) [of mans first disobedience and the fruit]\n\t |\n\t |-----| (S1.L1.W1) \tof\t<\u028cv>\n\t | [+functionword]\n\t | [numSyll=1]\n\t |\n\t |-----| (S1.L1.W1.S1) [\u028cv]\n\t | [prom.stress=0.0]\n\t |\n\t |-----| (S1.L1.W1.S1.SB1) [\u028cv]\n\t | [shape=VC]\n\t | [-prom.vheight]\n\t | [-prom.weight]\n\t |\n\t |-----| (S1.L1.W1.S1.SB1.O1) \n\t |\n\t |-----| (S1.L1.W1.S1.SB1.R2) \n\t |\n\t |-----| (S1.L1.W1.S1.SB1.R2.N1) \n\t | [-prom.vheight]\n\t |\n\t |-----| (S1.L1.W1.S1.SB1.R2.N1.P1) [\u028c]\n\t |\n\t |-----| (S1.L1.W1.S1.SB1.R2.C2) \n\t |\n\t |-----| (S1.L1.W1.S1.SB1.R2.C2.P1) [v]\n\t |\n\t |-----| (S1.L1.W2) \tmans\t<'m\u00e6nz>\n\t | [numSyll=1]\n\t |\n\t |-----| (S1.L1.W2.S1) ['m\u00e6nz]\n\t | [prom.stress=1.0]\n\t | [prom.kalevala=1.0]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1) [m\u00e6nz]\n\t | [shape=CVCC]\n\t | [-prom.vheight]\n\t | [+prom.weight]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1.O1) \n\t |\n\t |-----| (S1.L1.W2.S1.SB1.O1.P1) [m]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2) \n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2.N1) \n\t | [-prom.vheight]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2.N1.P1) [\u00e6]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2.C2) \n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2.C2.P1) [n]\n\t |\n\t |-----| (S1.L1.W2.S1.SB1.R2.C2.P2) [z]\n\nLastly, the `/query` command allows you to query these phonological annotations. Once `/query` is entered, the query language parser starts up (type `/` to exit, or hit `Ctrl+D`). Which are the stressed syllables in the text? `(Syllable: [+prom.stress])`. Which are all the voiced phonemes? `(Phoneme: [+voice])`. Which are all the syllables with voiced onsets and codas? `(Syllable: (Onset: [+voice]) (Coda: [+voice]))`. Etc.\n\n\n#### Metrically parsing text\n\nThe command `/parse` will metrically parse whatever text is currently loaded into Prosodic. Once the text is parsed, further commands become possible, all of which either view or save the data gleaned from the parser.\n\nThe command `/scan` prints the best parse for each line, along with statistics on which constraints it violated. [This output, like any other output, can be saved to disk (and then opened with Excel) by using the `/save` command.] For instance, here are the first four lines of *Paradise Lost*, using the `/scan` command:\n\n\ttext \t\tparse \t\t#pars\t#viol\tmeter\t\t\t[*footmin-none]\t[*strength.s=>-u]\t[*strength.w=>-p]\t[*stress.s=>-u]\t[*stress.w=>-p]\n\tof mans first disobedience and the fruit\t\tof|MANS|first|DI|so|BE|di|ENCE|and.the|FRUIT\t3\t\t5\t\twswswswswws\t\t0\t\t\t\t0\t\t\t\t\t2\t\t\t\t\t2\t\t\t\t1\n\tof that forbidden tree whose mortal tast\t\tof|THAT|for|BID|den|TREE|whose|MOR|tal|TAST\t\t1\t\t0\t\twswswswsws\t\t0\t\t\t\t0\t\t\t\t\t0\t\t\t\t\t0\t\t\t\t0\n\tbrought death into the world and all our woe\tbrought|DEATH|in|TO|the|WORLD|and|ALL|our|WOE\t1\t\t2\t\twswswswsws\t\t0\t\t\t\t0\t\t\t\t\t0\t\t\t\t\t2\t\t\t\t0\n\twith loss of eden till one greater man \t\twith|LOSS|of|ED|en|TILL|one|GRE|ater|MAN\t\t1\t\t2\t\twswswswsws\t\t0\t\t\t\t0\t\t\t\t\t2\t\t\t\t\t0\t\t\t\t0\n\n\n\nThe command `/report` is a more verbose version of `/scan`, printing each possible (i.e. non-harmonically-bounded) parse for each line. For instance, for each line, it produces an output like:\n\n\t==============================\n\t[line #1 of 4]: of mans first disobedience and the fruit\n\n\t\t--------------------\n\t\t[parse #3 of 3]: 8.0 errors\n\t\t1\tw\tof \t\n\t\t2\ts\tMANS \t\n\t\t3\tw\tfirst \t[*stress.w=>-p]\n\t\t4\ts\tDI \t\n\t\t5\tw\tso \t\n\t\t6\ts\tBE \t\n\t\t7\tw\tdi \t\n\t\t8\ts\tENCE \t[*stress.s=>-u]\n\t\t9\tw\tand \t\n\t\t10\ts\tTHE \t[*stress.s=>-u]\n\t\t11\tw\tfruit \t[*stress.w=>-p]\n\n\t\t[*stress.s=>-u]: 4.0 [*stress.w=>-p]: 4.0 \n\t\t--------------------\n\n\t\t--------------------\n\t\t[parse #2 of 3]: 5.0 errors\n\t\t1\tw\tof \t\n\t\t2\ts\tMANS \t\n\t\t3\tw\tfirst \t[*stress.w=>-p]\n\t\t4\ts\tDI \t\n\t\t5\tw\tso \t\n\t\t6\ts\tBE \t\n\t\t7\tw\tdi ence \t[*footmin-none]\n\t\t8\ts\tAND \t[*stress.s=>-u]\n\t\t9\tw\tthe \t\n\t\t10\ts\tFRUIT \t\n\n\t\t[*footmin-none]: 1.0 [*stress.s=>-u]: 2.0 [*stress.w=>-p]: 2.0 \n\t\t--------------------\n\n\t\t--------------------\n\t\t[parse #1 of 3]: 5.0 errors\n\t\t1\tw\tof \t\n\t\t2\ts\tMANS \t\n\t\t3\tw\tfirst \t[*stress.w=>-p]\n\t\t4\ts\tDI \t\n\t\t5\tw\tso \t\n\t\t6\ts\tBE \t\n\t\t7\tw\tdi \t\n\t\t8\ts\tENCE \t[*stress.s=>-u]\n\t\t9\tw\tand the \t[*footmin-none]\n\t\t10\ts\tFRUIT \t\n\n\t\t[*footmin-none]: 1.0 [*stress.s=>-u]: 2.0 [*stress.w=>-p]: 2.0 \n\t\t--------------------\n\n\t==============================\n\nFinally, you can also save a variety of statistics from the metrical parser in tab-separated form by running the `/stats` command.\n\n#### Evaluating the meter against a hand-parsed sample\n\nHow well does Prosodic do when its metrical parses are compared with those that a human reader has annotated? The statistics above, in \"Accuracy of metrical parser,\" were generated from the evaluation command: `/eval`. From there, you can select a spreadsheet (either a tab-separated text file or an excel document) saved in the `tagged_samples/` folder to use as the \"ground truth\", human-annotated parse. The `/eval` command will ask which columns in the file correspond to the line (\"Of man's first disobedience and the fruit\"), the parse (\"wswswswwsws\"), and (optionally) the meter of the line (\"iambic\"). Prosodic will then parse the lines under the \"line\" column (using, as always, the current configuration of metrical constraints in `config.py`), and save statistics to the same folder in tab-separated form.\n\n## Extending Prosodic\n\n### Adding languages\n\nThere are two possible methods by which Prosodic can understand a language:\n\n* using a dictionary in the format:\n\t* {word-token}[tab]{stressed, syllabified, IPA format}\n\t* eg:\n\t\t* befuddle [tab] b\u026a.'f\u0259.d\u0259l\n\t\t* befuddled\t[tab] b\u026a.'f\u0259.d\u0259ld\n\t\t* befuddles\t[tab] b\u026a.'f\u0259.d\u0259lz\n\n* using a python function which takes in a word-token as an input, and a stressed, syllabified, IPA format as its output.\n\nCurrently, Finnish is implemented by the latter method; English, by a combination of two, using the dictionary for recognized words, and a python function for unrecognized words.\n\nTo add entries to a language's dictionary, simply add an entry in the above format to the dictionary `[language_name].tsv` under the folder `[prosodic_dir]/dicts/[language_twoletter_code]`.\n\nTo add a new language entirely, you can create a new dictionary in the above format and place it under `[prosodic_dir]/dicts/[language_twoletter_code]/[language_name].tsv`. Or, you can create a python file under `[prosodic_dir]/dicts/[language_twoletter_code]/[language_name].py`, which has a function `get(token,config={})`. This function must accept a word-token as its only argument, and Prosodic's configuration settings as an optional keyword argument, and it must return a list of tuples in the form:\n\n\t[\n\t\t(\n\t\t\t,\n\t\t\t,\n\t\t\t{a dictionary of optional keyword arguments to be stored on the word object},\n\t\t),\n\t\t...\n\t]\n\nFor example, `get(\"into\", config={'add_elided_pronunciations':1})` might return:\n\n\t[\n\t\t(u\"\u026an.'tu\u02d0\", ['in','to'], {'is_elision': False}),\n\t\tu\"'\u026an.tu\u02d0\", ['in','to'], {'is_elision': False}),\n\t\tu\"\u026an.t\u028c\", ['in','to'], {'is_elision': False})\n\t]\n\nSee the `get()` function in `dicts/en/english.py` or `dicts/fi/finnish.py` for examples.\n\n### Contributing to the code base\n\nPlease feel free to pull and push back to the codebase here! And feel free to use this code in your projects: it is licensed by [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html).",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/quadrismegistus/prosodic",
"keywords": "",
"license": "MPL-2.0",
"maintainer": "",
"maintainer_email": "",
"name": "prosodic",
"package_url": "https://pypi.org/project/prosodic/",
"platform": "",
"project_url": "https://pypi.org/project/prosodic/",
"project_urls": {
"Homepage": "https://github.com/quadrismegistus/prosodic"
},
"release_url": "https://pypi.org/project/prosodic/1.2.7/",
"requires_dist": null,
"requires_python": "",
"summary": "PROSODIC: a metrical-phonological parser, written in Python. For English and Finnish, with flexible language support.",
"version": "1.2.7"
},
"last_serial": 4501968,
"releases": {
"1.1": [
{
"comment_text": "",
"digests": {
"md5": "a5dbfb01954842f53e5ba9a8b0dbea54",
"sha256": "8ddcadfbd34c060c8c4608078989df35fb8b98f64e5c0447db4974cc3614728c"
},
"downloads": -1,
"filename": "prosodic-1.1.tar.gz",
"has_sig": false,
"md5_digest": "a5dbfb01954842f53e5ba9a8b0dbea54",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8129,
"upload_time": "2017-04-23T03:05:37",
"url": "https://files.pythonhosted.org/packages/bf/43/b8d2edf0edf82456c266a72958e087ac19d745aa3ad2e034880afea020a4/prosodic-1.1.tar.gz"
}
],
"1.1.10": [
{
"comment_text": "",
"digests": {
"md5": "3ab6801c6b62c7ca4d736987e7c94321",
"sha256": "cbcf6fff9a204a684c33577674dcc03f0f1f590121c2508a1553851c21f2e5b2"
},
"downloads": -1,
"filename": "prosodic-1.1.10.tar.gz",
"has_sig": false,
"md5_digest": "3ab6801c6b62c7ca4d736987e7c94321",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 3884279,
"upload_time": "2017-04-23T04:01:07",
"url": "https://files.pythonhosted.org/packages/e1/cc/ddad16dc58155eaf59ac955d784158987c57848c2e28313fa0addf060bb5/prosodic-1.1.10.tar.gz"
}
],
"1.1.11": [
{
"comment_text": "",
"digests": {
"md5": "aeee34b0784ae67ff271d2e9eb008701",
"sha256": "59ed239b9a07654c9dce7e252714a34779e4e92ce96d6ba0c8e2a197488a1202"
},
"downloads": -1,
"filename": "prosodic-1.1.11.tar.gz",
"has_sig": false,
"md5_digest": "aeee34b0784ae67ff271d2e9eb008701",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 168722,
"upload_time": "2018-11-18T19:23:19",
"url": "https://files.pythonhosted.org/packages/e0/71/c8202bf27eac64da88c1424b3543594963cc90fa78a94b27508347a12b9e/prosodic-1.1.11.tar.gz"
}
],
"1.1.12": [
{
"comment_text": "",
"digests": {
"md5": "bcb1a60dd49ce8d246c6a1eaeb4bbe75",
"sha256": "1e5f3375498d07b9c985ee8a8dbbef21e42a5f5397851a26ae84d24935349071"
},
"downloads": -1,
"filename": "prosodic-1.1.12.tar.gz",
"has_sig": false,
"md5_digest": "bcb1a60dd49ce8d246c6a1eaeb4bbe75",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1025328,
"upload_time": "2018-11-18T19:48:42",
"url": "https://files.pythonhosted.org/packages/08/d3/c8ff49720e567e7b77a83c807ba07dc3b36862789dc95767f0d410021048/prosodic-1.1.12.tar.gz"
}
],
"1.1.17": [
{
"comment_text": "",
"digests": {
"md5": "cfdc0cc60eac674da04319a1ce54697c",
"sha256": "760ae4cf3b4362a9b4bb42ae65dc60535162c1bd96a252514bf5928ffa5d49d9"
},
"downloads": -1,
"filename": "prosodic-1.1.17.tar.gz",
"has_sig": false,
"md5_digest": "cfdc0cc60eac674da04319a1ce54697c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1359170,
"upload_time": "2018-11-18T19:59:59",
"url": "https://files.pythonhosted.org/packages/ac/b0/12fbc28589a04345a4015ab5998e86c7de2ebc214672e61eee8465143aab/prosodic-1.1.17.tar.gz"
}
],
"1.1.18": [
{
"comment_text": "",
"digests": {
"md5": "9737ee03f47aebf7e6a000dd92428c59",
"sha256": "17f6a3c0162f87b0e48e55b17c0b70463b185d735fd185898ba74dce4d968abd"
},
"downloads": -1,
"filename": "prosodic-1.1.18.tar.gz",
"has_sig": false,
"md5_digest": "9737ee03f47aebf7e6a000dd92428c59",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1359176,
"upload_time": "2018-11-18T20:06:24",
"url": "https://files.pythonhosted.org/packages/df/c1/459a38336f8f99368e8851324ca92e71394ba3cc61a954739b83a0763c6d/prosodic-1.1.18.tar.gz"
}
],
"1.1.19": [
{
"comment_text": "",
"digests": {
"md5": "e8fc5a13ff952058bdf0e3c2c36b89a7",
"sha256": "7f4d3d60dd6f02ccd6b3dfc159a1610420511ca5cd3c97724ad7eb881b6d2ecd"
},
"downloads": -1,
"filename": "prosodic-1.1.19.tar.gz",
"has_sig": false,
"md5_digest": "e8fc5a13ff952058bdf0e3c2c36b89a7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1127695,
"upload_time": "2018-11-18T20:09:05",
"url": "https://files.pythonhosted.org/packages/d0/a8/5bc33cd57047d622896eecb4bcb493cd27b204281f25b255ec47f1d334bd/prosodic-1.1.19.tar.gz"
}
],
"1.1.2": [
{
"comment_text": "",
"digests": {
"md5": "3414c521baeed904480903f48f35240e",
"sha256": "2e761a423d66229eaaf8905b5d5ae2ea2efac925c65509574d78bffad50a5328"
},
"downloads": -1,
"filename": "prosodic-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "3414c521baeed904480903f48f35240e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 118940,
"upload_time": "2017-04-23T03:21:05",
"url": "https://files.pythonhosted.org/packages/91/c3/b621fea7e7a70e4cddc62c5b52ab5cae488aaa7b1aac74e6a11a263e4070/prosodic-1.1.2.tar.gz"
}
],
"1.1.20": [
{
"comment_text": "",
"digests": {
"md5": "efd7766aa2945d0d118cfd0ac94b91d0",
"sha256": "090dfdff393a64cc814f532afb0101b1616a4d8a64bdab4495345c616b4966d2"
},
"downloads": -1,
"filename": "prosodic-1.1.20.tar.gz",
"has_sig": false,
"md5_digest": "efd7766aa2945d0d118cfd0ac94b91d0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1128328,
"upload_time": "2018-11-18T20:47:03",
"url": "https://files.pythonhosted.org/packages/ee/8b/fa2091f5e86ae35adbdfa05595672132ac3a969668518c7af9dea27178f6/prosodic-1.1.20.tar.gz"
}
],
"1.1.21": [
{
"comment_text": "",
"digests": {
"md5": "410ed20d50b59b1b01c34828cac82da2",
"sha256": "a7c199384a8773d4c055c9f8b7d730e96c6cc2fcf6b6f694a0ea94aab0a54003"
},
"downloads": -1,
"filename": "prosodic-1.1.21.tar.gz",
"has_sig": false,
"md5_digest": "410ed20d50b59b1b01c34828cac82da2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1128329,
"upload_time": "2018-11-18T20:48:00",
"url": "https://files.pythonhosted.org/packages/fd/b3/44493f8e80f314035e9ea51f72d97fca29fa0ce68d9a49434171669e012d/prosodic-1.1.21.tar.gz"
}
],
"1.1.22": [
{
"comment_text": "",
"digests": {
"md5": "2878c465ccc6f754764f9f210d0aeeac",
"sha256": "070b52abd25e1b1e4debab8beeb18dba89a9f161f76bad2af0758346d71b66e5"
},
"downloads": -1,
"filename": "prosodic-1.1.22.tar.gz",
"has_sig": false,
"md5_digest": "2878c465ccc6f754764f9f210d0aeeac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1128351,
"upload_time": "2018-11-18T20:51:30",
"url": "https://files.pythonhosted.org/packages/e1/bd/97f555de4662ca95b84d69ba9834da804e847810377bc38d0a873dc431e0/prosodic-1.1.22.tar.gz"
}
],
"1.1.25": [
{
"comment_text": "",
"digests": {
"md5": "ea4bd9db25ad917a87da8ad9977b5c44",
"sha256": "562a2567048a7a8bf74a41ff71a48aede771e860d0336ff7a1594f9c274a2adb"
},
"downloads": -1,
"filename": "prosodic-1.1.25.tar.gz",
"has_sig": false,
"md5_digest": "ea4bd9db25ad917a87da8ad9977b5c44",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1187139,
"upload_time": "2018-11-18T22:53:04",
"url": "https://files.pythonhosted.org/packages/e1/36/fb2e76ffae95908794193406ebd9a1098e3465d2c17e244485261619ba74/prosodic-1.1.25.tar.gz"
}
],
"1.1.26": [
{
"comment_text": "",
"digests": {
"md5": "e3570caefa2ebebc05ceb1de05fa5342",
"sha256": "a1ea5e63405293238a214abec523f5b2dfcdd09bad5fca5a52cb0a8ef9956c92"
},
"downloads": -1,
"filename": "prosodic-1.1.26.tar.gz",
"has_sig": false,
"md5_digest": "e3570caefa2ebebc05ceb1de05fa5342",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1187676,
"upload_time": "2018-11-18T23:04:44",
"url": "https://files.pythonhosted.org/packages/7e/82/aa53c94ee36077ce8cf4b3eedb9e14be61fe376a080dcabd6e704a58cc5c/prosodic-1.1.26.tar.gz"
}
],
"1.1.27": [
{
"comment_text": "",
"digests": {
"md5": "6a20edf4b8bbb894f52f2a52bbead118",
"sha256": "9ed310c77b68a27369bd54c2b829b49db1fd2994758598a2ad198c8504205945"
},
"downloads": -1,
"filename": "prosodic-1.1.27.tar.gz",
"has_sig": false,
"md5_digest": "6a20edf4b8bbb894f52f2a52bbead118",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1187807,
"upload_time": "2018-11-18T23:11:51",
"url": "https://files.pythonhosted.org/packages/ef/f5/e527d649fb081aa240e2f3a9054a2aa48a59a4fcf11e8c3f305330516b59/prosodic-1.1.27.tar.gz"
}
],
"1.1.28": [
{
"comment_text": "",
"digests": {
"md5": "d9c3290dc5bf793e8b49a7d6959351e5",
"sha256": "45ca6c0bca5eea443b8cfef8a2d3085cb4b0b3646edbe69249208f01875a111c"
},
"downloads": -1,
"filename": "prosodic-1.1.28.tar.gz",
"has_sig": false,
"md5_digest": "d9c3290dc5bf793e8b49a7d6959351e5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1191764,
"upload_time": "2018-11-18T23:15:35",
"url": "https://files.pythonhosted.org/packages/f2/ab/6db84548f622ba9ee7caa9f13a56153c7ee8d8c0eef53e1c8d25cd273e6e/prosodic-1.1.28.tar.gz"
}
],
"1.1.29": [
{
"comment_text": "",
"digests": {
"md5": "60c34a285c4f414fabadf81c43aa2564",
"sha256": "7f3b25aaa6c5eda159e95ef1e98e921c2c7e1cf97ef16851b49bbee767b78720"
},
"downloads": -1,
"filename": "prosodic-1.1.29.tar.gz",
"has_sig": false,
"md5_digest": "60c34a285c4f414fabadf81c43aa2564",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1192528,
"upload_time": "2018-11-18T23:31:42",
"url": "https://files.pythonhosted.org/packages/a4/c1/2e1ba18ba4c633bfc241b438bf06833c8265ce51fca188591cb412ec4cb5/prosodic-1.1.29.tar.gz"
}
],
"1.1.3": [
{
"comment_text": "",
"digests": {
"md5": "c2d0315c29e0f7688af2930c6d43da5e",
"sha256": "843855d465c7e84b9cb1c5f1d9903c4b44c698fe63394c001e53fe545705d9b4"
},
"downloads": -1,
"filename": "prosodic-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "c2d0315c29e0f7688af2930c6d43da5e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 118926,
"upload_time": "2017-04-23T03:23:12",
"url": "https://files.pythonhosted.org/packages/41/9f/64a7d57e82d54dc4179e797f060a1187d0c3011f3a6493fa2d0144d0fcfa/prosodic-1.1.3.tar.gz"
}
],
"1.1.30": [
{
"comment_text": "",
"digests": {
"md5": "7215c3c5e0e6d5b5c039f8bc883e2fdb",
"sha256": "52ec97f70a215f259e6822384b12131c6b46b8c609688a41f364977bcd405d78"
},
"downloads": -1,
"filename": "prosodic-1.1.30.tar.gz",
"has_sig": false,
"md5_digest": "7215c3c5e0e6d5b5c039f8bc883e2fdb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1757659,
"upload_time": "2018-11-18T23:32:54",
"url": "https://files.pythonhosted.org/packages/7f/a4/f10836e2c22a17bb42432794a4b34d24880c6913c015732b114c99bb0652/prosodic-1.1.30.tar.gz"
}
],
"1.1.31": [
{
"comment_text": "",
"digests": {
"md5": "c80a5d623d9a8089b66d61e396eefda9",
"sha256": "9dd16629eac4ac3985f02607212c528b888c084940e600903ddd6c36cdbedca2"
},
"downloads": -1,
"filename": "prosodic-1.1.31.tar.gz",
"has_sig": false,
"md5_digest": "c80a5d623d9a8089b66d61e396eefda9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1757673,
"upload_time": "2018-11-18T23:37:49",
"url": "https://files.pythonhosted.org/packages/52/9c/d2f67d503493f682ac24f4e8985542355f12c75a54b754978a93b4859cee/prosodic-1.1.31.tar.gz"
}
],
"1.1.4": [
{
"comment_text": "",
"digests": {
"md5": "9305c06f52c5a3a2a96ac6602ca8a2c9",
"sha256": "b532cfa7a5931a01656a1a3a6748aa6277e2ca619f333ec7d6783e5599fee77c"
},
"downloads": -1,
"filename": "prosodic-1.1.4.tar.gz",
"has_sig": false,
"md5_digest": "9305c06f52c5a3a2a96ac6602ca8a2c9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 118924,
"upload_time": "2017-04-23T03:29:24",
"url": "https://files.pythonhosted.org/packages/f5/30/a72294d7bf4a790ff88968797b167d9fb8a2dcabb5dd5802f2f3c8a9adf0/prosodic-1.1.4.tar.gz"
}
],
"1.1.5": [
{
"comment_text": "",
"digests": {
"md5": "991f83a6054147a180abc39217898c14",
"sha256": "cf23a9baa3bd48920682ebec3be31e820913a80666c30b76a0766d6d438eccf8"
},
"downloads": -1,
"filename": "prosodic-1.1.5.tar.gz",
"has_sig": false,
"md5_digest": "991f83a6054147a180abc39217898c14",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 118937,
"upload_time": "2017-04-23T03:31:43",
"url": "https://files.pythonhosted.org/packages/91/3a/b21f947280aafbc8ab5f2efcee64edba22a4939e0897844e47760ac02394/prosodic-1.1.5.tar.gz"
}
],
"1.1.6": [
{
"comment_text": "",
"digests": {
"md5": "27f0c9079be773dfacafe8a349567f47",
"sha256": "f226b43e83b374983ce25f4736da8c2c0332eb7365b5537961d88d6998b597bf"
},
"downloads": -1,
"filename": "prosodic-1.1.6.tar.gz",
"has_sig": false,
"md5_digest": "27f0c9079be773dfacafe8a349567f47",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1533953,
"upload_time": "2017-04-23T03:39:03",
"url": "https://files.pythonhosted.org/packages/5c/b6/4c32fcf74a1f311c2722f89565bf76fdd4e8deaab0a859e477750928c27a/prosodic-1.1.6.tar.gz"
}
],
"1.1.7": [
{
"comment_text": "",
"digests": {
"md5": "51bb9f1ab6e15aefd6247c9f98e98663",
"sha256": "05beea9e25dd9725221de1e327fc47b730cb31fe86f7deb6444122717f2bb344"
},
"downloads": -1,
"filename": "prosodic-1.1.7.tar.gz",
"has_sig": false,
"md5_digest": "51bb9f1ab6e15aefd6247c9f98e98663",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 3884324,
"upload_time": "2017-04-23T03:50:26",
"url": "https://files.pythonhosted.org/packages/ba/5c/9d0c16efca984cf17cd15f13403603fed5a93d86573e72ddc7ded78df8b8/prosodic-1.1.7.tar.gz"
}
],
"1.1.8": [
{
"comment_text": "",
"digests": {
"md5": "3725418dfb38857496eded92739588a2",
"sha256": "420af70c17448dc772c5462e0bb4c02248f3a16696f691ed341a68f2fdb4bc93"
},
"downloads": -1,
"filename": "prosodic-1.1.8.tar.gz",
"has_sig": false,
"md5_digest": "3725418dfb38857496eded92739588a2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 3884287,
"upload_time": "2017-04-23T03:55:20",
"url": "https://files.pythonhosted.org/packages/8e/31/1da3dbb590d5e0ff234d75215d3ab864ccac13bcd34fcf2e0d208ba0ae3b/prosodic-1.1.8.tar.gz"
}
],
"1.1.9": [
{
"comment_text": "",
"digests": {
"md5": "c42a4fa68e0c1e5f8d6e5d4178150bbd",
"sha256": "accec71808eb01a74d84ebe74c39f105d8a06a14e4c1fd79c0d0d868c28d6580"
},
"downloads": -1,
"filename": "prosodic-1.1.9.tar.gz",
"has_sig": false,
"md5_digest": "c42a4fa68e0c1e5f8d6e5d4178150bbd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 3884306,
"upload_time": "2017-04-23T03:56:41",
"url": "https://files.pythonhosted.org/packages/1e/be/93f30af0d30f5e9b463bedfb9df4443a78db1d2bb9d10a3ddbab612cff57/prosodic-1.1.9.tar.gz"
}
],
"1.2.0": [
{
"comment_text": "",
"digests": {
"md5": "478c71e42eb18300fa8cfe5e9ecdfd90",
"sha256": "3a3b99cb969d529e12d207cc0d8f99ecb500be0bc68a1efae8131501b876a840"
},
"downloads": -1,
"filename": "prosodic-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "478c71e42eb18300fa8cfe5e9ecdfd90",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1767650,
"upload_time": "2018-11-19T00:16:07",
"url": "https://files.pythonhosted.org/packages/d7/ea/fb880060c92106997610dc9c183c3ce00dbb37da45484094f97ac58b041e/prosodic-1.2.0.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "8836a2aaa3e8fbfd3fd2cf1124564c9a",
"sha256": "f5b2f758876d74112486b8d1c1ba77ae0e75427b56a8b7833ef341af95d76dd7"
},
"downloads": -1,
"filename": "prosodic-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "8836a2aaa3e8fbfd3fd2cf1124564c9a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1767711,
"upload_time": "2018-11-19T00:38:44",
"url": "https://files.pythonhosted.org/packages/3c/8c/4a83836da51ba9047a5f14dcc07a8adadce4e90b97e0b8ed33c30f87aba1/prosodic-1.2.1.tar.gz"
}
],
"1.2.3": [
{
"comment_text": "",
"digests": {
"md5": "fd4cb0c4043e586a64520b976f279b09",
"sha256": "0c0b7a8d002e7765b180bec77974587878ff504b428281cf3bb646dc60cdd67e"
},
"downloads": -1,
"filename": "prosodic-1.2.3.tar.gz",
"has_sig": false,
"md5_digest": "fd4cb0c4043e586a64520b976f279b09",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1760794,
"upload_time": "2018-11-19T00:47:32",
"url": "https://files.pythonhosted.org/packages/4a/be/f3ee8acba7c315673e662824fdbc161e41e53df1ce0ed4a346772e1dc882/prosodic-1.2.3.tar.gz"
}
],
"1.2.4": [
{
"comment_text": "",
"digests": {
"md5": "ae7c1988912634a986381dd7d53d78eb",
"sha256": "d3fb505c8bc489754485ce92b19172071045247c20ed5fb2e76fa7a67d294814"
},
"downloads": -1,
"filename": "prosodic-1.2.4.tar.gz",
"has_sig": false,
"md5_digest": "ae7c1988912634a986381dd7d53d78eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1760681,
"upload_time": "2018-11-19T00:49:05",
"url": "https://files.pythonhosted.org/packages/ad/aa/3394171baeadaa9f28d5989c0f63bd8280a26fd087c54316ddf497c7bba8/prosodic-1.2.4.tar.gz"
}
],
"1.2.5": [
{
"comment_text": "",
"digests": {
"md5": "3c6b620628055011677e235536f126d9",
"sha256": "291ca8807624015fd072fe8c4212d3bcc087701280fbf586c15bfb94324ffff3"
},
"downloads": -1,
"filename": "prosodic-1.2.5.tar.gz",
"has_sig": false,
"md5_digest": "3c6b620628055011677e235536f126d9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 1854431,
"upload_time": "2018-11-19T01:01:15",
"url": "https://files.pythonhosted.org/packages/f4/c7/4e2ca99d8b1ce538aac12aa77c1c358dc0403b12c3d7cde97e793a422c92/prosodic-1.2.5.tar.gz"
}
],
"1.2.6": [
{
"comment_text": "",
"digests": {
"md5": "845fbf5f85c814e5c37ada1197d20590",
"sha256": "9a063ba228aed08d92f39e5263a4990613be29b2a9c112e8e4ca6557d637fda6"
},
"downloads": -1,
"filename": "prosodic-1.2.6.tar.gz",
"has_sig": false,
"md5_digest": "845fbf5f85c814e5c37ada1197d20590",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 2191965,
"upload_time": "2018-11-19T06:39:12",
"url": "https://files.pythonhosted.org/packages/dc/82/9754744fdf6c23afca50e6eed8d3d9c4d4ebe758ce39e1593aba1e1af2f0/prosodic-1.2.6.tar.gz"
}
],
"1.2.7": [
{
"comment_text": "",
"digests": {
"md5": "a0b869fb1e13585199c00f06d6afe55c",
"sha256": "4ed3bf36d1f6d56889789545f70dcbcf00129290ef7d186d76f1ed988ecb1d45"
},
"downloads": -1,
"filename": "prosodic-1.2.7.tar.gz",
"has_sig": false,
"md5_digest": "a0b869fb1e13585199c00f06d6afe55c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 2190742,
"upload_time": "2018-11-19T08:47:26",
"url": "https://files.pythonhosted.org/packages/ac/63/a23f8cf30144e8195be1d57b8723bc5ef63d48716207e5b7d89f026bd2a4/prosodic-1.2.7.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "a0b869fb1e13585199c00f06d6afe55c",
"sha256": "4ed3bf36d1f6d56889789545f70dcbcf00129290ef7d186d76f1ed988ecb1d45"
},
"downloads": -1,
"filename": "prosodic-1.2.7.tar.gz",
"has_sig": false,
"md5_digest": "a0b869fb1e13585199c00f06d6afe55c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 2190742,
"upload_time": "2018-11-19T08:47:26",
"url": "https://files.pythonhosted.org/packages/ac/63/a23f8cf30144e8195be1d57b8723bc5ef63d48716207e5b7d89f026bd2a4/prosodic-1.2.7.tar.gz"
}
]
}