-
-
Notifications
You must be signed in to change notification settings - Fork 580
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Resolve default imports for optional dependencies #3475
Resolve default imports for optional dependencies #3475
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, @arjxn-py! Some comments below -
This is how @pybamm._check_and_import_optional_dependency(name="pybtex")
class Citations:
def print_citation(...):
... This way, it would raise a warning plus a helpful message if Although these function-scoped imports are also a great idea btw. We already do it for TIL that |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## develop #3475 +/- ##
========================================
Coverage 99.58% 99.58%
========================================
Files 256 256
Lines 20058 20116 +58
========================================
+ Hits 19975 20033 +58
Misses 83 83 ☔ View full report in Codecov by Sentry. |
I've finally managed to make a decorator function but there are complications with it :
I'll also put in some efforts to do it with simple reusable function first. |
I think this should be fine, the decorator should just execute "silently" and return nothing if a dependency is found. Is there a way to "lazy-load" an entire module at the time of import, e.g., to receive no warnings when doing |
In that case, it would be fine to do this for (inside) methods only and not for classes: this practice won't conform to DRY, but atleast it won't apply to private methods available under a class (we want to mark just those pieces of functionality which are available as a part of the public API) |
See also: https://scientific-python.org/specs/spec-0001/ (this demands a separate issue, I guess) |
Yes, separate and important issue. Importing pybamm usually takes relatively more time than other libraries, and I think this should fix that. |
Yes, happy to open one issue for it & also look into the same, @agriyakhetarpal do let me know if you want to open with some suggestion or simplifications. |
I see that there are some issues with building the documentation (there is a possibility it might break some of our internal Sphinx extensions that rely on |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Took over and made some changes. Probably the last change request (phew)
We should also be testing the "lite" pybamm in CI (as pointed out by @agriyakhetarpal), but I think we can do that after this release. The testing part will also tie up nicely with unittest to pytest migration (pytest.importorskip
is quite intelligent and can be added module-wide).
Check out this pull request on See visual diffs & provide feedback on Jupyter Notebooks. Powered by ReviewNB |
fb9e7ad
to
4711362
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a ton for the amazing work, @arjxn-py! 🙂
I'll wait for others to review this before merging.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good now, thank you @arjxn-py and @Saransh-cpp! Just needs a CHANGELOG entry and a documentation update to mark anytree
as a required dependency in the installation guide.
I tested all example scripts with pybamm[plot]
and everything worked as expected. I would also recommend re-running the failed integration tests and notebook tests just to be on the safer side of things.
Not sure why pre-commit.ci is failing now 😕 |
Not related to this PR, se #3519 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me, thank you very much to all who contributed fixing this issue!
Resolve default imports for optional dependencies
* Bump to v23.9rc0 * Merge pull request #3412 from agriyakhetarpal/drop-i686-manylinux2014-support Drop support for i686 manylinux * Merge pull request #3413 from Saransh-cpp/improve-release-workflow Improve release workflow, add a note, bump version manually * Merge pull request #3436 from Saransh-cpp/fortnightly-wheels Build wheels on the 1st and 15th of every month * Merge pull request #3445 from pybamm-team/issue-3428-rename-exchange #3428 exchange-current density error * Merge pull request #3449 from pybamm-team/i3431-windows-wheels Fix failing windows wheel builds * Merge pull request #3456 from abillscmu/issue-3224-initial_soc make initial soc work with half cell models * Merge pull request #3467 from abillscmu/bugfix/initial_soh * Merge pull request #3423 from jsbrittain/jax_gpu JaxSolver fails when using GPU support with no input parameters * Fix changelog * Merge pull request #3475 from arjxn-py/fix-default-imports Resolve default imports for optional dependencies * Bump - `v23.9rc1` * Fix date in CHANGELOG * Bump version to v23.9 * Fix docs about Jax solver compatibility with Python versions (#3702) * Ensure correct Python versions for Jax solver compatibility * Simplify array of Python versions Co-authored-by: Eric G. Kratz <[email protected]> * Use different conjunction Co-authored-by: Eric G. Kratz <[email protected]> --------- Co-authored-by: Eric G. Kratz <[email protected]> * Merge pull request #3706 from agriyakhetarpal/fix-pybamm-install-odes Make `pybamm_install_odes` a bit more robust * #3690 fix issue with skipped steps (#3708) * #3690 fix issue with skipped steps * #3690 changelog * #3690 add test * #3611 use actual cell volume for average total heating (#3707) * #3611 use actual cell volume for average total heating * #3611 changelog * #3611 account for number of electrode pairs * #3611 update variable names * Improve the release workflow (#3737) * Try fixing the release workflow * Turn off safety * Fix CHANGELOG * Add OS * Use regex for better matches * Update instructions, add safety checks * checkout to the version branch for the final release * Bump to v24.1rc1 * #3630 fix interpolant shape error (#3761) * #3630 fix interpolant shape error * #3630 changelog * Bump to v24.1rc2 * Bump to v24.1 * Fix doctests failures in scheduled tests (#3784) Closes #3781 * Resolve broken `scikits.odes` installation on self-hosted M-series runner (#3785) * Try fixing M-series runner tests This is being done by adding SuiteSparse and SUNDIALS installations which might have been missing on the runner, which broke `scikits.odes`. * Don't use Homebrew SUNDIALS, use LD_LIBRARY_PATH * Don't use Homebrew to install SUNDIALS * Force remove pip cache for `scikits.odes` --------- Co-authored-by: Eric G. Kratz <[email protected]> * add temperature dependence to MSMR model * changelog * fix tests * fix example * rob comments * update notebook --------- Co-authored-by: Ferran Brosa Planella <[email protected]> Co-authored-by: Saransh Chopra <[email protected]> Co-authored-by: Martin Robinson <[email protected]> Co-authored-by: Agriya Khetarpal <[email protected]> Co-authored-by: Eric G. Kratz <[email protected]> Co-authored-by: Robert Timms <[email protected]> Co-authored-by: Saransh-cpp <[email protected]>
* Bump to v23.9rc0 * Merge pull request pybamm-team#3412 from agriyakhetarpal/drop-i686-manylinux2014-support Drop support for i686 manylinux * Merge pull request pybamm-team#3413 from Saransh-cpp/improve-release-workflow Improve release workflow, add a note, bump version manually * Merge pull request pybamm-team#3436 from Saransh-cpp/fortnightly-wheels Build wheels on the 1st and 15th of every month * Merge pull request pybamm-team#3445 from pybamm-team/issue-3428-rename-exchange pybamm-team#3428 exchange-current density error * Merge pull request pybamm-team#3449 from pybamm-team/i3431-windows-wheels Fix failing windows wheel builds * Merge pull request pybamm-team#3456 from abillscmu/issue-3224-initial_soc make initial soc work with half cell models * Merge pull request pybamm-team#3467 from abillscmu/bugfix/initial_soh * Merge pull request pybamm-team#3423 from jsbrittain/jax_gpu JaxSolver fails when using GPU support with no input parameters * Fix changelog * Merge pull request pybamm-team#3475 from arjxn-py/fix-default-imports Resolve default imports for optional dependencies * Bump - `v23.9rc1` * Fix date in CHANGELOG * Bump version to v23.9 * Fix docs about Jax solver compatibility with Python versions (pybamm-team#3702) * Ensure correct Python versions for Jax solver compatibility * Simplify array of Python versions Co-authored-by: Eric G. Kratz <[email protected]> * Use different conjunction Co-authored-by: Eric G. Kratz <[email protected]> --------- Co-authored-by: Eric G. Kratz <[email protected]> * Merge pull request pybamm-team#3706 from agriyakhetarpal/fix-pybamm-install-odes Make `pybamm_install_odes` a bit more robust * pybamm-team#3690 fix issue with skipped steps (pybamm-team#3708) * pybamm-team#3690 fix issue with skipped steps * pybamm-team#3690 changelog * pybamm-team#3690 add test * pybamm-team#3611 use actual cell volume for average total heating (pybamm-team#3707) * pybamm-team#3611 use actual cell volume for average total heating * pybamm-team#3611 changelog * pybamm-team#3611 account for number of electrode pairs * pybamm-team#3611 update variable names * Improve the release workflow (pybamm-team#3737) * Try fixing the release workflow * Turn off safety * Fix CHANGELOG * Add OS * Use regex for better matches * Update instructions, add safety checks * checkout to the version branch for the final release * Bump to v24.1rc1 * pybamm-team#3630 fix interpolant shape error (pybamm-team#3761) * pybamm-team#3630 fix interpolant shape error * pybamm-team#3630 changelog * Bump to v24.1rc2 * Bump to v24.1 * Fix doctests failures in scheduled tests (pybamm-team#3784) Closes pybamm-team#3781 * Resolve broken `scikits.odes` installation on self-hosted M-series runner (pybamm-team#3785) * Try fixing M-series runner tests This is being done by adding SuiteSparse and SUNDIALS installations which might have been missing on the runner, which broke `scikits.odes`. * Don't use Homebrew SUNDIALS, use LD_LIBRARY_PATH * Don't use Homebrew to install SUNDIALS * Force remove pip cache for `scikits.odes` --------- Co-authored-by: Eric G. Kratz <[email protected]> * add temperature dependence to MSMR model * changelog * fix tests * fix example * rob comments * update notebook --------- Co-authored-by: Ferran Brosa Planella <[email protected]> Co-authored-by: Saransh Chopra <[email protected]> Co-authored-by: Martin Robinson <[email protected]> Co-authored-by: Agriya Khetarpal <[email protected]> Co-authored-by: Eric G. Kratz <[email protected]> Co-authored-by: Robert Timms <[email protected]> Co-authored-by: Saransh-cpp <[email protected]>
Resolve default imports for optional dependencies
Description
With this PR i'm trying to fix the error getting while importing
pybamm
without any extra dependencies forpybamm=23.9rc0
Fixes #3473
Type of change
Please add a line in the relevant section of CHANGELOG.md to document the change (include PR #) - note reverse order of PR #s. If necessary, also add to the list of breaking changes.
Key checklist:
$ pre-commit run
(or$ nox -s pre-commit
) (see CONTRIBUTING.md for how to set this up to run automatically when committing locally, in just two lines of code)$ python run-tests.py --all
(or$ nox -s tests
)$ python run-tests.py --doctest
(or$ nox -s doctests
)You can run integration tests, unit tests, and doctests together at once, using
$ python run-tests.py --quick
(or$ nox -s quick
).Further checks: