{
"info": {
"author": "Tom Dong",
"author_email": "tom.tung.dyb@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Rust",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries"
],
"description": "# Omikuji\n[](https://dev.azure.com/yubingdong/omikuji/_build/latest?definitionId=1&branchName=master) [](https://crates.io/crates/omikuji) [](https://pypi.org/project/omikuji/)\n\nAn efficient implementation of Partitioned Label Trees (Prabhu et al., 2018) and its variations for extreme multi-label classification, written in Rust\ud83e\udd80 with love\ud83d\udc96.\n\n## Features & Performance\n\nOmikuji has has been tested on datasets from the [Extreme Classification Repository](http://manikvarma.org/downloads/XC/XMLRepository.html). All tests below are run on a quad-core Intel\u00ae Core\u2122 i7-6700 CPU, and we allowed as many cores to be utilized as possible. We measured training time, and calculated precisions at 1, 3, and 5. (Note that, due to randomness, results might vary from run to run, especially for smaller datasets.)\n\n### Parabel, better parallelized\n\nOmikuji provides a more parallelized implementation of Parabel (Prabhu et al., 2018) that trains faster when more CPU cores are available. Compared to the [original implementation](http://manikvarma.org/code/Parabel/download.html) written in C++, which can only utilize the same number of CPU cores as the number of trees (3 by default), Omikuji maintains the same level of precision but trains 1.3x to 1.7x faster on our quad-core machine. **Further speed-up is possible if more CPU cores are available**.\n\n| Dataset \t| Metric \t| Parabel \t| Omikuji
(balanced,
cluster.k=2) \t|\n|-----------------\t|------------\t|---------\t|------------------------------------------\t|\n| EURLex-4K \t| P@1 \t| 82.2 \t| 82.1 \t|\n| \t| P@3 \t| 68.8 \t| 68.8 \t|\n| \t| P@5 \t| 57.6 \t| 57.7 \t|\n| \t| Train Time \t| 18s \t| 14s \t|\n| Amazon-670K \t| P@1 \t| 44.9 \t| 44.8 \t|\n| \t| P@3 \t| 39.8 \t| 39.8 \t|\n| \t| P@5 \t| 36.0 \t| 36.0 \t|\n| \t| Train Time \t| 404s \t| 234s \t|\n| WikiLSHTC-325K \t| P@1 \t| 65.0 \t| 64.8 \t|\n| \t| P@3 \t| 43.2 \t| 43.1 \t|\n| \t| P@5 \t| 32.0 \t| 32.1 \t|\n| \t| Train Time \t| 959s \t| 659s \t|\n\n### Regular k-means for shallow trees\n\nFollowing Bonsai (Khandagale et al., 2019), Omikuji supports using regular k-means instead of balanced 2-means clustering for tree construction, which results in wider, shallower and unbalanced trees that train slower but have better precision. Comparing to the [original Bonsai implementation](https://github.com/xmc-aalto/bonsai), Omikuji also achieves the same precisions while training 2.6x to 4.6x faster on our quad-core machine. (Similarly, further speed-up is possible if more CPU cores are available.)\n\n| Dataset \t| Metric \t| Bonsai \t| Omikuji
(unbalanced,
cluster.k=100,
max\\_depth=3)\t|\n|-----------------\t|------------\t|---------\t|--------------------------------------------------------------\t|\n| EURLex-4K \t| P@1 \t| 82.8 \t| 83.0 \t|\n| \t| P@3 \t| 69.4 \t| 69.5 \t|\n| \t| P@5 \t| 58.1 \t| 58.3 \t|\n| \t| Train Time \t| 87s \t| 19s \t|\n| Amazon-670K \t| P@1 \t| 45.5* \t| 45.6 \t|\n| \t| P@3 \t| 40.3* \t| 40.4 \t|\n| \t| P@5 \t| 36.5* \t| 36.6 \t|\n| \t| Train Time \t| 5,759s \t| 1,753s \t|\n| WikiLSHTC-325K \t| P@1 \t| 66.6* \t| 66.6 \t|\n| \t| P@3 \t| 44.5* \t| 44.4 \t|\n| \t| P@5 \t| 33.0* \t| 33.0 \t|\n| \t| Train Time \t| 11,156s \t| 4,259s \t|\n\n*\\*Precision numbers as reported in the paper; our machine doesn't have enough memory to run the full prediction with their implementation.*\n\n### Balanced k-means for balanced shallow trees\n\nSometimes it's desirable to have shallow and wide trees that are also balanced, in which case Omikuji supports the balanced k-means algorithm used by HOMER (Tsoumakas et al., 2008) for clustering as well.\n\n| Dataset \t| Metric \t| Omikuji
(balanced,
cluster.k=100)\t|\n|-----------------\t|------------\t|------------------------------------------\t|\n| EURLex-4K \t| P@1 \t| 82.1 \t|\n| \t| P@3 \t| 69.4 \t|\n| \t| P@5 \t| 58.1 \t|\n| \t| Train Time \t| 19s \t|\n| Amazon-670K \t| P@1 \t| 45.4 \t|\n| \t| P@3 \t| 40.3 \t|\n| \t| P@5 \t| 36.5 \t|\n| \t| Train Time \t| 1,153s \t|\n| WikiLSHTC-325K \t| P@1 \t| 65.6 \t|\n| \t| P@3 \t| 43.6 \t|\n| \t| P@5 \t| 32.5 \t|\n| \t| Train Time \t| 3,028s \t|\n\n### Layer collapsing for balanced shallow trees\n\nAn alternative way for building balanced, shallow and wide trees is to collapse adjacent layers, similar to the tree compression step used in AttentionXML (You et al., 2019): intermediate layers are removed, and their children replace them as the children of their parents. For example, with balanced 2-means clustering, if we collapse 5 layers after each layer, we can increase the tree arity from 2 to 2\u2075\u207a\u00b9 = 64.\n\n| Dataset \t| Metric \t| Omikuji
(balanced,
cluster.k=2,
collapse 5 layers)\t|\n|-----------------\t|------------\t|---------------------------------------------------------------\t|\n| EURLex-4K \t| P@1 \t| 82.4 \t|\n| \t| P@3 \t| 69.3 \t|\n| \t| P@5 \t| 58.0 \t|\n| \t| Train Time \t| 16s \t|\n| Amazon-670K \t| P@1 \t| 45.3 \t|\n| \t| P@3 \t| 40.2 \t|\n| \t| P@5 \t| 36.4 \t|\n| \t| Train Time \t| 460s \t|\n| WikiLSHTC-325K \t| P@1 \t| 64.9 \t|\n| \t| P@3 \t| 43.3 \t|\n| \t| P@5 \t| 32.3 \t|\n| \t| Train Time \t| 1,649s \t|\n\n## Build & Install\nOmikuji can be easily built & installed with [Cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) as a CLI app:\n```\ncargo install omikuji --features cli\n```\n\nOr install from the latest source:\n```\ncargo install --git https://github.com/tomtung/omikuji.git --features cli\n```\n\nThe CLI app will be available as `omikuji`. For example, to reproduce the results on the EURLex-4K dataset:\n```\nomikuji train eurlex_train.txt --model_path ./model\nomikuji test ./model eurlex_test.txt --out_path predictions.txt\n```\n\n\n### Python Binding\n\nA simple Python binding is also available for training and prediction. It can be install via `pip`:\n```\npip install omikuji\n```\n\nNote that you might still need to install Cargo should compilation become necessary.\n\nYou can also install from the latest source:\n```\npip install git+https://github.com/tomtung/omikuji.git -v\n```\n\nThe following script demonstrates how to use the Python binding to train a model and make predictions:\n\n```python\nimport omikuji\n\n# Train\nhyper_param = omikuji.Model.default_hyper_param()\n# Adjust hyper-parameters as needed\nhyper_param.n_trees = 5\nmodel = omikuji.Model.train_on_data(\"./eurlex_train.txt\", hyper_param)\n\n# Serialize & de-serialize\nmodel.save(\"./model\")\nmodel = omikuji.Model.load(\"./model\")\n# Optionally densify model weights to trade off between prediction speed and memory usage\nmodel.densify_weights(0.05)\n\n# Predict\nfeature_value_pairs = [\n (0, 0.101468),\n (1, 0.554374),\n (2, 0.235760),\n (3, 0.065255),\n (8, 0.152305),\n (10, 0.155051),\n # ...\n]\nlabel_score_pairs = model.predict(feature_value_pairs)\n```\n\n## Usage\n```\n$ omikuji train --help\nomikuji-train\nTrain a new model\n\nUSAGE:\n omikuji train [FLAGS] [OPTIONS] \n\nFLAGS:\n --cluster.unbalanced Perform regular k-means clustering instead of balanced k-means clustering\n -h, --help Prints help information\n --tree_structure_only Build the trees without training classifiers; useful when a downstream user needs the\n tree structures only\n -V, --version Prints version information\n\nOPTIONS:\n --centroid_threshold Threshold for pruning label centroid vectors [default: 0]\n --cluster.eps Epsilon value for determining clustering convergence [default: 0.0001]\n --cluster.k Number of clusters [default: 2]\n --cluster.min_size \n Labels in clusters with sizes smaller than this threshold are reassigned to other clusters instead [default:\n 2]\n --collapse_every_n_layers \n Number of adjacent layers to collapse, which increases tree arity and decreases tree depth [default: 0]\n\n --linear.c Cost co-efficient for regularizing linear classifiers [default: 1]\n --linear.eps \n Epsilon value for determining linear classifier convergence [default: 0.1]\n\n --linear.loss \n Loss function used by linear classifiers [default: hinge] [possible values: hinge, log]\n\n --linear.max_iter \n Max number of iterations for training each linear classifier [default: 20]\n\n --linear.weight_threshold \n Threshold for pruning weight vectors of linear classifiers [default: 0.1]\n\n --max_depth Maximum tree depth [default: 20]\n --min_branch_size \n Number of labels below which no further clustering & branching is done [default: 100]\n\n --model_path \n Optional path of the directory where the trained model will be saved if provided; if an model with\n compatible settings is already saved in the given directory, the newly trained trees will be added to the\n existing model\n --n_threads \n Number of worker threads. If 0, the number is selected automatically [default: 0]\n\n --n_trees Number of trees [default: 3]\n\nARGS:\n Path to training dataset file (in the format of the Extreme Classification Repository)\n```\n\n```\n$ omikuji test --help\nomikuji-test\nTest an existing model\n\nUSAGE:\n omikuji test [OPTIONS] \n\nFLAGS:\n -h, --help Prints help information\n -V, --version Prints version information\n\nOPTIONS:\n --beam_size Beam size for beam search [default: 10]\n --k_top Number of top predictions to write out for each test example [default: 5]\n --max_sparse_density Density threshold above which sparse weight vectors are converted to dense\n format. Lower values speed up prediction at the cost of more memory usage\n [default: 0.1]\n --n_threads Number of worker threads. If 0, the number is selected automatically [default:\n 0]\n --out_path Path to the which predictions will be written, if provided\n\nARGS:\n Path of the directory where the trained model is saved\n Path to test dataset file (in the format of the Extreme Classification Repository)\n```\n\n### Data format\n\nOur implementation takes dataset files formatted as those provided in the [Extreme Classification Repository](http://manikvarma.org/downloads/XC/XMLRepository.html). A data file starts with a header line with three space-separated integers: total number of examples, number of features, and number of labels. Following the header line, there is one line per each example, starting with comma-separated labels, followed by space-separated feature:value pairs:\n```\nlabel1,label2,...labelk ft1:ft1_val ft2:ft2_val ft3:ft3_val .. ftd:ftd_val\n```\n\n## Trivia\n\nThe project name comes from [o-mikuji](https://en.wikipedia.org/wiki/O-mikuji) (\u5fa1\u795e\u7c64), which are predictions about one's future written on strips of paper (labels?) at jinjas and temples in Japan, often tied to branches of pine trees after they are read.\n\n## References\n- Y. Prabhu, A. Kag, S. Harsola, R. Agrawal, and M. Varma, \u201cParabel: Partitioned Label Trees for Extreme Classification with Application to Dynamic Search Advertising,\u201d in Proceedings of the 2018 World Wide Web Conference, 2018, pp. 993\u20131002.\n- S. Khandagale, H. Xiao, and R. Babbar, \u201cBonsai - Diverse and Shallow Trees for Extreme Multi-label Classification,\u201d Apr. 2019.\n- G. Tsoumakas, I. Katakis, and I. Vlahavas, \u201cEffective and efficient multilabel classification in domains with large number of labels,\u201d ECML, 2008.\n- R. You, S. Dai, Z. Zhang, H. Mamitsuka, and S. Zhu, \u201cAttentionXML: Extreme Multi-Label Text Classification with Multi-Label Attention Based Recurrent Neural Networks,\u201d Jun. 2019.\n\n## License\nOmikuji is licensed under the MIT License.\n\n\n",
"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/tomtung/omikuji",
"keywords": "",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "omikuji",
"package_url": "https://pypi.org/project/omikuji/",
"platform": "any",
"project_url": "https://pypi.org/project/omikuji/",
"project_urls": {
"Homepage": "https://github.com/tomtung/omikuji"
},
"release_url": "https://pypi.org/project/omikuji/0.1.3/",
"requires_dist": [
"milksnake"
],
"requires_python": ">=3.5",
"summary": "Python binding to Omikuji, an efficient implementation of Partioned Label Trees and its variations for extreme multi-label classification",
"version": "0.1.3"
},
"last_serial": 5726118,
"releases": {
"0.1.2": [
{
"comment_text": "",
"digests": {
"md5": "c8b61155b70f8b9ea1cdddaa988dcefd",
"sha256": "090ffe9007f2288aea42df0d47c7940dfcd678f89319963f269606c1b36e4bd0"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp35-cp35m-macosx_10_6_intel.whl",
"has_sig": false,
"md5_digest": "c8b61155b70f8b9ea1cdddaa988dcefd",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 441936,
"upload_time": "2019-08-23T11:20:16",
"url": "https://files.pythonhosted.org/packages/05/21/0f3ba71823557ef070816339aaa8a6fd076ceab46072ac506b2c8290721f/omikuji-0.1.2-cp35-cp35m-macosx_10_6_intel.whl"
},
{
"comment_text": "",
"digests": {
"md5": "00e1694b27addc66d8e8694686ca71f9",
"sha256": "7743d9e10d42b8e33e6d97a6d83b2195d6a9e07deef349169f0f04310f47656c"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp35-cp35m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "00e1694b27addc66d8e8694686ca71f9",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1005056,
"upload_time": "2019-08-23T11:20:20",
"url": "https://files.pythonhosted.org/packages/ff/7f/3acdb3b50d35ab10774bd7b6881e463cb0e87bd992db9364b8035f6e209a/omikuji-0.1.2-cp35-cp35m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "57b3b40ab6cc34567f89954047cfbfae",
"sha256": "131d889bece7b386ff4074763dee684fb4be96ad57af4d9bfe719ff05674756a"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp35-cp35m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "57b3b40ab6cc34567f89954047cfbfae",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1005058,
"upload_time": "2019-08-23T11:20:23",
"url": "https://files.pythonhosted.org/packages/ed/61/74ac67f51a3e2cd4dfed299063ec0da4c8929cae164cacd52a2aa80475bd/omikuji-0.1.2-cp35-cp35m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "119026839cf7f690afe907fcd8b0d0ca",
"sha256": "aaf085de23c69a766d0a770e33e06cae829d8c709f969073f4e8ed6ca0e517ae"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp35-cp35m-win_amd64.whl",
"has_sig": false,
"md5_digest": "119026839cf7f690afe907fcd8b0d0ca",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 365362,
"upload_time": "2019-08-23T11:20:25",
"url": "https://files.pythonhosted.org/packages/1a/f2/5fcc9d20a74fab07e624ca82a965cb462d47eb9c0679e9a6a8230139e795/omikuji-0.1.2-cp35-cp35m-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ffdc36fcfaa170ea37a6edd5ae9c5a34",
"sha256": "f1af1edb01404837b1b01ed709d8c0b8bbec969f3633254794d168da06def903"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp36-cp36m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "ffdc36fcfaa170ea37a6edd5ae9c5a34",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 442212,
"upload_time": "2019-08-23T11:20:27",
"url": "https://files.pythonhosted.org/packages/d4/b1/f0391fee5be19997aaed081ae083112626e7d7dd35ba88ed6b6b9edfc8e0/omikuji-0.1.2-cp36-cp36m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5e8dca91f6456c279e89ab25305e3315",
"sha256": "7602a46f63433d9b314f38aa79191f672695339f4b4fc9b0a7124ef0b1f25015"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp36-cp36m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "5e8dca91f6456c279e89ab25305e3315",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1005611,
"upload_time": "2019-08-23T11:20:30",
"url": "https://files.pythonhosted.org/packages/9e/c1/dca5916cb5222bdbb4d6e1c42213e61d59f565f4e3faca518730f10f83d6/omikuji-0.1.2-cp36-cp36m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2e8a7f86b687fd2823b31ab1d50c010a",
"sha256": "b9f75912a83b3d3c8e20991ada50eae172941a1bfe6efe6322d3b2b247150e6f"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp36-cp36m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "2e8a7f86b687fd2823b31ab1d50c010a",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1005614,
"upload_time": "2019-08-23T11:20:33",
"url": "https://files.pythonhosted.org/packages/0d/72/51c38f334b32ea18f6daa35326471f3f64cf4ad7dec4dfd74ca164459105/omikuji-0.1.2-cp36-cp36m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "3d6614fe9bb62912e545f243fe1e8ec0",
"sha256": "50e289bf061fad978ece184412d139da46f5a85b2a63fa76badd3e35bda04392"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "3d6614fe9bb62912e545f243fe1e8ec0",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 441699,
"upload_time": "2019-08-23T11:20:36",
"url": "https://files.pythonhosted.org/packages/8b/45/c27a0002e631ad1c299cf6b0b8f654bef8c89a4d131682b867590f362541/omikuji-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "4ead99456b567a3413f00b259b86af87",
"sha256": "50ba9bca8d05829eecc75f91b0308f2969c8ffdf44ff0f7f0e3295ade3643b12"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp37-cp37m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "4ead99456b567a3413f00b259b86af87",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1005294,
"upload_time": "2019-08-23T11:20:39",
"url": "https://files.pythonhosted.org/packages/0d/ef/915e0a63dc6f25a053be5a01b8725fe7b457db167d83177cb3b5db177dac/omikuji-0.1.2-cp37-cp37m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "3e4bdeda4f25a477f571ef285aa30fd9",
"sha256": "e4427e456636bce621540630d33ac9c47824e7c50491f7931760d2426c9a802a"
},
"downloads": -1,
"filename": "omikuji-0.1.2-cp37-cp37m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "3e4bdeda4f25a477f571ef285aa30fd9",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1005298,
"upload_time": "2019-08-23T11:20:42",
"url": "https://files.pythonhosted.org/packages/21/4b/d4bde9b219f2d905c4d03688df19dc17afe136db08385a8906af2f7aeaed/omikuji-0.1.2-cp37-cp37m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "840c3f5ef81b1683c789d3aaf631ab66",
"sha256": "e7426e65b0096c7595ff8548721e76270be83f5f071b0fae8b435d3fb036a29c"
},
"downloads": -1,
"filename": "omikuji-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "840c3f5ef81b1683c789d3aaf631ab66",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 43545,
"upload_time": "2019-08-23T11:20:44",
"url": "https://files.pythonhosted.org/packages/4d/1f/56b0e541f95c4dcb2fcd91492b1c86e4484967fa10744cf9c713e8475e1a/omikuji-0.1.2.tar.gz"
}
],
"0.1.3": [
{
"comment_text": "",
"digests": {
"md5": "e287c4f290bc178ad6ecf5409a3dffba",
"sha256": "adb440610c5c81221f410997453cf192cd44b6798081a81034903ee9f96eb02f"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-macosx_10_6_intel.whl",
"has_sig": false,
"md5_digest": "e287c4f290bc178ad6ecf5409a3dffba",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 445037,
"upload_time": "2019-08-25T05:30:11",
"url": "https://files.pythonhosted.org/packages/82/08/f765f9f15a8be7ec6011f23f8bb4d9a84de4a1d36a366b26e7d27a61a52f/omikuji-0.1.3-cp35-cp35m-macosx_10_6_intel.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e3da4c49c2dfd900d9a4c643dbca0c6a",
"sha256": "5a5a9d423c60b121fd5c72fb998a93a1e6df0d6dc7f4133728fb4b757d20f22f"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "e3da4c49c2dfd900d9a4c643dbca0c6a",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1009996,
"upload_time": "2019-08-25T05:30:15",
"url": "https://files.pythonhosted.org/packages/78/1b/8151dcc2c3cad2935477d1190048116f1ce7edccab965140bfcc1f4f2f60/omikuji-0.1.3-cp35-cp35m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8828ae598f9d9526befba5b7ef974a65",
"sha256": "b9ef22168d4f0c25d3d2f946e6cc9640afa3261f03a858d4dec9ebf5f53540bc"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "8828ae598f9d9526befba5b7ef974a65",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1009999,
"upload_time": "2019-08-25T05:30:18",
"url": "https://files.pythonhosted.org/packages/71/71/5b019955254699420a0a5f2a9158f6f7d5f39fe3669a6132af355ca87f8e/omikuji-0.1.3-cp35-cp35m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6af14c054700823cff6c1ee13450b1b7",
"sha256": "459405d1bff466fc8da683547b934a65118b7837145ed3ba2af42d192b52bde8"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-win_amd64.whl",
"has_sig": false,
"md5_digest": "6af14c054700823cff6c1ee13450b1b7",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 368618,
"upload_time": "2019-08-25T05:30:20",
"url": "https://files.pythonhosted.org/packages/27/7f/0f3e171aced733c6f313cb8380254d6beee2f69e355719bf4d423bca7585/omikuji-0.1.3-cp35-cp35m-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "01bc9cad6c35f470096cc155a51d3759",
"sha256": "891781efe36677096ec00663776d1392c30d0e365b8ff585238fc51c61f645ae"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "01bc9cad6c35f470096cc155a51d3759",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 444849,
"upload_time": "2019-08-25T05:30:23",
"url": "https://files.pythonhosted.org/packages/e0/6c/78a003f6b3d7dd1213b9c10eb8e23b4653a90d52119215bb8f710e2beb14/omikuji-0.1.3-cp36-cp36m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "4b330e89fc0757b1081122286aea3b68",
"sha256": "0ef5972f45d120bbf14e4a9994411344be9775bd37711aef5b3be34e5dfb5b45"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "4b330e89fc0757b1081122286aea3b68",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1010240,
"upload_time": "2019-08-25T05:30:26",
"url": "https://files.pythonhosted.org/packages/d4/e2/f1b7d1db5eb7b670f7e6728fc3aec8f90159e5c2e503f9a4c08b4c0a9efc/omikuji-0.1.3-cp36-cp36m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c9b5f69637d856123685a5175662352a",
"sha256": "3a279ff3f72e7ee455e17c3533184087e3e9b061c58d35d1635cbaac7e6bf982"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "c9b5f69637d856123685a5175662352a",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1010241,
"upload_time": "2019-08-25T05:30:30",
"url": "https://files.pythonhosted.org/packages/ae/a1/177f0123c0aa77d5cfaf284d8cdc64391feeaa03035cad1b85d609657432/omikuji-0.1.3-cp36-cp36m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d9b187ec8820033d3720fab0c725a101",
"sha256": "d2a74c62ee63b6447d8a8926b528b25aedd8879670957ebe4174b62b28f172bf"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "d9b187ec8820033d3720fab0c725a101",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 445681,
"upload_time": "2019-08-25T05:30:32",
"url": "https://files.pythonhosted.org/packages/b9/23/6840d6b804b9576db825aab4b4983d021a607a246f8a89781e6a32af6bf9/omikuji-0.1.3-cp37-cp37m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9c22544640fb8633d175dba2dfed312b",
"sha256": "0ce8409794983be2a3a38ea17e64ffb877b42df7d60aec3278220d6db899b53e"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "9c22544640fb8633d175dba2dfed312b",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1010512,
"upload_time": "2019-08-25T05:30:35",
"url": "https://files.pythonhosted.org/packages/aa/68/5bcd130dfa6c35d5450df4f95bbd71f003b4ed518b7b9a7ede53e8517f7a/omikuji-0.1.3-cp37-cp37m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "045af77004d02ce5f20ab5acce0ef2dc",
"sha256": "f79fcef6095219e929d3f72dd2ad4fddc021b2f65ab7fbe01b65d168c0484252"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "045af77004d02ce5f20ab5acce0ef2dc",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1010516,
"upload_time": "2019-08-25T05:30:39",
"url": "https://files.pythonhosted.org/packages/98/fe/1195b04d23a339ddcfb2d7c747e4bc00e878e14690a162bc53f8741cd46f/omikuji-0.1.3-cp37-cp37m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d0f3859af57c894b6b77ca77e87d79fc",
"sha256": "60f4de4cf39c1076622e28b09468b4bab03d07c47aefbd48e01bb9db4d0f5986"
},
"downloads": -1,
"filename": "omikuji-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "d0f3859af57c894b6b77ca77e87d79fc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 48791,
"upload_time": "2019-08-25T05:30:41",
"url": "https://files.pythonhosted.org/packages/bc/09/76fb89d2efbe32ecb9519ad595cb5649f148e0ae4e6bffafdb2816fd1a75/omikuji-0.1.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "e287c4f290bc178ad6ecf5409a3dffba",
"sha256": "adb440610c5c81221f410997453cf192cd44b6798081a81034903ee9f96eb02f"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-macosx_10_6_intel.whl",
"has_sig": false,
"md5_digest": "e287c4f290bc178ad6ecf5409a3dffba",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 445037,
"upload_time": "2019-08-25T05:30:11",
"url": "https://files.pythonhosted.org/packages/82/08/f765f9f15a8be7ec6011f23f8bb4d9a84de4a1d36a366b26e7d27a61a52f/omikuji-0.1.3-cp35-cp35m-macosx_10_6_intel.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e3da4c49c2dfd900d9a4c643dbca0c6a",
"sha256": "5a5a9d423c60b121fd5c72fb998a93a1e6df0d6dc7f4133728fb4b757d20f22f"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "e3da4c49c2dfd900d9a4c643dbca0c6a",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1009996,
"upload_time": "2019-08-25T05:30:15",
"url": "https://files.pythonhosted.org/packages/78/1b/8151dcc2c3cad2935477d1190048116f1ce7edccab965140bfcc1f4f2f60/omikuji-0.1.3-cp35-cp35m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8828ae598f9d9526befba5b7ef974a65",
"sha256": "b9ef22168d4f0c25d3d2f946e6cc9640afa3261f03a858d4dec9ebf5f53540bc"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "8828ae598f9d9526befba5b7ef974a65",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 1009999,
"upload_time": "2019-08-25T05:30:18",
"url": "https://files.pythonhosted.org/packages/71/71/5b019955254699420a0a5f2a9158f6f7d5f39fe3669a6132af355ca87f8e/omikuji-0.1.3-cp35-cp35m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6af14c054700823cff6c1ee13450b1b7",
"sha256": "459405d1bff466fc8da683547b934a65118b7837145ed3ba2af42d192b52bde8"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp35-cp35m-win_amd64.whl",
"has_sig": false,
"md5_digest": "6af14c054700823cff6c1ee13450b1b7",
"packagetype": "bdist_wheel",
"python_version": "cp35",
"requires_python": ">=3.5",
"size": 368618,
"upload_time": "2019-08-25T05:30:20",
"url": "https://files.pythonhosted.org/packages/27/7f/0f3e171aced733c6f313cb8380254d6beee2f69e355719bf4d423bca7585/omikuji-0.1.3-cp35-cp35m-win_amd64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "01bc9cad6c35f470096cc155a51d3759",
"sha256": "891781efe36677096ec00663776d1392c30d0e365b8ff585238fc51c61f645ae"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "01bc9cad6c35f470096cc155a51d3759",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 444849,
"upload_time": "2019-08-25T05:30:23",
"url": "https://files.pythonhosted.org/packages/e0/6c/78a003f6b3d7dd1213b9c10eb8e23b4653a90d52119215bb8f710e2beb14/omikuji-0.1.3-cp36-cp36m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "4b330e89fc0757b1081122286aea3b68",
"sha256": "0ef5972f45d120bbf14e4a9994411344be9775bd37711aef5b3be34e5dfb5b45"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "4b330e89fc0757b1081122286aea3b68",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1010240,
"upload_time": "2019-08-25T05:30:26",
"url": "https://files.pythonhosted.org/packages/d4/e2/f1b7d1db5eb7b670f7e6728fc3aec8f90159e5c2e503f9a4c08b4c0a9efc/omikuji-0.1.3-cp36-cp36m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c9b5f69637d856123685a5175662352a",
"sha256": "3a279ff3f72e7ee455e17c3533184087e3e9b061c58d35d1635cbaac7e6bf982"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp36-cp36m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "c9b5f69637d856123685a5175662352a",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.5",
"size": 1010241,
"upload_time": "2019-08-25T05:30:30",
"url": "https://files.pythonhosted.org/packages/ae/a1/177f0123c0aa77d5cfaf284d8cdc64391feeaa03035cad1b85d609657432/omikuji-0.1.3-cp36-cp36m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d9b187ec8820033d3720fab0c725a101",
"sha256": "d2a74c62ee63b6447d8a8926b528b25aedd8879670957ebe4174b62b28f172bf"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "d9b187ec8820033d3720fab0c725a101",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 445681,
"upload_time": "2019-08-25T05:30:32",
"url": "https://files.pythonhosted.org/packages/b9/23/6840d6b804b9576db825aab4b4983d021a607a246f8a89781e6a32af6bf9/omikuji-0.1.3-cp37-cp37m-macosx_10_9_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9c22544640fb8633d175dba2dfed312b",
"sha256": "0ce8409794983be2a3a38ea17e64ffb877b42df7d60aec3278220d6db899b53e"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "9c22544640fb8633d175dba2dfed312b",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1010512,
"upload_time": "2019-08-25T05:30:35",
"url": "https://files.pythonhosted.org/packages/aa/68/5bcd130dfa6c35d5450df4f95bbd71f003b4ed518b7b9a7ede53e8517f7a/omikuji-0.1.3-cp37-cp37m-manylinux1_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "045af77004d02ce5f20ab5acce0ef2dc",
"sha256": "f79fcef6095219e929d3f72dd2ad4fddc021b2f65ab7fbe01b65d168c0484252"
},
"downloads": -1,
"filename": "omikuji-0.1.3-cp37-cp37m-manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "045af77004d02ce5f20ab5acce0ef2dc",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.5",
"size": 1010516,
"upload_time": "2019-08-25T05:30:39",
"url": "https://files.pythonhosted.org/packages/98/fe/1195b04d23a339ddcfb2d7c747e4bc00e878e14690a162bc53f8741cd46f/omikuji-0.1.3-cp37-cp37m-manylinux2010_x86_64.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d0f3859af57c894b6b77ca77e87d79fc",
"sha256": "60f4de4cf39c1076622e28b09468b4bab03d07c47aefbd48e01bb9db4d0f5986"
},
"downloads": -1,
"filename": "omikuji-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "d0f3859af57c894b6b77ca77e87d79fc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 48791,
"upload_time": "2019-08-25T05:30:41",
"url": "https://files.pythonhosted.org/packages/bc/09/76fb89d2efbe32ecb9519ad595cb5649f148e0ae4e6bffafdb2816fd1a75/omikuji-0.1.3.tar.gz"
}
]
}