Skip to content

Commit

Permalink
Merge branch 'develop' into pytest-migration-4
Browse files Browse the repository at this point in the history
  • Loading branch information
arjxn-py authored Jul 23, 2024
2 parents 6de815f + 668e563 commit ba6a5e1
Show file tree
Hide file tree
Showing 131 changed files with 3,741 additions and 2,029 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/publish_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ jobs:
if: github.event.inputs.target == 'testpypi'
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: files/
packages-dir: artifacts/
repository-url: https://test.pypi.org/legacy/

open_failure_issue:
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/run_periodic_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ on:

env:
FORCE_COLOR: 3
PYBAMM_IDAKLU_EXPR_CASADI: ON
PYBAMM_IDAKLU_EXPR_IREE: ON

concurrency:
# github.workflow: name of the workflow, so that we don't cancel other workflows
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11
uses: github/codeql-action/upload-sarif@2d790406f505036ef40ecba973cc774a50395aac # v3.25.13
with:
sarif_file: results.sarif
2 changes: 2 additions & 0 deletions .github/workflows/test_on_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ on:

env:
FORCE_COLOR: 3
PYBAMM_IDAKLU_EXPR_CASADI: ON
PYBAMM_IDAKLU_EXPR_IREE: ON

concurrency:
# github.workflow: name of the workflow, so that we don't cancel other workflows
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ci:

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.5.1"
rev: "v0.5.4"
hooks:
- id: ruff
args: [--fix, --show-fixes]
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# [Unreleased](https://github.com/pybamm-team/PyBaMM/)

# [v24.5rc0](https://github.com/pybamm-team/PyBaMM/tree/v24.5rc0) - 2024-05-01
# [v24.5rc2](https://github.com/pybamm-team/PyBaMM/tree/v24.5rc2) - 2024-07-12

## Features

Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ keywords:
- "expression tree"
- "python"
- "symbolic differentiation"
version: "24.5rc0"
version: "24.5rc2"
repository-code: "https://github.com/pybamm-team/PyBaMM"
title: "Python Battery Mathematical Modelling (PyBaMM)"
99 changes: 78 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,32 +35,76 @@ add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)
if(NOT PYBIND11_DIR)
set(PYBIND11_DIR pybind11)
endif()

add_subdirectory(${PYBIND11_DIR})
# The sources list should mirror the list in setup.py

# Check Casadi build flag
if(NOT DEFINED PYBAMM_IDAKLU_EXPR_CASADI)
set(PYBAMM_IDAKLU_EXPR_CASADI ON)
endif()
message("PYBAMM_IDAKLU_EXPR_CASADI: ${PYBAMM_IDAKLU_EXPR_CASADI}")

# Casadi PyBaMM source files
set(IDAKLU_EXPR_CASADI_SOURCE_FILES "")
if(${PYBAMM_IDAKLU_EXPR_CASADI} STREQUAL "ON" )
add_compile_definitions(CASADI_ENABLE)
set(IDAKLU_EXPR_CASADI_SOURCE_FILES
pybamm/solvers/c_solvers/idaklu/Expressions/Casadi/CasadiFunctions.cpp
pybamm/solvers/c_solvers/idaklu/Expressions/Casadi/CasadiFunctions.hpp
)
endif()

# Check IREE build flag
if(NOT DEFINED PYBAMM_IDAKLU_EXPR_IREE)
set(PYBAMM_IDAKLU_EXPR_IREE OFF)
endif()
message("PYBAMM_IDAKLU_EXPR_IREE: ${PYBAMM_IDAKLU_EXPR_IREE}")

# IREE (MLIR expression evaluation) PyBaMM source files
set(IDAKLU_EXPR_IREE_SOURCE_FILES "")
if(${PYBAMM_IDAKLU_EXPR_IREE} STREQUAL "ON" )
add_compile_definitions(IREE_ENABLE)
# Source file list
set(IDAKLU_EXPR_IREE_SOURCE_FILES
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/iree_jit.cpp
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/iree_jit.hpp
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/IREEFunctions.cpp
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/IREEFunctions.hpp
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/ModuleParser.cpp
pybamm/solvers/c_solvers/idaklu/Expressions/IREE/ModuleParser.hpp
)
endif()

# The complete (all dependencies) sources list should be mirrored in setup.py
pybind11_add_module(idaklu
pybamm/solvers/c_solvers/idaklu/casadi_functions.cpp
pybamm/solvers/c_solvers/idaklu/casadi_functions.hpp
pybamm/solvers/c_solvers/idaklu/casadi_solver.cpp
pybamm/solvers/c_solvers/idaklu/casadi_solver.hpp
pybamm/solvers/c_solvers/idaklu/CasadiSolver.cpp
pybamm/solvers/c_solvers/idaklu/CasadiSolver.hpp
pybamm/solvers/c_solvers/idaklu/CasadiSolverOpenMP.cpp
pybamm/solvers/c_solvers/idaklu/CasadiSolverOpenMP.hpp
pybamm/solvers/c_solvers/idaklu/CasadiSolverOpenMP_solvers.cpp
pybamm/solvers/c_solvers/idaklu/CasadiSolverOpenMP_solvers.hpp
pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.cpp
pybamm/solvers/c_solvers/idaklu/casadi_sundials_functions.hpp
pybamm/solvers/c_solvers/idaklu/idaklu_jax.cpp
pybamm/solvers/c_solvers/idaklu/idaklu_jax.hpp
# pybind11 interface
pybamm/solvers/c_solvers/idaklu.cpp
# IDAKLU solver (SUNDIALS)
pybamm/solvers/c_solvers/idaklu/idaklu_solver.hpp
pybamm/solvers/c_solvers/idaklu/IDAKLUSolver.cpp
pybamm/solvers/c_solvers/idaklu/IDAKLUSolver.hpp
pybamm/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP.inl
pybamm/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP.hpp
pybamm/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP_solvers.cpp
pybamm/solvers/c_solvers/idaklu/IDAKLUSolverOpenMP_solvers.hpp
pybamm/solvers/c_solvers/idaklu/sundials_functions.inl
pybamm/solvers/c_solvers/idaklu/sundials_functions.hpp
pybamm/solvers/c_solvers/idaklu/IdakluJax.cpp
pybamm/solvers/c_solvers/idaklu/IdakluJax.hpp
pybamm/solvers/c_solvers/idaklu/common.hpp
pybamm/solvers/c_solvers/idaklu/python.hpp
pybamm/solvers/c_solvers/idaklu/python.cpp
pybamm/solvers/c_solvers/idaklu/solution.cpp
pybamm/solvers/c_solvers/idaklu/solution.hpp
pybamm/solvers/c_solvers/idaklu/options.hpp
pybamm/solvers/c_solvers/idaklu/options.cpp
pybamm/solvers/c_solvers/idaklu.cpp
pybamm/solvers/c_solvers/idaklu/Solution.cpp
pybamm/solvers/c_solvers/idaklu/Solution.hpp
pybamm/solvers/c_solvers/idaklu/Options.hpp
pybamm/solvers/c_solvers/idaklu/Options.cpp
# IDAKLU expressions / function evaluation [abstract]
pybamm/solvers/c_solvers/idaklu/Expressions/Expressions.hpp
pybamm/solvers/c_solvers/idaklu/Expressions/Base/Expression.hpp
pybamm/solvers/c_solvers/idaklu/Expressions/Base/ExpressionSet.hpp
pybamm/solvers/c_solvers/idaklu/Expressions/Base/ExpressionTypes.hpp
# IDAKLU expressions - concrete implementations
${IDAKLU_EXPR_CASADI_SOURCE_FILES}
${IDAKLU_EXPR_IREE_SOURCE_FILES}
)

if (NOT DEFINED USE_PYTHON_CASADI)
Expand Down Expand Up @@ -113,3 +157,16 @@ else()
endif()
include_directories(${SuiteSparse_INCLUDE_DIRS})
target_link_libraries(idaklu PRIVATE ${SuiteSparse_LIBRARIES})

# IREE (MLIR compiler and runtime library) build settings
if(${PYBAMM_IDAKLU_EXPR_IREE} STREQUAL "ON" )
set(IREE_BUILD_COMPILER ON)
set(IREE_BUILD_TESTS OFF)
set(IREE_BUILD_SAMPLES OFF)
add_subdirectory(iree EXCLUDE_FROM_ALL)
set(IREE_COMPILER_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/iree/compiler")
target_include_directories(idaklu SYSTEM PRIVATE "${IREE_COMPILER_ROOT}/bindings/c/iree/compiler")
target_compile_options(idaklu PRIVATE ${IREE_DEFAULT_COPTS})
target_link_libraries(idaklu PRIVATE iree_compiler_bindings_c_loader)
target_link_libraries(idaklu PRIVATE iree_runtime_runtime)
endif()
2 changes: 2 additions & 0 deletions bandit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# To ignore false flagging of assert statements in tests by Codacy.
skips: ['B101']
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n"
]
}
],
"source": [
Expand Down Expand Up @@ -163,18 +153,19 @@
"name": "stderr",
"output_type": "stream",
"text": [
"At t = 522.66 and h = 1.1556e-13, the corrector convergence failed repeatedly or with |h| = hmin.\n"
"At t = 339.952 and h = 1.4337e-18, the corrector convergence failed repeatedly or with |h| = hmin.\n",
"At t = 522.687 and h = 4.04917e-14, the corrector convergence failed repeatedly or with |h| = hmin.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5ab1f22de6af4878b6ca43d27ffc01c5",
"model_id": "93feca98298f4111909ae487e2a1e273",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=0.0, description='t', max=40.132949019384355, step=0.40132949019384356"
"interactive(children=(FloatSlider(value=0.0, description='t', max=40.13268704803602, step=0.4013268704803602),"
]
},
"metadata": {},
Expand All @@ -183,7 +174,7 @@
{
"data": {
"text/plain": [
"<pybamm.plotting.quick_plot.QuickPlot at 0x7f1a11f76690>"
"<pybamm.plotting.quick_plot.QuickPlot at 0x16520e690>"
]
},
"execution_count": 5,
Expand Down Expand Up @@ -211,12 +202,12 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7cdac234d74241a2814918053454f6a6",
"model_id": "4d6e43032f4e4aa6be5843c4916b4b50",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=0.0, description='t', max=13.076977041121545, step=0.13076977041121546"
"interactive(children=(FloatSlider(value=0.0, description='t', max=13.076887099589111, step=0.1307688709958911)"
]
},
"metadata": {},
Expand All @@ -225,7 +216,7 @@
{
"data": {
"text/plain": [
"<pybamm.plotting.quick_plot.QuickPlot at 0x7f1a105ecb50>"
"<pybamm.plotting.quick_plot.QuickPlot at 0x1696cf290>"
]
},
"execution_count": 6,
Expand Down Expand Up @@ -255,7 +246,7 @@
{
"data": {
"text/plain": [
"_Step(C-rate, 1.0, duration=1 hour, period=1 minute, temperature=25oC, tags=['tag1'], description=Discharge at 1C for 1 hour)"
"Step(1.0, duration=1 hour, period=1 minute, temperature=25oC, tags=['tag1'], description=Discharge at 1C for 1 hour, direction=Discharge)"
]
},
"execution_count": 7,
Expand Down Expand Up @@ -293,7 +284,7 @@
{
"data": {
"text/plain": [
"_Step(current, 1, duration=1 hour, termination=2.5 V)"
"Step(1, duration=1 hour, termination=2.5 V, direction=Discharge)"
]
},
"execution_count": 8,
Expand Down Expand Up @@ -321,7 +312,7 @@
{
"data": {
"text/plain": [
"_Step(current, 1.0, duration=1 hour, termination=2.5V, description=Discharge at 1A for 1 hour or until 2.5V)"
"Step(1.0, duration=1 hour, termination=2.5V, description=Discharge at 1A for 1 hour or until 2.5V, direction=Discharge)"
]
},
"execution_count": 9,
Expand All @@ -348,10 +339,78 @@
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-07-10 14:41:02.625 - [WARNING] callbacks.on_experiment_infeasible_time(240): \n",
"\n",
"\tExperiment is infeasible: default duration (1.0 seconds) was reached during 'Step([[ 0.00000000e+00 0.00000000e+00]\n",
" [ 1.69491525e-02 5.31467428e-02]\n",
" [ 3.38983051e-02 1.05691312e-01]\n",
" [ 5.08474576e-02 1.57038356e-01]\n",
" [ 6.77966102e-02 2.06606093e-01]\n",
" [ 8.47457627e-02 2.53832900e-01]\n",
" [ 1.01694915e-01 2.98183679e-01]\n",
" [ 1.18644068e-01 3.39155918e-01]\n",
" [ 1.35593220e-01 3.76285385e-01]\n",
" [ 1.52542373e-01 4.09151388e-01]\n",
" [ 1.69491525e-01 4.37381542e-01]\n",
" [ 1.86440678e-01 4.60655989e-01]\n",
" [ 2.03389831e-01 4.78711019e-01]\n",
" [ 2.20338983e-01 4.91342062e-01]\n",
" [ 2.37288136e-01 4.98406004e-01]\n",
" [ 2.54237288e-01 4.99822806e-01]\n",
" [ 2.71186441e-01 4.95576416e-01]\n",
" [ 2.88135593e-01 4.85714947e-01]\n",
" [ 3.05084746e-01 4.70350133e-01]\n",
" [ 3.22033898e-01 4.49656065e-01]\n",
" [ 3.38983051e-01 4.23867214e-01]\n",
" [ 3.55932203e-01 3.93275778e-01]\n",
" [ 3.72881356e-01 3.58228370e-01]\n",
" [ 3.89830508e-01 3.19122092e-01]\n",
" [ 4.06779661e-01 2.76400033e-01]\n",
" [ 4.23728814e-01 2.30546251e-01]\n",
" [ 4.40677966e-01 1.82080288e-01]\n",
" [ 4.57627119e-01 1.31551282e-01]\n",
" [ 4.74576271e-01 7.95317480e-02]\n",
" [ 4.91525424e-01 2.66110874e-02]\n",
" [ 5.08474576e-01 -2.66110874e-02]\n",
" [ 5.25423729e-01 -7.95317480e-02]\n",
" [ 5.42372881e-01 -1.31551282e-01]\n",
" [ 5.59322034e-01 -1.82080288e-01]\n",
" [ 5.76271186e-01 -2.30546251e-01]\n",
" [ 5.93220339e-01 -2.76400033e-01]\n",
" [ 6.10169492e-01 -3.19122092e-01]\n",
" [ 6.27118644e-01 -3.58228370e-01]\n",
" [ 6.44067797e-01 -3.93275778e-01]\n",
" [ 6.61016949e-01 -4.23867214e-01]\n",
" [ 6.77966102e-01 -4.49656065e-01]\n",
" [ 6.94915254e-01 -4.70350133e-01]\n",
" [ 7.11864407e-01 -4.85714947e-01]\n",
" [ 7.28813559e-01 -4.95576416e-01]\n",
" [ 7.45762712e-01 -4.99822806e-01]\n",
" [ 7.62711864e-01 -4.98406004e-01]\n",
" [ 7.79661017e-01 -4.91342062e-01]\n",
" [ 7.96610169e-01 -4.78711019e-01]\n",
" [ 8.13559322e-01 -4.60655989e-01]\n",
" [ 8.30508475e-01 -4.37381542e-01]\n",
" [ 8.47457627e-01 -4.09151388e-01]\n",
" [ 8.64406780e-01 -3.76285385e-01]\n",
" [ 8.81355932e-01 -3.39155918e-01]\n",
" [ 8.98305085e-01 -2.98183679e-01]\n",
" [ 9.15254237e-01 -2.53832900e-01]\n",
" [ 9.32203390e-01 -2.06606093e-01]\n",
" [ 9.49152542e-01 -1.57038356e-01]\n",
" [ 9.66101695e-01 -1.05691312e-01]\n",
" [ 9.83050847e-01 -5.31467428e-02]\n",
" [ 1.00000000e+00 -1.22464680e-16]], duration=1.0, period=0.016949152542372836, direction=Rest)'. The returned solution only contains up to step 1 of cycle 1. Please specify a duration in the step instructions.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "730d5e19b17e447ebde5679de68c46ef",
"model_id": "6364b4579fc447e2a607f2f8414172ba",
"version_major": 2,
"version_minor": 0
},
Expand All @@ -365,7 +424,7 @@
{
"data": {
"text/plain": [
"<pybamm.plotting.quick_plot.QuickPlot at 0x7f1a1a4c2ed0>"
"<pybamm.plotting.quick_plot.QuickPlot at 0x16a1d8d90>"
]
},
"execution_count": 10,
Expand Down Expand Up @@ -419,13 +478,14 @@
"output_type": "stream",
"text": [
"[1] Joel A. E. Andersson, Joris Gillis, Greg Horn, James B. Rawlings, and Moritz Diehl. CasADi – A software framework for nonlinear optimization and optimal control. Mathematical Programming Computation, 11(1):1–36, 2019. doi:10.1007/s12532-018-0139-4.\n",
"[2] Marc Doyle, Thomas F. Fuller, and John Newman. Modeling of galvanostatic charge and discharge of the lithium/polymer/insertion cell. Journal of the Electrochemical society, 140(6):1526–1533, 1993. doi:10.1149/1.2221597.\n",
"[3] Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, Ralf Gommers, Pauli Virtanen, David Cournapeau, Eric Wieser, Julian Taylor, Sebastian Berg, Nathaniel J. Smith, and others. Array programming with NumPy. Nature, 585(7825):357–362, 2020. doi:10.1038/s41586-020-2649-2.\n",
"[4] Scott G. Marquis, Valentin Sulzer, Robert Timms, Colin P. Please, and S. Jon Chapman. An asymptotic derivation of a single particle model with electrolyte. Journal of The Electrochemical Society, 166(15):A3693–A3706, 2019. doi:10.1149/2.0341915jes.\n",
"[5] Peyman Mohtat, Suhak Lee, Jason B Siegel, and Anna G Stefanopoulou. Towards better estimability of electrode-specific state of health: decoding the cell expansion. Journal of Power Sources, 427:101–111, 2019.\n",
"[6] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1):14, 2021. doi:10.5334/jors.309.\n",
"[7] Pauli Virtanen, Ralf Gommers, Travis E. Oliphant, Matt Haberland, Tyler Reddy, David Cournapeau, Evgeni Burovski, Pearu Peterson, Warren Weckesser, Jonathan Bright, and others. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods, 17(3):261–272, 2020. doi:10.1038/s41592-019-0686-2.\n",
"[8] Andrew Weng, Jason B Siegel, and Anna Stefanopoulou. Differential voltage analysis for battery manufacturing process control. arXiv preprint arXiv:2303.07088, 2023.\n",
"[2] Von DAG Bruggeman. Berechnung verschiedener physikalischer konstanten von heterogenen substanzen. i. dielektrizitätskonstanten und leitfähigkeiten der mischkörper aus isotropen substanzen. Annalen der physik, 416(7):636–664, 1935.\n",
"[3] Marc Doyle, Thomas F. Fuller, and John Newman. Modeling of galvanostatic charge and discharge of the lithium/polymer/insertion cell. Journal of the Electrochemical society, 140(6):1526–1533, 1993. doi:10.1149/1.2221597.\n",
"[4] Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, Ralf Gommers, Pauli Virtanen, David Cournapeau, Eric Wieser, Julian Taylor, Sebastian Berg, Nathaniel J. Smith, and others. Array programming with NumPy. Nature, 585(7825):357–362, 2020. doi:10.1038/s41586-020-2649-2.\n",
"[5] Scott G. Marquis, Valentin Sulzer, Robert Timms, Colin P. Please, and S. Jon Chapman. An asymptotic derivation of a single particle model with electrolyte. Journal of The Electrochemical Society, 166(15):A3693–A3706, 2019. doi:10.1149/2.0341915jes.\n",
"[6] Peyman Mohtat, Suhak Lee, Jason B Siegel, and Anna G Stefanopoulou. Towards better estimability of electrode-specific state of health: decoding the cell expansion. Journal of Power Sources, 427:101–111, 2019.\n",
"[7] Valentin Sulzer, Scott G. Marquis, Robert Timms, Martin Robinson, and S. Jon Chapman. Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1):14, 2021. doi:10.5334/jors.309.\n",
"[8] Pauli Virtanen, Ralf Gommers, Travis E. Oliphant, Matt Haberland, Tyler Reddy, David Cournapeau, Evgeni Burovski, Pearu Peterson, Warren Weckesser, Jonathan Bright, and others. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods, 17(3):261–272, 2020. doi:10.1038/s41592-019-0686-2.\n",
"[9] Andrew Weng, Jason B Siegel, and Anna Stefanopoulou. Differential voltage analysis for battery manufacturing process control. arXiv preprint arXiv:2303.07088, 2023.\n",
"\n"
]
}
Expand Down
Binary file modified docs/source/examples/notebooks/models/spm1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit ba6a5e1

Please sign in to comment.