flopy/CONTRIBUTING.md

220 lines
9.5 KiB
Markdown
Raw Permalink Normal View History

2018-05-22 08:30:42 -07:00
Contributing
============
Contributions to FloPy are welcome from the community. As a contributor, here are the guidelines we would like you to follow:
2018-05-22 08:30:42 -07:00
- [Code of Conduct](#coc)
- [Issues and Bugs](#issue)
- [Feature Requests](#feature)
- [Submission Guidelines](#submit)
- [Coding Rules](#rules)
- [Commit Message Guidelines](#commit)
2018-05-22 08:30:42 -07:00
## <a name="coc"></a> Code of Conduct
Help us keep FloPy open and inclusive. Please read and follow our [Code of Conduct][coc].
2018-05-22 08:30:42 -07:00
## <a name="issue"></a> Found a Bug?
If you find a bug in the source code, you can help us by
[submitting an issue](#submit-issue) to our [GitHub Repository][github]. Even better, you can [submit a Pull Request](#submit-pr) with a fix.
## <a name="feature"></a> Missing a Feature?
You can *request* a new feature by [submitting an issue](#submit-issue) to our GitHub Repository. If you would like to *implement* a new feature, please submit an issue with a proposal for your work first, to be sure that we can use it. Please consider what kind of change it is:
* For a **Major Feature**, first open an issue and outline your proposal so that it can be
discussed. This will also allow us to better coordinate our efforts, prevent duplication of work,
and help you to craft the change so that it is successfully accepted into the project.
* **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr).
## <a name="submit"></a> Submission Guidelines
### <a name="submit-issue"></a> Submitting an Issue
Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs, we will systematically ask you to provide a minimal, complete, and verifiable example. Having a minimal, complete, and verifiable example gives us a wealth of important information without going back & forth to you with additional questions like:
- version of FloPy used
- and most importantly - a use-case that fails (ideally an example that uses flopy to generate FloPy input files - see `t0**_test.py` python scripts in the `autotest/` directory)
Release 3.3.0 (#762) * initial v3.2.13 release candidate * Fix(plotting): Bug fixes for issues #587 and #588 (#589) * Fix(plotting): Bug fixes for issues #587 and #588 * updates to PlotMapView.contour_array() and _VertexCrossSection.contour_array() to allow nan to be passed in the array * added test_tricountour_NaN() to t007_test.py * updates to PlotMapView.contour_array() and plot_array() to drop extra dimension from head array with using vertex model grid #588 * updates to UnstructuredPlotUtilities, added irregular_shape_patch() as patch for cross section drawing of vertex and unstructured modelgrids that include multiple geometries (found during fix #588) * update to geometry.transform() to set x and y dtypes to float (found during fix #588) * Added updated t007_test.py * Update test_tricontour_NaN() * Codacy updates for PR * Updated drop axis routine to squeeze axis 1 for vertex grids * suppressing error when proj4_str is None (#590) * suppressing error when proj4_str is None * fixed long line to molify Codacy * fix creep of btn obs loactions when reading and writing (#592) * Zero-based integers for select ModflowFlwob variables (#596) * docs(ModflowHob): Explicitly state that variables irefsp, layer, row, and column are zero-based integers. Minor formatting changes-->uniform capitalization and alignment with parallel variables in the ModflowFlwob docstring. * refactor(ModflowFlowb): Treat variables irefsp, layer, row, and column as zero-based integers to align behavior with ModflowHob. Updated write_file method and docstring accordingly. * refactor(codacy): Refactor docstrings to break up long lines. * refactor(t041_test): Update test041 to specify irefsp, layer, row, and column as zero-based indices. * fix(mfuzf): enforce boolean values for several uzf option arguments (#597) * feat(export_contourf): export filled contours to shapefile (#599) * Required changes to flopy.utils.geometry so that the Polygon.pyshp_prts handled holes correctly for multiple shapefile versions * codacy fixes * Fix(mbase.py): laytyp property method call to "UPW" package. (#601) * Add load function to ModflowFlwob (#598) * feat(ModflowFlwob): Add various flow-obs types to model.mfnam_packages dictionary. * feat(ModflowFlwob): Add method to load package from file. * feat(ModflowFlwob): Use supplied unit number when loading package to avoid unit collisions. * feat(ModflowFlwob): Add additional width and precision for toffset to avoid string-conversions that result in numbers greater than total simulation time. * feat(ModflowFlwob): Account for case where nqclfb is negative. * feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile. * feat(ModflowFlwob): Add new autotest to check loading functionality. * revert: "feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile." This reverts commit 6f520064a5e7dc856b177cd567668f712866117e. * feat(ModflowFlwob): Add 1 to zero-based "irefsp" when writing file. * feat(ModflowFlwob): Try to make Codacy happy. * feat(ModflowFlwob): Add "ftype" attribute and retrieval method. * feat(ModflowFlwob): Use ext_unit_dict to get proper flowtype and ftype from filename. * feat(ModflowFlwob): Remove unused variable and extra whitespace. * feat(ModflowFlwob): Catch dict items explicitly even if they are unused. * Revert "feat(ModflowFlwob): Try to make Codacy happy." This reverts commit eca305ab. * fix(mtuzt): iuzbnd improperly generated (#605) Instantiation of UZT class was generating IUZBND as a 3D array, should be 2D * Update version_changes.md * fix(mfsfr2.py): substituted graph for all_segments to improve performance (#602) (#604) * test(t064_test_performance.py): to prevent regressions in flopy.modflow performance * Fix(contour_array_cvfd): fix for masked value crash issue using tricontour with matplotlib 3.1.1 (#613) * fix(util_list.py): get_dataframe() iterating thru nper instead of data.keys(); fails for pers where itmp < 0 (#612) * fix(mtuzf1): a user comment on same line as nuzgag not processed correctly (#609) * fix(modflowpy#615): plotutil masked_values hnoflo, hdry fix (#618) * refactor(namfile): whitespace in NAM file and MFList output files (#622) * fix(memory): "Cannot allocate memory" error for Python 2.7 on non-Windows (#623) * fix(autotest): move some output files to their own folder * fix(run_model): improve normal_msg and fix Python 2.7 memory issue * fix(reference): resolve UnboundLocalError with crs property (#608) * fix(reference): fix UnboundLocalError error, deprecate crs class * fix(shapefile_utils.CRS): fix typo and UnboundLocalError error * fix(mf6): Fixes for #603, #606, #614, and #616 (#620) * fix(ja array): CellID now increments and decrements correctly. * feat(jagged arrays): format disu arrays (ja, cl12) as jagged arrays in output files * fix(disu arrays): Added more testing for disu arrays * Fix(flopy write): Copy external files before writing out package files. Package file writing can require access to external files. * fix(np types): Changed code from using np.int to explicitly defining integer type np.int32. * fix(#616): Shapefile export code fix * fix(#614): Wel package added to multi-package list. Fix to always get multiple packages when searching by package type. * fix(different int types): Different systems appear to use different types of ints. Int type check changed to be more generic. * refact(CR/LF): Removed CR line endings * fix(export_contourf): tidy local variable overuse for Python 2.7 (#625) * fix(MFList): older numpy needs file in binary mode for writetxt (#626) * feat(intersect): add grid intersection functionality (#610) * add gridintersect to flopy utils * add gridintersect tests * make codacy happy * attempt 2 making codacy happy * add keepzerolengths option to strtree method * add gridintersection demo notebook * update travis to install shapely minor edit in gridintersect * fix py27 error * make codacy happy again * last codacy fix * fix(travis 2.7): Travis memory errors (#627) * fix(travis 2.7): Memory is not getting released from the plotting tests when run on python 2.7. Two of the more memory intensive plotting tests have been disabled as a work around for the out of memory errors intermittently appearing on Travis. Unsuccessfully tried to get the memory released by calling matplotlib's plt.close('all') and then gc.collect() at the end of each plotting test. Since support for python 2.7 is going to be discontinued soon, it may be sufficient just to use this work around. * feat(mf6 rename all packages method + copy support (#591)) * feat(deepcopy support): Flopy for MF6 MFSimulation object can now be copied with deepcopy. * feat(rename all packages): rename_all_packages method added to the mf6 model and simulation classes to allow the user to rename all of the packages at once. * refact(dfn sync): sync dfn with MODFLOW6 repository * Fix(unstructured grid capabilities): fix array masking for CVFD grids and allow ncpl to be specified as a list (#631) * Fix(UnstructuredGrid): fix for ncpl provided as a list or numpy array * Fix(plot_array): fix for CVFD masked_values when plotting arrays * feat(sub): Add IDBIT option to SUB for MODFLOW-2005 option (#632) * feat(mflistreader): read WEL Reductions from List File (#630) * Read WEL Reductions from List File Adds a method to the ListBudget class to read in data from the list file on automatic reductions to WEL extractions. This method supports both NWT and USG list files. Adds auto tests for both success and failure. I couldn't find any included data sets with reductions written to the LST, so I updated a USG data set to allow for the auto test. * Removed Trailing Whitespace Removed trailing whitespace id'd by codacy. * Updated to work with python 2.7 Updated code to run with python 2.7. Used autopep8 to formalize some formatting. * Feat(rasters.py): Add raster intersection and resampling features to flopy.utils (#634) * Feat(rasters.py): Added raster intersection capability and an example notebook (Notebooks/flopy3_raster_intersection.ipynb) * Update requirements for travis to include SciPy for raster unit tests * Removed Scipy from python27 requirements * Update flopy3_raster_intersection.ipynb for running on travis * Update flopy3_raster_intersection.ipynb for travis * revert flopy3_lake_example.ipynb * update(rasters.py): codacy updates * update(rasters.py): codacy fixes * update(rasters.py): _point_in_polygon changed to static method * fix(evt): etvr not evtr in evt package (#635) * fix(sfr): remove sensitivity to SFR reach_data (ds2) rec array order. (#637) * making sfr reachdata (ds2) write insensitive to data field order currently uses dtype.descr which can fail is struct array fields change order. * happend upon etvr not evtr in evt package * Adding test that exposes issue with passing disordered reach_data arrays * tidy-up * fix(mfmnw2): bug fix for writing multiple stress periods * feat(GridIntersect): import GridIntersect from __init__ (#640) * fix(gridintersect): removed matplotlib dependency (#643) A recent PR added an import of gridintersect when flopy is imported. This broke some things on the MODFLOW 6 development side and inadvertently required matplotlib, even if no plotting is needed. * fix(mflistfile): parse immobile components from mt3d listfile (#644) * happened upon etvr not evtr in evt package * supporting mtlist parsing with immobile domain * test for immobile catch * clean up test list file * fix(gridgen): changed sr usage to modelgrid Also fixed the description of rotation in the dis docstrings. rotation is being read as a counter-clockwise angle; this may actually be different from how it was defined prior to the new modelgrid approach that is implemented now. * updated notebook * fix comment line length * refactor(vdf): shut off density limiters as default (#646) Default densemin and densemax set to zero, which means they are not active. * docs(dfn): update some MODFLOW 6 variable descriptions (#648) * fix(mtbtn): options from load method ignored (#649) * Pass options from load method to class constructor * Correct case for "ALTWTSORB" case * Show verbose message for optional keywords * Add a unit tests to check options * fix(notebooks): add missing figure (#650) Addresses https://github.com/modflowpy/flopy/pull/278#issuecomment-532813144 * fix(CellBudgetFil): get_ts() wasnt setting totim in the result container if a model instance is avail (#652) * added grid interect to util init * fix(binaryfile): CellBudgetFile.get_ts() wasnt setting times correctly if no times were passed but model instance is available * Update(export): Updated the export method to accept modelgrid in **kwargs (#651) * Update(export()): Updated the export method to accept a user supplied modelgrid in **kwargs * added masked_vals **kwarg to output_helper() for netcdf exporting * fix(tutorial2): zorder keyword in clabel no longer supported (#654) close #653 * Fix(mfuzf1): fix read and write dataset 4b when specifysurfk option is present (#658) * fix(mflak): allow mflak class to use -1 as a flag for using previous transient lake stresses (inflow/outflow) (#655) * Fix(mfmnw2): Fix a bug that causes mnw2 file writing to crash when when there multiple stress periods * Fix mfmnw2 file * fix(mflak): allow lak class to use -1 for previous transient lake stress * fix(SpatialReference): fix coordinate information being passed to SpatialReference (#661) * feat(PlotCrossSection): add geographic_coords flag to PlotCrossSection (#664) * Feat(PlotCrossSection): Added option to plot xc in geographic_coordinates * removed unused attribute self.offset from _StructuredCrossSection * removed unused code, and codacy fix. * Fix typo in flopy3_PlotCrossSection_demo.ipynb example * Add feature to allow 'with' context statement to read Head/CellBudget files (#669) * fix(mfsfr2): correct variable name typo in docstring * feat(binaryfile): add 'with' context management support * Allow Head/CellBudgetFile to be opened/closed in a 'with' statement * Raise TypeError if CellBudgetFile.get_data() is called without arguments * Document and test idx as either an int or list of integers * Close a few file handles in the test suite * refactor(modelgrid): model grid caching change (#667) * fix(#659): Model grid caching changed to cache existing grid unless the grid is incomplete or user explicitly requests a new grid. * feat(update model grid): Added section explaining how to get and update a model grid. * fix(ModflowUzf1): load datasets if NUZF1..4 >= 0 (#668) * fix(Python 2): use a few aliases for exceptions (#672) * FileNotFoundError = IOError * ModuleNotFoundError = ImportError * refactor(load methods): avoid ResourceWarning with unclosed files (#673) * Nam load function already opens each file, so pass the filehandle rather than the filename to each load operation * For each load method, only close the file if it was opened by the method * refactor(travis): use script files rather than awkward YAML file (#676) * Replace TVER with RUN_TYPE with either "test" or "misc" * Remove Python 3.7-dev and leave commented-out 3.8-dev, when ready * Move/refactor version showing to before_script hook * Move pylint to script section, with pylint-exit to handle exit code * PATH already has $HOME/.local/bin but it needs it to be created * feature(ci): check Python code with flake8 (#677) * fix(gridgen): fixed writing of mf6 disu package (#680) * Added tests for the to_disu6() and to_disv6() Gridgen methods * Closes #678 * fix(ModflowSfr2.load): don't try to read datasets 6b,c in cases where they're missing (#671) (#679) * Resolve bugs related to F821 undefined name 'name' (#686) * fix(Mt3dPhc): missing filenames parameter; add basic test * fix(backup_existing_dfns): fix variable name * fix(mfstr): fix variable name and missing import * fix(t022_test): catch ImportError and adjust expected data * fix(mfde4): fixed-width load did not work * fix(mflistfile): resolve undefined name 'e' * fix(mfsms): load options * fix(flake8 code F811): redefinition of unused 'name' (#688) * t007_test.py: rename the (newer) second 'test_export_array' with '2' ** Note test_export_array fails, and a fix is required (later) * t031_test.py: ra_slice is imported from flopy.utils.recarray_utils * pest/__init__.py: duplicate import of Util3dTpl * various tests: import pymake once, handle condition in code * Fix(#675): hfb load parameters when Factor is excluded (#685) * fix(mfhob.py): read data set 4 when user provides it on multiple lines * Fix(modflowpy#675): hfb package load parameters when Factor not supplied * fix(modflowpy#675): add optional flag to OptionBlock context tree for optional nested arguments * update(autotest): added tests for modflowpy#675 * Updates for codacy * feat: support for copy.copy() and copy.deepcopy() with python 3.5+ (#689) * fix(ulstrd): lists for wel, drn, ghb, etc. not always loaded correctly (#690) This fixes several problems related to loading of mf2005 packages that have lists of information, typically layer, row, column, ... * flopy will now read packages that have lists specified with EXTERNAL * flopy will now read packages that have lists that use the SFAC keyword * flopy now has a general list reader flopy.utils.flopy_io.ulstrd patterned after the MODFLOW ULSTRD subroutine * flopy will now use this ulstrd reader to read lists defined with parameters * With the m.write_input(), binary external files always had REPLACE tacked onto the end. This was corrected so that REPLACE is only added when output is set to True. * added t067_test_ulstrd to test reading of open/close, external, and binary lists with sfac * Closes #683 * tests(t004): fix small issue that only occurs on Windows (#695) t004 fails on Windows in comparing a data frame to a numpy array. The i, j, k columns from the data frame were upgraded to long ints. Apparently the default int on Windows is different from the default on mac/linux, so test failures don't show up there. Also stop versioning several shapefiles that are recreated with every test run. * refactor(gridintersect): wrap shapely imports in try/except (#698) * refactor(gridintersect): wrap shapely imports in try/except This should allow flopy to be loaded even if shapely isn't installed. Closes #697 * refactor(dis): removed dis.read_from_cnf() method. (#699) * It's not used. It's broken. And it's not tested. * Closes #687 * feat(#693) and fix(#691) (#696) * feat(#693): support for load_only option in modflow 6 fix(#691): forgive flag now defaults to false when loading models. bugs in t028_test and t012_test fixed * fix(code style fixes): code clean up * fix(load_only): Added support for package names in load_only lists and cleaned up documentation * fix(flake8 code W605): invalid escape sequence '\s' (or similar) (#700) Some of these fixes were to paths to directories in docstring examples, which were updated to somewhat work with the current structure of directories and file names. * fix(EpsgReference): complete methods for expected operation (#702) * This is now similar to the deprecated utils.reference.epsgRef class, removing '_remove_pyc' and 'make' methods, adding 'to_dict', 'get' and '_write' methods, and updating others to work as expected. * Change t032_test.py to replace epsgRef with EpsgReference, and ensure that all methods are tested. * refactor(SfrFile): detect other column names, remove methods (#708) * Detect names for column 16 and beyond (checked against gwf2sfr7_NWT.f), which adds either 'gradient' or 'Qwt', 'delUzstor', sometimes 'gw_head'; note that this may affect users that used (e.g.) df.col16.values * Remove methods that are used once: get_skiprows_ncols and _set_names, as this logic is best handled in the class constructor * Add notes to docstring to indicate which columns have indexing starting at one or zero * Expand docstring for parameters, verbose and geometry are ignored * Flake8's F841 variable assigned but never used for 'per' and 'timestep' * Flake8's F402 import 'np' from line 1 shadowed by loop variable * Resolve sfroutputfile.py:170: RuntimeWarning: invalid value encountered in less: newper = df.segment.diff().values < 0 * Expand t009_test.py to check attributes: ncol, names and times * feat(nper/sim): allow stress periods beyond nper, and allow setting simulation name file options on init * feat(#694): When stress packages have data for periods beyond nper flopy now issues a warning message (flopy used to raise an exception). * feat(#704): Allow user to set simulation name file options while initializing a simulation. * fix(deepcopy): Rewrote package code to no longer use __getattribute__ which I believe was confusing deepcopy in python 3.5. * fix(line too long) * refactor(mfsfr2): format floats as '{:.8g}' with older NumPy versions (#710) * SFR2 files are written more similar between NumPy versions * Formatting float32 prior to NumPy 1.14.0 was inconsistent, so force 8 decimal digits of precision with older versions * Modern NumPy versions still use '{!s}' and should not see any difference * Use global 'default_float_format' for various 'float_format' arguments * Format integers as decimals '{:d}' instead of rounded floats '{:.0f}' * Simplify _fmt_string, which no longer adds a space at the end * Raise ValueError instead of bare Exception * fix(#707): Loading Optimized for MFLists in Special Cases (#711) * fix(#707): Special case optimized loading code for mflist data structure expanded to include more cases. Also optimized data verification code and added option to not verify data on load. * fix(formatting) * doc(pangeo): add support for pangeo to run example notebooks (#713) * doc(pangeo): update support for pangeo to run example notebooks (#714) * fix(irch): converted irch to be one based (#716) * fix(irch): subtract one from irch at load, add one to irch at write * added trap on t032 for CRS.getprj() returns None * fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 (#721) * Fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 * updates to shapefile exporting utilities: * Remove redundancy from write_grid_shapefile2 * enforce closed polygons in write_grid_shapefile2 * remove support for pyshp v.1.2.1 * remove unused write_grid_shapefile * renamed write_grid_shapefile2 as write_grid_shapefile * refactor(namefile): format values with str() and remove extra "; " (#722) * fix(mfsfr2.py): isfropt and icalc read/write logic (#723) * added unit tests covering all combinations of isfropt and icalc to t010_test.py * fix(mflist optimization): The mflist optimization code crashed when a line contained a word that only contained quote characters. Fix implemented to handle this case. (#724) * feat(vtk) updated vtk export capabilities in flopy. (#717) * updated vtk export capabilities in flopy. Added support for array 2d/3d export, package export, model export, heads, cell by cell file. * added examples/Notebooks/flopy3_vtk_export.ipynb * created vtk tests in autotest/t050_test.py * support for binary output * initial develop branch for release 3.3.0 * docs: fix typo and small mistakes (#729) * doc(mffhb): correct minor mistake in docstring (#726) * fix(binder): convert to mybinder.org (#731) * refactor(setup/ci): require and test Python 3.5, 3.6, 3.7 and 3.8 (#728) * docs: clarify statement and add whitespace (#735) * fix(flake8 code F632): use '==' instead of 'is' (#734) * With MfList, check 'len(recs) == 0' instead of 'recs is 0' * fix(mnw2): fix issues with files with empty lines (#736) Also contains fix for inconsistent `wellid` cases in dataset 2a and 4a * fix(mnw2): fix issues causing random failures on python 3.5 (#739) * fix(ModflowDis.sr): rotate model prior to calculating xll and yll from xul and yul. (#737) modflowpy#733 * mnw2 missing itmp when zero (#742) Resolves issue where mnw2 itmp list didn't include zeros for when a stress period had no discharge assigned. The "continue" advanced to next iteration, missing the line where zero would be added to the list. This was causing issues when writing the mnw2 file. * fix(model relative path): always register model prior to setting model relative path (#740) (#745) * fix(#740): Modified code to insure model gets registered before model relative path is set. * fix(#740) * CI(t007): patch for python 3.8 (#751) * Update flopy author list in software citation (#750) * refact(docstrings): refactored docstrings in mfsimulation (#752) * Update(plotting): update plotting examples and fixes for mf6 bugs (#755) * Update(modflowpy#741): Remove redundancy from plotting Notebooks * Removed flopy3_MapExample.ipynb, flopy3_PlotCrossSection_demo.ipynb, flopy3_PlotMapView_demo.ipynb, flopy3_mf6_BasicPlotting.ipynb, flopy3_mf6_plotting_freyberg.ipynb, flopy3_mf6_vertex_plotting.ipynb, flopy3_UnstructuredGridPlotting.ipynb * Added flopy3.3_PlotCrossSection.ipynb, flopy3.3_PlotMapView.ipynb * Fixed VertexGrid errors in PlotMapView and PlotCrossSection * Fix(moflowpy#753): mask no flow and dry cells in PlotUtilities._plot_array_helper for MODFLOW 6 output *update mfmodel.py hdry and hnoflo to default values * Cast integer arrays as floating point arrays in PlotUtilities._plot_array_helper * fix(mflist): fixed record shape in get_empty; test add_record (#758) * fix(boundnames): Fixed problem loading boundnames (#757) * fix(boundnames): Fixed problem where boundnames did not get loaded for simple fast loads. Added test to catch problems similar to this in the future. * fix(line length) * fix(mtssm): fix assumption that transient NSS data appears in first stress period (#756) * fix(upw): keyword for vertical K (#746) * fix(dfns): update MODFLOW 6 dfns for next flopy (3.3.0) and mf6 (6.1.0) releases (#759) * fix(dfns): update MODFLOW 6 dfns for next release * fix(dfns): update createpackages.py based on @spaulins-usgs suggestion * Address @spaulins-usgs mf6 release comments * refactor(release): update make-release script to generate author names (#760) * refactor(release): update make-release script to generate author names * refactor(release): clean-up make-release script and markdown * ci(exes): update executables version to 3.0 (#761) * ci(exes): update executables version to 3.0 * testing(t503): update mf6 version downloaded and tested * release: 3.3.0
2019-12-14 08:21:16 -08:00
We will be insisting on a minimal, complete, and verifiable example in order to save maintainers time and ultimately be able to fix more bugs. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
Unfortunately, we are not able to investigate / fix bugs without a minimal, complete, and verifiable example, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
You can file new issues by filling out our [new issue form](https://github.com/modflowpy/flopy/issues/new).
### <a name="submit-pr"></a> Submitting a Pull Request (PR)
Before you submit your Pull Request (PR) consider the following guidelines:
1. Search [GitHub](https://github.com/modflowpy/flopy/pulls) for an open or closed PR that relates to your submission. You don't want to duplicate effort.
1. Fork the modflowpy/flopy repo.
1. Make your changes in a new git branch:
```shell
git checkout -b my-fix-branch develop
```
1. Create your patch, **including appropriate test cases**.
1. Run the [black formatter](https://github.com/psf/black) on Flopy source files from the git repository root directory using:
```shell
black -l 79 ./flopy
```
Note: Pull Requests must pass black format checks run on the [GitHub actions](https://github.com/modflowpy/flopy/actions) (*linting*) before they will be accepted. The black formatter can be installed using [`pip`](https://pypi.org/project/black/) and [`conda`](https://anaconda.org/conda-forge/black).
1. Run the full FloPy test suite and ensure that all tests pass:
```shell
cd autotest
nosetests -v get_exes.py
nosetests -v
```
Note: the FloPy test suite requires the [nosetests](https://pypi.org/project/nose/) and [pymake](https://github.com/modflowpy/pymake) python packages. All the FloPy dependencies must also be installed for the tests to pass.
Release 3.3.0 (#762) * initial v3.2.13 release candidate * Fix(plotting): Bug fixes for issues #587 and #588 (#589) * Fix(plotting): Bug fixes for issues #587 and #588 * updates to PlotMapView.contour_array() and _VertexCrossSection.contour_array() to allow nan to be passed in the array * added test_tricountour_NaN() to t007_test.py * updates to PlotMapView.contour_array() and plot_array() to drop extra dimension from head array with using vertex model grid #588 * updates to UnstructuredPlotUtilities, added irregular_shape_patch() as patch for cross section drawing of vertex and unstructured modelgrids that include multiple geometries (found during fix #588) * update to geometry.transform() to set x and y dtypes to float (found during fix #588) * Added updated t007_test.py * Update test_tricontour_NaN() * Codacy updates for PR * Updated drop axis routine to squeeze axis 1 for vertex grids * suppressing error when proj4_str is None (#590) * suppressing error when proj4_str is None * fixed long line to molify Codacy * fix creep of btn obs loactions when reading and writing (#592) * Zero-based integers for select ModflowFlwob variables (#596) * docs(ModflowHob): Explicitly state that variables irefsp, layer, row, and column are zero-based integers. Minor formatting changes-->uniform capitalization and alignment with parallel variables in the ModflowFlwob docstring. * refactor(ModflowFlowb): Treat variables irefsp, layer, row, and column as zero-based integers to align behavior with ModflowHob. Updated write_file method and docstring accordingly. * refactor(codacy): Refactor docstrings to break up long lines. * refactor(t041_test): Update test041 to specify irefsp, layer, row, and column as zero-based indices. * fix(mfuzf): enforce boolean values for several uzf option arguments (#597) * feat(export_contourf): export filled contours to shapefile (#599) * Required changes to flopy.utils.geometry so that the Polygon.pyshp_prts handled holes correctly for multiple shapefile versions * codacy fixes * Fix(mbase.py): laytyp property method call to "UPW" package. (#601) * Add load function to ModflowFlwob (#598) * feat(ModflowFlwob): Add various flow-obs types to model.mfnam_packages dictionary. * feat(ModflowFlwob): Add method to load package from file. * feat(ModflowFlwob): Use supplied unit number when loading package to avoid unit collisions. * feat(ModflowFlwob): Add additional width and precision for toffset to avoid string-conversions that result in numbers greater than total simulation time. * feat(ModflowFlwob): Account for case where nqclfb is negative. * feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile. * feat(ModflowFlwob): Add new autotest to check loading functionality. * revert: "feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile." This reverts commit 6f520064a5e7dc856b177cd567668f712866117e. * feat(ModflowFlwob): Add 1 to zero-based "irefsp" when writing file. * feat(ModflowFlwob): Try to make Codacy happy. * feat(ModflowFlwob): Add "ftype" attribute and retrieval method. * feat(ModflowFlwob): Use ext_unit_dict to get proper flowtype and ftype from filename. * feat(ModflowFlwob): Remove unused variable and extra whitespace. * feat(ModflowFlwob): Catch dict items explicitly even if they are unused. * Revert "feat(ModflowFlwob): Try to make Codacy happy." This reverts commit eca305ab. * fix(mtuzt): iuzbnd improperly generated (#605) Instantiation of UZT class was generating IUZBND as a 3D array, should be 2D * Update version_changes.md * fix(mfsfr2.py): substituted graph for all_segments to improve performance (#602) (#604) * test(t064_test_performance.py): to prevent regressions in flopy.modflow performance * Fix(contour_array_cvfd): fix for masked value crash issue using tricontour with matplotlib 3.1.1 (#613) * fix(util_list.py): get_dataframe() iterating thru nper instead of data.keys(); fails for pers where itmp < 0 (#612) * fix(mtuzf1): a user comment on same line as nuzgag not processed correctly (#609) * fix(modflowpy#615): plotutil masked_values hnoflo, hdry fix (#618) * refactor(namfile): whitespace in NAM file and MFList output files (#622) * fix(memory): "Cannot allocate memory" error for Python 2.7 on non-Windows (#623) * fix(autotest): move some output files to their own folder * fix(run_model): improve normal_msg and fix Python 2.7 memory issue * fix(reference): resolve UnboundLocalError with crs property (#608) * fix(reference): fix UnboundLocalError error, deprecate crs class * fix(shapefile_utils.CRS): fix typo and UnboundLocalError error * fix(mf6): Fixes for #603, #606, #614, and #616 (#620) * fix(ja array): CellID now increments and decrements correctly. * feat(jagged arrays): format disu arrays (ja, cl12) as jagged arrays in output files * fix(disu arrays): Added more testing for disu arrays * Fix(flopy write): Copy external files before writing out package files. Package file writing can require access to external files. * fix(np types): Changed code from using np.int to explicitly defining integer type np.int32. * fix(#616): Shapefile export code fix * fix(#614): Wel package added to multi-package list. Fix to always get multiple packages when searching by package type. * fix(different int types): Different systems appear to use different types of ints. Int type check changed to be more generic. * refact(CR/LF): Removed CR line endings * fix(export_contourf): tidy local variable overuse for Python 2.7 (#625) * fix(MFList): older numpy needs file in binary mode for writetxt (#626) * feat(intersect): add grid intersection functionality (#610) * add gridintersect to flopy utils * add gridintersect tests * make codacy happy * attempt 2 making codacy happy * add keepzerolengths option to strtree method * add gridintersection demo notebook * update travis to install shapely minor edit in gridintersect * fix py27 error * make codacy happy again * last codacy fix * fix(travis 2.7): Travis memory errors (#627) * fix(travis 2.7): Memory is not getting released from the plotting tests when run on python 2.7. Two of the more memory intensive plotting tests have been disabled as a work around for the out of memory errors intermittently appearing on Travis. Unsuccessfully tried to get the memory released by calling matplotlib's plt.close('all') and then gc.collect() at the end of each plotting test. Since support for python 2.7 is going to be discontinued soon, it may be sufficient just to use this work around. * feat(mf6 rename all packages method + copy support (#591)) * feat(deepcopy support): Flopy for MF6 MFSimulation object can now be copied with deepcopy. * feat(rename all packages): rename_all_packages method added to the mf6 model and simulation classes to allow the user to rename all of the packages at once. * refact(dfn sync): sync dfn with MODFLOW6 repository * Fix(unstructured grid capabilities): fix array masking for CVFD grids and allow ncpl to be specified as a list (#631) * Fix(UnstructuredGrid): fix for ncpl provided as a list or numpy array * Fix(plot_array): fix for CVFD masked_values when plotting arrays * feat(sub): Add IDBIT option to SUB for MODFLOW-2005 option (#632) * feat(mflistreader): read WEL Reductions from List File (#630) * Read WEL Reductions from List File Adds a method to the ListBudget class to read in data from the list file on automatic reductions to WEL extractions. This method supports both NWT and USG list files. Adds auto tests for both success and failure. I couldn't find any included data sets with reductions written to the LST, so I updated a USG data set to allow for the auto test. * Removed Trailing Whitespace Removed trailing whitespace id'd by codacy. * Updated to work with python 2.7 Updated code to run with python 2.7. Used autopep8 to formalize some formatting. * Feat(rasters.py): Add raster intersection and resampling features to flopy.utils (#634) * Feat(rasters.py): Added raster intersection capability and an example notebook (Notebooks/flopy3_raster_intersection.ipynb) * Update requirements for travis to include SciPy for raster unit tests * Removed Scipy from python27 requirements * Update flopy3_raster_intersection.ipynb for running on travis * Update flopy3_raster_intersection.ipynb for travis * revert flopy3_lake_example.ipynb * update(rasters.py): codacy updates * update(rasters.py): codacy fixes * update(rasters.py): _point_in_polygon changed to static method * fix(evt): etvr not evtr in evt package (#635) * fix(sfr): remove sensitivity to SFR reach_data (ds2) rec array order. (#637) * making sfr reachdata (ds2) write insensitive to data field order currently uses dtype.descr which can fail is struct array fields change order. * happend upon etvr not evtr in evt package * Adding test that exposes issue with passing disordered reach_data arrays * tidy-up * fix(mfmnw2): bug fix for writing multiple stress periods * feat(GridIntersect): import GridIntersect from __init__ (#640) * fix(gridintersect): removed matplotlib dependency (#643) A recent PR added an import of gridintersect when flopy is imported. This broke some things on the MODFLOW 6 development side and inadvertently required matplotlib, even if no plotting is needed. * fix(mflistfile): parse immobile components from mt3d listfile (#644) * happened upon etvr not evtr in evt package * supporting mtlist parsing with immobile domain * test for immobile catch * clean up test list file * fix(gridgen): changed sr usage to modelgrid Also fixed the description of rotation in the dis docstrings. rotation is being read as a counter-clockwise angle; this may actually be different from how it was defined prior to the new modelgrid approach that is implemented now. * updated notebook * fix comment line length * refactor(vdf): shut off density limiters as default (#646) Default densemin and densemax set to zero, which means they are not active. * docs(dfn): update some MODFLOW 6 variable descriptions (#648) * fix(mtbtn): options from load method ignored (#649) * Pass options from load method to class constructor * Correct case for "ALTWTSORB" case * Show verbose message for optional keywords * Add a unit tests to check options * fix(notebooks): add missing figure (#650) Addresses https://github.com/modflowpy/flopy/pull/278#issuecomment-532813144 * fix(CellBudgetFil): get_ts() wasnt setting totim in the result container if a model instance is avail (#652) * added grid interect to util init * fix(binaryfile): CellBudgetFile.get_ts() wasnt setting times correctly if no times were passed but model instance is available * Update(export): Updated the export method to accept modelgrid in **kwargs (#651) * Update(export()): Updated the export method to accept a user supplied modelgrid in **kwargs * added masked_vals **kwarg to output_helper() for netcdf exporting * fix(tutorial2): zorder keyword in clabel no longer supported (#654) close #653 * Fix(mfuzf1): fix read and write dataset 4b when specifysurfk option is present (#658) * fix(mflak): allow mflak class to use -1 as a flag for using previous transient lake stresses (inflow/outflow) (#655) * Fix(mfmnw2): Fix a bug that causes mnw2 file writing to crash when when there multiple stress periods * Fix mfmnw2 file * fix(mflak): allow lak class to use -1 for previous transient lake stress * fix(SpatialReference): fix coordinate information being passed to SpatialReference (#661) * feat(PlotCrossSection): add geographic_coords flag to PlotCrossSection (#664) * Feat(PlotCrossSection): Added option to plot xc in geographic_coordinates * removed unused attribute self.offset from _StructuredCrossSection * removed unused code, and codacy fix. * Fix typo in flopy3_PlotCrossSection_demo.ipynb example * Add feature to allow 'with' context statement to read Head/CellBudget files (#669) * fix(mfsfr2): correct variable name typo in docstring * feat(binaryfile): add 'with' context management support * Allow Head/CellBudgetFile to be opened/closed in a 'with' statement * Raise TypeError if CellBudgetFile.get_data() is called without arguments * Document and test idx as either an int or list of integers * Close a few file handles in the test suite * refactor(modelgrid): model grid caching change (#667) * fix(#659): Model grid caching changed to cache existing grid unless the grid is incomplete or user explicitly requests a new grid. * feat(update model grid): Added section explaining how to get and update a model grid. * fix(ModflowUzf1): load datasets if NUZF1..4 >= 0 (#668) * fix(Python 2): use a few aliases for exceptions (#672) * FileNotFoundError = IOError * ModuleNotFoundError = ImportError * refactor(load methods): avoid ResourceWarning with unclosed files (#673) * Nam load function already opens each file, so pass the filehandle rather than the filename to each load operation * For each load method, only close the file if it was opened by the method * refactor(travis): use script files rather than awkward YAML file (#676) * Replace TVER with RUN_TYPE with either "test" or "misc" * Remove Python 3.7-dev and leave commented-out 3.8-dev, when ready * Move/refactor version showing to before_script hook * Move pylint to script section, with pylint-exit to handle exit code * PATH already has $HOME/.local/bin but it needs it to be created * feature(ci): check Python code with flake8 (#677) * fix(gridgen): fixed writing of mf6 disu package (#680) * Added tests for the to_disu6() and to_disv6() Gridgen methods * Closes #678 * fix(ModflowSfr2.load): don't try to read datasets 6b,c in cases where they're missing (#671) (#679) * Resolve bugs related to F821 undefined name 'name' (#686) * fix(Mt3dPhc): missing filenames parameter; add basic test * fix(backup_existing_dfns): fix variable name * fix(mfstr): fix variable name and missing import * fix(t022_test): catch ImportError and adjust expected data * fix(mfde4): fixed-width load did not work * fix(mflistfile): resolve undefined name 'e' * fix(mfsms): load options * fix(flake8 code F811): redefinition of unused 'name' (#688) * t007_test.py: rename the (newer) second 'test_export_array' with '2' ** Note test_export_array fails, and a fix is required (later) * t031_test.py: ra_slice is imported from flopy.utils.recarray_utils * pest/__init__.py: duplicate import of Util3dTpl * various tests: import pymake once, handle condition in code * Fix(#675): hfb load parameters when Factor is excluded (#685) * fix(mfhob.py): read data set 4 when user provides it on multiple lines * Fix(modflowpy#675): hfb package load parameters when Factor not supplied * fix(modflowpy#675): add optional flag to OptionBlock context tree for optional nested arguments * update(autotest): added tests for modflowpy#675 * Updates for codacy * feat: support for copy.copy() and copy.deepcopy() with python 3.5+ (#689) * fix(ulstrd): lists for wel, drn, ghb, etc. not always loaded correctly (#690) This fixes several problems related to loading of mf2005 packages that have lists of information, typically layer, row, column, ... * flopy will now read packages that have lists specified with EXTERNAL * flopy will now read packages that have lists that use the SFAC keyword * flopy now has a general list reader flopy.utils.flopy_io.ulstrd patterned after the MODFLOW ULSTRD subroutine * flopy will now use this ulstrd reader to read lists defined with parameters * With the m.write_input(), binary external files always had REPLACE tacked onto the end. This was corrected so that REPLACE is only added when output is set to True. * added t067_test_ulstrd to test reading of open/close, external, and binary lists with sfac * Closes #683 * tests(t004): fix small issue that only occurs on Windows (#695) t004 fails on Windows in comparing a data frame to a numpy array. The i, j, k columns from the data frame were upgraded to long ints. Apparently the default int on Windows is different from the default on mac/linux, so test failures don't show up there. Also stop versioning several shapefiles that are recreated with every test run. * refactor(gridintersect): wrap shapely imports in try/except (#698) * refactor(gridintersect): wrap shapely imports in try/except This should allow flopy to be loaded even if shapely isn't installed. Closes #697 * refactor(dis): removed dis.read_from_cnf() method. (#699) * It's not used. It's broken. And it's not tested. * Closes #687 * feat(#693) and fix(#691) (#696) * feat(#693): support for load_only option in modflow 6 fix(#691): forgive flag now defaults to false when loading models. bugs in t028_test and t012_test fixed * fix(code style fixes): code clean up * fix(load_only): Added support for package names in load_only lists and cleaned up documentation * fix(flake8 code W605): invalid escape sequence '\s' (or similar) (#700) Some of these fixes were to paths to directories in docstring examples, which were updated to somewhat work with the current structure of directories and file names. * fix(EpsgReference): complete methods for expected operation (#702) * This is now similar to the deprecated utils.reference.epsgRef class, removing '_remove_pyc' and 'make' methods, adding 'to_dict', 'get' and '_write' methods, and updating others to work as expected. * Change t032_test.py to replace epsgRef with EpsgReference, and ensure that all methods are tested. * refactor(SfrFile): detect other column names, remove methods (#708) * Detect names for column 16 and beyond (checked against gwf2sfr7_NWT.f), which adds either 'gradient' or 'Qwt', 'delUzstor', sometimes 'gw_head'; note that this may affect users that used (e.g.) df.col16.values * Remove methods that are used once: get_skiprows_ncols and _set_names, as this logic is best handled in the class constructor * Add notes to docstring to indicate which columns have indexing starting at one or zero * Expand docstring for parameters, verbose and geometry are ignored * Flake8's F841 variable assigned but never used for 'per' and 'timestep' * Flake8's F402 import 'np' from line 1 shadowed by loop variable * Resolve sfroutputfile.py:170: RuntimeWarning: invalid value encountered in less: newper = df.segment.diff().values < 0 * Expand t009_test.py to check attributes: ncol, names and times * feat(nper/sim): allow stress periods beyond nper, and allow setting simulation name file options on init * feat(#694): When stress packages have data for periods beyond nper flopy now issues a warning message (flopy used to raise an exception). * feat(#704): Allow user to set simulation name file options while initializing a simulation. * fix(deepcopy): Rewrote package code to no longer use __getattribute__ which I believe was confusing deepcopy in python 3.5. * fix(line too long) * refactor(mfsfr2): format floats as '{:.8g}' with older NumPy versions (#710) * SFR2 files are written more similar between NumPy versions * Formatting float32 prior to NumPy 1.14.0 was inconsistent, so force 8 decimal digits of precision with older versions * Modern NumPy versions still use '{!s}' and should not see any difference * Use global 'default_float_format' for various 'float_format' arguments * Format integers as decimals '{:d}' instead of rounded floats '{:.0f}' * Simplify _fmt_string, which no longer adds a space at the end * Raise ValueError instead of bare Exception * fix(#707): Loading Optimized for MFLists in Special Cases (#711) * fix(#707): Special case optimized loading code for mflist data structure expanded to include more cases. Also optimized data verification code and added option to not verify data on load. * fix(formatting) * doc(pangeo): add support for pangeo to run example notebooks (#713) * doc(pangeo): update support for pangeo to run example notebooks (#714) * fix(irch): converted irch to be one based (#716) * fix(irch): subtract one from irch at load, add one to irch at write * added trap on t032 for CRS.getprj() returns None * fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 (#721) * Fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 * updates to shapefile exporting utilities: * Remove redundancy from write_grid_shapefile2 * enforce closed polygons in write_grid_shapefile2 * remove support for pyshp v.1.2.1 * remove unused write_grid_shapefile * renamed write_grid_shapefile2 as write_grid_shapefile * refactor(namefile): format values with str() and remove extra "; " (#722) * fix(mfsfr2.py): isfropt and icalc read/write logic (#723) * added unit tests covering all combinations of isfropt and icalc to t010_test.py * fix(mflist optimization): The mflist optimization code crashed when a line contained a word that only contained quote characters. Fix implemented to handle this case. (#724) * feat(vtk) updated vtk export capabilities in flopy. (#717) * updated vtk export capabilities in flopy. Added support for array 2d/3d export, package export, model export, heads, cell by cell file. * added examples/Notebooks/flopy3_vtk_export.ipynb * created vtk tests in autotest/t050_test.py * support for binary output * initial develop branch for release 3.3.0 * docs: fix typo and small mistakes (#729) * doc(mffhb): correct minor mistake in docstring (#726) * fix(binder): convert to mybinder.org (#731) * refactor(setup/ci): require and test Python 3.5, 3.6, 3.7 and 3.8 (#728) * docs: clarify statement and add whitespace (#735) * fix(flake8 code F632): use '==' instead of 'is' (#734) * With MfList, check 'len(recs) == 0' instead of 'recs is 0' * fix(mnw2): fix issues with files with empty lines (#736) Also contains fix for inconsistent `wellid` cases in dataset 2a and 4a * fix(mnw2): fix issues causing random failures on python 3.5 (#739) * fix(ModflowDis.sr): rotate model prior to calculating xll and yll from xul and yul. (#737) modflowpy#733 * mnw2 missing itmp when zero (#742) Resolves issue where mnw2 itmp list didn't include zeros for when a stress period had no discharge assigned. The "continue" advanced to next iteration, missing the line where zero would be added to the list. This was causing issues when writing the mnw2 file. * fix(model relative path): always register model prior to setting model relative path (#740) (#745) * fix(#740): Modified code to insure model gets registered before model relative path is set. * fix(#740) * CI(t007): patch for python 3.8 (#751) * Update flopy author list in software citation (#750) * refact(docstrings): refactored docstrings in mfsimulation (#752) * Update(plotting): update plotting examples and fixes for mf6 bugs (#755) * Update(modflowpy#741): Remove redundancy from plotting Notebooks * Removed flopy3_MapExample.ipynb, flopy3_PlotCrossSection_demo.ipynb, flopy3_PlotMapView_demo.ipynb, flopy3_mf6_BasicPlotting.ipynb, flopy3_mf6_plotting_freyberg.ipynb, flopy3_mf6_vertex_plotting.ipynb, flopy3_UnstructuredGridPlotting.ipynb * Added flopy3.3_PlotCrossSection.ipynb, flopy3.3_PlotMapView.ipynb * Fixed VertexGrid errors in PlotMapView and PlotCrossSection * Fix(moflowpy#753): mask no flow and dry cells in PlotUtilities._plot_array_helper for MODFLOW 6 output *update mfmodel.py hdry and hnoflo to default values * Cast integer arrays as floating point arrays in PlotUtilities._plot_array_helper * fix(mflist): fixed record shape in get_empty; test add_record (#758) * fix(boundnames): Fixed problem loading boundnames (#757) * fix(boundnames): Fixed problem where boundnames did not get loaded for simple fast loads. Added test to catch problems similar to this in the future. * fix(line length) * fix(mtssm): fix assumption that transient NSS data appears in first stress period (#756) * fix(upw): keyword for vertical K (#746) * fix(dfns): update MODFLOW 6 dfns for next flopy (3.3.0) and mf6 (6.1.0) releases (#759) * fix(dfns): update MODFLOW 6 dfns for next release * fix(dfns): update createpackages.py based on @spaulins-usgs suggestion * Address @spaulins-usgs mf6 release comments * refactor(release): update make-release script to generate author names (#760) * refactor(release): update make-release script to generate author names * refactor(release): clean-up make-release script and markdown * ci(exes): update executables version to 3.0 (#761) * ci(exes): update executables version to 3.0 * testing(t503): update mf6 version downloaded and tested * release: 3.3.0
2019-12-14 08:21:16 -08:00
1. Commit your changes using a descriptive commit message that follows our
[commit message conventions](#commit). Adherence to these conventions
is necessary because release notes are automatically generated from these messages.
```shell
git commit -a
```
Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
1. Push your branch to GitHub:
```shell
git push origin my-fix-branch
```
1. In GitHub, send a pull request to `flopy:develop`.
* If we suggest changes then:
* Make the required updates.
* Re-run the FloPy test suites, in the autotest directory, to ensure tests are still passing.
* Rebase your branch and force push to your GitHub repository (this will update your Pull Request):
```shell
git rebase develop -i
git push -f
```
That's it! Thank you for your contribution!
#### After your pull request is merged
After your pull request is merged, you can safely delete your branch and pull the changes
from the main (upstream) repository:
* Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
```shell
git push origin --delete my-fix-branch
```
* Check out the develop branch:
```shell
git checkout develop -f
```
* Delete the local branch:
```shell
git branch -D my-fix-branch
```
* Update your develop with the latest upstream version:
```shell
git pull --ff upstream develop
```
## <a name="rules"></a> Coding Rules
To ensure consistency throughout the source code, keep these rules in mind as you are working:
* All features or bug fixes **must be tested** by one or more specs (unit-tests and/or integration/regression tests).
## <a name="commit"></a> Commit Message Guidelines
We have very precise rules over how our git commit messages can be formatted. This leads to **more
readable messages** that are easy to follow when looking through the **project history**. But also,
we use the git commit messages to **generate the FloPy change log**.
### Commit Message Format
Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
format that includes a **type**, a **scope** and a **subject**:
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
The **header** is mandatory and the **scope** of the header is optional.
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
to read on GitHub as well as in various git tools.
The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-using-keywords/) if any.
Samples: (even more [samples](https://github.com/modflowpy/flopy/commits/develop))
```
docs(changelog): update changelog to beta.5
```
```
fix(release): need to depend alslkj askjalj lhjfjepo kjpodep
The version in our lakjoifejw jiej kdjijeqw kjdwjopj lkl kopfcqiw cakd kjkfje mmsm.
```
### Revert
If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
### Type
Must be one of the following:
* **ci**: Changes to our CI configuration files and scripts (example scopes: Travis)
* **docs**: Documentation only changes
* **feat**: A new feature
* **fix**: A bug fix
* **perf**: A code change that improves performance
* **refactor**: A code change that neither fixes a bug nor adds a feature
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
* **test**: Adding missing tests or correcting existing tests
### Scope
The scope should be the name of the FloPy module/class affected (as perceived by the person reading the changelog generated from commit messages.
There are currently a few exceptions to the "use module/class name" rule:
Release 3.3.0 (#762) * initial v3.2.13 release candidate * Fix(plotting): Bug fixes for issues #587 and #588 (#589) * Fix(plotting): Bug fixes for issues #587 and #588 * updates to PlotMapView.contour_array() and _VertexCrossSection.contour_array() to allow nan to be passed in the array * added test_tricountour_NaN() to t007_test.py * updates to PlotMapView.contour_array() and plot_array() to drop extra dimension from head array with using vertex model grid #588 * updates to UnstructuredPlotUtilities, added irregular_shape_patch() as patch for cross section drawing of vertex and unstructured modelgrids that include multiple geometries (found during fix #588) * update to geometry.transform() to set x and y dtypes to float (found during fix #588) * Added updated t007_test.py * Update test_tricontour_NaN() * Codacy updates for PR * Updated drop axis routine to squeeze axis 1 for vertex grids * suppressing error when proj4_str is None (#590) * suppressing error when proj4_str is None * fixed long line to molify Codacy * fix creep of btn obs loactions when reading and writing (#592) * Zero-based integers for select ModflowFlwob variables (#596) * docs(ModflowHob): Explicitly state that variables irefsp, layer, row, and column are zero-based integers. Minor formatting changes-->uniform capitalization and alignment with parallel variables in the ModflowFlwob docstring. * refactor(ModflowFlowb): Treat variables irefsp, layer, row, and column as zero-based integers to align behavior with ModflowHob. Updated write_file method and docstring accordingly. * refactor(codacy): Refactor docstrings to break up long lines. * refactor(t041_test): Update test041 to specify irefsp, layer, row, and column as zero-based indices. * fix(mfuzf): enforce boolean values for several uzf option arguments (#597) * feat(export_contourf): export filled contours to shapefile (#599) * Required changes to flopy.utils.geometry so that the Polygon.pyshp_prts handled holes correctly for multiple shapefile versions * codacy fixes * Fix(mbase.py): laytyp property method call to "UPW" package. (#601) * Add load function to ModflowFlwob (#598) * feat(ModflowFlwob): Add various flow-obs types to model.mfnam_packages dictionary. * feat(ModflowFlwob): Add method to load package from file. * feat(ModflowFlwob): Use supplied unit number when loading package to avoid unit collisions. * feat(ModflowFlwob): Add additional width and precision for toffset to avoid string-conversions that result in numbers greater than total simulation time. * feat(ModflowFlwob): Account for case where nqclfb is negative. * feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile. * feat(ModflowFlwob): Add new autotest to check loading functionality. * revert: "feat(ModflowFlwob): Append filename using relative path with respect to the model working directory to ensure the correct filename is written to the namefile." This reverts commit 6f520064a5e7dc856b177cd567668f712866117e. * feat(ModflowFlwob): Add 1 to zero-based "irefsp" when writing file. * feat(ModflowFlwob): Try to make Codacy happy. * feat(ModflowFlwob): Add "ftype" attribute and retrieval method. * feat(ModflowFlwob): Use ext_unit_dict to get proper flowtype and ftype from filename. * feat(ModflowFlwob): Remove unused variable and extra whitespace. * feat(ModflowFlwob): Catch dict items explicitly even if they are unused. * Revert "feat(ModflowFlwob): Try to make Codacy happy." This reverts commit eca305ab. * fix(mtuzt): iuzbnd improperly generated (#605) Instantiation of UZT class was generating IUZBND as a 3D array, should be 2D * Update version_changes.md * fix(mfsfr2.py): substituted graph for all_segments to improve performance (#602) (#604) * test(t064_test_performance.py): to prevent regressions in flopy.modflow performance * Fix(contour_array_cvfd): fix for masked value crash issue using tricontour with matplotlib 3.1.1 (#613) * fix(util_list.py): get_dataframe() iterating thru nper instead of data.keys(); fails for pers where itmp < 0 (#612) * fix(mtuzf1): a user comment on same line as nuzgag not processed correctly (#609) * fix(modflowpy#615): plotutil masked_values hnoflo, hdry fix (#618) * refactor(namfile): whitespace in NAM file and MFList output files (#622) * fix(memory): "Cannot allocate memory" error for Python 2.7 on non-Windows (#623) * fix(autotest): move some output files to their own folder * fix(run_model): improve normal_msg and fix Python 2.7 memory issue * fix(reference): resolve UnboundLocalError with crs property (#608) * fix(reference): fix UnboundLocalError error, deprecate crs class * fix(shapefile_utils.CRS): fix typo and UnboundLocalError error * fix(mf6): Fixes for #603, #606, #614, and #616 (#620) * fix(ja array): CellID now increments and decrements correctly. * feat(jagged arrays): format disu arrays (ja, cl12) as jagged arrays in output files * fix(disu arrays): Added more testing for disu arrays * Fix(flopy write): Copy external files before writing out package files. Package file writing can require access to external files. * fix(np types): Changed code from using np.int to explicitly defining integer type np.int32. * fix(#616): Shapefile export code fix * fix(#614): Wel package added to multi-package list. Fix to always get multiple packages when searching by package type. * fix(different int types): Different systems appear to use different types of ints. Int type check changed to be more generic. * refact(CR/LF): Removed CR line endings * fix(export_contourf): tidy local variable overuse for Python 2.7 (#625) * fix(MFList): older numpy needs file in binary mode for writetxt (#626) * feat(intersect): add grid intersection functionality (#610) * add gridintersect to flopy utils * add gridintersect tests * make codacy happy * attempt 2 making codacy happy * add keepzerolengths option to strtree method * add gridintersection demo notebook * update travis to install shapely minor edit in gridintersect * fix py27 error * make codacy happy again * last codacy fix * fix(travis 2.7): Travis memory errors (#627) * fix(travis 2.7): Memory is not getting released from the plotting tests when run on python 2.7. Two of the more memory intensive plotting tests have been disabled as a work around for the out of memory errors intermittently appearing on Travis. Unsuccessfully tried to get the memory released by calling matplotlib's plt.close('all') and then gc.collect() at the end of each plotting test. Since support for python 2.7 is going to be discontinued soon, it may be sufficient just to use this work around. * feat(mf6 rename all packages method + copy support (#591)) * feat(deepcopy support): Flopy for MF6 MFSimulation object can now be copied with deepcopy. * feat(rename all packages): rename_all_packages method added to the mf6 model and simulation classes to allow the user to rename all of the packages at once. * refact(dfn sync): sync dfn with MODFLOW6 repository * Fix(unstructured grid capabilities): fix array masking for CVFD grids and allow ncpl to be specified as a list (#631) * Fix(UnstructuredGrid): fix for ncpl provided as a list or numpy array * Fix(plot_array): fix for CVFD masked_values when plotting arrays * feat(sub): Add IDBIT option to SUB for MODFLOW-2005 option (#632) * feat(mflistreader): read WEL Reductions from List File (#630) * Read WEL Reductions from List File Adds a method to the ListBudget class to read in data from the list file on automatic reductions to WEL extractions. This method supports both NWT and USG list files. Adds auto tests for both success and failure. I couldn't find any included data sets with reductions written to the LST, so I updated a USG data set to allow for the auto test. * Removed Trailing Whitespace Removed trailing whitespace id'd by codacy. * Updated to work with python 2.7 Updated code to run with python 2.7. Used autopep8 to formalize some formatting. * Feat(rasters.py): Add raster intersection and resampling features to flopy.utils (#634) * Feat(rasters.py): Added raster intersection capability and an example notebook (Notebooks/flopy3_raster_intersection.ipynb) * Update requirements for travis to include SciPy for raster unit tests * Removed Scipy from python27 requirements * Update flopy3_raster_intersection.ipynb for running on travis * Update flopy3_raster_intersection.ipynb for travis * revert flopy3_lake_example.ipynb * update(rasters.py): codacy updates * update(rasters.py): codacy fixes * update(rasters.py): _point_in_polygon changed to static method * fix(evt): etvr not evtr in evt package (#635) * fix(sfr): remove sensitivity to SFR reach_data (ds2) rec array order. (#637) * making sfr reachdata (ds2) write insensitive to data field order currently uses dtype.descr which can fail is struct array fields change order. * happend upon etvr not evtr in evt package * Adding test that exposes issue with passing disordered reach_data arrays * tidy-up * fix(mfmnw2): bug fix for writing multiple stress periods * feat(GridIntersect): import GridIntersect from __init__ (#640) * fix(gridintersect): removed matplotlib dependency (#643) A recent PR added an import of gridintersect when flopy is imported. This broke some things on the MODFLOW 6 development side and inadvertently required matplotlib, even if no plotting is needed. * fix(mflistfile): parse immobile components from mt3d listfile (#644) * happened upon etvr not evtr in evt package * supporting mtlist parsing with immobile domain * test for immobile catch * clean up test list file * fix(gridgen): changed sr usage to modelgrid Also fixed the description of rotation in the dis docstrings. rotation is being read as a counter-clockwise angle; this may actually be different from how it was defined prior to the new modelgrid approach that is implemented now. * updated notebook * fix comment line length * refactor(vdf): shut off density limiters as default (#646) Default densemin and densemax set to zero, which means they are not active. * docs(dfn): update some MODFLOW 6 variable descriptions (#648) * fix(mtbtn): options from load method ignored (#649) * Pass options from load method to class constructor * Correct case for "ALTWTSORB" case * Show verbose message for optional keywords * Add a unit tests to check options * fix(notebooks): add missing figure (#650) Addresses https://github.com/modflowpy/flopy/pull/278#issuecomment-532813144 * fix(CellBudgetFil): get_ts() wasnt setting totim in the result container if a model instance is avail (#652) * added grid interect to util init * fix(binaryfile): CellBudgetFile.get_ts() wasnt setting times correctly if no times were passed but model instance is available * Update(export): Updated the export method to accept modelgrid in **kwargs (#651) * Update(export()): Updated the export method to accept a user supplied modelgrid in **kwargs * added masked_vals **kwarg to output_helper() for netcdf exporting * fix(tutorial2): zorder keyword in clabel no longer supported (#654) close #653 * Fix(mfuzf1): fix read and write dataset 4b when specifysurfk option is present (#658) * fix(mflak): allow mflak class to use -1 as a flag for using previous transient lake stresses (inflow/outflow) (#655) * Fix(mfmnw2): Fix a bug that causes mnw2 file writing to crash when when there multiple stress periods * Fix mfmnw2 file * fix(mflak): allow lak class to use -1 for previous transient lake stress * fix(SpatialReference): fix coordinate information being passed to SpatialReference (#661) * feat(PlotCrossSection): add geographic_coords flag to PlotCrossSection (#664) * Feat(PlotCrossSection): Added option to plot xc in geographic_coordinates * removed unused attribute self.offset from _StructuredCrossSection * removed unused code, and codacy fix. * Fix typo in flopy3_PlotCrossSection_demo.ipynb example * Add feature to allow 'with' context statement to read Head/CellBudget files (#669) * fix(mfsfr2): correct variable name typo in docstring * feat(binaryfile): add 'with' context management support * Allow Head/CellBudgetFile to be opened/closed in a 'with' statement * Raise TypeError if CellBudgetFile.get_data() is called without arguments * Document and test idx as either an int or list of integers * Close a few file handles in the test suite * refactor(modelgrid): model grid caching change (#667) * fix(#659): Model grid caching changed to cache existing grid unless the grid is incomplete or user explicitly requests a new grid. * feat(update model grid): Added section explaining how to get and update a model grid. * fix(ModflowUzf1): load datasets if NUZF1..4 >= 0 (#668) * fix(Python 2): use a few aliases for exceptions (#672) * FileNotFoundError = IOError * ModuleNotFoundError = ImportError * refactor(load methods): avoid ResourceWarning with unclosed files (#673) * Nam load function already opens each file, so pass the filehandle rather than the filename to each load operation * For each load method, only close the file if it was opened by the method * refactor(travis): use script files rather than awkward YAML file (#676) * Replace TVER with RUN_TYPE with either "test" or "misc" * Remove Python 3.7-dev and leave commented-out 3.8-dev, when ready * Move/refactor version showing to before_script hook * Move pylint to script section, with pylint-exit to handle exit code * PATH already has $HOME/.local/bin but it needs it to be created * feature(ci): check Python code with flake8 (#677) * fix(gridgen): fixed writing of mf6 disu package (#680) * Added tests for the to_disu6() and to_disv6() Gridgen methods * Closes #678 * fix(ModflowSfr2.load): don't try to read datasets 6b,c in cases where they're missing (#671) (#679) * Resolve bugs related to F821 undefined name 'name' (#686) * fix(Mt3dPhc): missing filenames parameter; add basic test * fix(backup_existing_dfns): fix variable name * fix(mfstr): fix variable name and missing import * fix(t022_test): catch ImportError and adjust expected data * fix(mfde4): fixed-width load did not work * fix(mflistfile): resolve undefined name 'e' * fix(mfsms): load options * fix(flake8 code F811): redefinition of unused 'name' (#688) * t007_test.py: rename the (newer) second 'test_export_array' with '2' ** Note test_export_array fails, and a fix is required (later) * t031_test.py: ra_slice is imported from flopy.utils.recarray_utils * pest/__init__.py: duplicate import of Util3dTpl * various tests: import pymake once, handle condition in code * Fix(#675): hfb load parameters when Factor is excluded (#685) * fix(mfhob.py): read data set 4 when user provides it on multiple lines * Fix(modflowpy#675): hfb package load parameters when Factor not supplied * fix(modflowpy#675): add optional flag to OptionBlock context tree for optional nested arguments * update(autotest): added tests for modflowpy#675 * Updates for codacy * feat: support for copy.copy() and copy.deepcopy() with python 3.5+ (#689) * fix(ulstrd): lists for wel, drn, ghb, etc. not always loaded correctly (#690) This fixes several problems related to loading of mf2005 packages that have lists of information, typically layer, row, column, ... * flopy will now read packages that have lists specified with EXTERNAL * flopy will now read packages that have lists that use the SFAC keyword * flopy now has a general list reader flopy.utils.flopy_io.ulstrd patterned after the MODFLOW ULSTRD subroutine * flopy will now use this ulstrd reader to read lists defined with parameters * With the m.write_input(), binary external files always had REPLACE tacked onto the end. This was corrected so that REPLACE is only added when output is set to True. * added t067_test_ulstrd to test reading of open/close, external, and binary lists with sfac * Closes #683 * tests(t004): fix small issue that only occurs on Windows (#695) t004 fails on Windows in comparing a data frame to a numpy array. The i, j, k columns from the data frame were upgraded to long ints. Apparently the default int on Windows is different from the default on mac/linux, so test failures don't show up there. Also stop versioning several shapefiles that are recreated with every test run. * refactor(gridintersect): wrap shapely imports in try/except (#698) * refactor(gridintersect): wrap shapely imports in try/except This should allow flopy to be loaded even if shapely isn't installed. Closes #697 * refactor(dis): removed dis.read_from_cnf() method. (#699) * It's not used. It's broken. And it's not tested. * Closes #687 * feat(#693) and fix(#691) (#696) * feat(#693): support for load_only option in modflow 6 fix(#691): forgive flag now defaults to false when loading models. bugs in t028_test and t012_test fixed * fix(code style fixes): code clean up * fix(load_only): Added support for package names in load_only lists and cleaned up documentation * fix(flake8 code W605): invalid escape sequence '\s' (or similar) (#700) Some of these fixes were to paths to directories in docstring examples, which were updated to somewhat work with the current structure of directories and file names. * fix(EpsgReference): complete methods for expected operation (#702) * This is now similar to the deprecated utils.reference.epsgRef class, removing '_remove_pyc' and 'make' methods, adding 'to_dict', 'get' and '_write' methods, and updating others to work as expected. * Change t032_test.py to replace epsgRef with EpsgReference, and ensure that all methods are tested. * refactor(SfrFile): detect other column names, remove methods (#708) * Detect names for column 16 and beyond (checked against gwf2sfr7_NWT.f), which adds either 'gradient' or 'Qwt', 'delUzstor', sometimes 'gw_head'; note that this may affect users that used (e.g.) df.col16.values * Remove methods that are used once: get_skiprows_ncols and _set_names, as this logic is best handled in the class constructor * Add notes to docstring to indicate which columns have indexing starting at one or zero * Expand docstring for parameters, verbose and geometry are ignored * Flake8's F841 variable assigned but never used for 'per' and 'timestep' * Flake8's F402 import 'np' from line 1 shadowed by loop variable * Resolve sfroutputfile.py:170: RuntimeWarning: invalid value encountered in less: newper = df.segment.diff().values < 0 * Expand t009_test.py to check attributes: ncol, names and times * feat(nper/sim): allow stress periods beyond nper, and allow setting simulation name file options on init * feat(#694): When stress packages have data for periods beyond nper flopy now issues a warning message (flopy used to raise an exception). * feat(#704): Allow user to set simulation name file options while initializing a simulation. * fix(deepcopy): Rewrote package code to no longer use __getattribute__ which I believe was confusing deepcopy in python 3.5. * fix(line too long) * refactor(mfsfr2): format floats as '{:.8g}' with older NumPy versions (#710) * SFR2 files are written more similar between NumPy versions * Formatting float32 prior to NumPy 1.14.0 was inconsistent, so force 8 decimal digits of precision with older versions * Modern NumPy versions still use '{!s}' and should not see any difference * Use global 'default_float_format' for various 'float_format' arguments * Format integers as decimals '{:d}' instead of rounded floats '{:.0f}' * Simplify _fmt_string, which no longer adds a space at the end * Raise ValueError instead of bare Exception * fix(#707): Loading Optimized for MFLists in Special Cases (#711) * fix(#707): Special case optimized loading code for mflist data structure expanded to include more cases. Also optimized data verification code and added option to not verify data on load. * fix(formatting) * doc(pangeo): add support for pangeo to run example notebooks (#713) * doc(pangeo): update support for pangeo to run example notebooks (#714) * fix(irch): converted irch to be one based (#716) * fix(irch): subtract one from irch at load, add one to irch at write * added trap on t032 for CRS.getprj() returns None * fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 (#721) * Fix(modflowpy#720): explicitly set shapefile record dtypes in write_grid_shapefile2 * updates to shapefile exporting utilities: * Remove redundancy from write_grid_shapefile2 * enforce closed polygons in write_grid_shapefile2 * remove support for pyshp v.1.2.1 * remove unused write_grid_shapefile * renamed write_grid_shapefile2 as write_grid_shapefile * refactor(namefile): format values with str() and remove extra "; " (#722) * fix(mfsfr2.py): isfropt and icalc read/write logic (#723) * added unit tests covering all combinations of isfropt and icalc to t010_test.py * fix(mflist optimization): The mflist optimization code crashed when a line contained a word that only contained quote characters. Fix implemented to handle this case. (#724) * feat(vtk) updated vtk export capabilities in flopy. (#717) * updated vtk export capabilities in flopy. Added support for array 2d/3d export, package export, model export, heads, cell by cell file. * added examples/Notebooks/flopy3_vtk_export.ipynb * created vtk tests in autotest/t050_test.py * support for binary output * initial develop branch for release 3.3.0 * docs: fix typo and small mistakes (#729) * doc(mffhb): correct minor mistake in docstring (#726) * fix(binder): convert to mybinder.org (#731) * refactor(setup/ci): require and test Python 3.5, 3.6, 3.7 and 3.8 (#728) * docs: clarify statement and add whitespace (#735) * fix(flake8 code F632): use '==' instead of 'is' (#734) * With MfList, check 'len(recs) == 0' instead of 'recs is 0' * fix(mnw2): fix issues with files with empty lines (#736) Also contains fix for inconsistent `wellid` cases in dataset 2a and 4a * fix(mnw2): fix issues causing random failures on python 3.5 (#739) * fix(ModflowDis.sr): rotate model prior to calculating xll and yll from xul and yul. (#737) modflowpy#733 * mnw2 missing itmp when zero (#742) Resolves issue where mnw2 itmp list didn't include zeros for when a stress period had no discharge assigned. The "continue" advanced to next iteration, missing the line where zero would be added to the list. This was causing issues when writing the mnw2 file. * fix(model relative path): always register model prior to setting model relative path (#740) (#745) * fix(#740): Modified code to insure model gets registered before model relative path is set. * fix(#740) * CI(t007): patch for python 3.8 (#751) * Update flopy author list in software citation (#750) * refact(docstrings): refactored docstrings in mfsimulation (#752) * Update(plotting): update plotting examples and fixes for mf6 bugs (#755) * Update(modflowpy#741): Remove redundancy from plotting Notebooks * Removed flopy3_MapExample.ipynb, flopy3_PlotCrossSection_demo.ipynb, flopy3_PlotMapView_demo.ipynb, flopy3_mf6_BasicPlotting.ipynb, flopy3_mf6_plotting_freyberg.ipynb, flopy3_mf6_vertex_plotting.ipynb, flopy3_UnstructuredGridPlotting.ipynb * Added flopy3.3_PlotCrossSection.ipynb, flopy3.3_PlotMapView.ipynb * Fixed VertexGrid errors in PlotMapView and PlotCrossSection * Fix(moflowpy#753): mask no flow and dry cells in PlotUtilities._plot_array_helper for MODFLOW 6 output *update mfmodel.py hdry and hnoflo to default values * Cast integer arrays as floating point arrays in PlotUtilities._plot_array_helper * fix(mflist): fixed record shape in get_empty; test add_record (#758) * fix(boundnames): Fixed problem loading boundnames (#757) * fix(boundnames): Fixed problem where boundnames did not get loaded for simple fast loads. Added test to catch problems similar to this in the future. * fix(line length) * fix(mtssm): fix assumption that transient NSS data appears in first stress period (#756) * fix(upw): keyword for vertical K (#746) * fix(dfns): update MODFLOW 6 dfns for next flopy (3.3.0) and mf6 (6.1.0) releases (#759) * fix(dfns): update MODFLOW 6 dfns for next release * fix(dfns): update createpackages.py based on @spaulins-usgs suggestion * Address @spaulins-usgs mf6 release comments * refactor(release): update make-release script to generate author names (#760) * refactor(release): update make-release script to generate author names * refactor(release): clean-up make-release script and markdown * ci(exes): update executables version to 3.0 (#761) * ci(exes): update executables version to 3.0 * testing(t503): update mf6 version downloaded and tested * release: 3.3.0
2019-12-14 08:21:16 -08:00
* **release**: used when updating files prior to a release
* **releasenotes**: used for updating the release notes
* **readme**: used for updating the release notes in README.md
* **changelog**: used for updating the release notes in CHANGELOG.md
* none/empty string: useful for `style`, `test` and `refactor` changes that are done across all
packages (e.g. `style: add missing semicolons`) and for docs changes that are not related to a
specific package (e.g. `docs: fix typo in tutorial`).
### Subject
The subject contains a succinct description of the change:
* use the imperative, present tense: "change" not "changed" nor "changes"
* don't capitalize the first letter
* no dot (.) at the end
### Body
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to reference GitHub issues that this commit **Closes**.
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
[coc]: https://github.com/modflowpy/flopy/blob/develop/CODE_OF_CONDUCT.md
[github]: https://github.com/modflowpy/flopy
[stackoverflow]: http://stackoverflow.com/questions/tagged/flopy