{ "info": { "author": "Lukas Snoek", "author_email": "lukassnoek@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Science/Research", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering :: Bio-Informatics" ], "description": "skbold - utilities and tools for machine learning on BOLD-fMRI data\n===================================================================\n\n.. image:: https://travis-ci.org/lukassnoek/skbold.svg?branch=master\n :target: https://travis-ci.org/lukassnoek/skbold\n\n.. image:: https://readthedocs.org/projects/skbold/badge/?version=latest\n :target: http://skbold.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://coveralls.io/repos/github/lukassnoek/skbold/badge.svg?branch=develop\n :target: https://coveralls.io/github/lukassnoek/skbold?branch=develop\n\n.. image:: https://img.shields.io/badge/python-2.7-blue.svg\n :target: https://www.python.org/download/releases/2.7\n\n.. image:: https://img.shields.io/badge/python-3.5-blue.svg\n :target: https://www.python.org/downloads/release/python-350\n\nThe Python package ``skbold`` offers a set of tools and utilities for\nmachine learning analyses of functional MRI (BOLD-fMRI) data. \nInstead of (largely) reinventing the wheel, this package builds upon an\nexisting machine learning framework in Python: `scikit-learn `_.\nThe modules of skbold are applicable in several 'stages' of\ntypical pattern analyses (see image below), including pattern estimation,\ndata representation, pattern preprocessing, feature selection/extraction,\nand model evaluation/feature visualization.\n\n.. image:: img/scope.png\n :align: center\n\nIn what follows, we quickly summarize the main functionality of skbold.\nFor more information (e.g. API documentation) and examples, check out\nthe code documentation at `ReadTheDocs `_!\n\nMvp-objects\n-----------\nOne of skbold's main features is the data-structure ``Mvp`` (an abbreviation\nof MultiVoxel Pattern). This custom object allows for an efficient way\nto store and access data and metadata necessary for multivoxel analyses of fMRI data.\nA nice feature of this ``Mvp`` objects is that they can easily load data\n(i.e., sets of nifti-files) from disk and automatically organize it in \na format that is used in ML-analyses (i.e., a sample-by-feature matrix).\n\nSo, at the core, an ``Mvp``-object is simply a collection of data - a 2D array\nof samples by features - and fMRI-specific metadata necessary to perform\ncustomized preprocessing and feature engineering. However, machine learning\nanalyses, or more generally any type of multivoxel-type analysis (i.e. MVPA),\ncan be done in two basic ways, which provide the basis of the two 'flavors'\nof ``Mvp``-objects: ``MvpWithin`` and ``MvpBetween``, as explained in more\ndetail below.\n\nMvpWithin\n~~~~~~~~~\nOne way is to perform analyses *within subjects*. This means that a model is\nfit on each subjects' data separately. Data, in this context, often refers to\nsingle-trial data, in which each trial comprises a sample in our data-matrix and\nthe values per voxel constitute our features. This type of analysis is\nalternatively called *single-trial decoding*, and is often performed as an\nalternative to (whole-brain) univariate analysis.\n\n.. image:: img/MvpWithin.png\n :align: center\n\nUltimately, this type of analysis aims to predict some kind of attribute of the\ntrials (for example condition/class membership in classification analyses or some\ncontinuous feature in regression analyses), which skbold calls ``y``, based\non a model trained on the samples-by-features matrix, which skbold calls ``X``.\nAfter obtaining model performance scores (such as accuracy, F1-score, or R-squared)\nfor each subject, a group-level random effects (RFX) analysis can be done on \nthese scores. Skbold does not offer any functionality in terms of group-level\nanalyses; we advise researchers to look into the `prevalance inference `_ method of Allefeld and colleagues.\n\nMvpBetween\n~~~~~~~~~~\nWith the increase in large-sample neuroimaging datasets, another\ntype of MVPA starts to become feasible, which we'll call *between subject*\nanalyses. In this type of analysis, single subjects constitute the data's\nsamples and a corresponding single multivoxel pattern constitutes the data's\nfeatures. The type of multivoxel pattern, or 'feature-set', can be any set\nof voxel values. For example, features from a single first-level contrast\n(note: this should be a condition average contrast, as opposed to single-trial\ncontrasts in MvpWithin!) can be used. But voxel patterns from VBM, TBSS (DTI),\nand dual-regression maps can equally well be used. Crucially, this package\nallows for the possibility to stack feature-sets such that models can be fit\non features from multiple data-types simultaneously.\n\n.. image:: img/MvpBetween.png\n\nMvpResults: model evaluation and feature visualization\n------------------------------------------------------\nGiven that an appropriate ``Mvp``-object exists, it is really easy to\nimplement a machine learning analysis using standard *scikit-learn*\nmodules. However, as fMRI datasets are often relatively small, K-fold\ncross-validation is often performed to keep the training-set as large as\npossible. Additionally, it might be informative to visualize which features\nare used and are most important in your model. (But, note that feature mapping\nshould not be the main objective of decoding analyses!) Doing this - model\nevaluation and feature visualization across multiple folds - complicates the\nprocess of implementing machine learning pipelines on fMRI data.\n\nThe ``MvpResults`` object offers a solution to the above complications. Simply\npass your scikit-learn pipeline to MvpResults after every fold and it\nautomatically calculates a set of model evaluation metrics (accuracy,\nprecision, recall, etc.) and keeps track of which features are used and how\n'important' these features are (in terms of the value of their weights).\n\nFeature selection/extraction\n----------------------------\nThe ``feature_selection`` and ``feature_extraction`` modules in skbold contain\na set of scikit-learn type transformers that can perform various types of\nfeature selection and extraction specific to multivoxel fMRI-data.\nFor example, the RoiIndexer-transformer takes a (partially masked) whole-brain\npattern and indexes it with a specific region-of-interest defined in a\nnifti-file. The transformer API conforms to scikit-learn transformers, and as\nsuch, (almost all of them) can be used in scikit-learn pipelines.\n\nTo get a better idea of the package's functionality - including the use of\nMvp-objects, transformers, and MvpResults - a typical analysis workflow using\n``skbold`` is described below.\n\nExamples\n--------\nFor some example usages of the ``Mvp``-objects and how to incorporate them\nin a ``scikit-learn``-based ML-pipeline, check the examples below:\n\nAn example workflow: MvpWithin\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSuppose you have data from an fMRI-experiment for a set of subjects who were\npresented with images which were either emotional or neutral in terms of their\ncontent. You've modelled them using a single-trial GLM (i.e. each trial is\nmodelled as a separate event/regressor) and calculated their corresponding\ncontrasts against baseline. The resulting FEAT-directory then contains\na directory ('stats') with contrast-estimates (COPEs) for each trial. Now,\nusing MvpWithin, it is easy to extract a sample by features matrix and some\nmeta-data associated with it, as shown below.\n\n.. code:: python\n\n from skbold.core import MvpWithin\n\n feat_dir = '~/project/sub001.feat'\n mask_file = '~/GrayMatterMask.nii.gz' # mask all non-gray matter!\n read_labels = True # parse labels (targets) from design.con file!\n remove_contrast = ['nuisance_regressor_x'] # do not load nuisance regressor!\n ref_space = 'epi' # extract patterns in functional space (alternatively: 'mni')\n statistic = 'tstat' # use the tstat*.nii.gz files (in *.feat/stats) as patterns\n remove_zeros = True # remove voxels which are zero in each trial\n\n mvp = MvpWithin(source=feat_dir, read_labels=read_labels,\n remove_contrast=remove_contrast, ref_space=ref_space,\n statistic=statistic, remove_zeros=remove_zeros,\n mask=mask_file)\n\n mvp.create() # extracts and stores (meta)data from FEAT-directory!\n mvp.write(path='~/', name='mvp_sub001') # saves to disk!\n\nNow, we have an Mvp-object on which machine learning pipeline can be applied:\n\n.. code:: python\n\n import joblib\n from sklearn.preprocessing import StandardScaler\n from sklearn.svm import SVC\n from sklearn.pipeline import Pipeline\n from sklearn.model_selection import StratifiedKFold\n from sklearn.metrics import accuracy_score, f1_score\n from skbold.feature_selection import fisher_criterion_score, SelectAboveCutoff\n from skbold.feature_extraction import RoiIndexer\n from skbold.utils import MvpResultsClassification\n\n mvp = joblib.load('~/mvp_sub001.jl')\n roiindex = RoiIndexer(mvp=mvp, mask='Amygdala', atlas_name='HarvardOxford-Subcortical',\n lateralized=False) # loads in bilateral mask\n\n # Extract amygdala patterns from whole-brain\n mvp.X = roiindex.fit().transform(mvp.X)\n\n # Define pipeline\n pipe = Pipeline([\n ('scaler', StandardScaler()),\n ('anova', SelectAboveCutoff(fisher_criterion_score, cutoff=5)),\n ('svm', SVC(kernel='linear'))\n ])\n\n cv = StratifiedKFold(y=mvp.y, n_splits=5)\n\n # Initialization of MvpResults; 'forward' indicates that it keeps track of\n # the forward model corresponding to the weights of the backward model\n # (see Haufe et al., 2014, Neuroimage)\n mvp_results = MvpResults(mvp=mvp, n_iter=len(cv), feature_scoring='forward',\n f1=f1_score, accuracy=accuracy_score)\n\n for train_idx, test_idx in cv.split(mvp.X, mvp.y):\n\n train, test = mvp.X[train_idx, :], mvp.X[test_idx, :]\n train_y, test_y = mvp.y[train_idx], mvp.y[train_idx]\n\n pipe.fit(train, train_y)\n pred = pipe.predict(test)\n\n mvp_results.update(test_idx, pred, pipe) # update after each fold!\n\n mvp_results.compute_scores() # compute!\n mvp_results.write(out_path) # write file with metrics and niftis with feature-scores!\n\n\nAn example workflow: MvpBetween\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSuppose you have MRI data from a large set of subjects (let's say >50),\nincluding (task-based) functional MRI, structural MRI (T1-weighted images,\nDTI), and behavioral data (e.g. questionnaires, behavioral tasks). Such a\ndataset would qualify for a *between subject* decoding analysis using the\nMvpBetween object. To use the MvpBetween functionality effectively, it is\nimportant that the data is organized sensibly. An example is given below.\n\n.. image:: img/MvpBetween_dirstructure.png\n\nIn this example, each subject has three different data-sources: two FEAT-\ndirectories (with functional contrasts) and one VBM-file. Let's say that we'd\nlike to use all of these sources of information together to predict some\nbehavioral variable, neuroticism for example (as measured with e.g. the\nNEO-FFI). The most important argument passed to MvpBetween is ``source``.\nThis variable, a dictionary, should contain the data-types you want to extract\nand their corresponding paths (with wildcards at the place of subject-specific\nparts):\n\n.. code:: python\n\n import os\n from skbold import roidata_path\n gm_mask = os.path.join(roidata_path, 'GrayMatter.nii.gz')\n\n source = {}\n source['Contrast_t1cope1'] = {'path': '~/Project_dir/sub*/Task1.feat/cope1.nii.gz'}\n source['Contrast_t2cope2'] = {'path': '~/Project_dir/sub*/Task2.feat/cope2.nii.gz'}\n source['VBM'] = {'path': '~/Project_dir/sub*/vbm.nii.gz', 'mask': gm_mask}\n\nNow, to initialize the MvpBetween object, we need some more info:\n\n.. code:: python\n\n from skbold.core import MvpBetween\n\n subject_idf='sub-0??' # this is needed to extract the subject names to\n # cross-reference across data-sources\n subject_list=None # can be a list of subject-names to include\n\n mvp = MvpBetween(source=source, subject_idf=subject_idf, mask=None,\n subject_list=None)\n\n # like with MvpWithin, you can simply call create() to start the extraction!\n mvp.create()\n\n # and write to disk using write()\n mvp.write(path='~/', name='mvp_between') # saves to disk!\n\nThis is basically all you need to create a MvpBetween object! It is very\nsimilar to MvpWithin in terms of attributes (including ``X``, ``y``, and\nvarious meta-data attributes). In fact, MvpResults works exactly in the same\nway for MvpWithin and MvpBetween! The major difference is that MvpResults\nkeeps track of the feature-information for each feature-set separately and\nwrites out a summarizing nifti file for each feature-set. Transformers also\nwork the same for MvpBetween objects/data, with the exception of the\ncluster-threshold transformer.\n\nInstallation & dependencies\n---------------------------\n\nAlthough the package is very much in development, it can be installed using *pip*::\n\n\t$ pip install skbold\n\nHowever, the pip-version is likely behind compared to the code on Github, so to get the\nmost up to date version, use git::\n\n\t$ pip install git+https://github.com/lukassnoek/skbold.git@master\n\nSkbold is largely Python-only (both Python2.7 and Python3) and is built\naround the \"PyData\" stack, including:\n\n* Numpy\n* Scipy\n* Pandas\n* Scikit-learn\n\nAnd it uses the awesome `nibabel `_ package\nfor reading/writing nifti-files. Also, skbold uses `FSL `_\n(primarily the ``FLIRT`` and ``applywarp`` functions) to transform files from functional\n(native) to standard (here: MNI152 2mm) space. These FSL-calls are embedded in the\n``convert2epi`` and ``convert2mni`` functions, so avoid this functionality if\nyou don't have a working FSL installation. \n\nDocumentation\n-------------\nFor those reading this on Github, documentation can be found on\n`ReadTheDocs `_!\n\nAuthos & credits\n----------------\nThis package is being develop by `Lukas Snoek `_ \nfrom the University of Amsterdam with contributions from \n`Steven `_ and help from `Joost `_.\n\nLicense and contact\n-------------------\nThe code is BSD (3-clause) licensed. You can find my contact details on my\n`Github `_ profile page.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://skbold.readthedocs.io/en/latest/", "keywords": "fMRI MVPA decoding machine learning", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "skbold", "package_url": "https://pypi.org/project/skbold/", "platform": "Linux", "project_url": "https://pypi.org/project/skbold/", "project_urls": { "Homepage": "http://skbold.readthedocs.io/en/latest/" }, "release_url": "https://pypi.org/project/skbold/0.3.3/", "requires_dist": [ "funcsigs", "configparser", "future", "nibabel (>=2.0)", "numpy (>=1.10)", "pandas (>=0.17)", "scikit-learn (>=0.18)", "scipy (>=0.17)" ], "requires_python": "", "summary": "Utilities and tools for machine learning on BOLD-fMRI data.", "version": "0.3.3" }, "last_serial": 3060677, "releases": { "0.1.7": [ { "comment_text": "", "digests": { "md5": "81d849450fde1f4f5c8ff2fa1e07ae51", "sha256": "1e89cdce57ed03a60f5d92e3a437a51e08bd69d470249509ef697c7abab2ac45" }, "downloads": -1, "filename": "skbold-0.1.7-py2.7.egg", "has_sig": false, "md5_digest": "81d849450fde1f4f5c8ff2fa1e07ae51", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 67656, "upload_time": "2016-03-02T09:38:25", "url": "https://files.pythonhosted.org/packages/bc/46/ec7868673f2a8a1ea62ec5343aa9492431134c254684ef0fd73a06575ff1/skbold-0.1.7-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "17ebd98c1b23da2092d56b8c23b2f98a", "sha256": "beb1edf2dc071e86b236dc4e72c7b950ef0ca718231278a757ee15f6adff5358" }, "downloads": -1, "filename": "skbold-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17ebd98c1b23da2092d56b8c23b2f98a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32051, "upload_time": "2016-03-02T09:38:20", "url": "https://files.pythonhosted.org/packages/68/b3/299a6f2be0f5cc620e9f63c50638132c31c25b9d64cb3c6872fccee11868/skbold-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6200ad5a7a54ed232bdd4ddd67b1080d", "sha256": "43e4d79c3478e2b04f60293886d7c76cc95ac77e74da2ef21e9455d4b07f7f9c" }, "downloads": -1, "filename": "skbold-0.1.7.tar.gz", "has_sig": false, "md5_digest": "6200ad5a7a54ed232bdd4ddd67b1080d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25914, "upload_time": "2016-03-02T09:38:31", "url": "https://files.pythonhosted.org/packages/43/ee/12e4114e2cb80a0723265a92c394984339ab907bf5f09bb20ac71963b5cd/skbold-0.1.7.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "528c219863c45f36b497a9c6c7f99c5c", "sha256": "ef9dee1a88d92930a4721ace67cebdc72c4adcf6f8979e81177787827cdd5181" }, "downloads": -1, "filename": "skbold-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "528c219863c45f36b497a9c6c7f99c5c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2382766, "upload_time": "2016-03-22T09:41:43", "url": "https://files.pythonhosted.org/packages/24/c6/ba621ba99ef82ec94e4a1c26998714a3c0710ed9e3319073513d43a0ca28/skbold-0.2.0-py2.py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "c77c030ebb7bd98aabdb011ea62265ff", "sha256": "4044de50125a1675c462a2c4002d63eec1bde97fb06078e4eb4bb5d833be3bcb" }, "downloads": -1, "filename": "skbold-0.2.1-py2.7.egg", "has_sig": false, "md5_digest": "c77c030ebb7bd98aabdb011ea62265ff", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 2426872, "upload_time": "2016-03-22T09:50:29", "url": "https://files.pythonhosted.org/packages/a6/22/d2e5296c727f406ca99a73129be99f61e114e6f9f7ec3c1ee9d1094a607f/skbold-0.2.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "d53a829091d715e9be4c2cbde26d2642", "sha256": "717e3b1dbf54297c1cd91c6b30a9c4d44fdd204e58a2e002e6be03bc445b0e8b" }, "downloads": -1, "filename": "skbold-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "d53a829091d715e9be4c2cbde26d2642", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13178664, "upload_time": "2016-04-08T12:50:41", "url": "https://files.pythonhosted.org/packages/ae/01/e12137f21ef0ef04786e8c729139a90d6ca44c7960afebc51f92b698c30e/skbold-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4eae2cf29db6735d4c2751903ec87abe", "sha256": "a118a0b8f535f2bc2a0ec92176e8dd0ebce9883b7c72272e0a445f9c63ee6b21" }, "downloads": -1, "filename": "skbold-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4eae2cf29db6735d4c2751903ec87abe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2382752, "upload_time": "2016-03-22T09:50:14", "url": "https://files.pythonhosted.org/packages/25/66/7df33a171f1870c7544be89add4363f7d6bb745027c9cc1362e7768e1a81/skbold-0.2.1-py2.py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a8d39d79f6fbf40a15f71ff01bf04d1a", "sha256": "21293f9c57375c06fcfec496655a9a6350e315c34efdca397892e960e0684376" }, "downloads": -1, "filename": "skbold-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a8d39d79f6fbf40a15f71ff01bf04d1a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13178663, "upload_time": "2016-04-08T12:52:35", "url": "https://files.pythonhosted.org/packages/c3/a1/2c3e834d1d61c1504eae26dda3bbd3a06e01b94f7a8eb70880f3367e9595/skbold-0.2.2-py2.py3-none-any.whl" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "db3c1d4db8ea6e0b8c5849e8f405e1d6", "sha256": "698d4a21ac50d22d880cd5eb2bb21fd8d25ff21e9bd766fe03b1bb100b4ade78" }, "downloads": -1, "filename": "skbold-0.2.3-py2.7.egg", "has_sig": false, "md5_digest": "db3c1d4db8ea6e0b8c5849e8f405e1d6", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 13233534, "upload_time": "2016-04-12T14:39:12", "url": "https://files.pythonhosted.org/packages/2d/f5/68724310df65962763f029d15c4a6e952b1dafccf41523902e5836a5cc3c/skbold-0.2.3-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c701d74f74be368d404009ceca31524f", "sha256": "0cacd9bd541776ea1e2ba4801e70cb5454945e5720aaa028016e28ca33ef3046" }, "downloads": -1, "filename": "skbold-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c701d74f74be368d404009ceca31524f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13180931, "upload_time": "2016-04-12T14:39:00", "url": "https://files.pythonhosted.org/packages/fc/d2/bfb3ad0b813ec763fd44aa66adc88c47fbdb6de534c74307b5a48939b9c4/skbold-0.2.3-py2.py3-none-any.whl" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "92cdf41fdb6760f668e56832a40ada8d", "sha256": "0dc883abafc9554bcd00d729fa5232580fbddf3dd68cc8c95cb80919ef575627" }, "downloads": -1, "filename": "skbold-0.2.4-py2.7.egg", "has_sig": false, "md5_digest": "92cdf41fdb6760f668e56832a40ada8d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 21103812, "upload_time": "2016-04-28T12:08:33", "url": "https://files.pythonhosted.org/packages/3f/5f/66e5e46154dea7019607a057a4a17b5b14a46b0e6124ad506941609f716a/skbold-0.2.4-py2.7.egg" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "153f1dab173a9a6b07e74726f0c9a910", "sha256": "d6166394933417aa850c81ad95c1658b7fb80c750baed7ef104a7edf9085605d" }, "downloads": -1, "filename": "skbold-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "153f1dab173a9a6b07e74726f0c9a910", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13879870, "upload_time": "2016-08-19T09:19:34", "url": "https://files.pythonhosted.org/packages/17/3e/6def4a932c785fbb21ca6c01239e594cc217e747bccd7aa1a54590e7ed27/skbold-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1964628a9e0ba3cbf330cec94f2f619f", "sha256": "6ec987cca4296a0f2230abee8fcae4dd1cb834d4e0878e7260566f991946519a" }, "downloads": -1, "filename": "skbold-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1964628a9e0ba3cbf330cec94f2f619f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13780296, "upload_time": "2016-08-19T09:19:42", "url": "https://files.pythonhosted.org/packages/84/be/58c3fc6e9f8fb8c53e2ab759c34d83f952b401eec61e34bd808ad8112f04/skbold-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8892d13e6eece2c28705568b79bc5b0e", "sha256": "e532182c823aa22782096056c681038e80d53796b31aa8295571f1bb120172c1" }, "downloads": -1, "filename": "skbold-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8892d13e6eece2c28705568b79bc5b0e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42350986, "upload_time": "2017-07-10T15:08:45", "url": "https://files.pythonhosted.org/packages/f4/93/6a73fcfc73e0994a9dc70fe1a8c443f9d8481de91ac28f47225d97766711/skbold-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ccf28a9603092339a9bcdd296599052a", "sha256": "89ea9e9e8eb244161c62be58900c8e2e2c1c187143508a437df45a05bc2c1d7d" }, "downloads": -1, "filename": "skbold-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ccf28a9603092339a9bcdd296599052a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42412029, "upload_time": "2017-07-10T15:08:59", "url": "https://files.pythonhosted.org/packages/76/18/68a34be8d714e1840d6baeb24d451b925adc1f277180c62057900bb7cdff/skbold-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "817fa7c3446799815cee1bdedee3e039", "sha256": "5b425164defec9571e93cb3701135e17df1e7b60de4f1e3877f471793523ecb8" }, "downloads": -1, "filename": "skbold-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "817fa7c3446799815cee1bdedee3e039", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 43072991, "upload_time": "2017-07-10T16:16:48", "url": "https://files.pythonhosted.org/packages/2f/bc/872d05b2588756b9eeebe6afc371ccac39347a1ca2726c0f01d5dd3b803c/skbold-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bed7e06584fd504b484d1c0b0ddbff7d", "sha256": "54638f829a319a8050dbdf6964e0e9b06b053f65d785a037a525884d8613fa83" }, "downloads": -1, "filename": "skbold-0.3.2.tar.gz", "has_sig": false, "md5_digest": "bed7e06584fd504b484d1c0b0ddbff7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42411309, "upload_time": "2017-07-10T16:17:09", "url": "https://files.pythonhosted.org/packages/1c/d9/8c710e94f3816a88e2ce7c5f3a113e3e8ada02d5bdbfa6515c779170acff/skbold-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "378ba6790ae5454aef158ea57323aa29", "sha256": "014504a92b9439751a2f11400ebb60bd0aa769bbac5f67bff7c17e3d4a8a85a4" }, "downloads": -1, "filename": "skbold-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "378ba6790ae5454aef158ea57323aa29", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40809074, "upload_time": "2017-07-31T07:21:32", "url": "https://files.pythonhosted.org/packages/24/ed/61ca819cfadccbbab13a9d30afa934a2e46feb220a64579bce27691e457d/skbold-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8417a34fdb240a5d0cb11fd7d4e48218", "sha256": "91e9545d5f0e86189a2e2a6a14a4e198699fdf85c3d079ab9e379123dd7a63a0" }, "downloads": -1, "filename": "skbold-0.3.3.tar.gz", "has_sig": false, "md5_digest": "8417a34fdb240a5d0cb11fd7d4e48218", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40957563, "upload_time": "2017-07-31T07:21:47", "url": "https://files.pythonhosted.org/packages/be/24/8b44617360b6c6b691ae7f094e1b69f72e5572c801599be486afb2bce514/skbold-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "378ba6790ae5454aef158ea57323aa29", "sha256": "014504a92b9439751a2f11400ebb60bd0aa769bbac5f67bff7c17e3d4a8a85a4" }, "downloads": -1, "filename": "skbold-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "378ba6790ae5454aef158ea57323aa29", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40809074, "upload_time": "2017-07-31T07:21:32", "url": "https://files.pythonhosted.org/packages/24/ed/61ca819cfadccbbab13a9d30afa934a2e46feb220a64579bce27691e457d/skbold-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8417a34fdb240a5d0cb11fd7d4e48218", "sha256": "91e9545d5f0e86189a2e2a6a14a4e198699fdf85c3d079ab9e379123dd7a63a0" }, "downloads": -1, "filename": "skbold-0.3.3.tar.gz", "has_sig": false, "md5_digest": "8417a34fdb240a5d0cb11fd7d4e48218", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40957563, "upload_time": "2017-07-31T07:21:47", "url": "https://files.pythonhosted.org/packages/be/24/8b44617360b6c6b691ae7f094e1b69f72e5572c801599be486afb2bce514/skbold-0.3.3.tar.gz" } ] }