:spaghetti: Pastas is an open-source Python framework for the analysis of hydrological time series.

Overview

Pastas: Analysis of Groundwater Time Series

/doc/_static/logo_small.png

https://travis-ci.com/pastas/pastas.svg?branch=master https://img.shields.io/pypi/pyversions/pastas https://api.codacy.com/project/badge/Grade/952f41c453854064ba0ee1fa0a0b4434 https://api.codacy.com/project/badge/Coverage/952f41c453854064ba0ee1fa0a0b4434 https://readthedocs.org/projects/pastas/badge/?version=latest

Pastas: what is it?

Pastas is an open source python package for processing, simulating and analyzing groundwater time series. The object oriented structure allows for the quick implementation of new model components. Time series models can be created, calibrated, and analysed with just a few lines of python code with the built-in optimization, visualisation, and statistical analysis tools.

Documentation & Examples

Get in Touch

  • Questions on Pastas can be asked and answered on Github Discussions.
  • Bugs, feature requests and other improvements can be posted as Github Issues.
  • Pull requests will only be accepted on the development branch (dev) of this repository. Please take a look at the developers section on the documentation website for more information on how to contribute to Pastas.

Quick installation guide

To install Pastas, a working version of Python 3.7, 3.8 or 3.9 has to be installed on your computer. We recommend using the Anaconda Distribution as it includes most of the python package dependencies and the Jupyter Notebook software to run the notebooks. However, you are free to install any Python distribution you want.

Stable version

To get the latest stable version, use:

pip install pastas

Update

To update pastas, use:

pip install pastas --upgrade

Developers

To get the latest development version, use:

pip install https://github.com/pastas/pastas/zipball/dev

Dependencies

Pastas depends on a number of Python packages, of which all of the necessary are automatically installed when using the pip install manager. To summarize, the dependencies necessary for a minimal function installation of Pastas

  • numpy>=1.7
  • matplotlib>=3.1
  • pandas>=1.1
  • scipy>=1.3

Apart from this, is is highly recommended to install Numba (>0.51) to gain significant speed-ups.

How to Cite Pastas?

If you use Pastas in one of your studies, please cite the Pastas article in Groundwater:

To cite a specific version of Python, you can use the DOI provided for each official release (>0.9.7) through Zenodo. Click on the link to get a specific version and DOI, depending on the Pastas version.

  • Collenteur, R., Bakker, M., Caljé, R. & Schaars, F. (XXXX). Pastas: open-source software for time series analysis in hydrology (Version X.X.X). Zenodo. http://doi.org/10.5281/zenodo.1465866
Comments
  • WellModel randomly results in different fit results

    WellModel randomly results in different fit results

    I've been trying to implement the WellModel in a project I'm working on. The idea is to put all the wells in the same aquifer in one WellModel which then calculates one response function for all the wells which is only scaled by the distance from each well to the observation point.

    The way I've done this is by passing an extra parameter to pastas.Hantush containing the distance to the well r. The parameter rho passed to leastsquares is now equal to 1 / lambda, and is multiplied by the distance r when pastas.Hantush.step() is called.

    I've made an example notebook that highlights the problem. I've created simple models with one Well with and without recharge I've tried adding the well with StressModel and with the WellModel. The model with a WellModel and recharge randomly yields different fit results (see figure at the end of the notebook). I haven't been able to establish why this happens. It would be great if we could get this to work somehow... So any ideas are welcome!

    development 
    opened by dbrakenhoff 23
  • Tarso

    Tarso

    This pull request adds RechargeTarsoModel, which uses the Tarso method to simulate the effect of recharge on groundwater in a non-linear fashion.

    Because of its structure, RechargeTarsoModel cannot be combined with other stressmodels, a constant or a transform. Therefore I added the check_stressmodel_compatibility method in the Model-class.

    I am planning to add a notebook to compare RechargeTarsoModel with the ThresholdTransform, but I am wondering if you all agree to the current setup.

    Checklist before PR can be merged:

    • [X] new feature
    • [x] is documented
    • [x] PEP8 compliant code
    • [ ] tests added / passed
    • [X] passes Travis
    • [x] Example Notebook (for new features)
    development 
    opened by rubencalje 15
  • first entry in ml.noise() is set to 0

    first entry in ml.noise() is set to 0

    I came across the following result as I was optimizing my timeseries models:

    bad_fit

    This occurs because the first entry of the noise calculation is set to 0 in the code on line 153 (in combination with a large noise_alpha): https://github.com/pastas/pastas/blob/21a8464f4fc1b47cc67af9108cefc6069e146df4/pastas/noisemodels.py#L148-L155

    This first value of the noise (before changing it to 0) is equal to that ca. 2m offset between the model simulation and the observations. Commenting out this line ensures that value of constant_d is such that the model is on top of the observations.

    My question therefore is if this setting the first value of the noise to 0.0 is the correct way to go? Would removing that line cause any problems in other situations?

    question 
    opened by dbrakenhoff 14
  • separate calculation of weights and noise in the noise models

    separate calculation of weights and noise in the noise models

    Currently the simulate methods of the noisemodels return the weighted noise. This makes it difficult to compute the unweighted noise values. @mbakker7 and I propose to untangle this and have simulate return the unweighted noise.

    This change will affect:

    • solver.misfit method
    • ml.noise method
    • all methods that depend op ml.noise

    To reduce the impact (for now) I propose to add a keyword 'weighted' to ml.noise, with a default value True. This way all the changes are only internal, but the code allows testing of the impact of the weights better.

    enhancement 
    opened by raoulcollenteur 13
  • Change default value of noise model to the mean of the oseries time step

    Change default value of noise model to the mean of the oseries time step

    I would like to propose to change the default value of the noise model (noise_alpha) the mean/median of the time steps of the oseries.

    Now the default value is 14 (DAYS?). This high value causes the noise model to explain a lot of the variation when high frequency data is used (e.g. 1 day) at the first iteration of the optimisation and troubles the parameter estimation. Changing this value almost always improves parameter estimation in my experience. This change would ensure the initial value is better related to the data.

    Possibly the Median time step is actually a better default value, as it will be less skewed by gaps in the data.

    Anyone against this?

    enhancement 
    opened by raoulcollenteur 13
  • Kraijenhoff van de Leur / Bruggeman 133.15 Response

    Kraijenhoff van de Leur / Bruggeman 133.15 Response

    Short Description

    Kraijenhoff van de Leur response is now calculated with the equation from Bruggeman 133.15. With the equation from Bruggeman the gain can be obtained without solving the entire equation. Additionally, the response is scaled such that the gain is always equal to A.

    Three parameters: A is the gain (scaled), a is now the reservoir coefficient [d] (j = S * L^2 / (\pi^2 * K * D)) as described by Kraijenhoff van de Leur b is the location in the domain. Note that with Bruggeman the origin is now in the middle of the domain. This means that b=0 is in the middle and b=1/2 is at the drainage channel. At b=1/4 the response function is most similar to the exponential response function.

    Additionally, in this PR some typos are fixed in two notebooks such that issue #305 is solved.

    Checklist before PR can be merged:

    • [x] closes issue #305
    • [x] is documented
    • [x] PEP8 compliant code
    • [x] tests added / passed
    • [ ] Example Notebook (for new features)
    enhancement development 
    opened by martinvonk 11
  • Add WellModel

    Add WellModel

    Add WellModel to pastas:

    • adds WellModel that supports fitting multiple stresses with one response (Hantush) scaled by radial distance
    • implements suggestion from #108
    • closes #102 (has not re-occurred on my PC)
    development 
    opened by dbrakenhoff 11
  • settings in Stressmodel should be easily accessible

    settings in Stressmodel should be easily accessible

    Right now it is very difficult to find out what the pre-defined settings are for Stressmodels. They are defined in TimeSeries and can only be seen by looking at the code, as far as I know.

    enhancement 
    opened by mbakker7 11
  • unexpected behavior resampling Monthly time series

    unexpected behavior resampling Monthly time series

    Describe the bug I have a stress time series with monthly values and a model with a daily frequency. When adding the stressmodel to the model the stress time series is resampled to daily values. This resampling is done according to the settings dictionary.

    The stress time series has a value on the first day of the month which represents the extraction for the whole month. Therefore I use the settings 'sample_up': 'ffill' and 'to_daily_unit': 'divide'. Now my resampled stress time series has some unexpected values (see code example below):

    1. the daily values in the first month are the monthly values while they should have been divided by the number of days in that month.
    2. the other daily values are divided by the number of days in the previous month. e.g. the monthly value of April is 0.860028. The daily values in the resampled series are 0.027743 which is equal to 0.860028/31. The daily values should be 0.860028/30 = 0.0286676. Since April only has 30 days.
    3. the resampled time series stops at the first of May while I wished it would stop at 31th of may 1896.

    The work arounds are quite easy. To solve 1 and 3 you can add a value of 0 to the start and the end of the monthly time series. For 2 you can create a monthly time series that contains values at the end of each month and use the default well settings ('sample_up': 'bfill'). Although the work arounds are easy I think we should fix this because a user does not expect this behavior and it will influence model results.

    To Reproduce

    import numpy as np
    import pandas as pd
    import pastas as ps
    
    np.random.seed(1)
    
    index_gw = pd.date_range('1986-1-1', '1986-5-1', freq='D')
    gwdata = pd.DataFrame(index=index_gw,
                          data =np.random.random_sample(len(index_gw)))
    
    
    
    well_df = pd.DataFrame(index=pd.date_range('1986-1-1', '1986-5-1', freq='MS'),
                           data=np.random.random_sample(5))
    
    # Create a model object
    ml = ps.Model(gwdata, name="GWL")
    
    settings =  {'sample_up': 'ffill',
                      'sample_down': 'mean',
                      'fill_nan': 0.0,
                      'fill_before': 0.0,
                      'fill_after': 0.0,
                      "to_daily_unit": "divide"}
        
    
    w1 = ps.StressModel(well_df, name='tst',
                        rfunc=ps.Hantush, 
                        settings=settings, up=False)
    
    ml.add_stressmodel(w1, True)
    s = ml.stressmodels['tst'].stress[0].series
    print(well_df)
    print(s)
    

    This yields

                       0
    1986-01-01  0.026211
    1986-02-01  0.028306
    1986-03-01  0.246211
    1986-04-01  0.860028
    1986-05-01  0.538831
    
    1986-01-01    0.026211
    1986-01-02    0.026211
    1986-01-03    0.026211
    1986-01-04    0.026211
    1986-01-05    0.026211
                    ...   
    1986-04-27    0.027743
    1986-04-28    0.027743
    1986-04-29    0.027743
    1986-04-30    0.027743
    1986-05-01    0.017961
    Freq: D, Length: 121, dtype: float64
    

    Work arounds

    # use a time series with monthly values at the end of each month
    well_df = pd.DataFrame(index=pd.date_range('1986-1-31', '1986-5-31', freq='M'),
                           data=np.random.random_sample(5))
    
    # add a value of zero at the start and the end of the time series
    well_df.loc[pd.Timestamp('1985-12-31')] = 0
    well_df.loc[pd.Timestamp('1986-6-30')] = 0
    well_df.sort_index(inplace=True)
    
    # use default well settings
    w1 = ps.StressModel(well_df, name='tst',
                        rfunc=ps.Hantush, 
                        settings='well', up=False)
    

    Expected behavior When resampling a monthly time series to a daily time series with the settings "to_daily_unit": "divide", daily values should be the monthly values divided by the number of days in that month.

    This might be solved by improving the TimeSeries._to_daily_unit method. If so, I can try to make a pull request for this myself. However I am not sure if adjusting this method will break other things.

    Python package version Python version: 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] Numpy version: 1.18.5 Scipy version: 1.5.0 Pandas version: 1.0.5 Pastas version: 0.15.0

    Additional context I had a look in the example notebooks to see if this issue occurs there. In "7_ well_example.ipynb" daily values are used so there is no issue. In "11_WellModel.ipynb" data from menyanthes is used. A comment in the code (# the time unit is already days, so we need te set to_daily_unit to None) suggests these are daily values. When I load the data I get a monthly time series. Because the daily_unit is set to None the monthly values are used as daily values in the model. Although model results will not change a lot I think this should be fixed as well.

    bug 
    opened by OnnoEbbens 10
  • parameters polder function

    parameters polder function

    As far as I know, the polder function is still experimental and needs some work. Three issues:

    1. Right now, the parameters are chosen as x/(2*lab) and 1/cS. I am not sure that is the most logical, although it gives the most obvious link with aquifer parameters. Anybody against experimenting a bit with these?
    2. Right now, there is no scaling factor. I understand why: in a semi-infinite aquifer, the ultimate rise is a function of the rise in the river and the aquifer parameters. But this function is intended to be used as well in other situations, for example finite aquifers. So I suggest to add a scale factor, like the other response functions.
    3. I will implement a conservative (but quick) estimate of tmax.
    opened by mbakker7 10
  • Make the solver an attribute of the Model class

    Make the solver an attribute of the Model class

    I would like to store the Solver object as an attribute of the Model class. If something goes wrong now within the call to the solver we can't access the whole object which is annoying for debugging. This will also help in developing new solvers I plan to work on next month.

    This would also mean we don't have to initiate a solver object every time we solve. This will only be an internal change for now. Within the solve method it would look something like this:

    self.solver = Solver(args)
    self.solver.solve(args) or ml.solver.minimize(args)
    

    and then we can access the solver as:

    ml.solver
    

    Anyone against this proposal?

    Ps. looks like I'll need to block a day or two to do some programming on Pastas next week so other enhancements I could implement in the solver are welcome. :)

    bug enhancement development 
    opened by raoulcollenteur 10
  • create Linear instance after instantiation

    create Linear instance after instantiation

    Short Description

    As per Issue #423, instantiate ps.rch.Linear() when creating a RechargeModel instance, not on import of Pastas.

    Checklist before PR can be merged:

    • [x] closes issue #423
    • [x] is documented
    • [x] PEP8 compliant code
    • [x] tests added / passed
    • [ ] Example Notebook (for new features)
    • [x] API changes documented in Release Notes
    enhancement 
    opened by raoulcollenteur 0
  • ThresholdTransform and fit_constant=False create bad fit [BUG]

    ThresholdTransform and fit_constant=False create bad fit [BUG]

    Describe the bug The fit_constant-parameter in ml.solve() and ThresholdTransform create a bad fit.

    To Reproduce In the example directory (pastas\doc\examples), run the following code:

    import pastas as ps
    
    # load a model with precipitation, evaporation and a well
    ml = ps.io.load("data/B28H1808_2.pas")
    # add a ThresholdTransform
    ml.add_transform(ps.ThresholdTransform())
    
    # solve with fit_constant=True (the default)
    ml.solve(noise=False, fit_constant=True)
    ml.plots.results()
    
    # solve with fit_constant=False
    ml.solve(noise=False, fit_constant=False)
    ml.plots.results()
    

    Expected behavior I expect the fit to be similar in the case where fit_constant=True (97 %), but it is only 84 % when fit_constant=False,

    Screenshots

    fit_constant=True: fit_constant=True vs fit_constant=False: fit_constant=False

    Python package version Python version: 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:15:42) [MSC v.1916 64 bit (AMD64)] Numpy version: 1.22.4 Scipy version: 1.9.3 Pandas version: 1.5.2 Pastas version: 0.22.0b Matplotlib version: 3.6.2

    Additional context It seems the order in which the transform is applied and the method in which the constant is calculated from the residuals is wrong. For now I think we should throw an Exception when ThresholdTransform and fit_constant=False are used together.

    bug 
    opened by rubencalje 0
  • [Development] Add pyproject.toml

    [Development] Add pyproject.toml

    We need to add an pyproject.toml

    Useful reference: https://ianhopkinson.org.uk/2022/02/understanding-setup-py-setup-cfg-and-pyproject-toml-in-python/

    Warning I encountered: DEPRECATION: ... is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559

    I believe @dbrakenhoff already encountered some issues with this in @pastastore

    development 
    opened by martinvonk 1
  • Implement Type Hints

    Implement Type Hints

    Short Description

    This pull request implements Type Hints into Pastas. Python does not enforce function and variable type annotations. However they can be used by third party tools such as type checkers, IDEs, linters, etc. This helps the Pastas users and developers to write better code.

    Checklist before PR can be merged:

    • [x] closes issue #389
    • [x] is documented
    • [x] PEP8 compliant code
    • [x] tests added / passed
    enhancement 
    opened by martinvonk 5
  • Calculation of confidence interval in autocorrelation plot

    Calculation of confidence interval in autocorrelation plot

    Proposed enhancement Given a Pandas time series sr with noise values from a Pastas model,the function ps.stats.acf calculates the autocorrelation of residuals. For example: r = ps.stats.acf(sr, lags=365, bin_method='rectangle', bin_width=0.5, max_gap=1000, min_obs=20, full_output=True, alpha=0.05)

    Variable r is a pandas DataFrame with columns 'acf', 'stderr' and 'n'. The column name 'stderr' confuses me because in module plots the function plots.acf calculates confidence intervals for autocorrelation as: conf = r.stderr.values ax.fill_between(r.index.days, conf, -conf, alpha=0.3)

    Usually confidence intervals for autocrorrelation are plotted at 2*std, assuming normal distribution of noise values.

    Expected behavior For consistency with literature I would suggest either renaming the column 'std' to 'conf' in the result of stats.acf, or calculating the confidence interval in plot.acf as 2*std (and adjust calculation of the std in stats.acf accordingly).

    enhancement 
    opened by tdmeij 0
Releases(v0.21.0)
  • v0.21.0(Aug 2, 2022)

    What's Changed

    • address #392 by @dbrakenhoff in https://github.com/pastas/pastas/pull/393
    • Add optional dependencies to setup.py by @martinvonk in https://github.com/pastas/pastas/pull/390
    • Add SolveTimer() by @dbrakenhoff in https://github.com/pastas/pastas/pull/400
    • Update master to v0.21.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/401

    Full Changelog: https://github.com/pastas/pastas/compare/v0.20.0...v0.21.0

    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Mar 29, 2022)

    What's Changed

    • Add Groundwater Signatures Module by @raoulcollenteur in https://github.com/pastas/pastas/pull/372
    • Summary pdf by @raoulcollenteur in https://github.com/pastas/pastas/pull/378
    • Improve fit report by @dbrakenhoff in https://github.com/pastas/pastas/pull/381
    • fix #380, modification for #177 by @dbrakenhoff in https://github.com/pastas/pastas/pull/382
    • Recharge Model Features - Peterson & Western / Flex (Groundwater Uptake) by @martinvonk in https://github.com/pastas/pastas/pull/373
    • Update Master-branch to v0.20.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/385

    Full Changelog: https://github.com/pastas/pastas/compare/v0.19.0...v0.20.0

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Jan 4, 2022)

    What's Changed

    • get_response add_0=True correct index by @martinvonk in https://github.com/pastas/pastas/pull/325
    • Kraijenhoff van de Leur Response by @martinvonk in https://github.com/pastas/pastas/pull/326
    • docformatter, autopep8 and sort imports by @dbrakenhoff in https://github.com/pastas/pastas/pull/328
    • Histogram in plots.series() by @martinvonk in https://github.com/pastas/pastas/pull/330
    • Add ChangeModel to dev by @raoulcollenteur in https://github.com/pastas/pastas/pull/332
    • Add Spline response function by @rubencalje in https://github.com/pastas/pastas/pull/333
    • pastas.plots.series() changes by @martinvonk in https://github.com/pastas/pastas/pull/334
    • allow kwargs for rsq by @martinvonk in https://github.com/pastas/pastas/pull/341
    • Kraijenhoff van de Leur / Bruggeman 133.15 Response by @martinvonk in https://github.com/pastas/pastas/pull/335
    • Add get_equidistant_timeseries() method by @dbrakenhoff in https://github.com/pastas/pastas/pull/338
    • Improve Flexmodel and add a snow model by @raoulcollenteur in https://github.com/pastas/pastas/pull/343
    • Fix #353, precision of floats in JSON files by @dbrakenhoff in https://github.com/pastas/pastas/pull/354
    • Save and read options of FlexModel to/from pas-file by @rubencalje in https://github.com/pastas/pastas/pull/359
    • Update master to v0.19.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/362

    Full Changelog: https://github.com/pastas/pastas/compare/v0.18.0...v0.19.0

    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Sep 2, 2021)

    What's Changed

    • Improved description RMSE formula by @martinvonk in https://github.com/pastas/pastas/pull/307
    • fix HantushWellModel by @dbrakenhoff in https://github.com/pastas/pastas/pull/313
    • Warning when optimization hits parameter bounds by @dbrakenhoff in https://github.com/pastas/pastas/pull/312
    • freq argument added to Model init. by @raoulcollenteur in https://github.com/pastas/pastas/pull/315
    • Update Master to Pastas v0.18.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/316

    Full Changelog: https://github.com/pastas/pastas/compare/v0.17.1...v0.18.0

    Source code(tar.gz)
    Source code(zip)
  • v0.17.1(May 13, 2021)

    Intermediate release that fixes some bugs.

    What's Changed

    • Dev by @raoulcollenteur in https://github.com/pastas/pastas/pull/301

    Full Changelog: https://github.com/pastas/pastas/compare/v0.17.0...v0.17.1

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Apr 2, 2021)

    See the Docs (https://pastas.readthedocs.io/en/latest/) for the release notes.

    What's Changed

    • fix aic/bic calculation by @dbrakenhoff in https://github.com/pastas/pastas/pull/263
    • Create python-package.yml to start move to Github Actions for CI by @raoulcollenteur in https://github.com/pastas/pastas/pull/281
    • Move testing to Github Actions by @dbrakenhoff in https://github.com/pastas/pastas/pull/287
    • Hantush by @dbrakenhoff in https://github.com/pastas/pastas/pull/286
    • Update Master-branch to v0.17.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/292

    Full Changelog: https://github.com/pastas/pastas/compare/v0.16.0...v0.17.0

    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Nov 17, 2020)

    What's Changed

    • Improve time_offset by @rubencalje in https://github.com/pastas/pastas/pull/237
    • add examples to notebook18 about step trends by @OnnoEbbens in https://github.com/pastas/pastas/pull/242
    • Fix ml.get_stress() for WellModel by @dbrakenhoff in https://github.com/pastas/pastas/pull/246
    • Update markdown cell to improve documentation by @OnnoEbbens in https://github.com/pastas/pastas/pull/254
    • Create python-publish.yml by @raoulcollenteur in https://github.com/pastas/pastas/pull/256
    • Upgrade Master branch to Pastas v0.16.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/255

    Full Changelog: https://github.com/pastas/pastas/compare/v0.15.0...v0.16.0

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Jul 31, 2020)

    New release. Release notes are moved to the ReadTheDocs website: https://pastas.readthedocs.io/en/latest/release_notes.html

    What's Changed

    • Make default rfunc in StressModelBase None #186 by @raoulcollenteur in https://github.com/pastas/pastas/pull/191
    • Introduce ArmaModel to Pastas by @raoulcollenteur in https://github.com/pastas/pastas/pull/198
    • CONTRIBUTING.md: point to the current dev site by @dcslagel in https://github.com/pastas/pastas/pull/208
    • Update issue templates by @raoulcollenteur in https://github.com/pastas/pastas/pull/214
    • fix name of series in TimeSeries and name of HantushOld rfunc by @OnnoEbbens in https://github.com/pastas/pastas/pull/220
    • Add Portmanteau test by @EitvanderMeulen in https://github.com/pastas/pastas/pull/218
    • Update Wellmodel and HantushWellModel by @dbrakenhoff in https://github.com/pastas/pastas/pull/222
    • Diagnostics by @raoulcollenteur in https://github.com/pastas/pastas/pull/223
    • Dinoloket read method by @tomvansteijn in https://github.com/pastas/pastas/pull/227
    • Update master branch to v0.15.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/229

    New Contributors

    • @dcslagel made their first contribution in https://github.com/pastas/pastas/pull/208
    • @EitvanderMeulen made their first contribution in https://github.com/pastas/pastas/pull/218

    Full Changelog: https://github.com/pastas/pastas/compare/v0.14.0...v0.15.0

    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Apr 1, 2020)

    Pastas v0.14.0 has just been released. This version should be mostly backward compatible. This version contains many new features and improvements to the documentation.

    What's Changed

    • Update stressmodel.py by @pgraafstra in https://github.com/pastas/pastas/pull/170
    • Create CODE_OF_CONDUCT.md by @raoulcollenteur in https://github.com/pastas/pastas/pull/178
    • Improved documentation website by @raoulcollenteur in https://github.com/pastas/pastas/pull/179
    • Add model comparison plot, deprecation warning Project by @dbrakenhoff in https://github.com/pastas/pastas/pull/181
    • Recharge by @raoulcollenteur in https://github.com/pastas/pastas/pull/173
    • Add emcee notebook and update parameter bounds by @raoulcollenteur in https://github.com/pastas/pastas/pull/172
    • Tarso by @rubencalje in https://github.com/pastas/pastas/pull/182
    • Upgrade master to v0.14.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/188

    New Contributors

    • @pgraafstra made their first contribution in https://github.com/pastas/pastas/pull/170

    Full Changelog: https://github.com/pastas/pastas/compare/v0.13.0...v0.14.0

    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Nov 29, 2019)

    Pastas version 0.13.0 has just been released. This version includes large improvement to the solver methods, including a start on an uncertainty quantification framework within Pastas.

    This release should be mostly backward compatible.

    What's Changed

    • add stacked_results plot by @dbrakenhoff in https://github.com/pastas/pastas/pull/150
    • Improve messaging by @dbrakenhoff in https://github.com/pastas/pastas/pull/155
    • Add maxtmax argument by @rubencalje in https://github.com/pastas/pastas/pull/159
    • add check if noise_alpha is smaller than model freq by @dbrakenhoff in https://github.com/pastas/pastas/pull/164
    • Uncertainty by @raoulcollenteur in https://github.com/pastas/pastas/pull/161
    • Update master to v0.13.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/168

    Full Changelog: https://github.com/pastas/pastas/compare/v0.12.0...v0.13.0

    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Aug 30, 2019)

    A new version of Pastas is released, 0.12.0. This version includes many improvements to the code, bug fixes, new features. The testing of the code was improved significantly (now on Codacy) to ensure proper functioning of the program.

    What's Changed

    • Pull groundwater paper update from master by @raoulcollenteur in https://github.com/pastas/pastas/pull/123
    • Branch onno by @OnnoEbbens in https://github.com/pastas/pastas/pull/127
    • Pull some changes from master on readme.rst by @raoulcollenteur in https://github.com/pastas/pastas/pull/128
    • Add WellModel by @dbrakenhoff in https://github.com/pastas/pastas/pull/129
    • change default parameters for steptrend by @OnnoEbbens in https://github.com/pastas/pastas/pull/130
    • Solver by @raoulcollenteur in https://github.com/pastas/pastas/pull/138
    • Use loc instead of at for adding metadata to the oseries dataframe by @OnnoEbbens in https://github.com/pastas/pastas/pull/139
    • improve solve_models() with tmin/tmax options by @dbrakenhoff in https://github.com/pastas/pastas/pull/144
    • improve project methods by @dbrakenhoff in https://github.com/pastas/pastas/pull/146
    • Add tests for pastas.Project by @dbrakenhoff in https://github.com/pastas/pastas/pull/147
    • Update Master to 0.12.0 by @raoulcollenteur in https://github.com/pastas/pastas/pull/148

    Full Changelog: https://github.com/pastas/pastas/compare/v0.11.0...v0.12.0

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Jun 21, 2019)

    For this release we focused on fixing bugs and adding tests to the code to improve code quality. This version of Pastas should be mostly compatible with the previous versions of Pastas.

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Apr 16, 2019)

    This release adds a couple of new features to pastas, along which a new stressmodel to simulate groundwater recharge (Still work in process) and two new response functions. The example notebooks have been updated and a couple of new ones added.

    Category | Explanation -- | -- Enhanced | Initial parameters of scaling parameter are based on std Enhanced | Example notebook are automatically rendered for ReadTheDocs New | New example notebook with a groundwater well New | Four Parameters response function added (FourParam) New | Double Exponential response function added (DoubleExponential) New | Example notebook with synthetic data and a noisemodel added New | A new stressmodel for the simulation of recharge is introduced (RechargeModel).

    Source code(tar.gz)
    Source code(zip)
  • v0.9.9(Mar 24, 2019)

    Mostly a bug fix release, with many minor bugs fixed. This version should be mostly backward compatible.

    Category | Explanation -- | -- Enhanced | Fit_report is now scaled automatically Enhanced | Bug in calculating the tmax for the response functions fixed New | Added a utility to get the tmin and tmax where all stresses have values

    Source code(tar.gz)
    Source code(zip)
  • v0.9.8(Feb 8, 2019)

    Pastas version 0.9.8 has been released. This version should be mostly backward compatible with 0.9.7. The focus of this version was on bug fixes and clean up of the model code.

    Category | Explanation -- | -- Enhanced | the nparam attribute from a stressmodel is now a property. Enhanced | Warning is provided when NaN-values are removed from residual or simulation series Enhanced | Pastas version is updated when saving an pastas model loaded from an old file New Feature | ml.add_stressmodels can now take multiple stressmodels at once Deprecated | Theis response function has been removed.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.7(Apr 17, 2019)

    Release with many new features and a few deprecations. Should be mostly backward compatible but will throw a few warnings for deprecated features.

    Category | Explanation -- | -- Deprecated | Method "get_tmin_tmax" is replaced by two new methods: "get_tmin" and "get_tmax" Deprecated | Method "innovations" is replaced by "noise" Deprecated | Settings argument has been removed from the model init Enhanced | warmup argument can now also take a string e.g. "1000D", a warmup of 1000 days. Enhanced | all get_methods of the model class now return pandas.Series Enhanced | Fit report has been improved Enhanced | Order of keyword arguments in model class is more consistent New feature | A new stressmodel to multiply timeseries by a factor is implemented (FactorModel New Feature | An autocorrelation function for irregular timesteps has been implemented. New Feature | Durbin-Watson test for autocorrelation has been implemented New Feature | Ljung-Box test for autocorrelation has been implemented New Feature | ml.plots.diagnositics is introduced, giving an overview of to diagnose model assumptions

    Source code(tar.gz)
    Source code(zip)
  • v0.9.6(Jul 27, 2018)

    Pastas version 0.9.6 has been released! This version includes a large number of bug fixes as well as multiple new cool features. This version should be backward compatible with 0.9.5

    Highlights

    • Solving with different frequencies is now fully supported throughout Pastas.
    • A linear trend and a step trend stressmodel have been added.
    • Internals for dealing with indices has been optimized.
    • New example notebook on dealing with surface water levels.

    Other changes

    Category | Description -- | -- Bug fix | Model simulate, residuals and noise methods now respect tmin and tmax. Bug fix | Initial Value of stressmodel is calculated different when meanstress is negative Enhanced | Improved calculation and added optional keywords for GxG Enhanced | Internal optimizations of all indices used for simulation Enhanced | Response function can be calculated for different cutoffs Enhanced | Initial values are now respected when exporting and importing pas-files Enhanced | Initial values are now respected in the pas-files Enhanced | It is now possible to set the log_level, determining the type of log messages that are written to the python interpreter New Feature | Linear Trend model is now implemented New Feature | StepModel is now implemented

    Source code(tar.gz)
    Source code(zip)
  • v0.9.5(Apr 6, 2018)

    Pastas v0.9.5 has been released. This version should be mostly backward compatible with version 0.9.4 but might give different answers due to a change in the default solver. The kind keyword in all method is deprecated, see other changes below.

    Highlights

    • It is now possible to fit the constant not as parameter, but after simulation by using the fit_constant argument in the solve method.
    • We now use Scipy's Least_squares solver as the default solver, dropping dependency on LmFit (which is still supported and available).
    • You can now solve a model without a noisemodel, and use the optimal parameters as initial values when solving with a noisemodel afterwards.

    Other Changes

    Category | Description -- | -- Bug Fix | Parameters bounds are changed when keyword up=False. Deprecated | The show argument in the plotting methods is deprecated. Deprecated | The kind argument for TimeSeries is deprecated. A string can now be provided for the settings keyword instead. E.g. settings="prec". Enhanced | All plotting methods now use the tmin and tmax from the model settings. Enhanced | Standard error is now reported as a percentage of the optimal value in fit_report for easier interpretation. Enhanced | Logging system is improved, allowing the user to define which level of log message is printed to the console. New Examples | A new notebook describing the response functions is added. New Feature | It is now possible to use the optimal parameters when solving after the model has changed. This makes it possible to first solve without, and then with a noisemodel. New Feature | The Nash-Sutcliffe fit statistic is added to the Stats module. New Feature | LeastSquares is now the default solver, based on Scipy's least_squares solver. The dependency on LmFit is dropped.

    Next Release In the next release new stressmodels will be introduced that add linear or step trends.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.4(Jan 17, 2018)

    Version v0.9.4 of Pastas is released, with multiple bug fixes and further improvements. This version should be compatible with v0.9.3 without many changes to your scripts.

    Highlights:

    • Improved fit report after model optimilisation
    • Improved plotting methods
    • New plotting method to plot the stresses
    • Scipy LeastSquares solver now fully supported
    • Improved parameter bounds
    • Support to import Waterbase waterlevel measurements (RWS)
    • Automatic including a Constant and Noisemodel in Models
    • Improved support of the pas-file format to save models and projects
    • Introduced the runs test to check for autocorrelation

    Next Release For the next release we aim to improve the API, making it more stable and simpler to understand for new users. This includes new examples, test procedures and better documentation. This release is planned for the beginning of March 2018.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.3(Nov 2, 2017)

    The version 0.9.3 of PASTAS is released.

    NOTE! V0.9.3 is NOT backward compatible with v0.9.2. There are some important API changes, most notably in the naming of the Tseries module, changed to stressmodels to avoid confusion in naming. These names are now fixed to avoid future api-incompatibilities. We are steadily working towards a stable version of pastas with much better backward compatibility.

    Highlights:

    • Renamed Tseries to Stressmodels
    • Noisemodel is automatically added
    • introduction of TimeSeries object to handle user provided time series and conversions
    • import methods have been refactored to read_knmi, read_dino etc. available from the pastas top-level
    • tmin/tmax of solve is used when calculating statistics
    • statistics module has been updated. Methods used for a single series are now called as e.g: ps.stats.acf(series)
    • significant speed-improvements have been applied, speeding up simulation up to a factor 2
    • Pastas Project package is added, allowing dealing with many models efficiently

    Next release: For the next release the focus will be on the statistics package and the project packages, along with some new import methods for other data types. This update will most likely be in late 2018.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.2(Jul 14, 2017)

    The version 0.9.2 of PASTAS is released.

    Many bugs have been fixed, but mostly internal changes and optimizations.

    NOTE! V0.9.2 is NOT backward compatible with v0.9.2. Especially, when solving a model the weights have to be explicitly chosen ("swsi" is recommended setting when using a noise model)

    Highlights:

    • Plotting module has seen significant updates and speedups
    • Indexing for Pandas objects have been updates greatly reducing computation times
    • Better support to check stresses (major updated on this expected in v0.9.3)
    • New statistics have been added
    • Weighting and calculations of the innovations have been split, allowing new weights models to be tested and increasing the modular design.
    • Scipy LeastSquares optimizer has been added
    • new standard import method is: "import pastas as ps"
    • various get methods have been added to the Model class to obtain stresses, contributions etcetera from the tseries objects.

    New documentation:

    • The documentation page has been completely updated.
    • It is now hosted on ReadTheDocs: Please refer to: http://pastas.readthedocs.io/
    • Updates in the software are directly added to the documentation pages
    • Notebooks with examples can be added easily and will be converted automatically
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Mar 22, 2017)

  • v0.9(Jan 18, 2017)

    This is the first official Beta release of Pastas, version 0.9. The API might slightly change over time but it is intended to keep these changes to a minimum.

    Source code(tar.gz)
    Source code(zip)
Owner
Pastas
This organization holds the open source python package Pastas
Pastas
An open source development framework to help you build data workflows and modern data architecture on AWS.

AWS DataOps Development Kit (DDK) The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and

Amazon Web Services - Labs 111 Dec 23, 2022
Popcorn-time-api - Python API for interacting with the Popcorn Time Servers

Popcorn Time API ?? CONTRIBUTIONS Before doing any contribution read CONTRIBUTIN

Antonio 3 Oct 31, 2022
Terraform module to ship CloudTrail logs stored in a S3 bucket into a Kinesis stream for further processing and real-time analysis.

AWS infrastructure to ship CloudTrail logs from S3 to Kinesis This repository contains a Terraform module to ship CloudTrail logs stored in a S3 bucke

Nexthink 8 Sep 20, 2022
Maestral is an open-source Dropbox client written in Python.

Maestral - A light-weight and open-source Dropbox client for macOS and Linux

null 2.6k Jan 3, 2023
McTrade is a bot exploiting Binance API, open source! built in python !

Open Source Crypto Trading Bot using Binance API Report Bug · Request Feature Table of Contents About The Project Built With Getting Started Prerequis

Raphael Cohen 5 Jul 17, 2022
PepeSniper is an open-source Discord Nitro auto claimer/redeemer made in python.

PepeSniper is an open-source Discord Nitro auto claimer made in python. It sure as hell is not the fastest sniper out there but it gets the job done in a timely and stable manner. It also supports hosting on heroku for 24/7 sniping without your PC

Unknown User 1 Dec 22, 2021
Freqtrade is a free and open source crypto trading bot written in Python.

Freqtrade is a free and open source crypto trading bot written in Python. It is designed to support all major exchanges and be controlled via Telegram. It contains backtesting, plotting and money management tools as well as strategy optimization by machine learning.

Kazune Takeda 5 Dec 30, 2021
Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily

Leakvertise Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily. You can

Quatrecentquatre 9 Oct 6, 2022
A minimal open source mtg-like tcg game made in python that can be played on a terminal emulator using a keyboard.

TCG-TERM Project state: ?? ?? ?? ?? Incomplete, In development ?? ?? ?? ?? (Keep in mind that at the moment, This project is currently undone, and wil

Amos 3 Aug 29, 2021
DevSecOps pipeline for Python based web app using Jenkins, Ansible, AWS, and open-source security tools and checks.

DevSecOps pipeline for Python Web App A Jenkins end-to-end DevSecOps pipeline for Python web application, hosted on AWS Ubuntu 20.04 Note: This projec

Devanshu Vashishtha 4 Aug 15, 2022
A Open source Discord Token Grabber with several very useful features coded in python 3.9

Kiwee-Grabber A Open source Discord Token Grabber with several very useful features coded in python 3.9 This only works on any python 3.9 versions. re

Vesper 40 Jan 1, 2023
This is a Python bot, which automates logging in, purchasing and planting the seeds. Open source bot and completely free.

?? Sunflower Land Bot ?? ⚠️ Warning I am not responsible for any penalties incurred by those who use the bot, use it at your own risk. This BOT is com

Newerton 18 Aug 31, 2022
Bot developed in python, 100% open-source, compatible with Windows and Linux.

Bombcrypto Bot [Family JOW] Bot desenvolvido em python, 100% do código é aberto, para aqueles que tenham conhecimento validarem que não existe nenhum

Renato Maia 71 Dec 20, 2022
Policy and data administration, distribution, and real-time updates on top of Open Policy Agent

⚡ OPAL ⚡ Open Policy Administration Layer OPAL is an administration layer for Open Policy Agent (OPA), detecting changes to both policy and policy dat

null 8 Dec 7, 2022
Facebook open graph api implementation using the Django web framework in python

Django Facebook by Thierry Schellenbach (mellowmorning.com) Status Django and Facebook are both rapidly changing at the moment. Meanwhile, I'm caught

Thierry Schellenbach 1.4k Dec 29, 2022
Source Code for our bot that manages time and other functions of the server <3

Komi San wants you to study This repo contains the source code for our bot that manages time and other functions of the server <3 Features Your study

Komi San wants you to study 8 Nov 8, 2021
Tesseract Open Source OCR Engine (main repository)

Tesseract OCR About This package contains an OCR engine - libtesseract and a command line program - tesseract. Tesseract 4 adds a new neural net (LSTM

null 48.3k Jan 5, 2023
thumbor is an open-source photo thumbnail service by globo.com

Survey If you use thumbor, please take 1 minute and answer this survey? It's only 2 questions and one is multiple choice!!! thumbor is a smart imaging

Thumbor (by @globocom) 9.3k Dec 31, 2022
Free and Open Source Machine Translation API. 100% self-hosted, no limits, no ties to proprietary services. Built on top of Argos Translate.

LibreTranslate Try it online! | API Docs Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on pro

UAV4GEO 3.5k Jan 3, 2023