{ "info": { "author": "Nobrainer Developers", "author_email": "jakub.kaczmarzyk@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Healthcare Industry", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Nobrainer\n\n![Build status](https://github.com/neuronets/nobrainer/actions/workflows/ci.yml/badge.svg)\n\n_Nobrainer_ is a deep learning framework for 3D image processing. It implements\nseveral 3D convolutional models from recent literature, methods for loading and\naugmenting volumetric data that can be used with any TensorFlow or Keras model,\nlosses and metrics for 3D data, and simple utilities for model training, evaluation,\nprediction, and transfer learning.\n\n_Nobrainer_ also provides pre-trained models for brain extraction, brain segmentation,\nbrain generation and other tasks. Please see the [_Trained_ models](https://github.com/neuronets/trained-models)\nrepository for more information.\n\nThe _Nobrainer_ project is supported by NIH RF1MH121885 and is distributed under\nthe Apache 2.0 license. It was started under the support of NIH R01 EB020470.\n\n## Table of contents\n\n- [Implementations](#implementations)\n - [Models](#models)\n - [Dropout and additional layers](#dropout-and-regularization-layers)\n - [Losses](#losses)\n - [Metrics](#metrics)\n - [Augmentation methods](#augmentation-methods)\n- [Guide Jupyter Notebooks](#guide-jupyter-notebooks-)\n- [Installation](#installation)\n - [Container](#container)\n - [GPU support](#gpu-support)\n - [CPU only](#cpu-only)\n - [pip](#pip)\n- [Using pre-trained networks](#using-pre-trained-networks)\n - [Predicting a brainmask for a T1-weighted brain scan](#predicting-a-brainmask-for-a-t1-weighted-brain-scan)\n - [Generating a synthetic T1-weighted brain scan](#generating-a-synthetic-t1-weighted-brain-scan)\n - [Transfer learning](#transfer-learning)\n- [Data augmentation](#data-augmentation)\n - [Random rigid transformation](#random-rigid-transformation)\n- [Package layout](#package-layout)\n- [Questions or issues](#questions-or-issues)\n\n## Implementations\n### Models\n| Model | Type | Application |\n|:-----------|:-------------:|:-------------:|\n|[**Highresnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/highresnet.py) [(source)](https://arxiv.org/abs/1707.01992)| supervised | segmentation/classification |\n|[**Unet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/unet.py) [(source)](https://arxiv.org/abs/1606.06650)| supervised | segmentation/classification |\n|[**Vnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/vnet.py) [(source)](https://arxiv.org/pdf/1606.04797.pdf)| supervised | segmentation/classification |\n|[**Meshnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/meshnet.py) [(source)](https://arxiv.org/abs/1612.00940)| supervised | segmentation/clssification |\n|[**Bayesian Meshnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/bayesian-meshnet.py) [(source)](https://www.frontiersin.org/articles/10.3389/fninf.2019.00067/full)| bayesian supervised | segmentation/classification |\n|[**Bayesian Vnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/bayesian_vnet.py) | bayesian supervised | segmentation/classification |\n|[**Semi_Bayesian Vnet**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/bayesian_vnet.py) | semi-bayesian supervised | segmentation/classification |\n|[**DCGAN**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/dcgan.py) | self supervised | generative model |\n|[**Progressive GAN**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/progressivegan.py) | self supervised | generative model |\n|[**3D Autoencoder**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/autoencoder.py) | self supervised | knowledge representation/dimensionality reduction |\n|[**3D Progressive Autoencoder**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/progressiveae.py) | self supervised | knowledge representation/dimensionality reduction |\n|[**3D SimSiam**](https://github.com/neuronets/nobrainer/blob/master/nobrainer/models/brainsiam.py) [(source)](https://arxiv.org/abs/2011.10566)| self supervised | Siamese Representation Learning |\n\n### Dropout and regularization layers\n[Bernouli dropout layer](https://github.com/neuronets/nobrainer/blob/80d8a47a7f2bf4fe335bdf194c0be19044223629/nobrainer/layers/dropout.py#L15), [Concrete dropout layer](https://github.com/neuronets/nobrainer/blob/80d8a47a7f2bf4fe335bdf194c0be19044223629/nobrainer/layers/dropout.py#L71), [Gaussian dropout](https://github.com/neuronets/nobrainer/blob/80d8a47a7f2bf4fe335bdf194c0be19044223629/nobrainer/layers/dropout.py#L204), [Group normalization layer](), [Costom padding layer]()\n\n### Losses\n[Dice](), [Jaccard](), [Tversky](), [ELBO](), [Wasserstien](), [Gradient Penalty]()\n\n### Metrics\n[Dice](), [Generalized Dice](), [Jaccard](), [Hamming](), [Tversky]()\n\n### Augmentation methods\n#### Spatial Transforms\n[Center crop](), [Spacial Constant Padding](), [Random Crop](), [Resize](), [Random flip (left and right)]()\n\n#### Intensity Transforms\n[Add gaussian noise](), [Min-Max intensity scaling](), [Costom intensity scaling](), [Intensity masking](), [Contrast adjustment]()\n\n#### Affine Transform\nAfifine transformation including rotation, translation, reflection.\n\n## Guide Jupyter Notebooks [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuronets/nobrainer)\n\nPlease refer to the Jupyter notebooks in the [guide](/guide) directory to get\nstarted with _Nobrainer_. [Try them out](https://colab.research.google.com/github/neuronets/nobrainer) in Google Colaboratory!\n\n## Installation\n\n### Container\n\nWe recommend using the official _Nobrainer_ Docker container, which includes all\nof the dependencies necessary to use the framework. Please see the available images\non [DockerHub](https://hub.docker.com/r/neuronets/nobrainer)\n\n#### GPU support\n\nThe _Nobrainer_ containers with GPU support use the Tensorflow jupyter GPU containers. Please\ncheck the containers for the version of CUDA installed. Nvidia drivers are not included in\nthe container.\n\n```\n$ docker pull neuronets/nobrainer:latest-gpu\n$ singularity pull docker://neuronets/nobrainer:latest-gpu\n```\n\n#### CPU only\n\nThis container can be used on all systems that have Docker or Singularity and\ndoes not require special hardware. This container, however, should not be used\nfor model training (it will be very slow).\n\n```\n$ docker pull neuronets/nobrainer:latest-cpu\n$ singularity pull docker://neuronets/nobrainer:latest-cpu\n```\n\n### pip\n\n_Nobrainer_ can also be installed with pip.\n\n```\n$ pip install nobrainer\n```\n\n## Using pre-trained networks\n\nPre-trained networks are available in the [_Trained_ models](https://github.com/neuronets/trained-models)\nrepository. Prediction can be done on the command-line with `nobrainer predict`\nor in Python. Similarly, generation can be done on the command-line with\n`nobrainer generate` or in Python.\n\n### Predicting a brainmask for a T1-weighted brain scan\n\n![Model's prediction of brain mask](https://github.com/neuronets/trained-models/blob/master/images/brain-extraction/unet-best-prediction.png?raw=true)\n![Model's prediction of brain mask](https://github.com/neuronets/trained-models/blob/master/images/brain-extraction/unet-worst-prediction.png?raw=true)\n__Figure__: In the first column are T1-weighted brain scans, in the middle\nare a trained model's predictions, and on the right are binarized FreeSurfer\nsegmentations. Despite being trained on binarized FreeSurfer segmentations,\nthe model outperforms FreeSurfer in the bottom scan, which exhibits motion\ndistortion. It took about three seconds for the model to predict each brainmask\nusing an NVIDIA GTX 1080Ti. It takes about 70 seconds on a recent CPU.\n\nIn the following examples, we will use a 3D U-Net trained for brain extraction and\ndocumented in [_Trained_ models](https://github.com/neuronets/trained-models#brain-extraction).\n\nIn the base case, we run the T1w scan through the model for prediction.\n\n```bash\n# Get sample T1w scan.\nwget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n predict \\\n --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \\\n --verbose \\\n /data/T1w.nii.gz \\\n /data/brainmask.nii.gz\n```\n\nFor binary segmentation where we expect one predicted region, as is the case with\nbrain extraction, we can reduce false positives by removing all predictions not\nconnected to the largest contiguous label.\n\n```bash\n# Get sample T1w scan.\nwget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n predict \\\n --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \\\n --largest-label \\\n --verbose \\\n /data/T1w.nii.gz \\\n /data/brainmask-largestlabel.nii.gz\n```\n\nBecause the network was trained on randomly rotated data, it should be agnostic\nto orientation. Therefore, we can rotate the volume, predict on it, undo the\nrotation in the prediction, and average the prediction with that from the original\nvolume. This can lead to a better overall prediction but will at least double the\nprocessing time. To enable this, use the flag `--rotate-and-predict` in\n`nobrainer predict`.\n\n```bash\n# Get sample T1w scan.\nwget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n predict \\\n --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \\\n --rotate-and-predict \\\n --verbose \\\n /data/T1w.nii.gz \\\n /data/brainmask-withrotation.nii.gz\n```\n\nCombining the above, we can usually achieve the best brain extraction by using\n`--rotate-and-predict` in conjunction with `--largest-label`.\n\n```bash\n# Get sample T1w scan.\nwget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n predict \\\n --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \\\n --largest-label \\\n --rotate-and-predict \\\n --verbose \\\n /data/T1w.nii.gz \\\n /data/brainmask-maybebest.nii.gz\n```\n\n### Generating a synthetic T1-weighted brain scan\n\n![Model's generation of brain (sagittal)](https://github.com/neuronets/trained-models/blob/master/images/brain-generation/progressivegan_generation_sagittal.png?raw=true)\n![Model's generation of brain (axial)](https://github.com/neuronets/trained-models/blob/master/images/brain-generation/progressivegan_generation_axial.png?raw=true)\n![Model's generation of brain (coronal)](https://github.com/neuronets/trained-models/blob/master/images/brain-generation/progressivegan_generation_coronal.png?raw=true)\n__Figure__: Progressive generation of T1-weighted brain MR scan starting\nfrom a resolution of 32 to 256 (Left to Right: 323, 643,\n1283, 2563). The brain scans are generated using the same\nlatents in all resolutions. It took about 6 milliseconds for the model to generate\nthe 2563 brainscan using an NVIDIA TESLA V-100.\n\nIn the following examples, we will use a Progressive Generative Adversarial Network\ntrained for brain image generation and documented in\n[_Trained_ models](https://github.com/neuronets/trained-models#brain-extraction).\n\nIn the base case, we generate a T1w scan through the model for a given resolution.\nWe need to pass the directory containing the models `(tf.SavedModel)` created\nwhile training the networks.\n\n```bash\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n generate \\\n --model=/models/neuronets/braingen/0.1.0 \\\n --output-shape=128 128 128 \\\n /data/generated.nii.gz\n```\n\nWe can also generate multiple resolutions of the brain image using the same\nlatents to visualize the progression\n\n```bash\n# Get sample T1w scan.\ndocker run --rm -v $PWD:/data neuronets/nobrainer \\\n generate \\\n --model=/models/neuronets/braingen/0.1.0 \\\n --multi-resolution \\\n /data/generated.nii.gz\n```\n\nIn the above example, the multi resolution images will be saved as\n`generated_res_{resolution}.nii.gz`\n\n### Transfer learning\n\nThe pre-trained models can be used for transfer learning. To avoid forgetting\nimportant information in the pre-trained model, you can apply regularization to\nthe kernel weights and also use a low learning rate. For more information, please\nsee the _Nobrainer_ guide notebook on transfer learning.\n\nAs an example of transfer learning, [@kaczmarj](https://github.com/kaczmarj)\nre-trained a brain extraction model to label meningiomas in 3D T1-weighted,\ncontrast-enhanced MR scans. The original model is publicly available and was\ntrained on 10,000 T1-weighted MR brain scans from healthy participants. These\nwere all research scans (i.e., non-clinical) and did not include any contrast\nagents. The meningioma dataset, on the other hand, was composed of relatively\nfew scans, all of which were clinical and used gadolinium as a contrast agent.\nYou can observe the differences in contrast below.\n\n![Brain extraction model prediction](https://github.com/neuronets/trained-models/blob/master/images/brain-extraction/unet-best-prediction.png?raw=true)\n![Meningioma extraction model prediction](https://user-images.githubusercontent.com/17690870/55470578-e6cb7800-55d5-11e9-991f-fe13c03ab0bd.png)\n\nDespite the differences between the two datasets, transfer learning led to a much\nbetter model than training from randomly-initialized weights. As evidence, please\nsee below violin plots of Dice coefficients on a validation set. In the left plot\nare Dice coefficients of predictions obtained with the model trained from\nrandomly-initialized weights, and on the right are Dice coefficients of predictions\nobtained with the transfer-learned model. In general, Dice coefficients are higher\non the right, and the variance of Dice scores is lower. Overall, the model on the\nright is more accurate and more robust than the one on the left.\n\n
\n\"\"\n\"\"\n
\n\n## Package layout\n\n- `nobrainer.io`: input/output methods\n- `nobrainer.layers`: custom layers, which conform to the Keras API\n- `nobrainer.losses`: loss functions for volumetric segmentation\n- `nobrainer.metrics`: metrics for volumetric segmentation\n- `nobrainer.models`: pre-defined Keras models\n- `nobrainer.training`: training utilities (supports training on single and multiple GPUs)\n- `nobrainer.transform`: random rigid transformations for data augmentation\n- `nobrainer.volume`: `tf.data.Dataset` creation and data augmentation utilities\n-\n## Citation\nIf you use this package, please [cite](https://github.com/neuronets/nobrainer/blob/master/CITATION) it.\n\n## Questions or issues\n\nIf you have questions about _Nobrainer_ or encounter any issues using the framework,\nplease [submit a GitHub issue](https://github.com/neuronets/helpdesk/issues/new/choose).\n\n\n", "description_content_type": "text/markdown; charset=UTF-8", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://neuronets.github.io", "keywords": "", "license": "Apache License, 2.0", "maintainer": "", "maintainer_email": "", "name": "nobrainer", "package_url": "https://pypi.org/project/nobrainer/", "platform": "", "project_url": "https://pypi.org/project/nobrainer/", "project_urls": { "Homepage": "https://neuronets.github.io", "Source Code": "https://github.com/neuronets/nobrainer" }, "release_url": "https://pypi.org/project/nobrainer/0.3.0/", "requires_dist": [ "click", "fsspec", "nibabel", "numpy", "scikit-image", "tensorflow-probability (>=0.11.0)", "tensorflow (>=2.4.0)", "psutil", "pre-commit ; extra == 'dev'", "pytest ; extra == 'dev'", "pytest-cov ; extra == 'dev'", "scipy ; extra == 'dev'" ], "requires_python": ">=3.7", "summary": "A framework for developing neural network models for 3D image processing.", "version": "0.3.0", "yanked": false, "yanked_reason": null }, "last_serial": 12542535, "releases": { "0.0.1a1": [ { "comment_text": "", "digests": { "md5": "66b51c69d27e6d1c8b7c05595c2f40e3", "sha256": "292ff7c10b7f65eaab022291e03310fc9fa9ea71855df0548caf8a0151d65c2a" }, "downloads": -1, "filename": "nobrainer-0.0.1a1-py3-none-any.whl", "has_sig": false, "md5_digest": "66b51c69d27e6d1c8b7c05595c2f40e3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9550, "upload_time": "2019-02-13T20:50:44", "upload_time_iso_8601": "2019-02-13T20:50:44.222338Z", "url": "https://files.pythonhosted.org/packages/fa/c0/ffff66e77b4f2f1bd7cad766e72f03e2d2a5f20db66c307cbd62534ad59f/nobrainer-0.0.1a1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.0.1a2": [ { "comment_text": "", "digests": { "md5": "c781658273caaadd36e8cc55762ca667", "sha256": "3652132b6608d5c33e356f48cc2e669fcced75bf268036da984fe5839b06cacd" }, "downloads": -1, "filename": "nobrainer-0.0.1a2-py3-none-any.whl", "has_sig": false, "md5_digest": "c781658273caaadd36e8cc55762ca667", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 51827, "upload_time": "2019-03-06T22:33:06", "upload_time_iso_8601": "2019-03-06T22:33:06.229718Z", "url": "https://files.pythonhosted.org/packages/45/26/393bc10202161f95f406a7dbb6374d56d715f5591635000ac4d346619a56/nobrainer-0.0.1a2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.0.1a3": [ { "comment_text": "", "digests": { "md5": "bea249a84e1237743d7f083e4e369df0", "sha256": "b07e3d3a30aed4326ec49e07cefd5d184ca98023b339a84c2415f7ab2f7aea88" }, "downloads": -1, "filename": "nobrainer-0.0.1a3-py3-none-any.whl", "has_sig": false, "md5_digest": "bea249a84e1237743d7f083e4e369df0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 51831, "upload_time": "2019-03-06T22:39:39", "upload_time_iso_8601": "2019-03-06T22:39:39.643137Z", "url": "https://files.pythonhosted.org/packages/ad/c0/91cd0c0e73d1ce8b50f3e9841a39d6f93417a72c73cd41b0f1b533a5f75e/nobrainer-0.0.1a3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "137653a43d46bafec26ed1807274162a", "sha256": "4f87b36a62fc05e09b03ad7f06f6126f000ac88d72c9b2032c8226fc54d8248a" }, "downloads": -1, "filename": "nobrainer-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "137653a43d46bafec26ed1807274162a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 59216, "upload_time": "2020-01-11T14:51:53", "upload_time_iso_8601": "2020-01-11T14:51:53.559742Z", "url": "https://files.pythonhosted.org/packages/29/9c/6fc936c8d4aea3f4c528813f8bb97b655eac30d7801ba5b8937a09f7a502/nobrainer-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "61f88afb50c2ba0005616f0d9c72a517", "sha256": "76128ce37669ce8abaf830bebcee226462564c9cb300d9fa34adf7001ae0d416" }, "downloads": -1, "filename": "nobrainer-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "61f88afb50c2ba0005616f0d9c72a517", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 66415, "upload_time": "2020-01-12T20:44:11", "upload_time_iso_8601": "2020-01-12T20:44:11.438499Z", "url": "https://files.pythonhosted.org/packages/a2/a4/2df3134950582614be767cb88c8d845d931b6d2eff47b1041e335f6fc142/nobrainer-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.0.3rc0": [ { "comment_text": "", "digests": { "md5": "c2e563e24eb69cc44e377fd04e5e45e8", "sha256": "7f80f007fd6afab0a1fe353b850e998037493efbac7104d383be0e6d68ab3d93" }, "downloads": -1, "filename": "nobrainer-0.0.3rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "c2e563e24eb69cc44e377fd04e5e45e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 66244, "upload_time": "2020-01-11T21:54:08", "upload_time_iso_8601": "2020-01-11T21:54:08.398466Z", "url": "https://files.pythonhosted.org/packages/59/0c/f68a6ff54c0166433f72bd0fa13f80c409c115bfa878e40ef3bf6d11bba3/nobrainer-0.0.3rc0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "fe55c7ef3bc748b4de774f56e68f714a", "sha256": "47d51310e94dba9f08fa42c5928245eeeb0bda65c24d02c41216701ace814800" }, "downloads": -1, "filename": "nobrainer-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fe55c7ef3bc748b4de774f56e68f714a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 86606, "upload_time": "2021-06-19T21:24:54", "upload_time_iso_8601": "2021-06-19T21:24:54.605268Z", "url": "https://files.pythonhosted.org/packages/53/77/ab66097a9c5df75afff49bf8bb1835be351a5c63a72dca5b3ecf6a18a81a/nobrainer-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "08537444a576def2aaa7f2ff0097bdb8", "sha256": "69cdd47675ca3bbbd698331ded1066ac0dc5ef7d9f5eca2cdee3704dd8754e43" }, "downloads": -1, "filename": "nobrainer-0.1.0.tar.gz", "has_sig": false, "md5_digest": "08537444a576def2aaa7f2ff0097bdb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 91756, "upload_time": "2021-06-19T21:24:56", "upload_time_iso_8601": "2021-06-19T21:24:56.210867Z", "url": "https://files.pythonhosted.org/packages/b8/5e/fff2f4d2e7078d56ce2a1d75ccdc2c72e42d8df32d02545caf003be39903/nobrainer-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a092fcbf4f8d322f445e7f40413f0d8b", "sha256": "38124157d6ccd8afb1eaeb063a7384b8ada4f3ea2e45ec0b236de7e6bca56a1e" }, "downloads": -1, "filename": "nobrainer-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a092fcbf4f8d322f445e7f40413f0d8b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 86565, "upload_time": "2021-06-22T23:59:45", "upload_time_iso_8601": "2021-06-22T23:59:45.973399Z", "url": "https://files.pythonhosted.org/packages/b8/6b/b8af60b47dd124bd0455dc1b4269ac2bb7672d97221d962c408adf8cd92d/nobrainer-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "daf016c77a60ad66222a5a80f1b1b97b", "sha256": "c9eb5d12f548f04ed91d643d4c39bdd98f216f45df25ae5a98ea32d6414f9064" }, "downloads": -1, "filename": "nobrainer-0.1.1.tar.gz", "has_sig": false, "md5_digest": "daf016c77a60ad66222a5a80f1b1b97b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 91830, "upload_time": "2021-06-22T23:59:47", "upload_time_iso_8601": "2021-06-22T23:59:47.873066Z", "url": "https://files.pythonhosted.org/packages/a5/79/c72eb7a8d1bd175d76b3330fb38809e6fe42306ad7050d9a7e9d47c0d9c2/nobrainer-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ee409c20b51355bd17c75b081de3ef0c", "sha256": "d72beb19c167dcfcc02620ef7a6b1f2512d627e492c370feb625c0ec95833df2" }, "downloads": -1, "filename": "nobrainer-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee409c20b51355bd17c75b081de3ef0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 106188, "upload_time": "2021-12-24T14:22:09", "upload_time_iso_8601": "2021-12-24T14:22:09.601626Z", "url": "https://files.pythonhosted.org/packages/e2/bc/13ee6aa7c5af8628a66b8b5cc689c9960b237626600bced50b75e185bcd9/nobrainer-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "158f9f4ee442c83d7f051917ba488041", "sha256": "a7ba9f2bc6bbb03774f077fe307f877c23a1ad615a3a39162724a77468492c1e" }, "downloads": -1, "filename": "nobrainer-0.2.0.tar.gz", "has_sig": false, "md5_digest": "158f9f4ee442c83d7f051917ba488041", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 105821, "upload_time": "2021-12-24T14:22:10", "upload_time_iso_8601": "2021-12-24T14:22:10.642530Z", "url": "https://files.pythonhosted.org/packages/da/3b/131102d58ef283f905ad20944feaa4e15919b71f41e245bc6308813e7c38/nobrainer-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "1ad3917af1a6dc7c8d9f844e18bc23eb", "sha256": "ff30b8cfde4e6fd1a3447c0cc8e011716f9202151fc625e9f93e6e90dff48602" }, "downloads": -1, "filename": "nobrainer-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1ad3917af1a6dc7c8d9f844e18bc23eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 106186, "upload_time": "2021-12-24T16:20:06", "upload_time_iso_8601": "2021-12-24T16:20:06.336891Z", "url": "https://files.pythonhosted.org/packages/9c/62/5f19c1a12bf0bcbb641730fdf2461e7e4bcf891ffe795d9294b6daf102d4/nobrainer-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2acdd90bcb7af343b988edbad32141e3", "sha256": "c4d8abd953b9ac6b186978e56e51de05829e2fbec75e50601d0831d5bd83671e" }, "downloads": -1, "filename": "nobrainer-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2acdd90bcb7af343b988edbad32141e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 105855, "upload_time": "2021-12-24T16:20:07", "upload_time_iso_8601": "2021-12-24T16:20:07.891856Z", "url": "https://files.pythonhosted.org/packages/12/d7/bd0a5229e7473e45b1ee6d372e42f2133138020ae191841021ca695401fd/nobrainer-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6ee6b5a2c8f3c95cfb78b5e6e3aa2c37", "sha256": "69a74cb1f09295ea6402bd0391739e28e568de10a36199090113ed9bc77d5cd1" }, "downloads": -1, "filename": "nobrainer-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ee6b5a2c8f3c95cfb78b5e6e3aa2c37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 108885, "upload_time": "2022-01-11T18:40:21", "upload_time_iso_8601": "2022-01-11T18:40:21.117542Z", "url": "https://files.pythonhosted.org/packages/96/16/30d65eb00f0a9f7c876c102e8dbe6aa940fbd684244436c274a56a5ca2cd/nobrainer-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cad7e0b394a04bd66775b90ae5565d38", "sha256": "12b98069e425962eafa0155fe5b99d5920cf64a524557e8656bef2bb2d281b6f" }, "downloads": -1, "filename": "nobrainer-0.3.0.tar.gz", "has_sig": false, "md5_digest": "cad7e0b394a04bd66775b90ae5565d38", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 108795, "upload_time": "2022-01-11T18:40:22", "upload_time_iso_8601": "2022-01-11T18:40:22.440889Z", "url": "https://files.pythonhosted.org/packages/f4/97/0ccd288707932b52ca62e72b476dcbed0f7948abc0e3ac3b83dd13bffa42/nobrainer-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6ee6b5a2c8f3c95cfb78b5e6e3aa2c37", "sha256": "69a74cb1f09295ea6402bd0391739e28e568de10a36199090113ed9bc77d5cd1" }, "downloads": -1, "filename": "nobrainer-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ee6b5a2c8f3c95cfb78b5e6e3aa2c37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 108885, "upload_time": "2022-01-11T18:40:21", "upload_time_iso_8601": "2022-01-11T18:40:21.117542Z", "url": "https://files.pythonhosted.org/packages/96/16/30d65eb00f0a9f7c876c102e8dbe6aa940fbd684244436c274a56a5ca2cd/nobrainer-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cad7e0b394a04bd66775b90ae5565d38", "sha256": "12b98069e425962eafa0155fe5b99d5920cf64a524557e8656bef2bb2d281b6f" }, "downloads": -1, "filename": "nobrainer-0.3.0.tar.gz", "has_sig": false, "md5_digest": "cad7e0b394a04bd66775b90ae5565d38", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 108795, "upload_time": "2022-01-11T18:40:22", "upload_time_iso_8601": "2022-01-11T18:40:22.440889Z", "url": "https://files.pythonhosted.org/packages/f4/97/0ccd288707932b52ca62e72b476dcbed0f7948abc0e3ac3b83dd13bffa42/nobrainer-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }