Released October 10, 2021
-
Allow strings and tuples as conditions
Previously, task conditions could only be specified by a single number. Now, they can be specified by either a string or a tuple. Strings make "flags" more readable. Tuples make it easier to work with long and/or variable-length task conditions, e.g., for stimuli which change over time in a different way on each trial.
- Fixed the gamma distribution non-decision time
- Improved documentation and error messages
- Switched continuous integration platforms from Travis to Github Actions
Released December 4, 2020
- Option to suppress output in differential evolution
- Option to drop undecided trials when converting a sample to a pandas dataframe
- Fixes a bug in which Solution.resample can sometimes give negative RTs under certain conditions
- Fixes a bug in likelihood-based fitting methods which produced incorrect results when fitting with undecided trials
- Fixes a bug in condition_combinations which made fitting very slow for Samples with many conditions
Released: September 15, 2020
-
Jupyter notebook compatibility
In addition to the classic model GUI, it is now possible to explore models interactively in Jupyter notebooks using the "ddm.plot.model_gui_jupyter" function. With this change, PyDDM also now offers online interactive examples.
-
Analytical solutions for arbitrary point source initial conditions (thanks Nathan!)
Analytical solutions are now implemented for point source initial conditions at points other than x=0. The analytical solver will automatically detect if you have specified a compatible model, and if so, it will solve it analytically instead of numerically. This leads to speed boosts of several orders of magnitude for these models.
-
Prescriptive warning messages
When possible, warnings now give details of how to correct the model, for example, by decreasing dx or dt.
- Fix broken robust loss functions
- Example code no longer gives warning messages
- Fixed integer overflows on Windows
- Fixed underflow warning messages on model simulation for specific models (thanks Nathan!)
- The "get_model_parameters" function now does not return repeated parameters. So, if two parameters in your model share the same Fittable object, meaning they are fit together, only one copy of this will be listed in calls to "get_model_parameters". Corresponding changes were made to "set_model_parameters".
Released: June 19, 2020
-
Trial-wise trajectory support for Overlays
Overlays are an important feature of the GDDM, but previously they were not supported on trial-wise trajectory simulations. Now, it is possible to define the function "apply_trajectory" in the Overlay object if the overlay can be applied to a trajectory simulation.
-
Details of model fits are preserved
After running a model fit, it is useful to know the parameters of the fit, the objective function value, the methods used for the fit, etc. This information is now easily-accessible from within fit models as a FitResult object, with clear documentation on how to use it.
-
Performance enhancements for Crank-Nicolson and analytical solutions
Moderate speedups for the Crank-Nicolson method, and a roughly one order of magnitude speedup for analytical solutions
-
Samples can be exported
Previously, it was possible to create a new Sample object from a pandas DataFrame. Now, it is also possible to do the reverse, i.e. convert an existing Sample object to a pandas DataFrame.
- Documentation links now refer to the stable version instead of the development version.
- Fixed bug when bounds collapse to zero
- Sample objects were internally inconsistent when imported through pandas
- New option to suppress diagnostic text (thanks Arkady!)
- LossRobustBIC and LossRobustLikelihood now provide shortcuts for uniform distribution overlays.
- Added a new implementation of biased reward for compatibility with fittable bounds (thanks Nathan!)
- get_model_loss function as a shortcut for finding the value of a given loss function for a given model
- New function to get list of model parameter names
- Function to compute mean decision time for samples
- More informative error messages
- The command-line argument "method" now has a different meaning, and will throw an error if used for the previous purpose. This made terminology for "fitting_method" and "method" more consistent: now "fitting_method" refers to the optimization routine (e.g. differential evolution) whereas "method" refers to the numerical algorithm (e.g. backward Euler)
- The "returnEvolution" arguement is now called "return_evolution".
Released: October 20, 2019
-
Increasing bounds
Previously, PyDDM supported collapsing bounds, but bounds were required to be monotonically decreasing. This restriction was lifted, allowing bounds to both increase and decrease over time according to any arbitrary function.
-
Tracking decision variable evolution (thanks Stefan!)
The evolution of the decision variable distribution may be tracked over time by passing a flag to the solver routine.
-
Custom optimizers
Previously, PyDDM required optimizers (e.g. differential evolution or the Nelder-Mead simplex algorithm) to be hard-coded. Now, these algorithms can be passed as arguments to the "fit_adjust_model" function.
-
Improvements in the model GUI
The model GUI now has nicer-looking plots, and is more transparent when errors occur in the model. Additionally, it now supports plotting a model when a sample is not present.
- Under certain conditions, parallel simulations were computationally inefficient.
- ICPoint had invalid arguments for the get_IC function
- simulate_trial cut off when reaching the boundary, contrary to the function documentation
- The PyDDM cookbook now provides several simple examples of how to use PyDDM in a variety of situations.
- Particle simulations may now use either RK4 or Euler's method
- Several new model components were added
- Error messages were improved