{ "info": { "author": "Sven Serneels", "author_email": "svenserneels@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "Sparse partial robust M regression\n==================================\n\nA scikit-learn compatible Python 3 package for Sparse Partial Robust M regresion (SPRM)\\[1\\], a sparse and robust version of univariate partial least squares (PLS1). \n\n\nDescription\n-----------\n\nThe method performs four tasks at the same time in a single, consistent estimate: \n- *regression*: yields regression coefficients and predicts responses\n- *dimension reduction*: calculates interpretable PLS-like components maximizing covariance to the predictand in a robust way \n- *variable selection*: depending on the paramter settings, can yield highly sparse regression coefficients that contain exact zero elements \n- *outlier detection and compensation*: yields a set of case weights in \\[0,1\\]. The lower the weight, the more outlying a case is. The estimate itself is outlier robust. \n\nNote: all the methods contained in this package have been designed for continuous data. They do not work correctly for caetgorical or textual data. \n\nThe code is aligned to ScikitLearn, such that modules such as GridSearchCV can flawlessly be applied to it. \n\nThe repository contains\n- The estimator (`sprm.py`) \n- Plotting functionality based on Matplotlib (`sprm_plot.py`)\n- Robust data pre-processing (`robcent.py`)\n- The Sparse NIPALS (SNIPLS) estimator (`snipls.py`)\n- Robust M regression estimator (`rm.py`)\n- Ancillary functions for plotting (`_plot_internals.py`)\n- Ancillary functions for M-estimation (`_m_support_functions.py`)\n\nHow to install\n--------------\nThe package is distributed through PyPI, so install through: \n\n pip install sprm \n\n\nThe SPRM estimator\n==================\n\nThe main SPRM implementation yields a class with the following structure:\n\nDependencies\n------------\n- From ``: `BaseEstimator, TransformerMixin, RegressorMixin`\n- From ``: `_BaseComposition`\n- `copy`\n- From ``: `norm, chi2`\n- `numpy` \n- From ``: `pyplot`. \n- From ``: `robust`. \n\nParameters\n----------\n- `eta`: float. Sparsity parameter in \\[0,1). Note that `eta=0` returns the non-sparse, yet robust, partial robust M-regression (PRM) \\[2\\]. \n- `n_components`: int > 1. Note that if applied on data, `n_components` shall take a value <= min(x_data.shape)\n- `fun`: str, downweighting function. `'Hampel'` (recommended), `'Fair'` or `'Huber'`\n- `probp1`: float, probability cutoff for start of downweighting (e.g. 0.95)\n- `probp2`: float, probability cutoff for start of steep downweighting (e.g. 0.975, only relevant if `fun='Hampel'`)\n- `probp3`: float, probability cutoff for start of outlier omission (e.g. 0.999, only relevant if `fun='Hampel'`)\n- `centring`: str, type of centring (`'mean'` or `'median'`, the latter recommended)\n- `scaling`: str, type of scaling (`'std'`,`'mad'`, the latter recommended, or `'None'`)\n- `verbose`: boolean, specifying verbose mode\n- `maxit`: int, maximal number of iterations in M algorithm\n- `tol`: float, tolerance for convergence in M algorithm \n- `start_cutoff_mode`: str, value `'specific'` will set starting value cutoffs specific to X and y (preferred); any other value will set X and y stating cutoffs identically. The non-specific setting yields identical results to the SPRM R implementation available from [CRAN](https://cran.r-project.org/web/packages/sprm/index.html).\n- `start_X_init`: str, values `'pcapp'` will include a PCA/broken stick projection to calculate the initial predictor block caseweights; any other value will just calculate initial predictor block case weights based on Euclidian distances within that block. The is less stable for very flat data (p >> n). \n- `colums` (def `False`): Either boolean or a pandas Index. If `False`, no column names supplied. If an Index (will only take length `x_data.shape[1]`), the column names of the x_data supplied in this list, will be printed in verbose mode\n- `copy` (def `True`): boolean, whether to create deep copy of the data in the calculation process \n\nAttributes\n----------\n- `x_weights_`: X block PLS weighting vectors (usually denoted W)\n- `x_loadings_`: X block PLS loading vectors (usually denoted P)\n- `C_`: vector of inner relationship between response and latent variablesblock re\n- `x_scores_`: X block PLS score vectors (usually denoted T)\n- `coef_`: vector of regression coefficients \n- `intercept_`: intercept\n- `coef_scaled_`: vector of scaled regression coeeficients (when scaling option used)\n- `intercept_scaled_`: scaled intercept\n- `residuals_`: vector of regression residuals\n- `x_ev_`: X block explained variance per component\n- `y_ev_`: y block explained variance \n- `fitted_`: fitted response\n- `x_Rweights_`: X block SIMPLS style weighting vectors (usually denoted R)\n- `x_caseweights_`: X block case weights\n- `y_caseweights_`: y block case weights\n- `caseweights_`: combined case weights\n- `colret_`: names of variables retained in the sparse model\n- `x_loc_`: X block location estimate \n- `y_loc_`: y location estimate\n- `x_sca_`: X block scale estimate\n- `y_sca_`: y scale estimate\n- `non_zero_scale_vars_`: indicator vector of variables in X with nonzero scale\n\nMethods\n--------\n- `fit(X,y)`: fit model \n- `predict(X)`: make predictions based on fit \n- `transform(X)`: project X onto latent space \n- `weightnewx(X)`: calculate X case weights\n- `getattr()`: get list of attributes\n- `setattr(**kwargs)`: set individual attribute of sprm object \n- `valscore(X,y,scoring)`: option to use weighted scoring function in cross-validation if scoring=weighted \n\nAncillary functions \n-------------------\n- `snipls` (class): sparse NIPALS regression (first described in: \\[3\\]) \n- `Hampel`: Hampel weight function \n- `Huber`: Huber weight function \n- `Fair`: Fair weight function \n- `brokenstick`: broken stick rule to estimate number of relevant principal components \n- `robcent` (class): robust centring and scaling \n\nExample\n-------\nTo run a toy example: \n- Source packages and data: \n\n import pandas as ps\n data = ps.read_csv(\"./Returns_shares.csv\")\n columns = data.columns[2:8]\n data = data.values[:,2:8]\n X = data[:,0:5]\n y = data[:,5]\n X0 = X.astype('float')\n y0 = y.astype('float')\n\n- Estimate and predict by SPRM\n\n from sprm import sprm\n res_sprm = sprm(2,.8,'Hampel',.95,.975,.999,'median','mad',True,100,.01,'ally','xonly',columns,True)\n res_sprm.fit(X0[:2666],y0[:2666])\n res_sprm.predict(X0[2666:])\n res_sprm.transform(X0[2666:])\n res_sprm.weightnewx(X0[2666:])\n res_sprm.get_params()\n res_sprm.set_params(fun=\"Huber\")\n\n- Cross-validated using GridSearchCV: \n\n import numpy as np\n from sklearn.model_selection import GridSearchCV \n res_sprm_cv = GridSearchCV(sprm(), cv=10, param_grid={\"n_components\": [1, 2, 3], \n \"eta\": np.arange(.1,.9,.05).tolist()}) \n res_sprm_cv.fit(X0[:2666],y0[:2666]) \n res_sprm_cv.best_params_\n\n\nThe Robust M (RM) estimator\n===========================\n\nRM has been implemented to be consistent with SPRM. It takes the same arguments, except for `eta` and `n_components`, \nbecause it does not perform dimension reduction nor variable selection. For the same reasons, the outputs are limited to regression\noutputs. Therefore, dimension reduction outputs like `x_scores_`, `x_loadings_`, etc. are not provided. \n\n Estimate and predict by RM: \n\n from sprm import rm\n res_rm = rm('Hampel',.95,.975,.999,'median','mad','specific',True,100,.01,columns,True)\n res_rm.fit(X0[:2666],y0[:2666])\n res_rm.predict(X0[2666:])\n\nThe Sparse NIPALS (SNIPLS) estimator\n====================================\n\nSNIPLS is the non-robust sparse univariate PLS algorithm \\[3\\]. SNIPLS has been implemented to be consistent with SPRM. It takes the same arguments, except for 'fun' and 'probp1' through 'probp3', since these are robustness parameters. For the same reasons, the outputs are limited to sparse dimension reduction and regression outputs. Robustness related outputs like x_caseweights_ cannot be provided.\n\n Estimate and predict by SNIPLS: \n\n from sprm import snipls\n res_snipls = snipls(n_components=4, eta=.5)\n res_snipls.fit(X0[:2666],y0[:2666])\n res_snipls.predict(X0[2666:])\n\n\n\nPlotting functionality\n======================\n\nThe file `sprm_plot.py` contains a set of plot functions based on Matplotlib. The class sprm_plot contains plots for sprm objects, wheras the class sprm_plot_cv contains a plot for cross-validation. \n\nDependencies\n------------\n- pandas\n- numpy\n- matplotlib.pyplot\n- for plotting cross-validation results: sklearn.model_selection.GridSearchCV\n\nParamaters\n----------\n- `res_sprm`, sprm. An sprm class object that has been fit. \n- `colors`, list of str entries. Only mandatory input. Elements determine colors as: \n - \\[0\\]: borders of pane \n - \\[1\\]: plot background\n - \\[2\\]: marker fill\n - \\[3\\]: diagonal line \n - \\[4\\]: marker contour, if different from fill\n - \\[5\\]: marker color for new cases, if applicable\n - \\[6\\]: marker color for harsh calibration outliers\n - \\[7\\]: marker color for harsh prediction outliers\n- `markers`, a list of str entries. Elements determkine markers for: \n - \\[0\\]: regular cases \n - \\[1\\]: moderate outliers \n - \\[2\\]: harsh outliers \n\nMethods\n-------\n- plot_coeffs(entity=\"coef_\",truncation=0,columns=[],title=[]): Plot regression coefficients, loadings, etc. with the option only to plot the x% smallest and largets coefficients (truncation) \n- plot_yyp(ytruev=[],Xn=[],label=[],names=[],namesv=[],title=[],legend_pos='lower right',onlyval=False): Plot y vs y predicted. \n- plot_projections(Xn=[],label=[],components = [0,1],names=[],namesv=[],title=[],legend_pos='lower right',onlyval=False): Plot score space. \n- plot_caseweights(Xn=[],label=[],names=[],namesv=[],title=[],legend_pos='lower right',onlyval=False,mode='overall'): Plot caseweights, with the option to plot 'x', 'y' or 'overall' case weights for cases used to train the model. For new cases, only 'x' weights can be plotted. \n\nRemark\n------\nThe latter 3 methods will work both for cases that the models has been trained with (no additional input) or new cases (requires Xn and in case of plot_ypp, ytruev), with the option to plot only the latter (option onlyval = True). All three functions have the option to plot case names if supplied as list. \n\nAncillary classes\n------------------ \n- `sprm_plot_cv` has method eta_ncomp_contour(title) to plot sklearn GridSearchCV results \n- ABline2D plots the first diagonal in y vs y predicted plots. \n\nExample (continued) \n-------------------\n- initialize some values: \n\n colors = [\"white\",\"#BBBBDD\",\"#0000DD\",'#1B75BC','#4D4D4F','orange','red','black']\n markers = ['o','d','v']\n label = [\"AIG\"]\n names = [str(i) for i in range(1,len(res_sprm.y)+1)]\n namesv = [str(i) for i in range(1,len(y0[2667:])+1)]\n\n- run sprm.plot: \n\n from sprm import sprm_plot\n res_sprm_plot = sprm_plot(res_sprm,colors)\n\n- plot coefficients: \n\n res_sprm_plot.plot_coeffs(title=\"All AIG SPRM scaled b\")\n res_sprm_plot.plot_coeffs(truncation=.05,columns=columns,title=\"5% smallest and largest AIG sprm b\")\n\n ![AIG sprm regression coefficients](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_b.png \"AIG SPRM regression coefficients\")\n\n- plot y vs y predicted, training cases only: \n\n res_sprm_plot.plot_yyp(label=label,title=\"AIG SPRM y vs. y predicted\")\n res_sprm_plot.plot_yyp(label=label,names=names,title=\"AIG SPRM y vs. y predicted\")\n\n ![AIG sprm y vs y predicted, taining set](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_yyp_train.png \"AIG SPRM y vs y predicted, training set\")\n\n- plot y vs y predicted, including test cases\n\n res_sprm_plot.plot_yyp(ytruev=y0[2667:],Xn=X0[2667:],label=label,names=names,namesv=namesv,title=\"AIG SPRM y vs. \n y predicted\") \n res_sprm_plot.plot_yyp(ytruev=y0[2667:],Xn=X0[2667:],label=label,title=\"AIG SPRM y vs. y predicted\")\n\n ![AIG sprm y vs y predicted, taining set](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_yyp_train_test.png \"AIG SPRM y vs y predicted\")\n\n- plot y vs y predicted, only test set cases: \n\n res_sprm_plot.plot_yyp(ytruev=y0[2667:],Xn=X0[2667:],label=label,title=\"AIG SPRM y vs. y predicted\",onlyval=True)\n\n- plot score space, options as above, with the second one shown here: \n\n res_sprm_plot.plot_projections(Xn=X0[2667:],label=label,names=names,namesv=namesv,title=\"AIG SPRM score space, components 1 and 2\")\n res_sprm_plot.plot_projections(Xn=X0[2667:],label=label,title=\"AIG SPRM score space, components 1 and 2\")\n res_sprm_plot.plot_projections(Xn=X0[2667:],label=label,namesv=namesv,title=\"AIG SPRM score space, components 1 and 2\",onlyval=True)\n\n\n ![AIG sprm score space](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_T12.png \"AIG SPRM score space\")\n\n- plot caseweights, options as above, with the second one shown here:\n\n res_sprm_plot.plot_caseweights(Xn=X0[2667:],label=label,names=names,namesv=namesv,title=\"AIG SPRM caseweights\")\n res_sprm_plot.plot_caseweights(Xn=X0[2667:],label=label,title=\"AIG SPRM caseweights\")\n res_sprm_plot.plot_caseweights(Xn=X0[2667:],label=label,namesv=namesv,title=\"AIG SPRM caseweights\",onlyval=True) \n\n ![AIG sprm caseweights](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_caseweights.png \"AIG SPRM caseweights\")\n\n\n- plot cross-validation results: \n\n from sprm import sprm_plot_cv\n res_sprm_plot_cv = sprm_plot_cv(res_sprm_cv,colors)\n res_sprm_plot_cv.eta_ncomp_contour()\n res_sprm_plot_cv.cv_score_table_\n\n ![AIG sprm CV results](https://github.com/SvenSerneels/sprm/blob/master/img/AIG_CV.png \"AIG SPRM CV results\")\n\n\nReferences\n----------\n1. [Sparse partial robust M regression](https://www.sciencedirect.com/science/article/abs/pii/S0169743915002440), Irene Hoffmann, Sven Serneels, Peter Filzmoser, Christophe Croux, Chemometrics and Intelligent Laboratory Systems, 149 (2015), 50-59.\n2. [Partial robust M regression](https://doi.org/10.1016/j.chemolab.2005.04.007), Sven Serneels, Christophe Croux, Peter Filzmoser, Pierre J. Van Espen, Chemometrics and Intelligent Laboratory Systems, 79 (2005), 55-64.\n3. [Sparse and robust PLS for binary classification](https://onlinelibrary.wiley.com/doi/abs/10.1002/cem.2775), I. Hoffmann, P. Filzmoser, S. Serneels, K. Varmuza, Journal of Chemometrics, 30 (2016), 153-162.\n\n\nRelease notes\n=============\n\nVersion 0.2.1\n-------------\n- sprm now takes both numeric (n,1) np matrices and (n,) np.arrays as input \n\n\nVersion 0.2.0\n-------------\nChanges compared to version 0.1: \n- All functionalities can now be loaded in modular way, e.g. to use plotting functions, now source the plot function separately:\n\n from sprm import sprm_plot \n\n- The package now includes a robust M regression estimator (rm.py), which is a multiple regression only variant of sprm. \n It is based on the same iterative re-weighting scheme, buit does not perform dimension reduction, nor variable selection.\n- The robust preprocessing routine (robcent.py) has been re-written so as to be more consistent with sklearn.\n\nVersion 0.3\n-----------\nAll three estimators provided as separate classes in module:\n\n from sprm import sprm \n from sprm import snipls\n from sprm import rm\n\nAlso, sprm now includes a check for zero scales. It will remove zero scale variables from the input data, and only use \ncolumns corresponding to nonzero predictor scales in new data. This check has not yet been built in for snipls or rm \nseparately. \n\nPlus some minor changes to make it consistent with the latest numpy and matplotlib versions. \n\nWork to do\n----------\n- optimize alignment to sklearn\n- optimize for speed \n- extend to multivariate responses (open research topic !)\n- suggestions always welcome \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/SvenSerneels/sprm", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "sprm", "package_url": "https://pypi.org/project/sprm/", "platform": "", "project_url": "https://pypi.org/project/sprm/", "project_urls": { "Homepage": "https://github.com/SvenSerneels/sprm" }, "release_url": "https://pypi.org/project/sprm/0.3.12/", "requires_dist": [ "numpy (>=1.5.0)", "scipy (>=0.8.0)", "matplotlib (>=2.2.0)", "scikit-learn (>=0.18.0)", "pandas (>=0.19.0)", "statsmodels (>=0.8.0)" ], "requires_python": "", "summary": "Sparse Partial Robust M Regression, including plot functions", "version": "0.3.12" }, "last_serial": 5602584, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9c3aaf6ee7f9f097911f7517476a3b25", "sha256": "94321960113e828abe64a320bc47118ff7167fbf960d6df8f47f7c597d7ce922" }, "downloads": -1, "filename": "sprm-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9c3aaf6ee7f9f097911f7517476a3b25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20448, "upload_time": "2018-07-28T23:06:54", "url": "https://files.pythonhosted.org/packages/ad/cf/0d21f88fe3eabd463d8550edd95474a65a07b21fbe523e5a2455fc138066/sprm-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a0272348288c74b56638f749d412ad44", "sha256": "aa8adf5a62fe13802b45b95907b688d79691ba8e1fc98863181c119987e8ae3a" }, "downloads": -1, "filename": "sprm-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a0272348288c74b56638f749d412ad44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20469, "upload_time": "2018-07-31T01:46:20", "url": "https://files.pythonhosted.org/packages/f6/55/6ed0e4052763f8db0ccadb881f6fc5b4dbd594d2c79597b28d38a5e48bdf/sprm-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "772a238f00ccb1fa6dc84f13e774c07b", "sha256": "56214f3b8b572c3f0a649af65401ac31c04fa5b8aba7da7b1ce4611580490802" }, "downloads": -1, "filename": "sprm-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "772a238f00ccb1fa6dc84f13e774c07b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37355, "upload_time": "2019-01-27T00:00:45", "url": "https://files.pythonhosted.org/packages/a6/54/6cd42afb05bf6ae0c22ef4c2e50cffd196be34508d430eea04e7a74ad30e/sprm-0.1.10-py3-none-any.whl" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "0c6cf828a64a5856c23d629ffc608ee6", "sha256": "2bdf6ebae5c8cefdd2615c43e4290f40dd886dd99c817a9572cfbfde747d8e5d" }, "downloads": -1, "filename": "sprm-0.1.11-py3-none-any.whl", "has_sig": false, "md5_digest": "0c6cf828a64a5856c23d629ffc608ee6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37378, "upload_time": "2019-01-27T00:14:29", "url": "https://files.pythonhosted.org/packages/fe/c2/39065de3c9620f140116325725db9c51d3899f471f022831748c06d062de/sprm-0.1.11-py3-none-any.whl" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "05dbdd98b62103b84a4057ba4df9663a", "sha256": "8a9f749b671c5271c125fd561cfd4f1682051f1e626cc4bf0d27b2d1be34161e" }, "downloads": -1, "filename": "sprm-0.1.12-py3-none-any.whl", "has_sig": false, "md5_digest": "05dbdd98b62103b84a4057ba4df9663a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41439, "upload_time": "2019-01-27T00:33:04", "url": "https://files.pythonhosted.org/packages/df/37/a79c2f6a12e7a38c1d5901bfc5f9cc0392e51646316178581384ab95f78b/sprm-0.1.12-py3-none-any.whl" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "2eb8724034efd3b1ed8110373dd1bf25", "sha256": "910dc4056fa4e1dcf04c32c5d794323e90a56422176635579d8dd0e9057cad1a" }, "downloads": -1, "filename": "sprm-0.1.13-py3-none-any.whl", "has_sig": false, "md5_digest": "2eb8724034efd3b1ed8110373dd1bf25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42398, "upload_time": "2019-01-27T00:46:13", "url": "https://files.pythonhosted.org/packages/5b/6b/b5944bdbbd06433fb304f60fcf1c28efb1bb38cdb04c82f18804f48849ea/sprm-0.1.13-py3-none-any.whl" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "23844af2322bfd2d662197ed27ae3d2d", "sha256": "48d9b16a795f5441a22d6f726d2db50def2d981f1e9de91db1e62b22ab60565a" }, "downloads": -1, "filename": "sprm-0.1.15-py3-none-any.whl", "has_sig": false, "md5_digest": "23844af2322bfd2d662197ed27ae3d2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31896, "upload_time": "2019-01-27T00:51:46", "url": "https://files.pythonhosted.org/packages/e9/4e/d8c37b1f425fb8e16b25e7d77ca066ce856cd5bf5c2390cee60224214cfe/sprm-0.1.15-py3-none-any.whl" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "b56b28a62844a36921f85f60c47f5e77", "sha256": "eccca7096aa859763cc7d85a483ea9741230db95d9631e7f010fa93f0edbb12a" }, "downloads": -1, "filename": "sprm-0.1.16-py3-none-any.whl", "has_sig": false, "md5_digest": "b56b28a62844a36921f85f60c47f5e77", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31868, "upload_time": "2019-01-27T01:09:53", "url": "https://files.pythonhosted.org/packages/81/fc/5a509ff9be67891cff2d63251c42c63f2f0bb35cba368b510631fbab1f56/sprm-0.1.16-py3-none-any.whl" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "98e59eea63cd2a288905a2c9aa8293be", "sha256": "1523f17f5f228ae36654819cdf52739ffecf52d5807171c8fdf43a7a83ee0996" }, "downloads": -1, "filename": "sprm-0.1.17-py3-none-any.whl", "has_sig": false, "md5_digest": "98e59eea63cd2a288905a2c9aa8293be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31935, "upload_time": "2019-01-27T01:19:50", "url": "https://files.pythonhosted.org/packages/cd/ab/9fd5264d45b9c6f18342e9c0e63fb9061552808998ccf95deb43e60c74f2/sprm-0.1.17-py3-none-any.whl" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "e75eca96066e4ad561e8ee0dedc57206", "sha256": "8440556fdcfa6eb47cc37abb074b33dec95ce785b89fce0f854a503690066f71" }, "downloads": -1, "filename": "sprm-0.1.18-py3-none-any.whl", "has_sig": false, "md5_digest": "e75eca96066e4ad561e8ee0dedc57206", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31940, "upload_time": "2019-01-27T01:24:21", "url": "https://files.pythonhosted.org/packages/b3/e7/18096c47ae7ae168596223685d1d105eaab61770585bd7f6eb655edc1d84/sprm-0.1.18-py3-none-any.whl" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "68844b1d5db6e3474286b7a2d2263bd2", "sha256": "5e9459ca1775dc419cd6d7d3c5da7317328d25a5caaa4d954c6cfa4a7e2d04bc" }, "downloads": -1, "filename": "sprm-0.1.19-py3-none-any.whl", "has_sig": false, "md5_digest": "68844b1d5db6e3474286b7a2d2263bd2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31963, "upload_time": "2019-01-27T01:27:42", "url": "https://files.pythonhosted.org/packages/fb/96/b5b50464be206f266ca64b95cd29a1775b19d6c6f8cd049dfaca130c4546/sprm-0.1.19-py3-none-any.whl" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "880f14550ce27b73a39139d798bd3d8f", "sha256": "0979a3b996a1aa19abf23c3b0bdcf52f8975e46399ae579dd6e4b400761db3fa" }, "downloads": -1, "filename": "sprm-0.1.2.tar.gz", "has_sig": false, "md5_digest": "880f14550ce27b73a39139d798bd3d8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20490, "upload_time": "2018-07-31T02:11:10", "url": "https://files.pythonhosted.org/packages/9a/95/a0446d71b8cf58520d58315aa94b7810d857d96045edd3cdbef7140e874a/sprm-0.1.2.tar.gz" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "7d288747c74c5fafc968b1d4c2be98cc", "sha256": "47218b4d2bb66b0ecd4b628a6834715a2f2db8f1066fe2a305215419d864a5b3" }, "downloads": -1, "filename": "sprm-0.1.20-py3-none-any.whl", "has_sig": false, "md5_digest": "7d288747c74c5fafc968b1d4c2be98cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32942, "upload_time": "2019-01-27T17:12:52", "url": "https://files.pythonhosted.org/packages/5d/b1/a15091ab9051ef8f70c31f1309d91afc7f193685b2926f328e0fd41a0d69/sprm-0.1.20-py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5176edeb6b8157bf3b9af600918202cf", "sha256": "b11cbdbfcd15fe26856e960f14c98cdf5b38515228e84ee4ecfb8e8b4135d6a7" }, "downloads": -1, "filename": "sprm-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5176edeb6b8157bf3b9af600918202cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20485, "upload_time": "2018-07-31T02:33:38", "url": "https://files.pythonhosted.org/packages/98/92/aae200270545cb8292ac6629a3bf5aa13d13beed759cca5f5d9ee7cdd0c2/sprm-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "c3a7684c12cbf07c6e6844723b77e4cb", "sha256": "acccf0de883060c551e26a5669c58674fd6b6e6a72af42a6cf8b00dfbf1168ca" }, "downloads": -1, "filename": "sprm-0.1.4.tar.gz", "has_sig": false, "md5_digest": "c3a7684c12cbf07c6e6844723b77e4cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20485, "upload_time": "2018-07-31T02:58:14", "url": "https://files.pythonhosted.org/packages/65/73/b8a5d7a0a8ea5ca1ba6a7a9e9242180914f30e123e21f75efecc9d1e323e/sprm-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e3d1713651379cb9478ac47bb3e4fcf7", "sha256": "4ee05e73b29c2cedc206baca8c788b0076f7a9623377dcc20e9c953d283d8d31" }, "downloads": -1, "filename": "sprm-0.1.5.tar.gz", "has_sig": false, "md5_digest": "e3d1713651379cb9478ac47bb3e4fcf7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20386, "upload_time": "2018-07-31T21:25:27", "url": "https://files.pythonhosted.org/packages/65/89/64d5f7570a31ea9de4fbb5ac19ec3b09d839fb480a32e230e2b649db4770/sprm-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "8398b272f884848bd9fb19f665968856", "sha256": "355313859b59f4759cd1428496579ebfc1ecd6bddec149fc506bcc22a89cb4da" }, "downloads": -1, "filename": "sprm-0.1.6.tar.gz", "has_sig": false, "md5_digest": "8398b272f884848bd9fb19f665968856", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20545, "upload_time": "2018-07-31T22:01:16", "url": "https://files.pythonhosted.org/packages/6a/d8/afc2bfd12d62e662b6a22a0dfc7c81ccc2c4378b48e71208bfe30f95fa9e/sprm-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8636d22594cdfc23d854c24805d5f642", "sha256": "0cf819b24cb99397db205a973f7b0ab2fc5623f33c2a83ba67e1f80258e85c63" }, "downloads": -1, "filename": "sprm-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8636d22594cdfc23d854c24805d5f642", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28232, "upload_time": "2019-01-19T22:20:18", "url": "https://files.pythonhosted.org/packages/37/7c/82344b009e9a45eef1b50ac2fd7ebbf40cfc9669f46bbe1952578e56e132/sprm-0.1.7-py3-none-any.whl" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "fbc14f18a1097bb87251fb7d1b6760c0", "sha256": "c5a7ee697b9fbc8fc6382c4a846226a0a38c2988db2301e755253e9a0e6b82c0" }, "downloads": -1, "filename": "sprm-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "fbc14f18a1097bb87251fb7d1b6760c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28228, "upload_time": "2019-01-19T22:43:48", "url": "https://files.pythonhosted.org/packages/d5/99/70029b71b8eb61ccd2eb8c29a7e75393edc03c7cc82793a7e91376cc0bb0/sprm-0.1.8-py3-none-any.whl" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "b7b9b7665b1f8aaa0e699cbee4d910f1", "sha256": "20a537ed62dd287cd062c8ecd7ed41f4be1ad5b53ff93ae58b0ffa1f8a185df1" }, "downloads": -1, "filename": "sprm-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "b7b9b7665b1f8aaa0e699cbee4d910f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31908, "upload_time": "2019-01-26T23:39:08", "url": "https://files.pythonhosted.org/packages/66/d7/0b5add5c71f18954b197650c0f82482b558443c68176e2442d3abb749062/sprm-0.1.9-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "547f56354896528b013742f7590f2a56", "sha256": "484a065adb5d60fb5a0d24025a930610bf52f273bd9f3fa2ce51fec02f1d0eb1" }, "downloads": -1, "filename": "sprm-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "547f56354896528b013742f7590f2a56", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33436, "upload_time": "2019-01-27T19:50:44", "url": "https://files.pythonhosted.org/packages/b4/dc/48cecaec3539a60aaff85085c9e80a856b595362d553674401a3c1083256/sprm-0.2.0-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3a7285721d99a6e343624e223b8614ef", "sha256": "19d6ba3c1328e760ef216733befc5184b187c8d5ea0d450e500994f9cd285532" }, "downloads": -1, "filename": "sprm-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3a7285721d99a6e343624e223b8614ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33626, "upload_time": "2019-02-02T00:13:52", "url": "https://files.pythonhosted.org/packages/b1/39/16bf3cf10110094decffcafb350592296db219fa293ddfe0efc0778b5d6b/sprm-0.2.1-py3-none-any.whl" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "8baa543fdaddb5bbd20929bced4f8171", "sha256": "abe95fc92de83ba684fb2fdfa73e06f961eecf73f51a7dc81278dfa5a4a6569e" }, "downloads": -1, "filename": "sprm-0.2.10-py3-none-any.whl", "has_sig": false, "md5_digest": "8baa543fdaddb5bbd20929bced4f8171", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35223, "upload_time": "2019-05-24T20:59:20", "url": "https://files.pythonhosted.org/packages/28/2e/a5a6fe16ece6d82292ab0e440f1aba66eda12d3cff00a6392d1dfefb80bd/sprm-0.2.10-py3-none-any.whl" } ], "0.2.11": [ { "comment_text": "", "digests": { "md5": "8f80ac023d0160f8a21bd0e84032d4b8", "sha256": "e5b4b9acae0b960b59777930c9a35bd7efd2cdb21dbfca8ef8c194ed7f439840" }, "downloads": -1, "filename": "sprm-0.2.11-py3-none-any.whl", "has_sig": false, "md5_digest": "8f80ac023d0160f8a21bd0e84032d4b8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35215, "upload_time": "2019-05-24T21:05:41", "url": "https://files.pythonhosted.org/packages/f7/fe/bb982cc64c82247c7b80fd5ed5b9566200c43f3d91e5c0fa893ca316e4eb/sprm-0.2.11-py3-none-any.whl" } ], "0.2.12": [ { "comment_text": "", "digests": { "md5": "753e5d22e27ad5be0e30ddfb52cb885d", "sha256": "1886f1d7a2420c89df318f2c84b420266cf4e1906dae7690a4c8719ea046a5ef" }, "downloads": -1, "filename": "sprm-0.2.12-py3-none-any.whl", "has_sig": false, "md5_digest": "753e5d22e27ad5be0e30ddfb52cb885d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35215, "upload_time": "2019-05-24T21:08:54", "url": "https://files.pythonhosted.org/packages/0b/0f/bd9375c70c14fdea3bf5de34c0101e327af47a9bdbc4ff6e5bfcca24f188/sprm-0.2.12-py3-none-any.whl" } ], "0.2.13": [ { "comment_text": "", "digests": { "md5": "74613f22e4e7bf8e8a881d402e8f2eb7", "sha256": "a5a346466101fcd05de9f2b812f8b64ba8d3c31c964da7eb9f37da537d332d1b" }, "downloads": -1, "filename": "sprm-0.2.13-py3-none-any.whl", "has_sig": false, "md5_digest": "74613f22e4e7bf8e8a881d402e8f2eb7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35220, "upload_time": "2019-05-24T21:20:02", "url": "https://files.pythonhosted.org/packages/4f/94/be0e3e02ac38342a3b8e0607556f36eea8f771b43409965a8c399cb49782/sprm-0.2.13-py3-none-any.whl" } ], "0.2.14": [ { "comment_text": "", "digests": { "md5": "e73cfe98c9abc1da67f500b0efcd7855", "sha256": "c94aa6d47fecb52849e2fad3a825a000a07e5558455132031fe2c3a282b021c2" }, "downloads": -1, "filename": "sprm-0.2.14-py3-none-any.whl", "has_sig": false, "md5_digest": "e73cfe98c9abc1da67f500b0efcd7855", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35215, "upload_time": "2019-05-24T21:22:15", "url": "https://files.pythonhosted.org/packages/b7/5b/63f9b346ff65abf0a223a1b5ad85b6d7e7111c5cfcdd2b801412f0b2fcb7/sprm-0.2.14-py3-none-any.whl" } ], "0.2.15": [ { "comment_text": "", "digests": { "md5": "7831f137e3ff6c5ca66112af726b98e0", "sha256": "e0b87f8cefe46b79af8e9a523db0d8c8dad4505843f6d27a090b2717ef7679ba" }, "downloads": -1, "filename": "sprm-0.2.15-py3-none-any.whl", "has_sig": false, "md5_digest": "7831f137e3ff6c5ca66112af726b98e0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35218, "upload_time": "2019-05-24T21:29:19", "url": "https://files.pythonhosted.org/packages/54/43/0d905c9bf24b1e5fffb3f7d0d41decaa1dab690d2c918d3f6ca36b36c7a4/sprm-0.2.15-py3-none-any.whl" } ], "0.2.16": [ { "comment_text": "", "digests": { "md5": "f05e6fa1d859f4f48f15324ac24ec19c", "sha256": "84f7c83399ef7f9f876454ff3656d87ccd5b374dddcaed1a45c271615ac8e0f3" }, "downloads": -1, "filename": "sprm-0.2.16-py3-none-any.whl", "has_sig": false, "md5_digest": "f05e6fa1d859f4f48f15324ac24ec19c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35219, "upload_time": "2019-05-24T21:35:40", "url": "https://files.pythonhosted.org/packages/08/95/453c9110ce3751b9d07f7b995837769b6ed8e820f9bd240ffd977c2f6152/sprm-0.2.16-py3-none-any.whl" } ], "0.2.17": [ { "comment_text": "", "digests": { "md5": "8c3f30d15ea1f4950763d885d2270e25", "sha256": "d3b91fe98f98fb179caa389a9f5b4bc5db9b298d8cdc8a79dd5bf81523be0054" }, "downloads": -1, "filename": "sprm-0.2.17-py3-none-any.whl", "has_sig": false, "md5_digest": "8c3f30d15ea1f4950763d885d2270e25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35218, "upload_time": "2019-05-24T21:43:39", "url": "https://files.pythonhosted.org/packages/76/02/d3d83ed8baefd2a39574afd8e01d34b01036b6335bfd58b5edc3fa9255df/sprm-0.2.17-py3-none-any.whl" } ], "0.2.18": [ { "comment_text": "", "digests": { "md5": "1bf06b279d568f4132164fb2d733a316", "sha256": "16838195c587a32f180fdcdde772f9fcbf07c12833cebf61214a0e42c2e198d4" }, "downloads": -1, "filename": "sprm-0.2.18-py3-none-any.whl", "has_sig": false, "md5_digest": "1bf06b279d568f4132164fb2d733a316", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35219, "upload_time": "2019-05-24T21:45:13", "url": "https://files.pythonhosted.org/packages/ed/81/11376e7f12cf777057864896f5c6588cf7385de272ceef1a5a379a476d50/sprm-0.2.18-py3-none-any.whl" } ], "0.2.19": [ { "comment_text": "", "digests": { "md5": "c145b36f6b94f56fc0fac55f38f16779", "sha256": "a90dee744d381f064ca678a0ac2fef958b2a551d25a2e924b90c8e9ab8576623" }, "downloads": -1, "filename": "sprm-0.2.19-py3-none-any.whl", "has_sig": false, "md5_digest": "c145b36f6b94f56fc0fac55f38f16779", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35194, "upload_time": "2019-05-24T21:47:11", "url": "https://files.pythonhosted.org/packages/29/a4/4fa8d20abd2ed02aba4dc6e0dfd5d1a56be8f13c80d8119f2df190f0c103/sprm-0.2.19-py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "f6224a486999a71ea0cf5f73c083db94", "sha256": "2515200f018efa1ad062bdc758cd65230d9959d1b5c9dafcd6f07eddd99e8f21" }, "downloads": -1, "filename": "sprm-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f6224a486999a71ea0cf5f73c083db94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33640, "upload_time": "2019-02-02T00:16:05", "url": "https://files.pythonhosted.org/packages/57/19/ba80293adef64fa9f483cb99bc16c9a647c69303c17e996d982f45af9b67/sprm-0.2.2-py3-none-any.whl" } ], "0.2.20": [ { "comment_text": "", "digests": { "md5": "ffac650b3a61c6f2bb6362e68260012b", "sha256": "f595b2a8279693f73d6be32dbf0131847daaabb7612dafc3a1b1f47665c625f9" }, "downloads": -1, "filename": "sprm-0.2.20-py3-none-any.whl", "has_sig": false, "md5_digest": "ffac650b3a61c6f2bb6362e68260012b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35218, "upload_time": "2019-05-24T21:51:10", "url": "https://files.pythonhosted.org/packages/e2/6c/3d5b1605f11c4decaff6b94723468a0dfd3574a18bb486b6ed5e55449532/sprm-0.2.20-py3-none-any.whl" } ], "0.2.21": [ { "comment_text": "", "digests": { "md5": "6a2bb376df278284b74ff1ab9e0e5a73", "sha256": "5108f607d7bb2fe2592d3f28e52d18e2adf94cd78defb0103a1f2c4a83e06a90" }, "downloads": -1, "filename": "sprm-0.2.21-py3-none-any.whl", "has_sig": false, "md5_digest": "6a2bb376df278284b74ff1ab9e0e5a73", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35218, "upload_time": "2019-05-24T21:55:55", "url": "https://files.pythonhosted.org/packages/4e/77/e42b7fdd47fb6573b3becdfffc32fc0b197c4ca43f2c4abea5844fc57c0d/sprm-0.2.21-py3-none-any.whl" } ], "0.2.22": [ { "comment_text": "", "digests": { "md5": "9cc95ead6c239b58ea31d83dfca96fb3", "sha256": "16b4483dc42cbf802bf41107d43192b47efc502a2af106e50233fab974a32abf" }, "downloads": -1, "filename": "sprm-0.2.22-py3-none-any.whl", "has_sig": false, "md5_digest": "9cc95ead6c239b58ea31d83dfca96fb3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35216, "upload_time": "2019-05-24T22:04:21", "url": "https://files.pythonhosted.org/packages/25/7c/3619e575dad81fa2950e0e6a907c57f02d5d50f3bbabfbea6081a48239f3/sprm-0.2.22-py3-none-any.whl" } ], "0.2.23": [ { "comment_text": "", "digests": { "md5": "5635cdc3c42bd0a9856e9fce3f3d0a6f", "sha256": "1443ab5bdb7bc74a34e526fcc8ab4f18582361b85c00624a5f06aebed41cfe52" }, "downloads": -1, "filename": "sprm-0.2.23-py3-none-any.whl", "has_sig": false, "md5_digest": "5635cdc3c42bd0a9856e9fce3f3d0a6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35209, "upload_time": "2019-05-24T22:09:16", "url": "https://files.pythonhosted.org/packages/ff/e6/5c410d3e9c21bb82ef70ae3ee15fe8c3aba36639c94a42796a07804c4a31/sprm-0.2.23-py3-none-any.whl" } ], "0.2.24": [ { "comment_text": "", "digests": { "md5": "e1af466be7a3e40365d5219b7bf2adf0", "sha256": "84dc7976ee1c680abca84c4d4e4c0ec1776e5e1b4334403f38137db8887f222e" }, "downloads": -1, "filename": "sprm-0.2.24-py3-none-any.whl", "has_sig": false, "md5_digest": "e1af466be7a3e40365d5219b7bf2adf0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35218, "upload_time": "2019-05-24T22:11:20", "url": "https://files.pythonhosted.org/packages/dd/d4/40eda81c5bb78ca6e5ad46158cd1283b8abbf0e31bb64f03585130ea6664/sprm-0.2.24-py3-none-any.whl" } ], "0.2.25": [ { "comment_text": "", "digests": { "md5": "1024e0a57d3527a37e40a68ab4692f86", "sha256": "8b6f822388abf911650f5f4a3840a4169ad6dcd7dc24fa1722d0c79a320e5bbc" }, "downloads": -1, "filename": "sprm-0.2.25-py3-none-any.whl", "has_sig": false, "md5_digest": "1024e0a57d3527a37e40a68ab4692f86", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35221, "upload_time": "2019-05-24T22:16:48", "url": "https://files.pythonhosted.org/packages/3f/e2/4916dd83b2729590ba8ce3cae35ad72220b46c07a173c4ede1bc4678dd7c/sprm-0.2.25-py3-none-any.whl" } ], "0.2.26": [ { "comment_text": "", "digests": { "md5": "1352f3536f9332841ffed100e19352d5", "sha256": "2c050a41fbe19be981df8602fa60009d25ca0c6cb7e477fa003fe63d53be37f8" }, "downloads": -1, "filename": "sprm-0.2.26-py3-none-any.whl", "has_sig": false, "md5_digest": "1352f3536f9332841ffed100e19352d5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35227, "upload_time": "2019-05-24T22:23:35", "url": "https://files.pythonhosted.org/packages/36/35/f21a27b458ffa4656aebded80d79c544c770b3f3db60f1100156fd25d00d/sprm-0.2.26-py3-none-any.whl" } ], "0.2.27": [ { "comment_text": "", "digests": { "md5": "7612a167386672c8740edc9329772111", "sha256": "21c1d705046cf975bb7d013979bbe2793ce592b2db97d0b8f6bf6558ca541565" }, "downloads": -1, "filename": "sprm-0.2.27-py3-none-any.whl", "has_sig": false, "md5_digest": "7612a167386672c8740edc9329772111", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35232, "upload_time": "2019-05-24T22:27:19", "url": "https://files.pythonhosted.org/packages/69/b9/225dffab435506e2960d8240a29c7ce4fb59a9b3eda7cfa69cc631fa0895/sprm-0.2.27-py3-none-any.whl" } ], "0.2.28": [ { "comment_text": "", "digests": { "md5": "6f04db5dfba810944120a1f1a2bc5086", "sha256": "2c774e3294833f181ec69fc5cbcbe74bc07cd7ecc5701d8a6aea87f43154112d" }, "downloads": -1, "filename": "sprm-0.2.28-py3-none-any.whl", "has_sig": false, "md5_digest": "6f04db5dfba810944120a1f1a2bc5086", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35254, "upload_time": "2019-05-24T22:41:04", "url": "https://files.pythonhosted.org/packages/17/0c/a7b85f732873aa2a74d245ec499cad06a1d3f0478cc99fd0e300527514e2/sprm-0.2.28-py3-none-any.whl" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f53dd429a44646a0e69125a30d93dd57", "sha256": "a8b18aaa16c7aaecbb14d1041260d66a9080170fd77f99e7e6464f4c62246c66" }, "downloads": -1, "filename": "sprm-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f53dd429a44646a0e69125a30d93dd57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33648, "upload_time": "2019-02-02T00:24:51", "url": "https://files.pythonhosted.org/packages/d7/47/662d3d850ffef2ede2d1c87a73c7cd55e396e31dc1241287b4d6cfdb60ac/sprm-0.2.3-py3-none-any.whl" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "4b2acb3cc8bf3ee6c05712e0fd4c7bff", "sha256": "e373d09c24cad08257f23cae6eb94ef975556700a5d66cc74323a0c00c91c685" }, "downloads": -1, "filename": "sprm-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4b2acb3cc8bf3ee6c05712e0fd4c7bff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33648, "upload_time": "2019-02-02T00:39:25", "url": "https://files.pythonhosted.org/packages/f3/62/07b0f9d40b7a336d80460b33f13b43b023a8336c153017ca6d076fb7f812/sprm-0.2.4-py3-none-any.whl" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "b42e92a4d931e6744dbcf3d08632e3b9", "sha256": "269ed8d65967f08bbbff14eb0dd18bfb5cf6aa74337d209bf4a1382e96c7c9fb" }, "downloads": -1, "filename": "sprm-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "b42e92a4d931e6744dbcf3d08632e3b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33646, "upload_time": "2019-02-02T00:50:42", "url": "https://files.pythonhosted.org/packages/07/8b/4d04d2802fbf7a5f5052a028bde382779acc4429e7b6db04d53bcf0b4f44/sprm-0.2.5-py3-none-any.whl" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "300609467db49adedbe3ee9baa30093c", "sha256": "0d1b3f84779103032ad4a050aef82cab7a78ae59ca5fb63375db619c52c3d464" }, "downloads": -1, "filename": "sprm-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "300609467db49adedbe3ee9baa30093c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33688, "upload_time": "2019-02-02T01:07:29", "url": "https://files.pythonhosted.org/packages/1a/9b/bf6f01309a4be9d22523555e5ccdb04101f467b1e3468e069e3fe81f794d/sprm-0.2.6-py3-none-any.whl" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "b1ed1a23df0137bb1d276bbe2617deed", "sha256": "c85b241e9ffc8aa84971c062b5ecde7f5b058eedd9135600e2548c0bdf0eba5a" }, "downloads": -1, "filename": "sprm-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "b1ed1a23df0137bb1d276bbe2617deed", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33678, "upload_time": "2019-02-02T01:19:59", "url": "https://files.pythonhosted.org/packages/72/b6/ebc3b7c3c2473f5591f4943832ae185b7640a5484f29f1d234b9b970974b/sprm-0.2.7-py3-none-any.whl" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "8b8b805c78ee4de7c487e417e5ff2668", "sha256": "9c57a5494546a98a2e04504e685c7e66331e068903fdbede7bf32595bc97ffe6" }, "downloads": -1, "filename": "sprm-0.2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "8b8b805c78ee4de7c487e417e5ff2668", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33722, "upload_time": "2019-02-02T01:40:58", "url": "https://files.pythonhosted.org/packages/b3/ad/16c1361606aeb64fbdd3bcb64648fef480d9cf6afb83cb6569cd67282fbc/sprm-0.2.8-py3-none-any.whl" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "5cc63b3627e2161bbf658bc27545d75a", "sha256": "ebd0f88a5f6321930bc1c161c90c8c41cbf1e330865538d7ab251281a37bbd15" }, "downloads": -1, "filename": "sprm-0.2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "5cc63b3627e2161bbf658bc27545d75a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33728, "upload_time": "2019-02-02T01:50:11", "url": "https://files.pythonhosted.org/packages/37/07/824192038ab9f03c2829e18086aa0cd9cb4ab25f08ef2271fe07cff0ffb2/sprm-0.2.9-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "baaf5cb4c7e4e2433f0e631ea52badba", "sha256": "8466cfddf30da1e70d8370710a7f4f0c6770592cb64282fe20078a544184f6d2" }, "downloads": -1, "filename": "sprm-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "baaf5cb4c7e4e2433f0e631ea52badba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34931, "upload_time": "2019-05-24T23:00:50", "url": "https://files.pythonhosted.org/packages/a5/53/3ab45a505740fde83f1587f79662bbb90cfb9e836cb74f36c2cd15978e74/sprm-0.3.0-py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c2058b5b783c2e75ca5fb640f70e85f3", "sha256": "bd556d787472a8d4597f65ce709ef364b0d4bbe687e809d87cbae79e926ce878" }, "downloads": -1, "filename": "sprm-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c2058b5b783c2e75ca5fb640f70e85f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34939, "upload_time": "2019-05-26T19:43:13", "url": "https://files.pythonhosted.org/packages/22/0f/df738dc8ce4d1f993eb84596c9f63d7b41fae1be6cfed30e1c91818ff400/sprm-0.3.1-py3-none-any.whl" } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "fdf58adf86b0e6c6b8485f377df4823c", "sha256": "4f459038b57b3cfee2767e7917a8c7d2471abf6b0e1cdbd3aa0591e92488ead1" }, "downloads": -1, "filename": "sprm-0.3.10-py3-none-any.whl", "has_sig": false, "md5_digest": "fdf58adf86b0e6c6b8485f377df4823c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35036, "upload_time": "2019-07-04T16:20:43", "url": "https://files.pythonhosted.org/packages/21/bb/b400eac4766959e3b2209cd9c30ca8df53798e7bbf5ab70953b9d39391cc/sprm-0.3.10-py3-none-any.whl" } ], "0.3.11": [ { "comment_text": "", "digests": { "md5": "2610e47003e735299676938ebf7083b7", "sha256": "727ed7c405a02edfe3fd1f74eefa8a84202d0df1a4adc58d999e5f81e2d43693" }, "downloads": -1, "filename": "sprm-0.3.11-py3-none-any.whl", "has_sig": false, "md5_digest": "2610e47003e735299676938ebf7083b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35033, "upload_time": "2019-07-04T16:22:58", "url": "https://files.pythonhosted.org/packages/83/9a/2d0bfdd820b2f75f211a243762fbc9d012a38f6d3e50fdba8d6788067065/sprm-0.3.11-py3-none-any.whl" } ], "0.3.12": [ { "comment_text": "", "digests": { "md5": "dae122e450c8d0f5bea21d9ee301a626", "sha256": "ccbdcd586b8c64d271ea157b037244ebdc067ab97d913141dac50d5d6e1c5337" }, "downloads": -1, "filename": "sprm-0.3.12-py3-none-any.whl", "has_sig": false, "md5_digest": "dae122e450c8d0f5bea21d9ee301a626", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35256, "upload_time": "2019-07-30T00:04:02", "url": "https://files.pythonhosted.org/packages/a3/7e/9c9b2e99eabc58aa8981a546bc06a99f01aaf640512755249c70e3650bb7/sprm-0.3.12-py3-none-any.whl" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "70d90a1339ab0b3195ac5df59c46c7ef", "sha256": "3f360f4118aafcbe84a17fd5a0fec4f33b9d6d7fb4d9f337e6c33c4c38648a8a" }, "downloads": -1, "filename": "sprm-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "70d90a1339ab0b3195ac5df59c46c7ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34937, "upload_time": "2019-05-26T20:29:18", "url": "https://files.pythonhosted.org/packages/c7/82/ac56c91495df29d3a3f1a065009a388fa6f730efaaf20bdcaea793299c19/sprm-0.3.2-py3-none-any.whl" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "e5b66f0254c28718cc671b32d1125ebb", "sha256": "defa29ceaec382d15fe46004dffcf14972b5292e812d762088d9bbc7ec98a470" }, "downloads": -1, "filename": "sprm-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e5b66f0254c28718cc671b32d1125ebb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34944, "upload_time": "2019-05-26T20:34:26", "url": "https://files.pythonhosted.org/packages/4d/ad/9f45e11d60482350e159d8e52d7694f8f1b3522ac98fa59a9cc235c57eab/sprm-0.3.3-py3-none-any.whl" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "05215a0cc176b204e64e56bd8bd7067b", "sha256": "fd31aa11492b344d6e03f83e5442e6df9b1d235e6bdc191a8cdb62c092e18933" }, "downloads": -1, "filename": "sprm-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "05215a0cc176b204e64e56bd8bd7067b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34925, "upload_time": "2019-05-30T01:17:47", "url": "https://files.pythonhosted.org/packages/0f/2e/d7451186b33992023b56844d04a2d934f254767da5ea7537697221e82fd1/sprm-0.3.4-py3-none-any.whl" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "2e1440dc11cb4e8c44e61a3e1f797945", "sha256": "b755268c19a5192a1c343d680b3b2c4fff65eac768804d08b4eccdff9d078a72" }, "downloads": -1, "filename": "sprm-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2e1440dc11cb4e8c44e61a3e1f797945", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34964, "upload_time": "2019-07-04T15:34:24", "url": "https://files.pythonhosted.org/packages/b7/f8/15b3ae23a965396ede69469cbb3f28d17f06f9ef0cfd1b95da7e9f9b93ac/sprm-0.3.5-py3-none-any.whl" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "b73bf3a239d4b8e0e401324a3681a307", "sha256": "8d12859737b96d857462cfbaf1929c974edca3157a58cd1110f8889820089c38" }, "downloads": -1, "filename": "sprm-0.3.6-py3-none-any.whl", "has_sig": false, "md5_digest": "b73bf3a239d4b8e0e401324a3681a307", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34991, "upload_time": "2019-07-04T15:45:55", "url": "https://files.pythonhosted.org/packages/a8/3a/e468ab4a35a6240225341c2a568a4249de4780a2a18f7f2ac643c6bd298b/sprm-0.3.6-py3-none-any.whl" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "8cdc25b4f32ab11d548ee8199ed103d2", "sha256": "c6e042f32e808cc4e166d2bb224a7bd20ea4420d164b59b5a04c9d2a8befaf39" }, "downloads": -1, "filename": "sprm-0.3.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8cdc25b4f32ab11d548ee8199ed103d2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35000, "upload_time": "2019-07-04T15:52:05", "url": "https://files.pythonhosted.org/packages/6d/36/5cc704644f113c8f8029a990c0d6b055cf5f03a46ea54cbc56e7ea572382/sprm-0.3.7-py3-none-any.whl" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "3bc7c5c05fefb05164744e135d9aeca0", "sha256": "d4a7d07c773516cf1bca3cb9110eb4bb288b2e4523a045310ab6bd2c519dd3cf" }, "downloads": -1, "filename": "sprm-0.3.8-py3-none-any.whl", "has_sig": false, "md5_digest": "3bc7c5c05fefb05164744e135d9aeca0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35003, "upload_time": "2019-07-04T15:55:05", "url": "https://files.pythonhosted.org/packages/3f/35/2d45c803d385bdb2e32ff1c3ae82c32b48d2ac2bd4abc16b92897c26c3aa/sprm-0.3.8-py3-none-any.whl" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "7b2c2850fa586fb1358b46b104e8ede9", "sha256": "7a30b4a659c97518d06d231baddf32acceea4147c5493e7f210561931aa75ea1" }, "downloads": -1, "filename": "sprm-0.3.9-py3-none-any.whl", "has_sig": false, "md5_digest": "7b2c2850fa586fb1358b46b104e8ede9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35025, "upload_time": "2019-07-04T16:13:11", "url": "https://files.pythonhosted.org/packages/91/97/f7f4f089d3a2ae5387fdd3d497c314f66df60a0d02fc090851fa3d875b7f/sprm-0.3.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dae122e450c8d0f5bea21d9ee301a626", "sha256": "ccbdcd586b8c64d271ea157b037244ebdc067ab97d913141dac50d5d6e1c5337" }, "downloads": -1, "filename": "sprm-0.3.12-py3-none-any.whl", "has_sig": false, "md5_digest": "dae122e450c8d0f5bea21d9ee301a626", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35256, "upload_time": "2019-07-30T00:04:02", "url": "https://files.pythonhosted.org/packages/a3/7e/9c9b2e99eabc58aa8981a546bc06a99f01aaf640512755249c70e3650bb7/sprm-0.3.12-py3-none-any.whl" } ] }