-
Notifications
You must be signed in to change notification settings - Fork 137
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
breaking: drop support of py3.7. fix: pin scipy constants to version 2018 #774
Changes from all commits
8d14aa9
213bdb2
77c19de
77950cb
16b844d
759d3ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -4,11 +4,49 @@ | |||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
from scipy import constants # noqa: TID253 | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
AVOGADRO = constants.Avogadro # Avagadro constant | ||||||||||||||||||||||||||||||||||||
ELE_CHG = constants.elementary_charge # Elementary Charge, in C | ||||||||||||||||||||||||||||||||||||
BOHR = constants.value("atomic unit of length") # Bohr, in m | ||||||||||||||||||||||||||||||||||||
HARTREE = constants.value("atomic unit of energy") # Hartree, in Jole | ||||||||||||||||||||||||||||||||||||
RYDBERG = constants.Rydberg * constants.h * constants.c # Rydberg, in Jole | ||||||||||||||||||||||||||||||||||||
physical_constants = {} | ||||||||||||||||||||||||||||||||||||
# use constants up to 2018 | ||||||||||||||||||||||||||||||||||||
physical_constants.update(constants._codata._physical_constants_2002) | ||||||||||||||||||||||||||||||||||||
physical_constants.update(constants._codata._physical_constants_2006) | ||||||||||||||||||||||||||||||||||||
physical_constants.update(constants._codata._physical_constants_2010) | ||||||||||||||||||||||||||||||||||||
physical_constants.update(constants._codata._physical_constants_2014) | ||||||||||||||||||||||||||||||||||||
physical_constants.update(constants._codata._physical_constants_2018) | ||||||||||||||||||||||||||||||||||||
Comment on lines
+9
to
+13
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Avoid accessing private attributes of Accessing private attributes like To fix this issue and pin the constants to the CODATA 2018 values, you can manually define the required constants. Here's how you can modify the code: -physical_constants = {}
-# use constants up to 2018
-physical_constants.update(constants._codata._physical_constants_2002)
-physical_constants.update(constants._codata._physical_constants_2006)
-physical_constants.update(constants._codata._physical_constants_2010)
-physical_constants.update(constants._codata._physical_constants_2014)
-physical_constants.update(constants._codata._physical_constants_2018)
-# copied from scipy
-def scipy_constant_value(key: str) -> float:
- constants._codata._check_obsolete(key)
- return physical_constants[key][0]
+physical_constants = {
+ "Avogadro constant": 6.02214076e23, # mol^-1
+ "elementary charge": 1.602176634e-19, # C
+ "atomic unit of length": 5.29177210903e-11, # m
+ "atomic unit of energy": 4.3597447222071e-18, # J
+ "Rydberg constant": 10973731.568160, # m^-1
+ "Planck constant": 6.62607015e-34, # J·s
+ "speed of light in vacuum": 299792458, # m·s^-1
+}
+
+def constant_value(key: str) -> float:
+ return physical_constants[key] This approach ensures that you're using the CODATA 2018 values without relying on private attributes. 📝 Committable suggestion
Suggested change
🧰 Tools🪛 GitHub Actions: Python package[error] 9-9: Failed to access '_codata' attribute from scipy.constants module. The line 'physical_constants.update(constants._codata._physical_constants_2002)' is trying to access a private/non-existent attribute. |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
# copied from scipy | ||||||||||||||||||||||||||||||||||||
def scipy_constant_value(key: str) -> float: | ||||||||||||||||||||||||||||||||||||
"""Value in physical_constants indexed by key. | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
Parameters | ||||||||||||||||||||||||||||||||||||
---------- | ||||||||||||||||||||||||||||||||||||
key : Python string | ||||||||||||||||||||||||||||||||||||
Key in dictionary `physical_constants` | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
Returns | ||||||||||||||||||||||||||||||||||||
------- | ||||||||||||||||||||||||||||||||||||
value : float | ||||||||||||||||||||||||||||||||||||
Value in `physical_constants` corresponding to `key` | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
Examples | ||||||||||||||||||||||||||||||||||||
-------- | ||||||||||||||||||||||||||||||||||||
>>> from scipy import constants | ||||||||||||||||||||||||||||||||||||
>>> constants.value('elementary charge') | ||||||||||||||||||||||||||||||||||||
1.602176634e-19 | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||
constants._codata._check_obsolete(key) | ||||||||||||||||||||||||||||||||||||
return physical_constants[key][0] | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
AVOGADRO = scipy_constant_value("Avogadro constant") # Avagadro constant | ||||||||||||||||||||||||||||||||||||
ELE_CHG = scipy_constant_value("elementary charge") # Elementary Charge, in C | ||||||||||||||||||||||||||||||||||||
BOHR = scipy_constant_value("atomic unit of length") # Bohr, in m | ||||||||||||||||||||||||||||||||||||
HARTREE = scipy_constant_value("atomic unit of energy") # Hartree, in Jole | ||||||||||||||||||||||||||||||||||||
RYDBERG = ( | ||||||||||||||||||||||||||||||||||||
scipy_constant_value("Rydberg constant") | ||||||||||||||||||||||||||||||||||||
* scipy_constant_value("Planck constant") | ||||||||||||||||||||||||||||||||||||
* scipy_constant_value("speed of light in vacuum") | ||||||||||||||||||||||||||||||||||||
) # Rydberg, in Jole | ||||||||||||||||||||||||||||||||||||
wanghan-iapcm marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
# energy conversions | ||||||||||||||||||||||||||||||||||||
econvs = { | ||||||||||||||||||||||||||||||||||||
|
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.
Remove
@lru_cache
to prevent potential memory leaks.Using
@lru_cache
on methods can lead to memory leaks as it keeps a reference toself
, potentially preventing proper garbage collection of class instances. Since these properties compute errors between two systems, the performance benefit of caching might not outweigh the risk of memory leaks.Apply this diff to fix the issue:
If caching is necessary for performance reasons, consider:
Also applies to: 127-127, 156-156, 169-169
🧰 Tools
🪛 Ruff (0.8.2)
119-119: Use of
functools.lru_cache
orfunctools.cache
on methods can lead to memory leaks(B019)