{ "info": { "author": "Yogurt Cultures", "author_email": "cediddi@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: MIT License", "Natural Language :: Turkish", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Text Processing :: Linguistic" ], "description": "kefir\n\n# Kefir\n\n![Logo](https://avatars1.githubusercontent.com/u/42190640?s=200&v=4)\n\nYogurt is a free software community established at Mustafa Akg\u00fcl Free Software Camp of 2018.\n\nKefir is a natural language processing kit for Turkic languages, and maybe Finnish and Hungarian in phonology.\n\n# Usage\n\nThere are two competing notions of the predicate in theories of grammar.\nThe competition between these two concepts has generated confusion concerning\nthe use of the term predicate in theories of grammar.\n\nKefir is designed to construct sentences by using\n[predicate-logic](https://www.wikiwand.com/en/Predicate_(grammar)).\n\n```python\n>>> ayni = subject('ayn\u0131')\n>>> havuc = subject('havu\u00e7')\n>>> gel = predicate('gel', 'third', 'perfective')\n>>> yap = predicate('yap', 'third', 'perfective')\n>>> dal = predicate('dal', 'third', 'progressive')\n>>> dal = predicate(dal, 'third', 'perfective')\n\n>>> birisi = subject('yakup')\n>>> [sentence(birisi, eylem) for eylem in (yap, dal,)]\n['yakup yapt\u0131', 'yakup dalmaktayd\u0131']\n\n>>> [sentence(havuc, eylem) for eylem in (gel, yap, dal)]\n['havu\u00e7 geldi', 'havu\u00e7 yapt\u0131', 'havu\u00e7 dalmaktayd\u0131']\n\n>>> sebze = predicate(locative('marul'), 'first', 'perfective', True)\n>>> dal = predicate(locative('dal'), 'first', 'perfective', True)\n>>> [sentence(ayni, eylem) for eylem in (sebze, dal)]\n['ayn\u0131 maruldayd\u0131k', 'ayn\u0131 daldayd\u0131k']\n\n```\n\n### Cases\n\n- nominative\n- genitive\n- dative\n- accusative\n- ablative\n- locative\n\n### Copulas\n\n - negative\n - zero\n - tobe\n - personal\n - perfective\n - imperfective\n - progressive\n - necessitative\n - future\n - impotential\n - conditional\n\n\n\nkefir.case\n\n# Grammatical Cases\n\nImplemented 6 grammatical cases:\n\n- Nominative\n- Genitive\n- Dative\n- Accusative\n- Ablative\n- Locative\n\nTurkish has 9 more:\n\n- Essive\n- Instrumental\n- Inclusive\n- Abessive\n- Likeness\n- Coverage\n- Qualitative\n- Conditional\n- Possesive\n\n\ud83d\udcd6 Read more on: [Turkish Cases](https://en.wikibooks.org/wiki/Turkish/Cases).\n\nTODO: Enum'lardaki rakamlar yerine auto() kullan\u0131lmal\u0131.\n\n## Nominative Case ('Yal\u0131n' in Turkish)\n\nThe simplest grammatical case, there's no suffix to affix in that case.\n\nNominative comes from Latin c\u0101sus nomin\u0101t\u012bvus means case for naming.\n\n## Ablative Case ('Ayr\u0131lma' in Turkish)\n\nA grammatical case for nouns, pronouns and adjectives in\nthe grammar of various languages; it is sometimes used to\nexpress motion away from something, among other uses.\n\n\u270e\ufe0e Examples:\n```\nadalar[dan] geldim\nmerkez[den] ge\u00e7tim\nteyit[ten] ge\u00e7tim\na\u00e7l\u0131k[tan] \u00f6ld\u00fcm\n```\n\n## Accusative ('\u0130lgi' in Turkish)\n\nThe accusative case (abbreviated acc) of a noun is the\ngrammatical case used to mark the direct object of a\ntransitive verb. The same case is used in many\nlanguages for the objects of (some or all) prepositions.\n\n\u270e\ufe0e Examples:\n```\naday[\u0131] yedim\nevim[i] yapt\u0131m\n\u00fcz\u00fcm[\u00fc] pi\u015firdim\n```\n\n## Genitive Case ('Genitifler' in Turkish)\n\nIn grammar, the genitive is the grammatical case\nthat marks a word, usually a noun, as modifying\nanother word, also usually a noun.\n\n\u270e\ufe0e Examples:\n```\nhan\u0131melinin \u00e7i\u00e7e\u011fi (flower of a plant called han\u0131meli)\nkad\u0131n\u0131n ayakkab\u0131s\u0131 (shoes of the woman)\n\u0628\u0627\u0628 \u0628\u064a\u062a b\u0101bu baytin (the door of a house)\nmari[i] nie ma w domu (maria is not at home)\n```\n\n## Dative Case ('Y\u00f6nelme' in Turkish)\n\nIn some languages, the dative is used to mark the\nindirect object of a sentence.\n\n\u270e\ufe0e Examples:\n```\nmarya yakup'a bir drink verdi (maria gave jacob a drink)\nmaria jacob\u012b potum dedit (maria gave jacob a drink)\n```\n\n## Locative Case ('Bulunma' in Turkish)\n\nLocative is a grammatical case which indicates a location.\nIt corresponds vaguely to the English prepositions \"in\",\n\"on\", \"at\", and \"by\".\n\n\u270e\ufe0e Examples:\n```\nbah\u00e7e[de] han\u0131meli var.\nyorum[da] iyi beatler var.\nkalem[de] g\u00fczel u\u00e7 var.\n```\n\n\n\nkefir.phonology\n\n# Turkish Phonology\n\nIn Hungarian, Finnish, and Turkic languages\nvowel sounds are organized in a concept called\nvowel harmony. Vowels may be classified as Back\nor Front vowels, based on the placement of the\nsound in the mouth.\n\n```\n Front Vowels\n+----------------+\n Unrounded \u27e8e\u27e9 \u27e8i\u27e9\n Rounded \u27e8\u00fc\u27e9 \u27e8\u00f6\u27e9\n\n Back Vowels\n+----------------+\n Unrounded \u27e8a\u27e9 \u27e8\u0131\u27e9\n Rounded \u27e8u\u27e9 \u27e8o\u27e9\n```\n\nTODO: Document consonant harmony.\n\n#### \\#swap_front_and_back\n\nSwaps front sounds to back, and vice versa.\n\n```python\n>>> swap_front_and_back('acak')\n'ecek'\n\n>>> swap_front_and_back('ocok')\n'\u00f6c\u00f6k'\n\n>>> swap_front_and_back('\u00f6c\u00f6k')\n'ocok'\n\n>>> swap_front_and_back('acak')\n'ecek'\n\n```\n\n## Voicing or Sonorization ('Yumu\u015fama' in Turkish)\n\nTo make pronouncation easier, nouns ending\nwith these sounds:\n\n```\n\u27e8p\u27e9 \u27e8\u00e7\u27e9 \u27e8t\u27e9 \u27e8k\u27e9\n```\n\nMay be softened by replacing them in order:\n\n```\n\u27e8b\u27e9 \u27e8c\u27e9 \u27e8d\u27e9 \u27e8\u011f\u27e9\n```\n\n\u270e\ufe0e Examples:\n```\n\u00e7o\u27e8p\u27e9un \u2192 \u00e7o\u27e8b\u27e9un\na\u011fa\u27e8\u00e7\u27e9\u0131n \u2192 a\u011fa\u27e8c\u27e9n\nka\u011f\u0131\u27e8t\u27e9\u0131n \u2192 ka\u011f\u0131\u27e8d\u27e9\u0131n\nren\u27e8k\u27e9in \u2192 ren\u27e8g\u27e9in\n```\n\n\u270e\ufe0e Examples in other languages:\n```\nli\u27e8f\u27e9e \u2192 li\u27e8v\u27e9e\nstri\u27e8f\u27e9e \u2192 stri\u27e8v\u27e9e\nproo\u27e8f\u27e9 \u2192 pro\u27e8v\u27e9e\n```\n\n## Devoicing or Desonorization ('Sertle\u015fme' in Turkish)\n\nTo make pronouncation easier, nouns ending with\nthese sounds:\n```\n\u27e8p\u27e9 \u27e8\u00e7\u27e9 \u27e8t\u27e9 \u27e8k\u27e9\n```\n\nMay be hardened by replacing them in order:\n\n```\n\u27e8b\u27e9 \u27e8c\u27e9 \u27e8d\u27e9 \u27e8\u011f\u27e9\n```\n\n\u270e\ufe0e Examples:\n```\n\u00e7o\u27e8p\u27e9un \u2192 \u00e7o\u27e8b\u27e9un\na\u011fa\u27e8\u00e7\u27e9\u0131n \u2192 a\u011fa\u27e8c\u27e9n\nka\u011f\u0131\u27e8t\u27e9\u0131n \u2192 ka\u011f\u0131\u27e8d\u27e9\u0131n\nren\u27e8k\u27e9in \u2192 ren\u27e8g\u27e9in\n```\n\n\u270e\ufe0e Examples in Other Languages:\n```\ndogs \u2192 dogs ([\u0261z])\nmissed \u2192 missed ([st])\nwhizzed \u2192 whizzed ([zd])\npro\u015bba \u2192 pr\u0254\u0291ba\n\u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u2192 proz\u02b2b\u0259\n```\n\n\n\nkefir.predication\n\n# Turkish Predication and Copula\n\nTurkish language copulas, called 'ek-eylem' (literally 'suffix-verb'),\nare one of the most distinct features of Turkish grammar.\n\nTODO: Remove unused imports.\n\n#### Zero Copula\n\nZero copula is the rule for third person, as in Hungarian\nand Russian. That means two nouns, or a noun and an\nadjective can be juxtaposed to make a sentence without\nusing any copula. Third person plural might be indicated\nwith the use of plural suffix \"-lar/-ler\".\n\n\u270e\ufe0e Examples:\n```\nyogurt k\u00fclt\u00fcr (yogurt [is-a] culture)\nabbas yolcu (abbas [is-a] traveller)\nevlerinin \u00f6n\u00fc yonca (the front of their home [is-a] plant called yonca)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> zero('yolcu')\n'yolcu'\n\n ```\n\n#### Negative\n\nNegation is indicated by the negative copula 'de\u011fil'.\n'De\u011fil' is never used as a suffix, but it takes suffixes according to context.\n\n\u270e\ufe0e Examples:\n```\nyogurt k\u00fclt\u00fcr de\u011fildir (yogurt [is-not-a] culture)\nabbas yolcu de\u011fildir (abbas [is-not-a] traveller)\nevlerinin \u00f6n\u00fc yonca de\u011fildir (the front of their home [is-not-a] yonca)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> negative('yolcu')\n'yolcu de\u011fil'\n\n```\n\n### To Be\n\nTurkish \"to be\" as regular/auxiliary verb ('olmak').\n\n\u270e\ufe0e Examples:\n```\nyogurt k\u00fclt\u00fcrd\u00fcr (yogurt [is] culture)\nabbas yolcudur (abbas [is] traveller)\nevlerinin \u00f6n\u00fc yoncad\u0131r (the front of their home [is] plant called yonca)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> tobe('yolcu')\n'yolcudur'\n>>> tobe('\u00fcz\u00fcm')\n'\u00fcz\u00fcmd\u00fcr'\n>>> tobe('yonca')\n'yoncad\u0131r'\n\n```\n\n\n### Personification Copula\n\n\u270e\ufe0e Examples:\n```\nben bural\u0131y\u0131m (i'm from here)\nsen oral\u0131s\u0131n (you're from over there)\nayn\u0131 gezegenliyiz (we're from same planet)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> personal('u\u00e7ak', Person.FIRST, is_plural=False)\n'u\u00e7a\u011f\u0131m'\n\n>>> personal('oral\u0131', Person.SECOND, is_plural=False)\n'oral\u0131s\u0131n'\n\n>>> personal('gezegenli', Person.FIRST, is_plural=True)\n'gezegenliyiz'\n\n```\n\n### Inferential Mood ('-mi\u015f' in Turkish)\n\nInferential mood is used to convey information about events\nwhich were not directly observed or were inferred by the speaker.\n\n\u270e\ufe0e Examples:\n```\nelmaym\u0131\u015f\u0131m (i was an apple as i've heard)\n\u00fcz\u00fclm\u00fc\u015fs\u00fcn (you were sad as i've heard)\ndoktormu\u015f (he/she/it was a doctor as i've heard)\n\u00fcz\u00fcmm\u00fc\u015fs\u00fcn (you were a grape as i've heard)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> inferential('\u00f6\u011fretmen', Person.SECOND, is_plural=False)\n'\u00f6\u011fretmenmi\u015fsin'\n\n>>> inferential('\u00fcz\u00fcl', Person.SECOND, is_plural=False)\n'\u00fcz\u00fclm\u00fc\u015fs\u00fcn'\n\n>>> inferential('robot', Person.FIRST, is_plural=False)\n'robotmu\u015fum'\n\n>>> inferential('robot', Person.THIRD, is_plural=False)\n'robotmu\u015f'\n\n>>> inferential('ada', Person.THIRD, is_plural=False)\n'adaym\u0131\u015f'\n\n```\n\n### Inferential Mood ('-isem' in Turkish)\n\nInferential mood is a grammatical mood used to express a proposition whose\nvalidity is dependent on some condition, possibly counterfactual.\n\n\u270e\ufe0e Examples:\n```\nelmaysam (if i am an apple)\n\u00fcz\u00fcmsen (if you are a grape)\nb\u0131\u00e7aklarsa (if they are a knife)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> conditional('elma', Person.FIRST, is_plural=False)\n'elmaysam'\n>>> conditional('\u00fcz\u00fcm', Person.SECOND, is_plural=False)\n'\u00fcz\u00fcmsen'\n>>> conditional('b\u0131\u00e7ak', Person.THIRD, is_plural=True)\n'b\u0131\u00e7aklarsa'\n\n```\n\n### Alethic Modality ('-idi' in Turkish)\n\nLinguistic modality that indicates modalities of truth,\nin particular the modalities of logical necessity,\npossibility or impossibility.\n\n\u270e\ufe0e Examples:\n```\nelmayd\u0131m (i was an apple)\n\u00fcz\u00fcmd\u00fcn (you were a grape)\ndoktordu (he/she/it was a doctor)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> perfective('a\u00e7\u0131k', Person.FIRST, is_plural=False)\n'a\u00e7\u0131kt\u0131m'\n\n>>> perfective('oral\u0131', Person.SECOND, is_plural=False)\n'oral\u0131yd\u0131n'\n\n>>> perfective('dalda', Person.FIRST, is_plural=False)\n'daldayd\u0131m'\n\n>>> perfective('dalda', Person.THIRD, is_plural=False)\n'daldayd\u0131'\n\n>>> perfective('dalda', Person.FIRST, is_plural=True)\n'daldayd\u0131k'\n\n>>> perfective('dalda', Person.SECOND, is_plural=True)\n'daldayd\u0131n\u0131z'\n\n>>> perfective('dalda', Person.THIRD, is_plural=True)\n'daldayd\u0131lar'\n\n>>> perfective('gezegende', Person.THIRD, is_plural=True)\n'gezegendeydiler'\n\n```\n\n### The Imperfective ('-iyor' in Turkish)\n\nGrammatical aspect used to describe a situation viewed with interior composition.\nIt describes ongoing, habitual, repeated, or similar semantic roles,\nwhether that situation occurs in the past, present, or future.\n\n\u270e\ufe0e Examples:\n```\ngidiyorum (i'm going)\nkay\u0131yor (he's skating)\n\u00fcz\u00fcml\u00fcyor (he's graping)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> imperfective('a\u00e7\u0131', Person.FIRST, is_plural=False)\n'a\u00e7\u0131yorum'\n\n>>> imperfective('a\u00e7\u0131k', Person.FIRST, is_plural=False)\n'a\u00e7\u0131k\u0131yorum'\n\n>>> imperfective('oral\u0131', Person.SECOND, is_plural=False)\n'oral\u0131yorsun'\n\n>>> imperfective('dal', Person.THIRD, is_plural=False)\n'dal\u0131yor'\n\n>>> imperfective('dal', Person.FIRST, is_plural=True)\n'dal\u0131yoruz'\n\n>>> imperfective('dal', Person.FIRST, is_plural=True)\n'dal\u0131yoruz'\n\n>>> imperfective('dal', Person.SECOND, is_plural=True)\n'dal\u0131yorsunuz'\n\n>>> imperfective('dal', Person.THIRD, is_plural=True)\n'dal\u0131yorlar'\n\n```\n\n### The Future Tense ('-iyor' in Turkish)\n\nThe future tense is a verb form that generally marks the event described by the\nverb as not having happened yet, but expected to happen in the future.\n\n\u270e\ufe0e Examples:\n```\ngidecek (he'll go)\n\u00f6lecek (he'll die)\ncan alacak (he'll kill someone)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> future('gel', Person.FIRST, is_plural=False)\n'gelece\u011fim'\n\n>>> future('a\u00e7\u0131k', Person.FIRST, is_plural=False)\n'a\u00e7\u0131kaca\u011f\u0131m'\n\n>>> future('gel', Person.FIRST, is_plural=True)\n'gelece\u011fiz'\n\n```\n\n### Progressive Tense\n\n\u270e\ufe0e Examples:\ng\u00fclmekteyim (i am in the process of laughing)\n\u00f6lmekteler (they are in the process of dying \ud83d\udc7e)\n\n\u270e\ufe0e Tests:\n```python\n>>> progressive('gel', Person.FIRST, is_plural=False)\n'gelmekteyim'\n\n>>> progressive('a\u00e7\u0131k', Person.FIRST, is_plural=False)\n'a\u00e7\u0131kmaktay\u0131m'\n\n>>> progressive('gel', Person.FIRST, is_plural=True)\n'gelmekteyiz'\n\n```\n\n### Necessitative Copula\n\n\u270e\ufe0e Examples:\n```\ngitmeliyim (i must go)\nka\u00e7mal\u0131y\u0131m (i must run away)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> necessitative('git', Person.FIRST, is_plural=False)\n'gitmeliyim'\n\n>>> necessitative('a\u00e7\u0131k', Person.FIRST, is_plural=False)\n'a\u00e7\u0131kmal\u0131y\u0131m'\n\n>>> necessitative('uza', Person.FIRST, is_plural=True)\n'uzamal\u0131y\u0131z'\n\n```\n\n### Impotential Copula\n\n\u270e\ufe0e Examples:\n```\ngidemem (i cannot come)\nka\u00e7amay\u0131z (we cannot run away)\n```\n\n\u270e\ufe0e Tests:\n```python\n>>> impotential('git', Person.FIRST, is_plural=False)\n'gidemem'\n\n>>> impotential('git', Person.SECOND, is_plural=False)\n'gidemezsin'\n\n>>> impotential('git', Person.THIRD, is_plural=False)\n'gidemez'\n\n>>> impotential('git', Person.FIRST, is_plural=True)\n'gidemeyiz'\n\n>>> impotential('git', Person.FIRST, is_plural=True)\n'gidemeyiz'\n\n>>> impotential('git', Person.SECOND, is_plural=True)\n'gidemezsiniz'\n\n>>> impotential('git', Person.THIRD, is_plural=True)\n'gidemezler'\n\n>>> impotential('al', Person.THIRD, is_plural=True)\n'alamazlar'\n\n```\n\n\n\n\nkefir.meta\n\n# Contribution Guide\n\n- Don't load a fixture, code is our data.\n- Don't leave a comment! Docstrings are only for the context and test.\n- Be nice \ud83e\udd84\n\n# Credits\n\n- Berk Buzcu (8-bit artwork)\n- Serdar A\u00e7\u0131kyol (Illustration)\n- Fatih Erikli (Phonological Processes, Predicate Logic)\n- Armagan Amcalar ([Javascript Port](https://github.com/yogurt-cultures/kefir-js))\n- Umut Karc\u0131 (Packaging and Versioning)\n- Kerem Bozda\u015f (Editing)\n\n# License\n\nThis project is licensed under the terms of the [MIT license](https://github.com/yogurt-cultures/kefir/blob/master/LICENSE).", "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/yogurt-cultures/kefir", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "kefir", "package_url": "https://pypi.org/project/kefir/", "platform": "", "project_url": "https://pypi.org/project/kefir/", "project_urls": { "Homepage": "https://github.com/yogurt-cultures/kefir" }, "release_url": "https://pypi.org/project/kefir/0.1.3/", "requires_dist": null, "requires_python": "", "summary": "Kefir is a natural language processing kit for Turkic languages", "version": "0.1.3" }, "last_serial": 4440362, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6f926d3c79b0545ba196f2d17e9838a4", "sha256": "4d37b84ac9092d8b2b4e6b822c04b0828673f4cc6dea31f2d5d8973dccfac154" }, "downloads": -1, "filename": "kefir-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6f926d3c79b0545ba196f2d17e9838a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17997, "upload_time": "2018-08-12T20:01:03", "url": "https://files.pythonhosted.org/packages/ac/bc/2b33a0657cda729faedefb896b4e1315251dc38387763cf3973ca0b758c7/kefir-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1235c7713fea143b36c425f56ca5fb32", "sha256": "a5ff762ad051468318af16ecfeeaa98fbe1d87421a334bd63f48120e76be3c89" }, "downloads": -1, "filename": "kefir-0.1.1.tar.gz", "has_sig": false, "md5_digest": "1235c7713fea143b36c425f56ca5fb32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19245, "upload_time": "2018-10-01T07:59:53", "url": "https://files.pythonhosted.org/packages/fe/df/c4691ce436da52905a8edf951fbb2d87b1559675b191ce736a72410ad520/kefir-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "caa037cada1bfec776d3268bd4d71d81", "sha256": "f7fff603bde7c6bfb86dcce81c47cd10679c17dc92b3257d98e7433e6debdd67" }, "downloads": -1, "filename": "kefir-0.1.2.tar.gz", "has_sig": false, "md5_digest": "caa037cada1bfec776d3268bd4d71d81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19300, "upload_time": "2018-11-01T11:50:13", "url": "https://files.pythonhosted.org/packages/c2/36/1577f71ca1f8cc98aebf3fcc8a9de051a82b08f01b75e4580cc17bcfcb60/kefir-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "47175509822cff250b2fc450b8e5cdab", "sha256": "456e019454c128302e4a9c898894d18afad35583386dc710c5404eef878b207e" }, "downloads": -1, "filename": "kefir-0.1.3.tar.gz", "has_sig": false, "md5_digest": "47175509822cff250b2fc450b8e5cdab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30707, "upload_time": "2018-11-01T11:50:20", "url": "https://files.pythonhosted.org/packages/24/69/76aa5548bef445af429cf0119eadd1eb96f8ada6c19dc0c3c18f051bf347/kefir-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47175509822cff250b2fc450b8e5cdab", "sha256": "456e019454c128302e4a9c898894d18afad35583386dc710c5404eef878b207e" }, "downloads": -1, "filename": "kefir-0.1.3.tar.gz", "has_sig": false, "md5_digest": "47175509822cff250b2fc450b8e5cdab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30707, "upload_time": "2018-11-01T11:50:20", "url": "https://files.pythonhosted.org/packages/24/69/76aa5548bef445af429cf0119eadd1eb96f8ada6c19dc0c3c18f051bf347/kefir-0.1.3.tar.gz" } ] }