Hi all!
I tried running the Tutorial 1 notebook on a fresh PyBamm installation, but I am getting an error upon plotting with sim.plot()
, as the most recent version of scipy
does not have an interp2d
function anymore.
Is this because the function used in the tutorial was substituted by something else?
Full error message:
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
Cell In[16], line 1
----> 1 sim.plot()
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\simulation.py:560, in Simulation.plot(self, output_variables, quick_plot_vars, **kwargs)
557 if output_variables is None:
558 output_variables = self.output_variables
--> 560 self.quick_plot = pybamm.dynamic_plot(
561 self._solution, output_variables=output_variables, **kwargs
562 )
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\plotting\dynamic_plot.py:20, in dynamic_plot(*args, **kwargs)
8 """
9 Creates a :class:`pybamm.QuickPlot` object (with arguments 'args' and keyword
10 arguments 'kwargs') and then calls :meth:`pybamm.QuickPlot.dynamic_plot`.
(...)
17 The 'QuickPlot' object that was created
18 """
19 kwargs_for_class = {k: v for k, v in kwargs.items() if k != "testing"}
---> 20 plot = pybamm.QuickPlot(*args, **kwargs_for_class)
21 plot.dynamic_plot(kwargs.get("testing", False))
22 return plot
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\plotting\quick_plot.py:244, in QuickPlot.__init__(self, solutions, output_variables, labels, colors, linestyles, figsize, time_unit, spatial_unit, variable_limits)
239 except TypeError:
240 raise TypeError(
241 "variable_limits must be 'fixed', 'tight', or a dict"
242 )
--> 244 self.set_output_variables(output_variable_tuples, solutions)
245 self.reset_axis()
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\plotting\quick_plot.py:270, in QuickPlot.set_output_variables(self, output_variables, solutions)
268 variables[i] = []
269 for var in variable_tuple:
--> 270 sol = solution[var]
271 # Check variable isn't all-nan
272 if np.all(np.isnan(sol.entries)):
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\solvers\solution.py:201, in _BaseSolution.__getitem__(self, key)
198 return self._variables[key]
199 else:
200 # otherwise create it, save it and then return it
--> 201 self.update(key)
202 return self._variables[key]
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\solvers\solution.py:168, in _BaseSolution.update(self, variables)
164 var = pybamm.ProcessedSymbolicVariable(self.model.variables[key], self)
166 # Otherwise a standard ProcessedVariable is ok
167 else:
--> 168 var = pybamm.ProcessedVariable(
169 self.model.variables[key], self, self._known_evals
170 )
172 # Update known_evals in order to process any other variables faster
173 for t in var.known_evals:
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\solvers\processed_variable.py:109, in ProcessedVariable.__init__(self, base_variable, solution, known_evals, warn)
107 # Try some shapes that could make the variable a 1D variable
108 if base_shape in [n, n + 1]:
--> 109 self.initialise_1D()
110 else:
111 # Try some shapes that could make the variable a 2D variable
112 first_dim_nodes = self.mesh.nodes
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\pybamm\solvers\processed_variable.py:249, in ProcessedVariable.initialise_1D(self, fixed_t)
245 self._interpolation_function = interp_fun
246 else:
247 # function of space and time. Note that the order of 't' and 'space'
248 # is the reverse of what you'd expect
--> 249 self._interpolation_function = interp.interp2d(
250 self.t_pts,
251 pts_for_interp,
252 entries_for_interp,
253 kind="linear",
254 fill_value=np.nan,
255 bounds_error=False,
256 )
File c:\Users\Utente\miniconda3\envs\pybamm\Lib\site-packages\scipy\interpolate\_interpolate.py:129, in interp2d.__init__(self, x, y, z, kind, copy, bounds_error, fill_value)
127 def __init__(self, x, y, z, kind='linear', copy=True, bounds_error=False,
128 fill_value=None):
--> 129 raise NotImplementedError(err_mesg)
NotImplementedError: `interp2d` has been removed in SciPy 1.14.0.
For legacy code, nearly bug-for-bug compatible replacements are
`RectBivariateSpline` on regular grids, and `bisplrep`/`bisplev` for
scattered 2D data.
In new code, for regular grids use `RegularGridInterpolator` instead.
For scattered data, prefer `LinearNDInterpolator` or
`CloughTocher2DInterpolator`.
For more details see
https://scipy.github.io/devdocs/tutorial/interpolate/interp_transition_guide.html