pytoughreact


Namepytoughreact JSON
Version 1.0.4 PyPI version JSON
download
home_pageNone
SummaryPython Library for automating reaction simulations using TOUGHREACT, TMVOC and TMVOC-BIO
upload_time2024-04-08 04:12:25
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseMIT License
keywords biodegradation reactive transport automation uncertainty quantification
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PyTOUGHREACT


- [PyTOUGHREACT](#pytoughreact)
  - [Installation](#installation)
  - [Usage](#usage)
  - [Contributing](#contributing)
  - [Documentation](#documentation)
  - [License](#license)
  - [Tests](#tests)


PyTOUGHREACT is a Python package for automating reactive transport simulations including biodegradation reactions.
It makes use of TOUGHREACT, TMVOC and TMVOCBIO executables for running the simulations. These executables are interfaced
with python to automate the runs. It will be particularly useful for uncertainty quantifications, sensitivity 
analysis without the need to have a lot of files stored on your local computer. It builds on the PyTOUGH software which processes for the TOUGH2 executables.

## Installation

PyTOUGHREACT is available on PyPI which is a repository of softwares built with the Python Programming Language. Before installing PyTOUGHREACT, it is required to have Python >=3.7 installed on your local computer. Python can be downloaded from the [python.org](python.org) website and installing it by following the instructions. Windows users should ensure that the path to the python is set in the environment variable to ensure availability everywhere.

Use the package manager [pip](https://pip.pypa.io/en/stable/) to install PyTOUGHREACT.

```bash
pip install pytoughreact
```

The package can also be forked from this GitHub page and installation performed using

```bash
python setup.py install  or py setup.py install
```

<!-- Because pytoughreact requires PyTOUGH and PyTOUGH is not uploaded to PyPI, it is required to download the zip folder of PyTOUGH from the GitHub repository https://github.com/acroucher/PyTOUGH. Unzip the folder and place in your current working directory. Change directory into the PyTOUGH folder and run python setup.py install or pip install on the command line. With PyTOUGH installed, PyTOUGHREACT is ready to be used as a package. -->

Because pytoughreact requires PyTOUGH, this library also needs to be installed.
PyTOUGH can be installed by running the command below

```bash
pip install PyTOUGH
```

## Usage

```python
import os
from mulgrids import mulgrid
from pytoughreact.writers.react_writing import t2react
from pytoughreact.pytough_wrapper.wrapper.reactgrid import t2reactgrid
from pytoughreact.pytough_wrapper.wrapper.reactzone import t2zone
from pytoughreact.chemical.chemical_composition import PrimarySpecies, WaterComp, Water, ReactGas
from pytoughreact.chemical.mineral_composition import MineralComp
from pytoughreact.chemical.mineral_zone import MineralZone
from pytoughreact.chemical.mineral_description import Mineral
from pytoughreact.constants.default_minerals import get_kinetics_minerals, get_specific_mineral
from pytoughreact.writers.chemical_writing import t2chemical
from pytoughreact.writers.solute_writing import t2solute
from t2grids import rocktype

#__________________________________FLOW.INP____________________________________________
length = 0.1
nblks = 1
dx = [length / nblks] * nblks
dy = [0.5]
dz = [0.5] * 1
geo = mulgrid().rectangular(dx, dy, dz)
geo.write('geom.dat')

react = t2react()
react.title = 'Reaction example'

react.multi = {'num_components': 1, 'num_equations': 1, 'num_phases': 2,
               'num_secondary_parameters': 6}

react.grid = t2reactgrid().fromgeo(geo)

react.parameter.update(
    {'print_level': 4,
     'max_timesteps': 9999,
     'tstop': 8640,
     'const_timestep': 10.,
     'print_interval': 1,
     'gravity': 9.81,
     'relative_error': 1e-5,
     'phase_index': 2,
     'default_incons': [1.013e5, 25]})

sand = rocktype('ROCK1', 0, 2600, 0.1, [6.51e-12, 6.51e-12, 6.51e-12], 0.0, 952.9)

react.grid.delete_rocktype('dfalt')
react.grid.add_rocktype(sand)

for blk in react.grid.blocklist[0:]:
    blk.rocktype = react.grid.rocktype[sand.name]


zone1 = t2zone('zone1')

react.grid.add_zone(zone1)

for blk in react.grid.blocklist[0:]:
    blk.zone = react.grid.zone[zone1.name]

react.start = True

react.write('flow.inp')

#____________________________________CHEMICAL.INP________________________________________
h2o = PrimarySpecies('h2o', 0)
h = PrimarySpecies('h+', 0)
na = PrimarySpecies('na+', 0)
cl = PrimarySpecies('cl-', 0)
hco3 = PrimarySpecies('hco3-', 0)
ca = PrimarySpecies('ca+2', 0)
so4 = PrimarySpecies('so4-2', 0)
mg = PrimarySpecies('mg+2', 0)
h4sio4 = PrimarySpecies('h4sio4', 0)
al = PrimarySpecies('al+3', 0)
fe = PrimarySpecies('fe+2', 0)
hs = PrimarySpecies('hs-', 0)

all_species = [h2o, h,na, cl, hco3, ca, so4, mg, h4sio4, al, fe, hs]

h2o_comp1 = WaterComp(h2o, 1, 1.0000E+00, 1.000000E+00)
h_comp1 = WaterComp(h, 1, 1E-7, 1E-7)
na_comp1 = WaterComp(na, 1, 1E-10, 2.93E-2)
cl_comp1 = WaterComp(cl, 1, 1E-10, 1.08E-3)
hco3_comp1 = WaterComp(hco3, 1, 1E-10, 2.21E-08)
ca_comp1 = WaterComp(ca, 1, 1E-10, 5.9E-03)
so4_comp1 = WaterComp(so4, 1, 1E-10, 6.94E-3)
mg_comp1 = WaterComp(mg, 1, 1E-10, 2.54E-8)
h4sio4_comp1 = WaterComp(h4sio4, 1, 1E-10, 1E-10)
al_comp1 = WaterComp(al, 1, 1E-10, 9.96E-5)
fe_comp1 = WaterComp(fe, 1, 1E-10, 9.7E-9)
hs_comp1 = WaterComp(hs, 1, 1E-10, 1E-10)

initial_water_zone1 = Water([h2o_comp1, h_comp1, na_comp1, cl_comp1, hco3_comp1, ca_comp1, so4_comp1, mg_comp1, h4sio4_comp1, al_comp1, fe_comp1, hs_comp1], 25, 200)

mineral_list = ['c3fh6', 'tobermorite', 'calcite', 'csh' , 'portlandite', 'ettringite', 'katoite', 'hydrotalcite']
all_minerals = get_kinetics_minerals(mineral_list)


c3fh6_zone1 = MineralComp(get_specific_mineral(mineral_list[0]), 0.1, 0, 0.0E-00, 20000.0, 0)
tobermorite_zone1 = MineralComp(get_specific_mineral(mineral_list[1]), 0.05, 0, 0.0E-00, 20000.0, 0)
calcite_zone1 = MineralComp(get_specific_mineral(mineral_list[2]), 0.4, 1, 0.0E-00, 260.0, 0)
csh_zone1 = MineralComp(get_specific_mineral(mineral_list[3]), 0.1, 1, 0.0E-00, 20000.0, 0)
portlandite_zone1 = MineralComp(get_specific_mineral(mineral_list[4]), 0.1, 1, 0.0E-00, 1540.0, 0)
ettringite_zone1 = MineralComp(get_specific_mineral(mineral_list[5]), 0.1, 1, 0.0E-00, 20000.0, 0)
katoite_zone1 = MineralComp(get_specific_mineral(mineral_list[6]), 0.1, 1, 0.0E-00, 570.0, 0)
hydrotalcite_zone1 = MineralComp(get_specific_mineral(mineral_list[7]), 0.05, 1, 0.0E-00, 1000.0, 0)

initial_co2 = ReactGas('co2(g)', 0, 1.1)
ijgas = [[initial_co2], []]

zone1.water = [[initial_water_zone1], []]
zone1.gas = [[initial_co2], []]
mineral_zone1 = MineralZone([c3fh6_zone1, tobermorite_zone1, calcite_zone1, csh_zone1, portlandite_zone1, ettringite_zone1, katoite_zone1, hydrotalcite_zone1])
zone1.mineral_zone = mineral_zone1

writeChemical = t2chemical(t2reactgrid=react.grid)
writeChemical.minerals = all_minerals
writeChemical.title = 'Automating Tough react'
writeChemical.primary_aqueous = all_species
writeChemical.gases = initial_co2
writeChemical.write()

#____________________________________SOLUTE.INP__________________________________________
writeSolute = t2solute(writeChemical)
writeSolute.nodes_to_write = [0]
masa = writeSolute.getgrid_info()
writeSolute.write()

#___________________________________ RUN SIMULATION ______________________________________
react.run(simulator='treacteos1.exe', runlocation=os.getcwd())


```

## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Contributing to the code would involve you following the below procedures to quickly get started

1. Clone the repo using preferred cloning method
2. Install the library to enable you able to use the test example using

```python
pip install -e .
```
3. Modify the code 
4. Tests are conducted with pytest and coverage reports are performed using pytest-cov. Install pytest and pytest-cov using the commands below
   
```python
pip install pytest
```

```python
pip install pytest-cov
```
5. Run tests:  Run the below command from the root folder to run the tests
   
```python
pytest
```

6. Flake8 is also used to ensure code readability. Install flake8 using 
   
```python
pip install flake8
```
and run flake8 using

```python
flake8 src
```
7. Make a pull request after passing all tests
8. More information can be found in developer notes in the documentation - https://pytoughreact.readthedocs.io/en/master/developer.html 

## Documentation
Documentation can be found here https://pytoughreact.readthedocs.io/en/latest/ 


## License
[MIT](https://choosealicense.com/licenses/mit/)

## Tests

![Tests](https://github.com/temmy222/PyTOUGHREACT/actions/workflows/tests.yml/badge.svg)
![JOSS Article](https://github.com/temmy222/PyTOUGHREACT/actions/workflows/draft-pdf.yml/badge.svg)
![Dependabot](https://img.shields.io/badge/dependabot-025E8C?style=for-the-badge&logo=dependabot&logoColor=white)
![GitHub contributors](https://img.shields.io/github/contributors/temmy222/PyTOUGHREACT)
![PyPI - Version](https://img.shields.io/pypi/v/PyTOUGHREACT)
![PyPI - License](https://img.shields.io/pypi/l/pytoughreact)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pytoughreact",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "Temitope Ajayi <ajayi_temmy@yahoo.com>",
    "keywords": "biodegradation, reactive transport, automation, uncertainty quantification",
    "author": null,
    "author_email": "Temitope Ajayi <ajayi_temmy@yahoo.com>",
    "download_url": "https://files.pythonhosted.org/packages/b5/74/468ee84ad3991c446ae4784dddab314ae60d8b0f160558791933e733cce1/pytoughreact-1.0.4.tar.gz",
    "platform": null,
    "description": "# PyTOUGHREACT\r\n\r\n\r\n- [PyTOUGHREACT](#pytoughreact)\r\n  - [Installation](#installation)\r\n  - [Usage](#usage)\r\n  - [Contributing](#contributing)\r\n  - [Documentation](#documentation)\r\n  - [License](#license)\r\n  - [Tests](#tests)\r\n\r\n\r\nPyTOUGHREACT is a Python package for automating reactive transport simulations including biodegradation reactions.\r\nIt makes use of TOUGHREACT, TMVOC and TMVOCBIO executables for running the simulations. These executables are interfaced\r\nwith python to automate the runs. It will be particularly useful for uncertainty quantifications, sensitivity \r\nanalysis without the need to have a lot of files stored on your local computer. It builds on the PyTOUGH software which processes for the TOUGH2 executables.\r\n\r\n## Installation\r\n\r\nPyTOUGHREACT is available on PyPI which is a repository of softwares built with the Python Programming Language. Before installing PyTOUGHREACT, it is required to have Python >=3.7 installed on your local computer. Python can be downloaded from the [python.org](python.org) website and installing it by following the instructions. Windows users should ensure that the path to the python is set in the environment variable to ensure availability everywhere.\r\n\r\nUse the package manager [pip](https://pip.pypa.io/en/stable/) to install PyTOUGHREACT.\r\n\r\n```bash\r\npip install pytoughreact\r\n```\r\n\r\nThe package can also be forked from this GitHub page and installation performed using\r\n\r\n```bash\r\npython setup.py install  or py setup.py install\r\n```\r\n\r\n<!-- Because pytoughreact requires PyTOUGH and PyTOUGH is not uploaded to PyPI, it is required to download the zip folder of PyTOUGH from the GitHub repository https://github.com/acroucher/PyTOUGH. Unzip the folder and place in your current working directory. Change directory into the PyTOUGH folder and run python setup.py install or pip install on the command line. With PyTOUGH installed, PyTOUGHREACT is ready to be used as a package. -->\r\n\r\nBecause pytoughreact requires PyTOUGH, this library also needs to be installed.\r\nPyTOUGH can be installed by running the command below\r\n\r\n```bash\r\npip install PyTOUGH\r\n```\r\n\r\n## Usage\r\n\r\n```python\r\nimport os\r\nfrom mulgrids import mulgrid\r\nfrom pytoughreact.writers.react_writing import t2react\r\nfrom pytoughreact.pytough_wrapper.wrapper.reactgrid import t2reactgrid\r\nfrom pytoughreact.pytough_wrapper.wrapper.reactzone import t2zone\r\nfrom pytoughreact.chemical.chemical_composition import PrimarySpecies, WaterComp, Water, ReactGas\r\nfrom pytoughreact.chemical.mineral_composition import MineralComp\r\nfrom pytoughreact.chemical.mineral_zone import MineralZone\r\nfrom pytoughreact.chemical.mineral_description import Mineral\r\nfrom pytoughreact.constants.default_minerals import get_kinetics_minerals, get_specific_mineral\r\nfrom pytoughreact.writers.chemical_writing import t2chemical\r\nfrom pytoughreact.writers.solute_writing import t2solute\r\nfrom t2grids import rocktype\r\n\r\n#__________________________________FLOW.INP____________________________________________\r\nlength = 0.1\r\nnblks = 1\r\ndx = [length / nblks] * nblks\r\ndy = [0.5]\r\ndz = [0.5] * 1\r\ngeo = mulgrid().rectangular(dx, dy, dz)\r\ngeo.write('geom.dat')\r\n\r\nreact = t2react()\r\nreact.title = 'Reaction example'\r\n\r\nreact.multi = {'num_components': 1, 'num_equations': 1, 'num_phases': 2,\r\n               'num_secondary_parameters': 6}\r\n\r\nreact.grid = t2reactgrid().fromgeo(geo)\r\n\r\nreact.parameter.update(\r\n    {'print_level': 4,\r\n     'max_timesteps': 9999,\r\n     'tstop': 8640,\r\n     'const_timestep': 10.,\r\n     'print_interval': 1,\r\n     'gravity': 9.81,\r\n     'relative_error': 1e-5,\r\n     'phase_index': 2,\r\n     'default_incons': [1.013e5, 25]})\r\n\r\nsand = rocktype('ROCK1', 0, 2600, 0.1, [6.51e-12, 6.51e-12, 6.51e-12], 0.0, 952.9)\r\n\r\nreact.grid.delete_rocktype('dfalt')\r\nreact.grid.add_rocktype(sand)\r\n\r\nfor blk in react.grid.blocklist[0:]:\r\n    blk.rocktype = react.grid.rocktype[sand.name]\r\n\r\n\r\nzone1 = t2zone('zone1')\r\n\r\nreact.grid.add_zone(zone1)\r\n\r\nfor blk in react.grid.blocklist[0:]:\r\n    blk.zone = react.grid.zone[zone1.name]\r\n\r\nreact.start = True\r\n\r\nreact.write('flow.inp')\r\n\r\n#____________________________________CHEMICAL.INP________________________________________\r\nh2o = PrimarySpecies('h2o', 0)\r\nh = PrimarySpecies('h+', 0)\r\nna = PrimarySpecies('na+', 0)\r\ncl = PrimarySpecies('cl-', 0)\r\nhco3 = PrimarySpecies('hco3-', 0)\r\nca = PrimarySpecies('ca+2', 0)\r\nso4 = PrimarySpecies('so4-2', 0)\r\nmg = PrimarySpecies('mg+2', 0)\r\nh4sio4 = PrimarySpecies('h4sio4', 0)\r\nal = PrimarySpecies('al+3', 0)\r\nfe = PrimarySpecies('fe+2', 0)\r\nhs = PrimarySpecies('hs-', 0)\r\n\r\nall_species = [h2o, h,na, cl, hco3, ca, so4, mg, h4sio4, al, fe, hs]\r\n\r\nh2o_comp1 = WaterComp(h2o, 1, 1.0000E+00, 1.000000E+00)\r\nh_comp1 = WaterComp(h, 1, 1E-7, 1E-7)\r\nna_comp1 = WaterComp(na, 1, 1E-10, 2.93E-2)\r\ncl_comp1 = WaterComp(cl, 1, 1E-10, 1.08E-3)\r\nhco3_comp1 = WaterComp(hco3, 1, 1E-10, 2.21E-08)\r\nca_comp1 = WaterComp(ca, 1, 1E-10, 5.9E-03)\r\nso4_comp1 = WaterComp(so4, 1, 1E-10, 6.94E-3)\r\nmg_comp1 = WaterComp(mg, 1, 1E-10, 2.54E-8)\r\nh4sio4_comp1 = WaterComp(h4sio4, 1, 1E-10, 1E-10)\r\nal_comp1 = WaterComp(al, 1, 1E-10, 9.96E-5)\r\nfe_comp1 = WaterComp(fe, 1, 1E-10, 9.7E-9)\r\nhs_comp1 = WaterComp(hs, 1, 1E-10, 1E-10)\r\n\r\ninitial_water_zone1 = Water([h2o_comp1, h_comp1, na_comp1, cl_comp1, hco3_comp1, ca_comp1, so4_comp1, mg_comp1, h4sio4_comp1, al_comp1, fe_comp1, hs_comp1], 25, 200)\r\n\r\nmineral_list = ['c3fh6', 'tobermorite', 'calcite', 'csh' , 'portlandite', 'ettringite', 'katoite', 'hydrotalcite']\r\nall_minerals = get_kinetics_minerals(mineral_list)\r\n\r\n\r\nc3fh6_zone1 = MineralComp(get_specific_mineral(mineral_list[0]), 0.1, 0, 0.0E-00, 20000.0, 0)\r\ntobermorite_zone1 = MineralComp(get_specific_mineral(mineral_list[1]), 0.05, 0, 0.0E-00, 20000.0, 0)\r\ncalcite_zone1 = MineralComp(get_specific_mineral(mineral_list[2]), 0.4, 1, 0.0E-00, 260.0, 0)\r\ncsh_zone1 = MineralComp(get_specific_mineral(mineral_list[3]), 0.1, 1, 0.0E-00, 20000.0, 0)\r\nportlandite_zone1 = MineralComp(get_specific_mineral(mineral_list[4]), 0.1, 1, 0.0E-00, 1540.0, 0)\r\nettringite_zone1 = MineralComp(get_specific_mineral(mineral_list[5]), 0.1, 1, 0.0E-00, 20000.0, 0)\r\nkatoite_zone1 = MineralComp(get_specific_mineral(mineral_list[6]), 0.1, 1, 0.0E-00, 570.0, 0)\r\nhydrotalcite_zone1 = MineralComp(get_specific_mineral(mineral_list[7]), 0.05, 1, 0.0E-00, 1000.0, 0)\r\n\r\ninitial_co2 = ReactGas('co2(g)', 0, 1.1)\r\nijgas = [[initial_co2], []]\r\n\r\nzone1.water = [[initial_water_zone1], []]\r\nzone1.gas = [[initial_co2], []]\r\nmineral_zone1 = MineralZone([c3fh6_zone1, tobermorite_zone1, calcite_zone1, csh_zone1, portlandite_zone1, ettringite_zone1, katoite_zone1, hydrotalcite_zone1])\r\nzone1.mineral_zone = mineral_zone1\r\n\r\nwriteChemical = t2chemical(t2reactgrid=react.grid)\r\nwriteChemical.minerals = all_minerals\r\nwriteChemical.title = 'Automating Tough react'\r\nwriteChemical.primary_aqueous = all_species\r\nwriteChemical.gases = initial_co2\r\nwriteChemical.write()\r\n\r\n#____________________________________SOLUTE.INP__________________________________________\r\nwriteSolute = t2solute(writeChemical)\r\nwriteSolute.nodes_to_write = [0]\r\nmasa = writeSolute.getgrid_info()\r\nwriteSolute.write()\r\n\r\n#___________________________________ RUN SIMULATION ______________________________________\r\nreact.run(simulator='treacteos1.exe', runlocation=os.getcwd())\r\n\r\n\r\n```\r\n\r\n## Contributing\r\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\r\n\r\nContributing to the code would involve you following the below procedures to quickly get started\r\n\r\n1. Clone the repo using preferred cloning method\r\n2. Install the library to enable you able to use the test example using\r\n\r\n```python\r\npip install -e .\r\n```\r\n3. Modify the code \r\n4. Tests are conducted with pytest and coverage reports are performed using pytest-cov. Install pytest and pytest-cov using the commands below\r\n   \r\n```python\r\npip install pytest\r\n```\r\n\r\n```python\r\npip install pytest-cov\r\n```\r\n5. Run tests:  Run the below command from the root folder to run the tests\r\n   \r\n```python\r\npytest\r\n```\r\n\r\n6. Flake8 is also used to ensure code readability. Install flake8 using \r\n   \r\n```python\r\npip install flake8\r\n```\r\nand run flake8 using\r\n\r\n```python\r\nflake8 src\r\n```\r\n7. Make a pull request after passing all tests\r\n8. More information can be found in developer notes in the documentation - https://pytoughreact.readthedocs.io/en/master/developer.html \r\n\r\n## Documentation\r\nDocumentation can be found here https://pytoughreact.readthedocs.io/en/latest/ \r\n\r\n\r\n## License\r\n[MIT](https://choosealicense.com/licenses/mit/)\r\n\r\n## Tests\r\n\r\n![Tests](https://github.com/temmy222/PyTOUGHREACT/actions/workflows/tests.yml/badge.svg)\r\n![JOSS Article](https://github.com/temmy222/PyTOUGHREACT/actions/workflows/draft-pdf.yml/badge.svg)\r\n![Dependabot](https://img.shields.io/badge/dependabot-025E8C?style=for-the-badge&logo=dependabot&logoColor=white)\r\n![GitHub contributors](https://img.shields.io/github/contributors/temmy222/PyTOUGHREACT)\r\n![PyPI - Version](https://img.shields.io/pypi/v/PyTOUGHREACT)\r\n![PyPI - License](https://img.shields.io/pypi/l/pytoughreact)\r\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Python Library for automating reaction simulations using TOUGHREACT, TMVOC and TMVOC-BIO",
    "version": "1.0.4",
    "project_urls": {
        "repository": "https://github.com/temmy222/PyTOUGHREACT"
    },
    "split_keywords": [
        "biodegradation",
        " reactive transport",
        " automation",
        " uncertainty quantification"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "949eff05eeff8197fcbf9d0edfdf13399656e1a3c8961a8a7d662d2c9f2239b3",
                "md5": "d93e6ab19b13d7610eb81317426f2871",
                "sha256": "2f886997523d669b316001bb2bd0231913cc4970ef2878a68c294129fb9e5a90"
            },
            "downloads": -1,
            "filename": "pytoughreact-1.0.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d93e6ab19b13d7610eb81317426f2871",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 125566,
            "upload_time": "2024-04-08T04:12:23",
            "upload_time_iso_8601": "2024-04-08T04:12:23.555928Z",
            "url": "https://files.pythonhosted.org/packages/94/9e/ff05eeff8197fcbf9d0edfdf13399656e1a3c8961a8a7d662d2c9f2239b3/pytoughreact-1.0.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b574468ee84ad3991c446ae4784dddab314ae60d8b0f160558791933e733cce1",
                "md5": "eb95197a8f7bcdcd1110ec643853c893",
                "sha256": "17ac34f3f92fd29c6e115f4310ae2accb7962906951dae746cb190dee5ca755a"
            },
            "downloads": -1,
            "filename": "pytoughreact-1.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "eb95197a8f7bcdcd1110ec643853c893",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 90021,
            "upload_time": "2024-04-08T04:12:25",
            "upload_time_iso_8601": "2024-04-08T04:12:25.438962Z",
            "url": "https://files.pythonhosted.org/packages/b5/74/468ee84ad3991c446ae4784dddab314ae60d8b0f160558791933e733cce1/pytoughreact-1.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-08 04:12:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "temmy222",
    "github_project": "PyTOUGHREACT",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "pytoughreact"
}
        
Elapsed time: 8.58182s