{ "info": { "author": "Franc[e]sco", "author_email": "lolisamurai@tfwno.gf", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: Public Domain", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries", "Topic :: Utilities" ], "description": ".. image:: https://travis-ci.org/Francesco149/pyttanko.svg?branch=master\n :target: https://travis-ci.org/Francesco149/pyttanko\n\nosu! pp and difficulty calculator. pure python implementation of\nhttps://github.com/Francesco149/oppai-ng\n\nthis is meant to be a standalone single-file module that's as\nportable as possible using only python 2.6+ builtins with no\nextra dependencies\n\nif you need a command line interface, check out\n`oppai-ng `_\n\nusage\n===========\npyttanko is a single-file module, so the simplest way to use it\nis to simply drop it in your project's folder:\n\n.. code-block:: sh\n\n cd my/project\n curl https://raw.githubusercontent.com/Francesco149/pyttanko/master/pyttanko.py > pyttanko.py\n\nthis way, anyone who clones your project won't have to install\npyttanko as it will be bundled\n\nif you prefer, it's also available on pip\n\n.. code-block:: sh\n\n pip install pyttanko\n\nor you can also manually install like so:\n\n.. code-block:: sh\n\n curl -L https://github.com/Francesco149/pyttanko/archive/HEAD.tar.gz -o HEAD.tar.gz\n cd pyttanko-*\n python setup.py install --user\n\ncheck out\n\n.. code-block:: sh\n\n pydoc pyttanko\n\nor\n\n.. code-block:: sh\n\n python -c \"help('pyttanko')\"\n\nfor the full documentation\n\nminimal example:\n\n.. code-block:: python\n\n #!/usr/bin/env python\n\n import sys\n import pyttanko as osu\n\n p = osu.parser()\n bmap = p.map(sys.stdin)\n\n stars = osu.diff_calc().calc(bmap)\n print(\"%g stars\" % stars.total)\n\n pp, _, _, _, _ = osu.ppv2(stars.aim, stars.speed, bmap=bmap)\n print(\"%g pp\" % pp)\n\n\nwhich you can run with:\n\n.. code-block:: sh\n\n cat /path/to/file.osu | ./example.py\n\n\nperformance\n===========\npyttanko runs the test suite over 10 times slower than the original\nC implementation and uses ~8 times more memory, so if you need\nto batch process thousands of scores, you should consider writing\nnative bindings for the C version.\n\ntests were performed on linux 4.9.38, python 2.7.10 on a i7-4790k\n\nthis is still a pretty respectable speed considering python is\ninterpreted\n\n.. code-block:: sh\n\n $ cd ~/src/pyttanko/\n $ time -v ./run_test\n ...\n Command being timed: \"./run_test\"\n User time (seconds): 101.68\n System time (seconds): 0.61\n Percent of CPU this job got: 99%\n Elapsed (wall clock) time (h:mm:ss or m:ss): 1m 42.34s\n Average shared text size (kbytes): 0\n Average unshared data size (kbytes): 0\n Average stack size (kbytes): 0\n Average total size (kbytes): 0\n Maximum resident set size (kbytes): 88688\n Average resident set size (kbytes): 0\n Major (requiring I/O) page faults: 0\n Minor (reclaiming a frame) page faults: 631637\n Voluntary context switches: 1\n Involuntary context switches: 4116\n Swaps: 0\n File system inputs: 0\n File system outputs: 56\n Socket messages sent: 0\n Socket messages received: 0\n Signals delivered: 0\n Page size (bytes): 4096\n Exit status: 0\n\n $ cd ~/src/oppai-ng/test\n $ ./build\n $ time -v ./oppai_test\n ...\n Command being timed: \"./oppai_test\"\n User time (seconds): 9.09\n System time (seconds): 0.06\n Percent of CPU this job got: 99%\n Elapsed (wall clock) time (h:mm:ss or m:ss): 0m 9.15s\n Average shared text size (kbytes): 0\n Average unshared data size (kbytes): 0\n Average stack size (kbytes): 0\n Average total size (kbytes): 0\n Maximum resident set size (kbytes): 11840\n Average resident set size (kbytes): 0\n Major (requiring I/O) page faults: 0\n Minor (reclaiming a frame) page faults: 304\n Voluntary context switches: 1\n Involuntary context switches: 39\n Swaps: 0\n File system inputs: 0\n File system outputs: 0\n Socket messages sent: 0\n Socket messages received: 0\n Signals delivered: 0\n Page size (bytes): 4096\n Exit status: 0\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Francesco149/pyttanko", "keywords": "osu! osu", "license": "Unlicense", "maintainer": "", "maintainer_email": "", "name": "pyttanko", "package_url": "https://pypi.org/project/pyttanko/", "platform": "", "project_url": "https://pypi.org/project/pyttanko/", "project_urls": { "Homepage": "https://github.com/Francesco149/pyttanko" }, "release_url": "https://pypi.org/project/pyttanko/1.2.1/", "requires_dist": null, "requires_python": "", "summary": "osu! pp and difficulty calculator", "version": "1.2.1" }, "last_serial": 4817009, "releases": { "1.0.10": [ { "comment_text": "", "digests": { "md5": "ff5b0e636a7e07de61efeb95e2a43b98", "sha256": "4ad509356beacb4a78e246cb0806957d50c975ef98c9c055127fb928a9e2630a" }, "downloads": -1, "filename": "pyttanko-1.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ff5b0e636a7e07de61efeb95e2a43b98", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14146, "upload_time": "2017-08-18T02:47:10", "url": "https://files.pythonhosted.org/packages/ec/eb/e8f0480e42c19b5adb4fcbff1ef90f9fef42aa9454411a29397a05b1e01f/pyttanko-1.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b6b90f231b1e4c611e4612dbcb41ea49", "sha256": "27a2040ae3d7c1fadab3998139d6fc414b45ed91af3f4a5fa58972ab6704f699" }, "downloads": -1, "filename": "pyttanko-1.0.10.tar.gz", "has_sig": false, "md5_digest": "b6b90f231b1e4c611e4612dbcb41ea49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12725, "upload_time": "2017-08-18T02:47:12", "url": "https://files.pythonhosted.org/packages/8e/d6/8a67f5d3170a88c1bb46aff3ab62648876be3f50d15753321b4e765e40dc/pyttanko-1.0.10.tar.gz" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "0ebe48ef53342db2361f88c6f164f562", "sha256": "52e2ce01b51d91c4b6f4fe948748c429ac1ef248f6969610cd90a0071ea29179" }, "downloads": -1, "filename": "pyttanko-1.0.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ebe48ef53342db2361f88c6f164f562", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14617, "upload_time": "2017-12-10T15:07:35", "url": "https://files.pythonhosted.org/packages/4b/cd/dd7946457fb3549c431484f97101e0663bd78523837bfa7dd54d21ba7443/pyttanko-1.0.14-py2.py3-none-any.whl" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "18655e01e63192ab746002c582de6e55", "sha256": "5db86c5ffd8f4dd04c21b7b94552ad4c5297a94a0a2769688778b6d76365e1e4" }, "downloads": -1, "filename": "pyttanko-1.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "18655e01e63192ab746002c582de6e55", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14624, "upload_time": "2017-12-20T19:17:25", "url": "https://files.pythonhosted.org/packages/a5/b7/0574d732af3da39038bee93c5708671d17bc368a6e557d7ecf817e11189d/pyttanko-1.0.15-py2.py3-none-any.whl" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "74321f3ef2190721bb6da8fd94a9f841", "sha256": "64b7c9659614bbd4251a47792792575236737df1189f2f684307ce36dd0382a4" }, "downloads": -1, "filename": "pyttanko-1.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "74321f3ef2190721bb6da8fd94a9f841", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14659, "upload_time": "2018-01-05T00:59:45", "url": "https://files.pythonhosted.org/packages/1a/5c/c170a787d740567c4d6417f88be2f1d47af089c1437931b8f327afc9edc1/pyttanko-1.0.18-py2.py3-none-any.whl" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "d9ab1b6382d4cd4c1b6b896948738afa", "sha256": "14b259fbdcf17f9a8a65442c2361ad886113d002f8868b56f9b5e7986b42e014" }, "downloads": -1, "filename": "pyttanko-1.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d9ab1b6382d4cd4c1b6b896948738afa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14676, "upload_time": "2018-01-05T02:10:35", "url": "https://files.pythonhosted.org/packages/2c/35/d727d1ee85607cb4ff6ffa6d62474a32334c4f76cf09b5addc6de4407690/pyttanko-1.0.19-py2.py3-none-any.whl" } ], "1.0.20": [ { "comment_text": "", "digests": { "md5": "0dbf16702d968a60c22fdc5b40396a65", "sha256": "e68f264491496817565c0e157ac1118c31a86dba2c996a96ea5bd6dd3305928d" }, "downloads": -1, "filename": "pyttanko-1.0.20-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0dbf16702d968a60c22fdc5b40396a65", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14713, "upload_time": "2018-01-16T16:44:04", "url": "https://files.pythonhosted.org/packages/aa/db/e3709fedc11b30ba8fb3740c768f2b9524fc39fac0de7be793284a98992d/pyttanko-1.0.20-py2.py3-none-any.whl" } ], "1.0.22": [ { "comment_text": "", "digests": { "md5": "f0b711626c935fc2d4dd929ef7b16604", "sha256": "09ed25330736859cc61d32e012374ab76ae049b3e435f85428287e4b1c3514b8" }, "downloads": -1, "filename": "pyttanko-1.0.22-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0b711626c935fc2d4dd929ef7b16604", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12433, "upload_time": "2018-05-15T12:29:59", "url": "https://files.pythonhosted.org/packages/e6/94/88efcd0236254afb9ff42e68c9265e0ce2cd23fe07fe9a542c5b05d6710c/pyttanko-1.0.22-py2.py3-none-any.whl" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "35bd2b534920da3682b1af05f8244665", "sha256": "099f932650e0fd6f1544f61daee99d2339016f2c0fcee1cc71aee0d510e3af9a" }, "downloads": -1, "filename": "pyttanko-1.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35bd2b534920da3682b1af05f8244665", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13805, "upload_time": "2017-08-18T01:37:07", "url": "https://files.pythonhosted.org/packages/3b/5e/9ccbf63e5a5b5cfcfcdaa562b25e6f20efbc297d019f4226bb086f59b82e/pyttanko-1.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a986d97c759e828f0e850452b98302f4", "sha256": "a5398753854b577c5082cb65411b0683303b93babc7a81c2c4bece32b6bab348" }, "downloads": -1, "filename": "pyttanko-1.0.9.tar.gz", "has_sig": false, "md5_digest": "a986d97c759e828f0e850452b98302f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12541, "upload_time": "2017-08-18T01:37:11", "url": "https://files.pythonhosted.org/packages/70/e5/bd413e4d527fed11bd856af2333edd85b62ee4f760368b3129fbc939cb01/pyttanko-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "f2b67ff6b0fccd626fdcc9554a9b1529", "sha256": "396372a7cce0e6edcebdd4135beb409538b4cace83c21dc7878c269d6ce24fc1" }, "downloads": -1, "filename": "pyttanko-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f2b67ff6b0fccd626fdcc9554a9b1529", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13212, "upload_time": "2019-02-09T18:23:58", "url": "https://files.pythonhosted.org/packages/f7/22/92da48ad4b989334f919094cccd9d73486ea3f51e25816413cabaac49b76/pyttanko-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "58c8ac5b0881371f6bd38c3528f49774", "sha256": "c6754ef840ef85d4bf26e0e0495ea7573d08764bf14cf9711023fcc52a4c0bf8" }, "downloads": -1, "filename": "pyttanko-1.1.0.tar.gz", "has_sig": false, "md5_digest": "58c8ac5b0881371f6bd38c3528f49774", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13826, "upload_time": "2019-02-09T18:24:00", "url": "https://files.pythonhosted.org/packages/9d/a0/5a4a5c30c1eddbaa9f7887c6f2635319d4b5fc2804fb3832c871e86ccdf3/pyttanko-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "42916011447bc74e734a1b0b0655628c", "sha256": "31ba1c2f441d53c9667c32c4335e7b0acb391dd2f22761185786119d2b19f39b" }, "downloads": -1, "filename": "pyttanko-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "42916011447bc74e734a1b0b0655628c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13151, "upload_time": "2019-02-10T16:04:34", "url": "https://files.pythonhosted.org/packages/08/fb/75df4f27459f603902d4930de5cd468983ecd5356501d4fc9f9e54986d26/pyttanko-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6fbd57afe9e5d3d80bdccec7853b79b", "sha256": "54a9455ba9ae19541ff4635348530ddf8710f80509dac8c10c91403dc3e98991" }, "downloads": -1, "filename": "pyttanko-1.2.0.tar.gz", "has_sig": false, "md5_digest": "d6fbd57afe9e5d3d80bdccec7853b79b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14910, "upload_time": "2019-02-10T16:04:37", "url": "https://files.pythonhosted.org/packages/bb/89/18ae47ec15189ae833efd1b7df121d91471309f9ca3570f78aa989c56dba/pyttanko-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "2b842b2f745caddb653ca340a936b397", "sha256": "3f5fc4ee239d8a0e84d48292bf1662e5f7f684cc37e4af6b423e62c1191e0b2a" }, "downloads": -1, "filename": "pyttanko-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b842b2f745caddb653ca340a936b397", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13223, "upload_time": "2019-02-13T19:00:59", "url": "https://files.pythonhosted.org/packages/03/87/605087cd7fbc8579a2906e1f81bdcd4308d4244c5534e56be89ded5dea62/pyttanko-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5b7cf56b92896c23a61ef6adfed3eba", "sha256": "3d5b48e2533bc890623d98d3ad049e19693bb0d38e960af53295228e2a5d8307" }, "downloads": -1, "filename": "pyttanko-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a5b7cf56b92896c23a61ef6adfed3eba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13843, "upload_time": "2019-02-13T19:01:03", "url": "https://files.pythonhosted.org/packages/94/65/eb148679fac6d81698e991e76ee199e4925d7b3b5eb467e88006decac4d9/pyttanko-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2b842b2f745caddb653ca340a936b397", "sha256": "3f5fc4ee239d8a0e84d48292bf1662e5f7f684cc37e4af6b423e62c1191e0b2a" }, "downloads": -1, "filename": "pyttanko-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b842b2f745caddb653ca340a936b397", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13223, "upload_time": "2019-02-13T19:00:59", "url": "https://files.pythonhosted.org/packages/03/87/605087cd7fbc8579a2906e1f81bdcd4308d4244c5534e56be89ded5dea62/pyttanko-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5b7cf56b92896c23a61ef6adfed3eba", "sha256": "3d5b48e2533bc890623d98d3ad049e19693bb0d38e960af53295228e2a5d8307" }, "downloads": -1, "filename": "pyttanko-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a5b7cf56b92896c23a61ef6adfed3eba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13843, "upload_time": "2019-02-13T19:01:03", "url": "https://files.pythonhosted.org/packages/94/65/eb148679fac6d81698e991e76ee199e4925d7b3b5eb467e88006decac4d9/pyttanko-1.2.1.tar.gz" } ] }