{ "info": { "author": "Matthew Turner", "author_email": "maturner01@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering" ], "description": "# vw-RipCAS-DFLOW\n\nFunctions for running our Riparian Community Alteration and Succession model,\nRipCAS, and D-FLOW coupled.\nOne of the major contributions of this work is a process for automatically\nsubmitting new DFLOW jobs to the Portable Batch System automatically, then\nrunning RipCAS when DFLOW has finished for that time step. Roughly the process\nproceeds as shown in the diagram below.\n\n![simplified workflow](work_flow_simplified.png)\n\nThe DFLOW model is the one that runs for roughly seven hours at a time and uses\neight processors per model. We could use more cores, with an open issue (#9)\naddressing this.\n\n\n## Coupled ModelRun on a Cluster\n\nAs it is, we can vary quite a few things and automatically run a variety of\nscenarios. One could vary the flooding by year, or change the geometry of the\ncross-section of the stream which is used in calculating the boundary\nconditions, or the user could create new vegetation type-to-n and/or vegetation\ntype-to-shear resistance mappings. This is done by creating new files that match\nthe structure of their counterparts in the\n[data\ndirectory](https://github.com/VirtualWatershed/vw-ripcas-dflow/tree/master/data).\nFor example, to modify the vegetation conversion rules, one must create an Excel\nspreadsheet that matches this structure in the screenshot below.\n\n![ripcas required data screenshot](ripcas-required-data-screenshot.png)\n\n\nExample:\n\n```\npython ripcas_dflow/modelrun.py ~/ripcas-dflow-runs/100yr-every5 \\\n data/ripcas_inputs/vegclass_2z.asc data/ripcas_inputs/zonemap_2z.asc \\\n data/ripcas_inputs/ripcas-data-requirements.xlsx \\\n /users/maturner/100yrFlood_every5.txt data/dflow_inputs/DBC_geometry.xyz \\\n 0.04 0.001\n```\n\nMore details on the usage:\n\n```\npython ripcas_dflow/modelrun.py data_dir initial_vegetation vegzone_map ripcas_required_data\\\n peak_flows_file geometry_file streambed_roughness streambed_slope\n\n data_dir: directory to hold each time step of the model run\n initial_vegetation: .asc file with initial vegetation map\n vegzone_map: .asc file with vegetation zone information\n ripcas_required_data: .xlsx file with veg type-to-n and shear resistance-per-veg type information\n peak_flows_file: file with a column of peak flood flow in cubic meters per second\n geometry_file: xyz file representing geometry of downstream cross section for boundary conditions calculation\n streambed_roughness: floating point number for the roughness value of the streambed\n streambed_slope: floating point number for the slope of the stream geography\n```\n\nCurrently this is part of a\n[raw executable in modelrun.py](https://github.com/VirtualWatershed/vw-ripcas-dflow/blob/master/ripcas_dflow/modelrun.py#L446),\nbut soon this will be broken out into its own controller as we add new features.\n\n\n## Using the ModelRun class directly\n\nHere is an example of using the ModelRun class to set up and execute the coupled\nDFLOW/RipCAS model:\n\n```python\nimport matplotlib.pyplot as plt\n\nfrom ripcas_dflow import ModelRun, veg2n\n\nmr = ModelRun()\n\n# assume we have read these from a file or elsewhere; set them here for ex\npeak_flow = 89.55\nstreambed_roughness = 0.04\nreach_slope = 0.001\n\ngeometry = Pol.from_river_geometry_file('data/DBC_geometry.xyz')\n\nmr.calculate_bc(peak_flow, geometry, streambed_roughness, reach_slope)\n\nassert mr.bc_converged\n\nmr.run_dflow('data/dflow-test/', 'data/vegclass_2z.asc')\n\n# the output is an ESRIAsc map of vegetation type (coded integer)\nout = mr.run_ripcas('data/zonemap_2z.asc', 'data/casimir-data-requirements.xlsx', 'data/ripcas-test')\n\n# translate to Manning's roughness map, which shows communities a little better\nn_out = veg2n(out)\n\nplt.matshow(n_out.as_matrix(replace_nodata_val=0.0))\nplt.colorbar()\n```\n\n![An example map](example_n_map.png)\n\n### Boundary Condition Solver\n\nWe provide a solver for boundary conditions which can be used as follows. There\nis some data in the `data/` directory that we use.\n\nThe boundary condition we have to calculate is actually an inverse problem. We\nare given the peak flow for a given year, but we don't know what the elevation\nof the water surface (WS elevation) is at the bottom of the reach under consideration. DFLOW\nneeds this as a boundary condition, as well as the streamflow that is associated\nwith the WS elevation, or just WS for short. We use\n[scipy.minimize_scalar](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html)\nto accomplish this inverse problem. See the\n[source code](https://github.com/VirtualWatershed/vw-ripcas-dflow/blob/master/ripcas_dflow/modelrun.py#L357)\nfor more details.\n\n```python\nfrom dflow_casimir import BoundaryConditionSovler, Pol\n\n# these are variables we would probably read from a file\ntarget_streamflow = 89.55 # the first value in data/peak.txt\nstreambed_roughness = 0.04 # empirical n value\nreach_slope = 0.001\n\n# use our Pol (polygon) object used for xyz/polygon file dialects of interest\ngeometry = Pol.from_river_geometry_file('data/DBC_geometry.xyz')\n\nbc_solver = BoundaryConditionSover(target_streamflow,\n geometry,\n streambed_roughness,\n reach_slope)\n\nbc_solution = bc_solver.solve()\n\nprint bc_solution\n```\n\nWill yield the `BoundaryConditionResult` printing\n\n```\nBoundaryConditionResult(ws_elev=1777.3393782057494,\nstreamflow=89.549822073608453, error=0.00017792639154379231, success=True)\n```\n\nwhich shows that for the given streamflow of 89.55 cubic meters per second,\nthe WS elevation is 1777.3394 meters. The absolute error between calculated\nstreamflow (89.549822...) and observed streamflow is 0.0002, or a relative error of\n0.0002/89.55 = 2.23e-6.\n\n\n\n## Command-line scripts\n\nTo get the first .pol of n-values for use in the first D-FLOW run, use the\n`jemez/veg2npol.py` script. For example, if the vegetation ESRI .asc is\n`data/vegclass_2z.asc` and we want to write our .pol of n-values to\n`initial_n.pol`, we would run\n\n```\npython jemez/veg2npol.py data/vegclass_2z.asc initial_n.pol\n```\n\nTo run RipCAS to use D-FLOW inputs and output a .pol of n-values, use\nthe `jemez/dflow_casimir.py` script. For example, if the path to the\noutput netCDF with shear stress from D-FLOW is `data/jemez_r02_map.nc`\nand the path to our vegetation map is `data/vegclass_2z.asc`, we would\nrun (not)casimir by running\n\n```\npython jemez/dflow_casimir.py ~/local_data/dflow_outputs/jemez_r02_map.nc ~/local_data/casimir_out/veg-out-1.asc\n```\n\n# Installation\n\n### 1. Clone the repo and cd in to the root directory\n\n```bash\ngit clone https://github.com/VirtualWatershed/vw-ripcas-dflow && cd vw-ripcas-dflow\n```\n\n### 2. Use a virtual environment and install dependencies\n\nThe `virtualenv` command used below can be installed with pip: `pip install virtualenv`.\n\nThen with `virtualenv` installed, run the following\n\n```bash\nvirtualenv venv\n```\n\n```bash\nsource venv/bin/activate\n```\n\n```bash\npip install -r requirements.txt\n```\n\n## Check installation by running unit tests\n\nTo check that all is well, try running the unit tests:\n\n```bash\nnosetests -v\n```\n\n\nThe output should be\n\n```\nasc2pol should create proper headers and formatted data ... ok\ntest_casimir (test.test_dflow_casimir.TestDflow) ... ok\nTest conversion of vegetation map to Manning's roughness map ... ok\ntest_vegmap_properly_read (test.test_dflow_casimir.TestDflow) ... ok\n\n----------------------------------------------------------------------\nRan 4 tests in 0.384s\n\nOK\n```\n\n## Developer Notes\n\n### Files required for a DFLOW run\n\nThere are quite a few files required for a DFLOW run. Here we have a table\nof what input files are required and where the requirement is defined.\n\n\n| File | Where Used/Other notes | Needs to be generated at each timestep? |\n|------------------------:|--------------------------------------|:---------------------------------------:|\n| dflow_mpi.pbs | Job script submitted via qsub | No |\n| base.mdu | dflow_mpi.pbs | No |\n| base_net.nc | base.mdu | No |\n| base.ext | base.mdu | No |\n| n.pol | base.ext | Yes |\n| boundriverdown.pli | base.ext | No |\n| boundriver_up.pli | base.ext | No |\n| boundriverdown_0001.cmp | ??? dflow automatically detected ??? | Yes |\n| boundriver_up_0001.cmp | ??? dflow automatically detected??? | Yes |\n\nNote that this makes for a total of six files that do not change from one run to\nanother and three that do. The `boundriver*.cmp` are generated by running the\nboundary condition calculator of the `ModelRun`. `n.pol` is generated from a\nvegetation .asc either given as an initial input or output from the RipCAS step.\n\nThere is one final file in `data/dflow_inputs`, `DBC_geometry.xyz`, which is the\npolygon file for the geometry of the cross section, required for generating the\nboundary condition files. The `boundriver*.pli` do not change, but at this point\nI (MT) am not really sure what is the purpose of these.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "BSD3", "maintainer": "", "maintainer_email": "", "name": "cord", "package_url": "https://pypi.org/project/cord/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cord/", "project_urls": null, "release_url": "https://pypi.org/project/cord/0.2.4/", "requires_dist": [ "Cython (>=0.24)", "backports.shutil-get-terminal-size (>=1.0.0)", "click (>=6.6)", "configparser (>=3.3.0.post2)", "cookies (>=2.2.1)", "decorator (>=4.0.9)", "funcsigs (>=1.0.2)", "gnureadline (>=6.3.3)", "h5py (>=2.5.0)", "hs-restclient (>=1.2.2)", "netCDF4 (>=1.2.3.1)", "nose (>=1.3.7)", "numpy (==1.11.0)", "oauthlib (>=1.1.1)", "pandas (>=0.17.1)", "pathlib2 (>=2.1.0)", "pbr (>=1.9.1)", "pexpect (>=4.0.1)", "pickleshare (>=0.7.2)", "ptyprocess (>=0.5.1)", "python-dateutil (>=2.5.0)", "pytz (>=2015.7)", "requests (>=2.10.0)", "requests-oauthlib (>=0.6.1)", "requests-toolbelt (>=0.6.0)", "scipy (==0.17.0)", "simplegeneric (>=0.8.1)", "six (>=1.10.0)", "traitlets (>=4.2.1)", "xlrd (>=0.9.4)" ], "requires_python": "", "summary": "Coupled RipCAS-DFLOW for Vegetation and Hydrology of Streams", "version": "0.2.4" }, "last_serial": 2331581, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "0c12a120de0a0c1ba2309530679b49c9", "sha256": "03efbd6cb87372404a547b8bb1e02ddb50873c5cd7ea4c9d4175ea8e9d80a658" }, "downloads": -1, "filename": "cord-0.1-py2.7.egg", "has_sig": false, "md5_digest": "0c12a120de0a0c1ba2309530679b49c9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 39334, "upload_time": "2016-05-10T22:32:54", "url": "https://files.pythonhosted.org/packages/2f/bc/363f4c0808b1c5fd20d9d8d2a539b7f90c53e7c0b5469057db238bc44db1/cord-0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "1f8211a3be6511cf75185a858b470608", "sha256": "89d8cff0b60fd929988786d2387f4ad46dba21eefd5743c70956151d6535fa22" }, "downloads": -1, "filename": "cord-0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1f8211a3be6511cf75185a858b470608", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19762, "upload_time": "2016-05-10T22:32:45", "url": "https://files.pythonhosted.org/packages/d3/ca/1d45936a454058d8ba249e0f82070e6a6c2c014e298be0f5565177546c8f/cord-0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75c58eea72248d862873fa2d738a8aa5", "sha256": "23171070d3a2d95d3264063f438badc60d2da64dccb28ab6dbe42293c42a1fc5" }, "downloads": -1, "filename": "cord-0.1.tar.gz", "has_sig": false, "md5_digest": "75c58eea72248d862873fa2d738a8aa5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19142, "upload_time": "2016-05-10T22:33:00", "url": "https://files.pythonhosted.org/packages/e0/65/903d2158eb23e4bbd14630ecc089fc2e270e78b56a0e6a1f856446b66020/cord-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4f24ff691ee0a568189e030e815d847e", "sha256": "9e9cde7238ebcdfe71cee9341973e78b666396fd0d5e74de5f0d0264cf491ed1" }, "downloads": -1, "filename": "cord-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "4f24ff691ee0a568189e030e815d847e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19783, "upload_time": "2016-05-10T23:03:09", "url": "https://files.pythonhosted.org/packages/0d/ff/e324b7f9dfb28ea84e373047823f893a27ddbcf32e8904cade4bbf721689/cord-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07c3fc6a58811704d9a8c352bf61bf4c", "sha256": "1fab6343b30c0fb8d815ee571a58c76a2a8085368cd0a42774367e13c3e4e0fd" }, "downloads": -1, "filename": "cord-0.1.1.tar.gz", "has_sig": false, "md5_digest": "07c3fc6a58811704d9a8c352bf61bf4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19150, "upload_time": "2016-05-10T23:03:17", "url": "https://files.pythonhosted.org/packages/48/b5/3113f0a8fd61900b2a2c2a6c3ec71e7904ee2117e03e23e73993f2b2afed/cord-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "4f603ef4da912ca549a717a7f4de4d66", "sha256": "23991bc689ffcd26dc4ce6b6bfdab5266e5b61a7236d351b3b6ae45d280d03ef" }, "downloads": -1, "filename": "cord-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "4f603ef4da912ca549a717a7f4de4d66", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1368628, "upload_time": "2016-06-03T04:38:43", "url": "https://files.pythonhosted.org/packages/96/94/75cbbfd347ce42c0df5f8664720d43d6ef608e577d1d1d72b5f736eca95e/cord-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "afd49bd4665bbc6c64e1deb1f1787e46", "sha256": "b7f61583ee9e84d7a0d017cf027779eaa5cd8c1d54b54bb25a558ba90c1d3b2d" }, "downloads": -1, "filename": "cord-0.1.2.tar.gz", "has_sig": false, "md5_digest": "afd49bd4665bbc6c64e1deb1f1787e46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19126, "upload_time": "2016-06-03T04:38:48", "url": "https://files.pythonhosted.org/packages/a4/63/748f3d48741d5a3ab8626b1389ece091635c00c657229a90b9b597f552ad/cord-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7ad81db28380d20f9fffc785488c3286", "sha256": "e0f7afc4c2299acb7ce1cb9134ea79a0f65318fb088c8ac421254033b0ead255" }, "downloads": -1, "filename": "cord-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "7ad81db28380d20f9fffc785488c3286", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1370205, "upload_time": "2016-06-03T23:25:55", "url": "https://files.pythonhosted.org/packages/d7/a6/672177051005f3dcf0b1f2e0d2b6297891965155cb1a7ef4603e7d3df364/cord-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46789abe4b0fe38e6a0ff33cb9d63e14", "sha256": "723d6552cabb322ba21eb24ee48f44a31d86fc131c25bdcbae906bf073236f95" }, "downloads": -1, "filename": "cord-0.2.0.tar.gz", "has_sig": false, "md5_digest": "46789abe4b0fe38e6a0ff33cb9d63e14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20093, "upload_time": "2016-06-03T23:26:02", "url": "https://files.pythonhosted.org/packages/45/cf/956c0b0bc78707a95b303fe20ca8ac90a0c78036fab1b22bcdb3272c19b5/cord-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "bedf9b54547db90bc550b4353f72ff21", "sha256": "91f5e0b8b7dbf607b900c13d81232ec8ea0daf61e5e6e02cc4a833f7c2b8ceda" }, "downloads": -1, "filename": "cord-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "bedf9b54547db90bc550b4353f72ff21", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1370674, "upload_time": "2016-07-14T20:52:37", "url": "https://files.pythonhosted.org/packages/64/50/b9e3c6721f5f17eac401a06f6ba82f451631f5a4f235613d3513f87c026c/cord-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47d46a5f86171d65b0b0f70791ee3a29", "sha256": "050e96ccd86266e0c11e7c94c355cc061945c77acba8b7752b92ba82868dcf25" }, "downloads": -1, "filename": "cord-0.2.1.tar.gz", "has_sig": false, "md5_digest": "47d46a5f86171d65b0b0f70791ee3a29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20096, "upload_time": "2016-07-14T20:52:40", "url": "https://files.pythonhosted.org/packages/98/7b/a5ece29184db70cc0196470c9d0023674f538ddea3ca25180a2758567c9a/cord-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "7998689aff0a8da55a42996b71e1a225", "sha256": "2fcea514981b4e1695662201f31fb5bddaa37e0a5af91fba8a4cba7535a27ae7" }, "downloads": -1, "filename": "cord-0.2.2.macosx-10.11-x86_64.tar.gz", "has_sig": false, "md5_digest": "7998689aff0a8da55a42996b71e1a225", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1337536, "upload_time": "2016-08-16T20:43:29", "url": "https://files.pythonhosted.org/packages/0e/74/ad8449df29295c6d25c1f1a841ecda216af2f27d5ad0fa1e45538825fbff/cord-0.2.2.macosx-10.11-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "fdc8132f2bcf536fc4fbf9a82422379e", "sha256": "517cc699323bfb9506b8cdd48b4ec84900708a2ac60f1e8a2576cab61861fee5" }, "downloads": -1, "filename": "cord-0.2.2.tar.gz", "has_sig": false, "md5_digest": "fdc8132f2bcf536fc4fbf9a82422379e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20105, "upload_time": "2016-08-16T20:43:32", "url": "https://files.pythonhosted.org/packages/1a/39/3f8b0bca3a54a24a2f123c117d4fe4a17777ce6e417b841ad7014b6564fc/cord-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "7a1c2278388849bb12a41259f5f08a30", "sha256": "13c26d5ed2e6e0b6511d83d5aa27d2bba82e578a590a4f86386530928fb517da" }, "downloads": -1, "filename": "cord-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "7a1c2278388849bb12a41259f5f08a30", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1370671, "upload_time": "2016-08-16T21:09:23", "url": "https://files.pythonhosted.org/packages/7e/8b/2d31f465b14c646d83dc6e4cb294059d427a79fd64f015023c3a1f28d250/cord-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "952d1326ed6bb5b7e4c64e89a2d0b42e", "sha256": "8dc2461544fbc8f1e2602346cd366036acbc8061779b8a524c1c4438cb383bab" }, "downloads": -1, "filename": "cord-0.2.3.tar.gz", "has_sig": false, "md5_digest": "952d1326ed6bb5b7e4c64e89a2d0b42e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20097, "upload_time": "2016-08-16T21:09:26", "url": "https://files.pythonhosted.org/packages/3c/61/e71a289e2df6f80ce8ce639e26b524eac4da285fa3fc35b711c20b08b961/cord-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "0553c0db92cbf6c6b7d0aee25d8f992d", "sha256": "d8d7758882246579c9c195a62f6b64caeccc64d14ff4ca881d9c5cedf62151ff" }, "downloads": -1, "filename": "cord-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "0553c0db92cbf6c6b7d0aee25d8f992d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1369409, "upload_time": "2016-09-08T14:49:02", "url": "https://files.pythonhosted.org/packages/e0/0b/bca452022b105cec6e16d8dbc7dea672e008ec1cbe0ada4ccb66c0567172/cord-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4291ee059de5164314ef8b19010495c", "sha256": "17cef609b8ef9d82c35841e28273541ae9c93324dfd74a76f93578f54ac5bd66" }, "downloads": -1, "filename": "cord-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b4291ee059de5164314ef8b19010495c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20116, "upload_time": "2016-09-08T14:49:07", "url": "https://files.pythonhosted.org/packages/52/1a/7638a4b532c5ac823b010acc3c066ee7ddbe0edf330eed505df39f00a45b/cord-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0553c0db92cbf6c6b7d0aee25d8f992d", "sha256": "d8d7758882246579c9c195a62f6b64caeccc64d14ff4ca881d9c5cedf62151ff" }, "downloads": -1, "filename": "cord-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "0553c0db92cbf6c6b7d0aee25d8f992d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 1369409, "upload_time": "2016-09-08T14:49:02", "url": "https://files.pythonhosted.org/packages/e0/0b/bca452022b105cec6e16d8dbc7dea672e008ec1cbe0ada4ccb66c0567172/cord-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4291ee059de5164314ef8b19010495c", "sha256": "17cef609b8ef9d82c35841e28273541ae9c93324dfd74a76f93578f54ac5bd66" }, "downloads": -1, "filename": "cord-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b4291ee059de5164314ef8b19010495c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20116, "upload_time": "2016-09-08T14:49:07", "url": "https://files.pythonhosted.org/packages/52/1a/7638a4b532c5ac823b010acc3c066ee7ddbe0edf330eed505df39f00a45b/cord-0.2.4.tar.gz" } ] }