{ "info": { "author": "Alex Furtunato", "author_email": "alexfurtunato@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "parsecpy\n========\n\nPython library to interface with PARSEC 2.1 and 3.0 Benchmark,\ncontrolling execution triggers and processing the output measures times\ndata to calculate speedups. Further, the library can generate a\nmathematical model of speedup of a parallel application, based on\n\"Particles Swarm Optimization\" or \"Coupled Simulating Annealing\"\nalgorithms to discover the parameters that minimize a \"objective\nfunction\". The objective function can be build with a module python\npassed as argument to library on execution script.\n\nFeatures\n--------\n\n- Run parsec application with multiple input sizes and, optionally,\n repet the execution to better find outs.\n- Process a group of Parsec 2.1 or 3.0 logs files, generates from a\n shell direct execution of parsec.\n- Manipulate of resulting data from logs process or online execution,\n obtained by module run script itself.\n- Calculate the speedups and efficency of applications, if it's\n possible, using the measured times of execution.\n- provide a \"PSO\" algorithm to model the speedup of a parallel\n application with regression process.\n- Provide a \"CSA\" algorithm to model the speedup of a parallel\n application with regression process.\n- Calculate statistics scores of model data using cross validate\n process.\n\nPrerequisites\n-------------\n\n- Parsec 2.1 or newer\n- Python3 or newer\n- Numpy\n- Pandas\n- Matplotlib with Mplot3D Toolkit (Optional, to plot 3D surface)\n- Scikit-learn\n\nSite\n----\n\n- https://github.com/alexfurtunatoifrn/parsecpy\n\nInstallation\n------------\n\n::\n\n $ pip3 install parsecpy\n\nUsage\n-----\n\nClass ParsecData\n~~~~~~~~~~~~~~~~\n\nClass used to generate the measured times structure, to save such data\nin a \"json\" file, to load a previously saved json data file, to\ncalculate the speedup or efficiency of application and to plot 2D or 3D\ngraph of time, speedup or efficiency versus the number of cores and\nfrequency or input size.\n\n::\n\n >>> from parsecpy import ParsecData\n >>> d = ParsecData('path_to_datafile')\n >>> print(d) # Print summary informations\n >>> d.times() # Show a Dataframe with mesures times\n >>> d.speedups() # Show a Dataframe with speedups\n >>> d.plot3D(d.speedups(), title='Speedup', zlabel='speedup') # plot a 3D Plot : speedups x number of cores x input sizes\n >>> d.plot3D(d.efficiency(), title='Efficiency', zlabel='efficiency') # plot a 3D Plot : speedups x number of cores x input sizes\n\nClass ParsecModel\n~~~~~~~~~~~~~~~~~\n\n::\n\n Class used to generate the result of modeling of the application, using any of supported algorithms (PSO, CSA or\n SVR). The class allows to save the modeling results, load previously saved model data, and plot the model data\n together with the real measurements.\n\n >>> from parsecpy import ParsecModel\n >>> m = ParsecModel('path_to_model_datafile')\n >>> print(m) # Print summary informations\n >>> print(m.measure) # Show a Dataframe with mesures speedups\n >>> print(m.y_model) # Show a Dataframe with modeled speedups\n >>> print(m.error) # Show the Mean Squared Error between measured and modeled speedup\n >>> m.plot3D(title='Speedup', showmeasures=True) # plot a 3D Plot with measurements and model data\n\nClass ParsecLogsData\n~~~~~~~~~~~~~~~~~~~~\n\n::\n\n >>> from parsecpy import ParsecLogsData\n >>> l = ParsecLogsData('path_to_folder_with_logfiles')\n >>> print(l) # Print summary informations\n >>> l.times() # Show a Dataframe with mesures times\n >>> l.speedups() # Show a Dataframe with speedups\n >>> l.plot3D() # plot a 3D Plot : speedups x number of cores x input sizes\n\nClass Swarm\n~~~~~~~~~~~\n\n::\n\n >>> from parsecpy import data_detach, Swarm, ParsecModel\n >>> parsec_date = ParsecData(\"my_output_parsec_file.dat\")\n >>> out_measure = parsec_exec.speedups()\n >>> meas = data_detach(out_measure)\n >>> overhead = False\n >>> kwargsmodel = {'overhead': overhead}\n >>> sw = Swarm([0,0,0,0], [2.0,1.0,1.0,2.0], kwargs=kwargsmodel, threads=10,\n size=100, maxiter=1000, modelpath=/root/mymodelfunc.py,\n x_meas=meas['x'], y_meas=meas['y'])\n >>> error, solution = sw.run()\n >>> model = ParsecModel(bsol=solution,\n berr=error,\n ymeas=out_measure,\n modelcodesource=sw.modelcodesource,\n modelexecparams=sw.get_parameters())\n >>> scores = model.validate(kfolds=10)\n >>> print(model.sol)\n >>> print(model.scores)\n\nClass CoupledAnnealer\n~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n >>> import numpy as np\n >>> import random\n >>> from parsecpy import data_detach, Swarm, ParsecModel\n >>> parsec_date = ParsecData(\"my_output_parsec_file.dat\")\n >>> out_measure = parsec_exec.speedups()\n >>> meas = data_detach(out_measure)\n >>> overhead = False\n >>> kwargsmodel = {'overhead': overhead}\n >>> initial_state = initial_state = np.array([np.random.uniform(size=5)\n for _ in range(10)])\n >>> csa = CoupledAnnealer(n_annealers=10, initial_state=initial_state,\n tgen_initial=0.01, tacc_initial=0.1,\n threads=10, steps=1000, update_interval=100, dimension=5,\n args=argscsa, modelpath=/root/mymodelfunc.py\n x_meas=meas['x'], y_meas=meas['y'])\n >>> error, solution = csa.run()\n >>> model = ParsecModel(bsol=solution,\n berr=error,\n measure=out_measure,\n modelcodesource=csa.modelcodesource,\n modelexecparams=csa.get_parameters())\n >>> scores = model.validate(kfolds=10)\n >>> print(model.sol)\n >>> print(model.scores)\n\nRequirements for model python module\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe python module file provided by user should has the following\nrequirements:\n\n- To PSO model, should has the constraint function as following:\n\n def constraint\\_function(par, x\\_meas, \\*\\*kwargs): # your code #\n arguments: # par - particle object # kwargs - Dict with extra\n parameters: # kwargs['overhead'] - boolean value (if overhead should\n be considerable) # analize the feasable of particles position\n (searched parameters) # return True or False, depend of requirements\n return boolean\\_value\n\n- To CSA model, should has probe function as following:\n\n def probe\\_function(par, tgen): # your code # arguments: # par -\n actual parameters values # tgen - actual temperature of generation #\n generate a new probe solution # return a list os parameters of probe\n solution return probe\\_solution\n\n- And the models files should has a objective function as following:\n\n ::\n\n def objective_function(par, x_meas, y_meas, **kwargs):\n # your code\n # arguments:\n # par - particle object\n # x_meas - Measures array of independent variables\n # y_meas - Measures array of dependent variable\n # kwargs - Dict with extra parameters:\n # kwargs['overhead'] - boolean value (if overhead should be considerable)\n # calculate the function with should be minimized\n # return the calculated value\n return float_value \n\nRun Parsec\n~~~~~~~~~~\n\nScript to run parsec app with repetitions and multiples inputs sizes\n\n::\n\n usage: parsecpy_runprocess [-h] -p PACKAGE\n [-c {gcc,gcc-serial,gcc-hooks,gcc-openmp,gcc-pthreads,gcc-tbb}]\n [-f FREQUENCY] [-i INPUT] [-r REPETITIONS]\n [-b CPUBASE] [-v VERBOSITY]\n c\n\n Script to run parsec app with repetitions and multiples inputs sizes\n\n positional arguments:\n c List of cores numbers to be used. Ex: 1,2,4\n\n optional arguments:\n -h, --help show this help message and exit\n -p PACKAGE, --package PACKAGE\n Package Name to run\n -c {gcc,gcc-serial,gcc-hooks,gcc-openmp,gcc-pthreads,gcc-tbb}, --compiler {gcc,gcc-serial,gcc-hooks,gcc-openmp,gcc-pthreads,gcc-tbb}\n Compiler name to be used on run. (Default: gcc-hooks).\n -f FREQUENCY, --frequency FREQUENCY\n List of frequencies (KHz). Ex: 2000000, 2100000\n -i INPUT, --input INPUT\n Input name to be used on run. (Default: native).\n Syntax: inputsetname[:].\n From lowest to highest size. Ex: native or native_1:10\n -r REPETITIONS, --repetitions REPETITIONS\n Number of repetitions for a specific run. (Default: 1)\n -b CPUBASE, --cpubase CPUBASE\n If run with thread affinity(limiting the running cores\n to defined number of cores), define the cpu base\n number.\n -v VERBOSITY, --verbosity VERBOSITY\n verbosity level. 0 = No verbose\n\n Example:\n parsecpy_runprocess -p freqmine -c gcc-hooks -r 5 -i native 1,2,4,8 -v 3\n\nRun PSO or CSA Modelling script\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nScript to run swarm modelling to predict a parsec application output. On\nexamples folder, exists a template file of configurations parameters to\nuse on execution of this script\n\n::\n\n usage: parsecpy_runmodel [-h] --config CONFIG -f PARSECPYFILEPATH\n [-p PARTICLES] [-x MAXITERATIONS]\n [-l LOWERVALUES] [-u UPPERVALUES]\n [-n PROBLEMSIZES] [-o OVERHEAD] [-t THREADS]\n [-r REPETITIONS] [-c CROSSVALIDATION]\n [-v VERBOSITY]\n\n Script to run modelling algorithm to predict a parsec application output\n\n optional arguments:\n -h, --help show this help message and exit\n --config CONFIG Filepath from Configuration file configurations\n parameters\n -p PARSECPYDATAFILEPATH, --parsecpydatafilepath PARSECPYDATAFILEPATH\n Path from input data file from Parsec specificated\n package.\n -f FREQUENCIES, --frequency FREQUENCIES\n List of frequencies (KHz). Ex: 2000000, 2100000\n -n PROBLEMSIZES, --problemsizes PROBLEMSIZES\n List of problem sizes to model used. Ex:\n native_01,native_05,native_08\n -o OVERHEAD, --overhead OVERHEAD\n If it consider the overhead\n -t THREADS, --threads THREADS\n Number of Threads\n -c CROSSVALIDATION, --crossvalidation CROSSVALIDATION\n If run the cross validation of modelling\n -m MEASURESFRACTION, --measuresfraction MEASURESFRACTION\n Fraction of measures data to calculate the model\n -v VERBOSITY, --verbosity VERBOSITY\n verbosity level. 0 = No verbose\n Example\n parsecpy_runmodel --config my_config.json\n -p /var/myparsecsim.dat -c True -v 3\n\nLogs process\n~~~~~~~~~~~~\n\nScript to parse a folder with parsec log files and save measures an\noutput file\n\n::\n\n parsecpy_processlogs [-h] foldername outputfilename\n\n positional arguments:\n foldername Foldername with parsec log files.\n outputfilename Filename to save the measures dictionary.\n\n optional arguments:\n -h, --help show this help message and exit\n\n Example:\n parsecpy_processlogs logs_folder my-logs-folder-data.dat\n\nCreate split parts\n~~~~~~~~~~~~~~~~~~\n\nScript to split a parsec input file on specific parts\n\n::\n\n parsecpy_createinputs [-h] -p {freqmine,fluidanimate} -n NUMBEROFPARTS\n [-t {equal,diff}] -x EXTRAARG\n inputfilename\n\n positional arguments:\n inputfilename Input filename from Parsec specificated package.\n\n optional arguments:\n -h, --help show this help message and exit\n -p {freqmine,fluidanimate}, --package {freqmine,fluidanimate}\n Package name to be used on split.\n -n NUMBEROFPARTS, --numberofparts NUMBEROFPARTS\n Number of split parts\n -t {equal,diff}, --typeofsplit {equal,diff}\n Split on equal or diferent size partes parts\n -x EXTRAARG, --extraarg EXTRAARG\n Specific argument: Freqmine=minimum support (11000),\n Fluidanimate=Max number of frames\n\n Example:\n parsec_createinputs -p fluidanimate -n 10 -t diff -x 500 fluidanimate_native.tar", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/alexfurtunatoifrn/parsecpy", "keywords": "parsec benchmark tool", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "parsecpy", "package_url": "https://pypi.org/project/parsecpy/", "platform": "", "project_url": "https://pypi.org/project/parsecpy/", "project_urls": { "Homepage": "https://github.com/alexfurtunatoifrn/parsecpy" }, "release_url": "https://pypi.org/project/parsecpy/1.0.5/", "requires_dist": null, "requires_python": "", "summary": "Parsec Benchmark interface tool", "version": "1.0.5" }, "last_serial": 5225506, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "ae808d003ac997e670b327d79ae18138", "sha256": "447ce5f157061b0fd1cca7425a3dbf10023d63a8e840349e5391e5861079152d" }, "downloads": -1, "filename": "parsecpy-0.2.tar.gz", "has_sig": false, "md5_digest": "ae808d003ac997e670b327d79ae18138", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10507, "upload_time": "2017-08-22T04:13:26", "url": "https://files.pythonhosted.org/packages/df/d9/3a97cb58fa9deaa4f899814327a04d420bec6b04e179bc7ace4b558b3f6a/parsecpy-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "e18f54480576d7603ebaa30d550f243e", "sha256": "9f7a6c798e31ee9cc688ff4746657fda6c702575bda2b68da24b5fa723d9880e" }, "downloads": -1, "filename": "parsecpy-0.3.tar.gz", "has_sig": false, "md5_digest": "e18f54480576d7603ebaa30d550f243e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10509, "upload_time": "2017-08-22T17:01:59", "url": "https://files.pythonhosted.org/packages/2a/a9/bc232671be5dcf7f40c8444881e91129722c7e5d90d20a8a226087e0f295/parsecpy-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "e4c1a15db7e733668d95eecdef5d1474", "sha256": "8215a6679beb778e7f7a45778eadedf55fa02382efc6a27c4219d8a81d7c940b" }, "downloads": -1, "filename": "parsecpy-0.4.tar.gz", "has_sig": false, "md5_digest": "e4c1a15db7e733668d95eecdef5d1474", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11088, "upload_time": "2017-08-23T01:29:09", "url": "https://files.pythonhosted.org/packages/a7/73/d86dcd235a307c37cfcb0ae4b963be76db2b4172d83f00d9589ee68af021/parsecpy-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "0e9fd69844a09d3ed4071179fb6be5d0", "sha256": "b3d330bbc14df15bae3b362e2f29c03f53b593bf7007a26d9471d5db7d0da7e3" }, "downloads": -1, "filename": "parsecpy-0.5.tar.gz", "has_sig": false, "md5_digest": "0e9fd69844a09d3ed4071179fb6be5d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11104, "upload_time": "2017-08-23T16:32:42", "url": "https://files.pythonhosted.org/packages/b8/29/282879de3155b29f07a02928946aeecffc5d5c71d9a89b260614d39dae40/parsecpy-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "8b1d790fcca0176c7ef746426cab0e2c", "sha256": "8a00abe3eab4ded364572ca467b231fff7f152a00a359be42a1051459373dfde" }, "downloads": -1, "filename": "parsecpy-0.6.tar.gz", "has_sig": false, "md5_digest": "8b1d790fcca0176c7ef746426cab0e2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16986, "upload_time": "2017-09-06T00:07:38", "url": "https://files.pythonhosted.org/packages/8a/13/59150635a7b56b828a544f2805fab5ca8b2f7625b180a969a60fa5428106/parsecpy-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "302d8706ebf413b7f446fb22dab0e588", "sha256": "98f0a08efdb5e2f016cb4c67bb12c6d91af0c0d5ec8e8eb3e0855cc2089b955a" }, "downloads": -1, "filename": "parsecpy-0.7.tar.gz", "has_sig": false, "md5_digest": "302d8706ebf413b7f446fb22dab0e588", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16993, "upload_time": "2017-09-06T02:00:05", "url": "https://files.pythonhosted.org/packages/3c/e8/bee50cbe6aba29625e0d0a1ca08ad271e3661b7398788b01a1f5b5a93de2/parsecpy-0.7.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "15c4235cd5da3eca5072ff873ca1a432", "sha256": "ca9ebb3fd152d9a964460f208e586366df06e7281da585101a82212913616bb7" }, "downloads": -1, "filename": "parsecpy-0.8.1.tar.gz", "has_sig": false, "md5_digest": "15c4235cd5da3eca5072ff873ca1a432", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17165, "upload_time": "2017-09-19T01:50:19", "url": "https://files.pythonhosted.org/packages/30/98/86ab379cd48796ec08d5799060531d92fdbcd4d51cf3d134b9a76a04b621/parsecpy-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "7306e0d042e601e731f30750d1122604", "sha256": "a153a23667d1409e309dbdd380e4fd315baec8c5526e01f4fdfed454a17cfbd6" }, "downloads": -1, "filename": "parsecpy-0.8.2.tar.gz", "has_sig": false, "md5_digest": "7306e0d042e601e731f30750d1122604", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17181, "upload_time": "2017-09-19T12:19:43", "url": "https://files.pythonhosted.org/packages/2e/de/be4dcf7e96d3161bdf1e5ac7f5cc1e26af9c5472c0932bf4f172e02ec3e4/parsecpy-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "ebcaa68440fb200adf3aa7f21d5ff969", "sha256": "9315bf589a8060a30c1b83aaf6a316070aa81b3c8f7c4145be9eb458b944bbb8" }, "downloads": -1, "filename": "parsecpy-0.8.3.tar.gz", "has_sig": false, "md5_digest": "ebcaa68440fb200adf3aa7f21d5ff969", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17985, "upload_time": "2017-11-03T01:13:06", "url": "https://files.pythonhosted.org/packages/ca/e4/29f60c78c456d96adfd55de44a8cf2c1fb611225d0277ce8c2449d696afd/parsecpy-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "e3139567427f8d61526b9a5b546a1b2a", "sha256": "3f8bdbbc2906eb0053f568ba30ff73c13b73b34dde3ecaabbde62dde798d041d" }, "downloads": -1, "filename": "parsecpy-0.8.4.tar.gz", "has_sig": false, "md5_digest": "e3139567427f8d61526b9a5b546a1b2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18132, "upload_time": "2017-11-03T03:01:24", "url": "https://files.pythonhosted.org/packages/66/84/67808a0ffbdf80bd5d1b0902dc7459b23d9470cbc5421c0903cde8f2534a/parsecpy-0.8.4.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "cee10b20d0d2d8414f9699383056895f", "sha256": "624839d7350399337444bfa6de563c4625e0f370114e92fdf2f0ce9ebff4e23e" }, "downloads": -1, "filename": "parsecpy-0.9.0.tar.gz", "has_sig": false, "md5_digest": "cee10b20d0d2d8414f9699383056895f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23919, "upload_time": "2018-01-22T14:43:25", "url": "https://files.pythonhosted.org/packages/40/f3/120c6f1519622b62f02a4344cd2cf61716f3cbe2fb914a58dab7f6a5f93b/parsecpy-0.9.0.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "d0f5744d441179d73e21ce8fcd165f5c", "sha256": "60fc2a4533c0a6082ab3ba6def7e80111efd407c27b3ea3e3d0fb55660e43667" }, "downloads": -1, "filename": "parsecpy-0.9.2.tar.gz", "has_sig": false, "md5_digest": "d0f5744d441179d73e21ce8fcd165f5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27755, "upload_time": "2018-03-03T16:55:29", "url": "https://files.pythonhosted.org/packages/ce/04/915d540d3b579b5c9e2d41cab3b2addee3d957fa9518ee1a44bcf8da5a82/parsecpy-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "e2486bfa64634e55cb38cd13a8c95176", "sha256": "00a3ecd6531f6534449ae009963742cb6577f2a04e8af24ba2a5bfcb087ebc72" }, "downloads": -1, "filename": "parsecpy-0.9.3.tar.gz", "has_sig": false, "md5_digest": "e2486bfa64634e55cb38cd13a8c95176", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27804, "upload_time": "2018-03-03T19:48:24", "url": "https://files.pythonhosted.org/packages/80/de/57d31f8e328a707cd5a8a8a6a49d720d34f8dfb4a50f980173bcc5853b40/parsecpy-0.9.3.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "30074a47971eb4becfba63aa6407dfe0", "sha256": "e0e6c53edbbf34eab98356fd8e5dc137614de07f1a9e9845684216d42d9eaece" }, "downloads": -1, "filename": "parsecpy-0.9.5.tar.gz", "has_sig": false, "md5_digest": "30074a47971eb4becfba63aa6407dfe0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32032, "upload_time": "2018-04-09T13:43:28", "url": "https://files.pythonhosted.org/packages/af/37/041abdcef2bdaee2d7c9264153f1167e16ced604a940152e94a1bf68a957/parsecpy-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "6324c371b8b7472271681d669d3ba4c1", "sha256": "c73600308ff811e12dc9ad3ba8023c5dbc5c4bded4867b08da4c3606ef579ae3" }, "downloads": -1, "filename": "parsecpy-0.9.6.tar.gz", "has_sig": false, "md5_digest": "6324c371b8b7472271681d669d3ba4c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32283, "upload_time": "2018-04-11T15:30:58", "url": "https://files.pythonhosted.org/packages/3c/e5/4ac6fa422cb40f4a01d6e692e9e39709124a13d036c0d032729f3ee97c40/parsecpy-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "1be85bacad61fb047ff0fe4887f0b558", "sha256": "c4469fcc8c1ac61fa2c81051f213df98cb125c7a06c344eee47577a1f5453a2f" }, "downloads": -1, "filename": "parsecpy-0.9.7.tar.gz", "has_sig": false, "md5_digest": "1be85bacad61fb047ff0fe4887f0b558", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34132, "upload_time": "2018-04-17T18:44:24", "url": "https://files.pythonhosted.org/packages/c3/37/018d71a16cfe500d74cc5c5495f490854101ae42b22e57e2240b0b9880a4/parsecpy-0.9.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "7f3bbdd6d7d1de63fb35be2c6cb1af5e", "sha256": "da170e72673e7e290b1fb3f7425c77fcb27db7da240eb8b39462fd89aeebd03f" }, "downloads": -1, "filename": "parsecpy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7f3bbdd6d7d1de63fb35be2c6cb1af5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35288, "upload_time": "2018-06-05T18:27:04", "url": "https://files.pythonhosted.org/packages/b9/97/73bc34dcec7504592b98ab0bcb9688a9df0a3df40194e24f1e6ad2c08418/parsecpy-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5cc0974c3192b58bed1a627f92db6036", "sha256": "4cf3aa8afbf705dea7dd06fe942ef0108e3f6ff1844ba525d6cf6cfb5cfa7dcf" }, "downloads": -1, "filename": "parsecpy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5cc0974c3192b58bed1a627f92db6036", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36549, "upload_time": "2019-03-14T00:01:18", "url": "https://files.pythonhosted.org/packages/21/d6/6181272665a798d42a0b181ec15ff980e02471c428f564cd081728e1663c/parsecpy-1.0.1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "81822b4724560548b34df709675f8924", "sha256": "1f052656f656355d2609454d49dedfd428624d5e71e65821d2ff338fec41e6c4" }, "downloads": -1, "filename": "parsecpy-1.0.3.tar.gz", "has_sig": false, "md5_digest": "81822b4724560548b34df709675f8924", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37240, "upload_time": "2019-05-02T22:58:17", "url": "https://files.pythonhosted.org/packages/1a/0a/e0dc4186e1d49d3979bc91830e7a7f77629a99306dd754625d41ea41da20/parsecpy-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "e499c160837f076607c44c34a2ee46ee", "sha256": "9f1a24640e11242eb7b546dcc1e05e07ce7b6e4b2dc5d1c44d9b80b461eaacba" }, "downloads": -1, "filename": "parsecpy-1.0.4.tar.gz", "has_sig": false, "md5_digest": "e499c160837f076607c44c34a2ee46ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37318, "upload_time": "2019-05-03T21:08:12", "url": "https://files.pythonhosted.org/packages/31/80/0dfdd7b19d408c86590922993d97ac24c947d97cdadf8336b7dacbfaf455/parsecpy-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "c87e3accae3043f565bcedb0da2b79b3", "sha256": "c53c42f65b559e48eaa20f94ed12efb4b61cd7de9d4c07b3cce1648c019e3b73" }, "downloads": -1, "filename": "parsecpy-1.0.5.tar.gz", "has_sig": false, "md5_digest": "c87e3accae3043f565bcedb0da2b79b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37279, "upload_time": "2019-05-04T12:40:31", "url": "https://files.pythonhosted.org/packages/f1/f4/1ce38e3937d3a84a947f1b8a3cfe24064498a850a9bf41e7b985e39c515b/parsecpy-1.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c87e3accae3043f565bcedb0da2b79b3", "sha256": "c53c42f65b559e48eaa20f94ed12efb4b61cd7de9d4c07b3cce1648c019e3b73" }, "downloads": -1, "filename": "parsecpy-1.0.5.tar.gz", "has_sig": false, "md5_digest": "c87e3accae3043f565bcedb0da2b79b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37279, "upload_time": "2019-05-04T12:40:31", "url": "https://files.pythonhosted.org/packages/f1/f4/1ce38e3937d3a84a947f1b8a3cfe24064498a850a9bf41e7b985e39c515b/parsecpy-1.0.5.tar.gz" } ] }