Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
f3e92c3
Add EWT tracer EOS handling to t2data json()
acroucher Oct 22, 2020
9635350
Merge branch 'testing' into json-tracer
acroucher Oct 22, 2020
fb04037
Add unit tests for conversion of tracer sources to JSON
acroucher Oct 22, 2020
a0d67c0
Add documentation of tracer EOS conversion in t2data json()
acroucher Oct 22, 2020
35378aa
Add handling for EWTD tracer diffusion in t2data json()
acroucher Jul 28, 2021
c326d71
Merge branch 'testing' into json-tracer
acroucher Jul 28, 2021
e346b27
Add mulgrid layermesh property
acroucher Aug 18, 2021
778c03a
Switch griddata from matplotlib.mlab to scipy.interpolate
acroucher Nov 9, 2021
2608190
Bugfix in mulgrid from_gmsh(): missing justify parameter (fixes #33)
acroucher Dec 8, 2021
ef61503
Test on Python 3.10 and not 3.5, update checkout and setup actions
acroucher Jan 28, 2022
1f82ad0
Merge branch 'json-tracer' into testing
acroucher Feb 25, 2022
d55b953
JSON support for AUTOUGH2 2-stage separators
acroucher Feb 25, 2022
24ee7d3
Add license file
acroucher Mar 17, 2022
825a6c5
Merge branch 'multi-stage-separator-json' into source-network-json
acroucher Apr 1, 2022
18c90f4
Add support for converting DMAK and separators to Waiwera JSON input
acroucher Apr 4, 2022
f7715f4
Add unit tests for converting separators and DMAK to JSON
acroucher Apr 4, 2022
acc17b4
Add conversion of TMAK generators to Waiwera network.group JSON input
acroucher Apr 4, 2022
f0ecf23
Add source network JSON unit tests
acroucher Apr 4, 2022
a0d942f
Added support for GMSH 4.1 mesh format in mulgrid from_gmsh()
acroucher Apr 8, 2022
d433b22
Merge branch 'json-tracer' into testing
acroucher Jun 2, 2022
592c630
Merge branch 'testing' into source-network-json
acroucher Jun 2, 2022
971a226
Add support for IMAK/XINJ generators in t2data.json()
acroucher Jun 2, 2022
0e93052
Add support for DMAT generator type in t2data json()
acroucher Jun 2, 2022
0fe8fac
Refactor generators_json()
acroucher Jun 3, 2022
97927fc
Allow FINJ/PINJ/RINJ generators in generators_json()
acroucher Jun 3, 2022
564737b
Check cell index before adding generator in generators_json()
acroucher Jun 3, 2022
0d07d49
Add support for source network reinjection in t2data json()
acroucher Jun 7, 2022
bf3e143
Don't create reinjector output if cell index is invalid
acroucher Jun 7, 2022
36923b9
Ensure unique names when converting generators in t2data json()
acroucher Jun 7, 2022
d7a3f10
Add block names to generator names if not unique in t2data json()
acroucher Jun 8, 2022
b8063e4
Don't set input in overflow reinjector JSON
acroucher Jun 8, 2022
3a84553
Add overflow reinjector after main reinjector JSON
acroucher Jun 8, 2022
e1925b5
Complete reinjector JSON if no reinjection reset in generators
acroucher Jun 8, 2022
ae5a9a2
Add reinjection JSON unit tests
acroucher Jun 8, 2022
dfeb249
Reset reinjection in JSON unit tests
acroucher Jun 8, 2022
a01e1c8
Empty input lists on reinjection reset in t2data json()
acroucher Jun 8, 2022
87ada70
Remove underscore from reinjection group name
acroucher Jun 8, 2022
a374ced
Use abs value of injection factor for RINJ
acroucher Jun 8, 2022
7ebfdbc
Add more reinjection unit tests for t2data json()
acroucher Jun 8, 2022
cb5d793
Fix bug in unique_name() when necessary to append count
acroucher Jun 9, 2022
d5548a0
Set source cell index to None if generator block in atmosphere or not…
acroucher Jun 9, 2022
7420ee6
Delete cell property for TMAK groups
acroucher Jun 9, 2022
abdbbe0
Always give TMAK default name if no generator name given
acroucher Jun 9, 2022
35d85d1
If hg is None, raise unscaled TMAK error
acroucher Jun 9, 2022
4f45295
Don't add reinjectors with no outputs or overflows
acroucher Jun 9, 2022
9fe2c7d
Don't add reinjector input group unless reinjector is also added
acroucher Jun 9, 2022
22ab50a
Prune empty keys from reinjector JSON
acroucher Jun 9, 2022
cec0e43
Make sure reinjector numbering is consecutive
acroucher Jun 9, 2022
aeba9f0
Reset reinjection in network JSON unit tests
acroucher Jun 9, 2022
3093c7d
Add unit test for two TMAKs contributing to single reinjector
acroucher Jun 9, 2022
1e20594
Version 1.5.6
acroucher Jun 15, 2022
f7ac246
Add fix for bug parsing TOUGHREACT OMP listing files
acroucher Jun 22, 2022
c035fd3
Merge branch 'testing' of github.com:acroucher/PyTOUGH into testing
acroucher Jun 22, 2022
cac1805
Pass spaces parameter into new_column_name() calls
acroucher Aug 17, 2022
62f5871
Replace np.int with int in t2grid.minc()
acroucher Aug 17, 2022
2dce5aa
Merge branch 'testing' into source-network-json
acroucher Aug 18, 2022
35716ab
Include DMAT gener type in makeup inputs for t2data.json()
acroucher Aug 19, 2022
19af74a
Allow well tables for DMAT in table_generator_json()
acroucher Aug 22, 2022
5f73ba2
Set IMAK enthalpy in reinjector output rather than source JSON
acroucher Aug 26, 2022
40383a1
Eliminate unnecessary reinjection groups in JSON
acroucher Aug 26, 2022
f5c236b
Allow unlimited number of time steps in t2data.json()
acroucher Aug 30, 2022
698825d
Add unit tests for t2data.json() max_timesteps
acroucher Aug 30, 2022
6767bd9
Merge branch 'testing' into source-network-json
acroucher Aug 30, 2022
d3e681f
Add support for unassigned reinjector outputs in t2data.json()
acroucher Sep 5, 2022
00da485
Use null-cell sources instead of null reinjectors in t2data.json()
acroucher Sep 6, 2022
d2e9146
Update unit test for altered null-cell source behaviour in t2data.json()
acroucher Sep 6, 2022
0c9f541
Remove Python 2.7 from CI testing matrix
acroucher Jun 29, 2023
d4029bf
Remove Python 3.6 from CI testing matrix
acroucher Jun 30, 2023
64f6f85
Version 1.5.7
acroucher Jun 30, 2023
c287b66
Add mulgrid from_layermesh() method, unit tests and docs
acroucher Jul 26, 2023
71d8c77
Modify refinement scheme to eliminate some triangular columns at corners
acroucher Sep 12, 2023
11866c8
Merge branch 'testing' of github.com:acroucher/PyTOUGH into testing
acroucher Sep 12, 2023
3e04cbf
Include XINJ generator enthalpy in JSON
acroucher Nov 3, 2023
2148c3d
Update to pyproject.toml for packaging
acroucher Feb 12, 2024
53124ff
Remove meshio dependency from pyproject.toml
acroucher Feb 13, 2024
b2cfaa0
Add PyPI publish action
acroucher Feb 13, 2024
3890e70
Update interactive terminal example in user guide
acroucher Feb 13, 2024
8806fee
Update print statements in user guide examples
acroucher Feb 13, 2024
892cc32
Update user guide and readme for pip install
acroucher Feb 13, 2024
b0c15a3
Move user guide to ReadTheDocs
acroucher Feb 19, 2024
f7efbe3
Set language in Sphinx config
acroucher Feb 19, 2024
a0340d5
Update readme
acroucher Feb 19, 2024
1b25655
Update version in pyproject.toml
acroucher Feb 19, 2024
6a995b5
Add Read the Docs and PyPI badges to readme
acroucher Feb 19, 2024
94705e4
Correct URL in Read the Docs readme badge
acroucher Feb 20, 2024
816b7e4
Use PDF/SVG for IAPWS figure
acroucher Feb 23, 2024
a6e8ea1
Change to Furo Sphinx theme
acroucher Feb 23, 2024
dbc5b1d
Add ruled lines between method specs
acroucher Feb 23, 2024
6abc02e
Add tables for column and layer methods
acroucher Feb 23, 2024
9ff2c63
Add command reference page
acroucher Feb 23, 2024
7a2d243
Add landing page figure
acroucher Feb 23, 2024
0e15f7b
Add PyPI downloads badge to readme
acroucher Feb 25, 2024
7626197
Version 1.6.1
acroucher Feb 25, 2024
efba268
Add mulgrid block naming convention 3
acroucher Mar 1, 2024
d0e0b6e
Add user guide note on t2data json source naming
acroucher Mar 8, 2024
1b70f31
Add mulgrid naming convention 3 to comment
acroucher Mar 8, 2024
5bc6efa
Add check_blocknames parameter to t2incon.read()
acroucher Mar 8, 2024
387744b
unfix_blockname() now does nothing if non-digits in last 2 characters
acroucher Mar 8, 2024
0a589b0
Add unit tests for fix/unfix_blockname() with convention 3
acroucher Mar 8, 2024
ff806f6
Add check_blocknames parameter to t2incon __init__()
acroucher Mar 8, 2024
1ef99a3
Add user guide note about t2incon() check_blocknames parameter
acroucher Mar 8, 2024
8b81b0e
Correct docs on mulgrid convention 3 spec
acroucher Mar 8, 2024
1287d69
Relax tolerance in line_polygon_intersections()
acroucher Mar 27, 2024
e18a93b
Non-dimensionalise calculations in next_corner_column()
acroucher Mar 27, 2024
899ae5e
Add column_track() unit tests
acroucher Mar 27, 2024
6bf18cf
Make testing branch url in user guide consistent with readme
acroucher Mar 27, 2024
e2434b2
Remove indices optional parameter from line_polygon_intersections()
acroucher Mar 28, 2024
3ac457d
Add line_intersects_rectangle() function
acroucher Mar 28, 2024
6c45b5c
Modify column_track() to handle non-contiguous tracks
acroucher Mar 28, 2024
4fcd4c2
Add more column_track() unit tests
acroucher Apr 3, 2024
b5110dd
Modify column_track() to handle start and/or endpoints inside grid
acroucher Apr 3, 2024
9566046
Check track segment length also for start, end columns
acroucher Apr 3, 2024
6f14328
Simplify logic in column_track()
acroucher Apr 3, 2024
ac1d7f6
Break column_track() loop if track inside one column
acroucher Apr 3, 2024
6b44933
Merge branch 'column_track' into testing
acroucher Apr 3, 2024
a887ea5
Merge branch 'blocknames' into testing
acroucher Apr 3, 2024
a9e32e4
Add 5x5 grid column_track() unit test
acroucher Apr 4, 2024
61c6db3
Add line_intersects_rectangle() unit tests
acroucher Apr 4, 2024
d346f2f
Modify tolerance checking in column_track()
acroucher Apr 4, 2024
deaab9d
Version 1.6.2
acroucher Apr 4, 2024
805520e
Check for reversed connection block names in t2data.mesh_json()
acroucher May 10, 2024
f882c65
Check for null ltab in generators_json()
acroucher May 10, 2024
96ee87b
Update file() to open() in user docs examples
acroucher May 10, 2024
b338423
Ignore connections between atmosphere blocks in boundaries_json()
acroucher Jul 10, 2024
261b3f6
Pass additional arguments into functions for fsolve() in density_temp…
acroucher Oct 15, 2024
19b4799
Fix typo in t2data parameter table
acroucher Nov 13, 2024
7bac8cd
Update github checkout and setup-python actions in pythontest.yml
acroucher Nov 13, 2024
e35a02a
Version 1.6.3
acroucher Nov 13, 2024
886fca9
Add unit test for mulgrid fit_surface() on columns with > 4 sides
acroucher Feb 25, 2025
b056797
Remove erroneous 'replace' argument in triangulate_column()
acroucher Feb 25, 2025
a127b86
Update Python versions in unit test Github action
acroucher Feb 25, 2025
2f077b9
Define derivative() instead of using now-deprecated scipy function
acroucher Feb 25, 2025
dbdd504
Version 1.6.4
acroucher Feb 25, 2025
d544404
In column_track() base tolerance on local rather than global grid size
acroucher Mar 31, 2025
34d9b9f
Version 1.6.5
acroucher Mar 31, 2025
6db5b8c
Introduce convert_primary*() in t2data for JSON conversion
acroucher Jul 24, 2025
4df9856
Add support for EOS3 models in t2data json()
acroucher Jul 24, 2025
d21ec3a
Use same ww constant as in TOUGH2
acroucher Jul 25, 2025
a211d95
Add support for EOS4 with MOP(19) = 2 in t2data eos_json()
acroucher Jul 25, 2025
07551ac
Use unit test results from TOUGH2 output
acroucher Jul 25, 2025
0c3d712
Add unit test for EOS4 / MOP(19) = 2
acroucher Jul 25, 2025
1abf4be
Update docs for EOS3 support in t2data json()
acroucher Jul 25, 2025
07cfb5c
Add support for AUTOUGH2 EOS EWCX and EWAX in t2data json()
acroucher Jul 28, 2025
eb5b2d4
Add Python 3.13 to unit tests
acroucher Aug 5, 2025
d85297b
Version 1.6.6
acroucher Nov 3, 2025
373055e
Merge remote-tracking branch 'upstream/master' into LF-59602-upgrade-…
XavierMilesSeequent Nov 30, 2025
3bf4fb0
LF-59602 Make import relative
XavierMilesSeequent Nov 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Build and publish PyTOUGH to PyPI

on:
push:
branches:
- master

jobs:
deploy:
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install dependencies
run: |
pip install setuptools wheel build
- name: Build
run: |
python -m build
- name: Publish
uses: pypa/gh-action-pypi-publish@release/v1
8 changes: 4 additions & 4 deletions .github/workflows/pythontest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9]
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
pip install --user numpy scipy
pip install --user numpy scipy layermesh
pip install --user .
- name: Unit tests
run: |
Expand Down
21 changes: 21 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# File: .readthedocs.yaml

version: 2

build:
os: "ubuntu-22.04"
tools:
python: "3.10"

# Build from the docs/ directory with Sphinx
sphinx:
configuration: doc/source/conf.py

# Explicitly set the version of Python and its requirements
python:
install:
- requirements: doc/source/requirements.txt

formats:
- pdf
- epub
12 changes: 7 additions & 5 deletions IAPWS97.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,9 +467,11 @@ def density_temperature_plot(plt, subplot = 111):
plt.plot(t, dw, color = 'k', marker = '', linestyle = '-')
t = np.linspace(350, tcritical, 50)
p = np.array([sat(tx) for tx in t])
def f(dx): return super(dx, tx)[0] - px
ds = np.array([fsolve(f, 120. + 25. / 200 * (tx - 350.)) for tx, px in zip(t, p)])
dw = np.array([fsolve(f, 560. - 25. / 200 * (tx - 350.)) for tx, px in zip(t, p)])
def f(dx, tx, px): return super(dx, tx)[0] - px
ds = np.array([fsolve(f, 120. + 25. / 200 * (tx - 350.), (tx, px))
for tx, px in zip(t, p)])
dw = np.array([fsolve(f, 560. - 25. / 200 * (tx - 350.), (tx, px))
for tx, px in zip(t, p)])
plt.plot(t, ds, color = 'k', marker = '', linestyle = '-')
plt.plot(t, dw, color = 'k', marker = '', linestyle = '-')

Expand All @@ -495,8 +497,8 @@ def f(dx): return super(dx, tx)[0] - px
d = np.array([cowat(tx, p)[0] for tx in t])
plt.plot(t, d, color = 'k', marker = '', linestyle = '--')
t = np.linspace(350, 800, 100)
def g(dx): return super(dx, tx)[0] - p
d = np.array([fsolve(g, 1100 - tx) for tx in t])
def g(dx, tx, p): return super(dx, tx)[0] - p
d = np.array([fsolve(g, 1100 - tx, (tx, p)) for tx in t])
plt.plot(t, d, color = 'k', marker = '', linestyle = '--')

plt.axis([0, 800, 0, 1100])
165 changes: 165 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.


This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

0. Additional Definitions.

As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

1. Exception to Section 3 of the GNU GPL.

You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

2. Conveying Modified Versions.

If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or

b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files.

The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.

b) Accompany the object code with a copy of the GNU GPL and this license
document.

4. Combined Works.

You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.

b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.

c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.

d) Do one of the following:

0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.

1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.

e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)

5. Combined Libraries.

You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.

b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.

6. Revised Versions of the GNU Lesser General Public License.

The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
37 changes: 23 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,37 @@
![Unit tests](https://github.com/acroucher/PyTOUGH/workflows/Unit%20tests/badge.svg)
![Unit tests](https://github.com/acroucher/PyTOUGH/workflows/Unit%20tests/badge.svg) [![Documentation Status](https://readthedocs.org/projects/PyTOUGH/badge/?version=latest)](https://PyTOUGH.readthedocs.io/en/latest/?badge=latest) [![PyPI version](https://badge.fury.io/py/PyTOUGH.svg)](https://badge.fury.io/py/PyTOUGH) ![PyPI - Downloads](https://img.shields.io/pypi/dm/PyTOUGH)


# What is PyTOUGH?

PyTOUGH (Python TOUGH) is a Python library for simplifying, extending and automating the use of the [TOUGH2](http://esd.lbl.gov/research/projects/tough/) subsurface fluid and heat flow simulator. Using PyTOUGH, it is possible to automate the creation and editing of TOUGH2 model grids and data files, and the analysis and display of model simulation results, using Python scripts.

# Installing PyTOUGH:

First, make sure you have [Python](http://www.python.org) and the [Numerical Python](http://numpy.scipy.org/) library installed on your machine. (For some features you will need other libraries such as [Scientific Python](http://www.scipy.org/) or [Matplotlib](http://matplotlib.sourceforge.net/)- consult the user guide for details.)

Click the _Clone or download_ button at the right of the PyTOUGH web page and then click [Download ZIP](https://github.com/acroucher/PyTOUGH/archive/master.zip) , and save the .zip file to your computer. Unzip this to any directory on your computer. This will create a directory containing a file called `setup.py`. At the command line type `python setup.py install`.

(Alternatively, if you are confident using the Git version control system, you can clone the PyTOUGH repository instead of downloading a .zip file.)
From version 1.6.0, PyTOUGH can be installed via the [`pip`](https://pip.pypa.io) Python package installer:

```
pip install PyTOUGH
```
You can also install a particular version of PyTOUGH, e.g. to install version 1.6.0:

```
pip install PyTOUGH==1.6.0
```
To uninstall PyTOUGH:
```
pip uninstall PyTOUGH
```
To install the `testing` branch, to get the most recent changes being tested for the next stable release:
```
pip install git+https://github.com/acroucher/PyTOUGH.git@testing
```

# More information:

For more detailed information on PyTOUGH, consult the user guide (PDF format, in the 'doc' directory of your PyTOUGH install) and the PyTOUGH [wiki](https://github.com/acroucher/PyTOUGH/wiki/), which has links to published articles on PyTOUGH.
For more detailed information on PyTOUGH, consult the [user guide](https://pytough.readthedocs.io) (html, or you can download PDF or Epub versions) and the PyTOUGH [wiki](https://github.com/acroucher/PyTOUGH/wiki/), which has links to published articles on PyTOUGH.

# What's new in PyTOUGH?

The latest stable version is 1.5.5, which has:

* various bug fixes and other minor enhancements.

# Where's the user guide?

Since PyTOUGH version 1.3.6, the PyTOUGH user guide (PyTOUGH-guide.pdf) is now included in the 'doc' directory of your PyTOUGH install. Previously this was available separately from the 'Downloads' section on the website, but GitHub decided to phase out this 'Downloads' section.
The latest stable version is 1.6.6, which has:

* ability to convert EOS3 models to Waiwera JSON input
Loading
Loading