diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a34606e..096b072 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -66,6 +66,6 @@ repos: rev: v1.13.0 hooks: - id: mypy - additional_dependencies: [types-all] + # additional_dependencies: [types-all] args: [--config-file=pyproject.toml, --ignore-missing-imports] exclude: "test|examples/|test/conftest.py" diff --git a/README.md b/README.md index 5178059..4d8ef75 100644 --- a/README.md +++ b/README.md @@ -217,6 +217,9 @@ param = { "a2": positions.new_tensor(4.60230534), } +# parameters can also be obtained using the functional name: +# param = d4.get_params("tpssh") + energy = d4.dftd4(numbers, positions, charge, param) torch.set_printoptions(precision=10) print(energy) diff --git a/docs/index.rst b/docs/index.rst index 21cb103..1e3ad80 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -106,6 +106,9 @@ The following example shows how to calculate the DFT-D4 dispersion energy for a "a2": positions.new_tensor(4.60230534), } + # parameters can also be obtained using the functional name: + # param = d4.get_params("tpssh") + energy = d4.dftd4(numbers, positions, charge, param) torch.set_printoptions(precision=10) print(energy) diff --git a/environment.yaml b/environment.yaml index fed1126..3252c4a 100644 --- a/environment.yaml +++ b/environment.yaml @@ -25,3 +25,4 @@ dependencies: - pytorch>=1.11.0,<2.5 - tad-mctc - tad-multicharge + - tomli diff --git a/pyproject.toml b/pyproject.toml index ac4ae77..22ce155 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,4 +48,4 @@ plugins = ["covdefaults"] source = ["./src"] [tool.coverage.report] -fail_under = 90 +fail_under = 95 diff --git a/setup.cfg b/setup.cfg index 6910216..eaadc6f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,6 +33,7 @@ install_requires = numpy<2 tad-mctc tad-multicharge + tomli torch>=1.11,<2.5 typing-extensions python_requires = >=3.8, <3.13 @@ -64,5 +65,6 @@ tox = [options.package_data] tad_dftd4 = py.typed + parameters.toml **/*.npy **/*.npz diff --git a/src/tad_dftd4/__init__.py b/src/tad_dftd4/__init__.py index bafded7..acdf953 100644 --- a/src/tad_dftd4/__init__.py +++ b/src/tad_dftd4/__init__.py @@ -90,6 +90,7 @@ from . import cutoff, damping, data, disp, model, ncoord, typing from .__version__ import __version__ +from .damping import get_params from .disp import dftd4 __all__ = [ @@ -99,6 +100,7 @@ "data", "dftd4", "disp", + "get_params", "model", "ncoord", "typing", diff --git a/src/tad_dftd4/damping/__init__.py b/src/tad_dftd4/damping/__init__.py index 5cfcd7d..8fb2dfe 100644 --- a/src/tad_dftd4/damping/__init__.py +++ b/src/tad_dftd4/damping/__init__.py @@ -21,4 +21,5 @@ Available damping schemes for two- and three-body dispersion terms. """ from .atm import * +from .parameters import * from .rational import * diff --git a/src/tad_dftd4/damping/parameters/__init__.py b/src/tad_dftd4/damping/parameters/__init__.py new file mode 100644 index 0000000..0b82079 --- /dev/null +++ b/src/tad_dftd4/damping/parameters/__init__.py @@ -0,0 +1,23 @@ +# This file is part of tad-dftd4. +# +# SPDX-Identifier: Apache-2.0 +# Copyright (C) 2024 Grimme Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Damping Parameters +================== + +Access damping parameters for all supported DFAs. +""" +from .read import * diff --git a/src/tad_dftd4/damping/parameters/parameters.toml b/src/tad_dftd4/damping/parameters/parameters.toml new file mode 100644 index 0000000..437e675 --- /dev/null +++ b/src/tad_dftd4/damping/parameters/parameters.toml @@ -0,0 +1,508 @@ +[default] +d4 = ["bj-eeq-atm"] + +[default.parameter] +d4.bj-eeq-two = { s6=1.0, s9=0.0, alp=16.0, damping="bj", mbd="none" } +d4.bj-eeq-atm = { s6=1.0, s9=1.0, alp=16.0, damping="bj", mbd="approx-atm" } +d4.bj-eeq-mbd = { s6=1.0, s9=1.0, alp=16.0, damping="bj", mbd="rpa-like" } + +[parameter.am05] +reference.doi = ["10.1103/PhysRevB.72.085108", "10.1063/1.2835596"] +d4.bj-eeq-atm = { s8=1.71885838, a1=0.47901431, a2=5.96771581 } + +[parameter.b1b95] +reference.doi = ["10.1063/1.470829"] +d4.bj-eeq-atm = { s8=1.27701162, a1=0.40554715, a2=4.63323074, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.19549420, a1=0.39241474, a2=4.60397611, doi="10.1063/1.5090222" } + +[parameter.b1lyp] +d4.bj-eeq-atm = { s8=1.98553711, a1=0.39309040, a2=4.55465145, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.94609514, a1=0.38643351, a2=4.54135968, doi="10.1063/1.5090222" } + +[parameter.b1p] +d4.bj-eeq-atm = { s8=3.36115015, a1=0.48665293, a2=5.05219572, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.38693011, a1=0.48478615, a2=5.04361224, doi="10.1063/1.5090222" } + +[parameter.b1pw] +d4.bj-eeq-atm = { s8=3.02227550, a1=0.47396846, a2=4.49845309, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.98402204, a1=0.46862950, a2=4.48637849, doi="10.1063/1.5090222" } + +[parameter.b2gpplyp] +reference.doi = ["10.1021/jp801805p"] +d4.bj-eeq-atm = { s6=0.5600, s8=0.94633372, a1=0.42907301, a2=5.18802602, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.5600, s8=1.00494214, a1=0.42447353, a2=5.19461329, doi="10.1063/1.5090222" } + +[parameter.b2plyp] +reference.doi = ["10.1063/1.2148954"] +d4.bj-eeq-atm = { s6=0.6400, s8=1.16888646, a1=0.44154604, a2=4.73114642, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.6400, s8=1.15117773, a1=0.42666167, a2=4.73635790, doi="10.1063/1.5090222" } + +[parameter.b3lyp] +reference.doi = ["10.1063/1.464913", "10.1021/j100096a001"] +d4.bj-eeq-atm = { s8=2.02929367, a1=0.40868035, a2=4.53807137, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.00246246, a1=0.40276191, a2=4.52778320, doi="10.1063/1.5090222" } + +[parameter.b3p] +reference.doi = ["10.1063/1.464913", "10.1103/PhysRevA.38.3098", "10.1103/PhysRevB.33.8822", "10.1103/PhysRevB.34.7406"] +d4.bj-eeq-atm = { s8=3.08822155, a1=0.47324238, a2=4.98682134, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.14456298, a1=0.47187947, a2=4.98624258, doi="10.1063/1.5090222" } + +[parameter.b3pw] +reference.doi = ["10.1063/1.464913"] +d4.bj-eeq-atm = { s8=2.88364295, a1=0.46990860, a2=4.51641422, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.85656268, a1=0.46491801, a2=4.50601452, doi="10.1063/1.5090222" } + +[parameter.b97] +d4.bj-eeq-atm = { s8=0.87854260, a1=0.29319126, a2=4.51647719, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.81171211, a1=0.28461283, a2=4.48691468, doi="10.1063/1.5090222" } + +[parameter.bhlyp] +reference.doi = ["10.1063/1.464304"] +d4.bj-eeq-atm = { s8=1.65281646, a1=0.27263660, a2=5.48634586, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.68082973, a1=0.26835837, a2=5.48847218, doi="10.1063/1.5090222" } + +[parameter.blyp] +reference.doi = ["10.1103/PhysRevA.38.3098", "10.1103/PhysRevB.37.785", "10.1016/0009-2614(89)87234-3"] +d4.bj-eeq-atm = { s8=2.34076671, a1=0.44488865, a2=4.09330090, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.33971306, a1=0.44733688, a2=4.06583931, doi="10.1063/1.5090222" } + +[parameter.bpbe] +reference.doi = ["10.1103/PhysRevA.38.3098", "10.1103/PhysRevLett.77.3865"] +d4.bj-eeq-atm = { s8=3.64405246, a1=0.52905620, a2=4.11311891, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.65322996, a1=0.49933501, a2=4.24294852, doi="10.1063/1.5090222" } + +[parameter.bp] +reference.doi = ["10.1103/PhysRevA.38.3098", "10.1103/PhysRevB.33.8822", "10.1103/PhysRevB.34.7406"] +d4.bj-eeq-atm = { s8=3.35497927, a1=0.43645861, a2=4.92406854, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.33728176, a1=0.43220330, a2=4.91443061, doi="10.1063/1.5090222" } + +[parameter.bpw] +d4.bj-eeq-atm = { s8=3.24571506, a1=0.50050454, a2=4.12346483, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.23137432, a1=0.49955226, a2=4.10411084, doi="10.1063/1.5090222" } + +[parameter.camb3lyp] +reference.doi = ["10.1016/j.cplett.2004.06.011"] +d4.bj-eeq-atm = { s8=1.66041301, a1=0.40267156, a2=5.17432195, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.74407961, a1=0.40137870, a2=5.18731225, doi="10.1063/1.5090222" } + +[parameter.camqtp01] +reference.doi = ["10.1063/1.4955497"] +d4.bj-eeq-atm = { s8=1.156, a1=0.461, a2=6.375, doi="10.1021/acs.jctc.3c00717" } + +[parameter.dodblyp] +d4.bj-eeq-atm = { s6=0.4700, s8=1.31146043, a1=0.43407294, a2=4.27914360, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4700, s8=1.17809956, a1=0.40252428, a2=4.25096555, doi="10.1063/1.5090222" } + +[parameter.dodpbeb95] +d4.bj-eeq-atm = { s6=0.5600, s8=0.01574635, a1=0.43745720, a2=3.69180763, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.5400, s8=-0.15702803, a1=0.30629389, a2=3.69170956, doi="10.1063/1.5090222" } + +[parameter.dodpbe] +d4.bj-eeq-atm = { s6=0.4800, s8=0.92051454, a1=0.43037052, a2=4.38067238, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4800, s8=0.83908332, a1=0.40655901, a2=4.33601239, doi="10.1063/1.5090222" } + +[parameter.dodpbep86] +d4.bj-eeq-atm = { s6=0.4600, s8=0.71405681, a1=0.42408665, a2=4.52884439, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4600, s8=0.68309910, a1=0.40600975, a2=4.50011772, doi="10.1063/1.5090222" } + +[parameter.dodsvwn] +d4.bj-eeq-atm = { s6=0.4200, s8=0.94500207, a1=0.47449026, a2=5.05316093, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4200, s8=1.01890345, a1=0.46167459, a2=5.11121382, doi="10.1063/1.5090222" } + +[parameter.dsdblyp] +d4.bj-eeq-atm = { s6=0.5400, s8=0.63018237, a1=0.47591835, a2=4.73713781, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.5400, s8=0.65438817, a1=0.46549574, a2=4.73449899, doi="10.1063/1.5090222" } + +[parameter.dsdpbeb95] +d4.bj-eeq-atm = { s6=0.5400, s8=-0.14668670, a1=0.46394587, a2=3.64913860, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.5400, s8=-0.24336862, a1=0.32697409, a2=3.69767540, doi="10.1063/1.5090222" } + +[parameter.dsdpbe] +d4.bj-eeq-atm = { s6=0.4500, s8=0.70584116, a1=0.45787085, a2=4.44566742, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4500, s8=0.66116783, a1=0.43565915, a2=4.41110670, doi="10.1063/1.5090222" } + +[parameter.dsdpbep86] +d4.bj-eeq-atm = { s6=0.4700, s8=0.37586675, a1=0.53698768, a2=5.13022435, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4700, s8=0.51157821, a1=0.53889789, a2=5.18645943, doi="10.1063/1.5090222" } + +[parameter.dsdsvwn] +d4.bj-eeq-atm = { s6=0.4100, s8=0.72914436, a1=0.51347412, a2=5.11858541, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.4100, s8=0.90084457, a1=0.51106529, a2=5.22490148, doi="10.1063/1.5090222" } + +[parameter.glyp] +d4.bj-eeq-atm = { s8=4.23798924, a1=0.38426465, a2=4.38412863, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=3.83861584, a1=0.36343954, a2=4.32875183, doi="10.1063/1.5090222" } + +[parameter.hf] +d4.bj-eeq-atm = { s8=1.61679827, a1=0.44959224, a2=3.35743605, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.46001146, a1=0.43186901, a2=3.34116014, doi="10.1063/1.5090222" } + +[parameter.hse03] +reference.doi = ["10.1063/1.1564060", "10.1063/1.2204597"] +d4.bj-eeq-atm = { s8=1.19812280, a1=0.38662939, a2=5.22925796 } + +[parameter.hse06] +reference.doi = ["10.1063/1.1564060", "10.1063/1.2204597", "10.1063/1.2404663"] +d4.bj-eeq-atm = { s8=1.19528249, a1=0.38663183, a2=5.19133469 } + +[parameter.hse12] +reference.doi = ["10.1063/1.4722993"] +d4.bj-eeq-atm = { s8=1.23500792, a1=0.39226921, a2=5.22036266 } + +[parameter.hse12s] +reference.doi = ["10.1063/1.4722993"] +d4.bj-eeq-atm = { s8=1.23767762, a1=0.39989137, a2=5.34809245 } + +[parameter.hsesol] +reference.doi = ["10.1063/1.3524336"] +d4.bj-eeq-atm = { s8=1.82207807, a1=0.45646268, a2=5.59662251 } + +[parameter.lb94] +d4.bj-eeq-atm = { s8=2.59538499, a1=0.42088944, a2=3.28193223, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.36461524, a1=0.41518379, a2=3.19365471, doi="10.1063/1.5090222" } + +[parameter.lcblyp] +reference.doi = ["10.1063/1.1688752"] +d4.bj-eeq-atm = { s8=1.60344180, a1=0.45769839, a2=7.86924893, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.40109962, a1=0.47867438, a2=8.01038424, doi="10.1063/1.5090222" } + +[parameter.lcwpbe] +reference.doi = ["10.1063/1.2954017", "10.1021/ct800530u"] +d4.bj-eeq-atm = { s8=1.170, a1=0.378, a2=4.816, doi="10.1021/acs.jctc.3c00717" } + +[parameter.lcwpbeh] +reference.doi = ["10.1063/1.3073302"] +d4.bj-eeq-atm = { s8=1.318, a1=0.386, a2=5.010, doi="10.1021/acs.jctc.3c00717" } + +[parameter.lh07ssvwn] +reference.doi = ["10.1016/j.cplett.2007.04.020"] +d4.bj-eeq-atm = { s8=3.16675531, a1=0.35965552, a2=4.31947614, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.92498406, a1=0.34173988, a2=4.28404951, doi="10.1063/1.5090222" } + +[parameter.lh07tsvwn] +reference.doi = ["10.1063/1.2429058"] +d4.bj-eeq-atm = { s8=2.09333001, a1=0.35025189, a2=4.34166515, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.95389300, a1=0.33511515, a2=4.31853958, doi="10.1063/1.5090222" } + +[parameter.lh12ctssifpw92] +reference.doi = ["10.1063/1.3672080"] +d4.bj-eeq-atm = { s8=2.68467610, a1=0.34190416, a2=3.91039666, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.41356607, a1=0.31391316, a2=3.88935769, doi="10.1063/1.5090222" } + +[parameter.lh12ctssirpw92] +reference.doi = ["10.1063/1.3672080"] +d4.bj-eeq-atm = { s8=2.48973402, a1=0.34026075, a2=3.96948081, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.24917162, a1=0.31446575, a2=3.95070925, doi="10.1063/1.5090222" } + +[parameter.lh14tcalpbe] +reference.doi = ["10.1063/1.4901238"] +d4.bj-eeq-atm = { s8=1.28130770, a1=0.38822021, a2=4.92501211, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.27677253, a1=0.38128670, a2=4.91698883, doi="10.1063/1.5090222" } + +[parameter.lh20t] +reference.doi = ["10.1021/acs.jctc.0c00498"] +d4.bj-eeq-atm = { s8=0.113, a1=0.479, a2=4.635, doi="10.1021/acs.jctc.0c00498" } + +[parameter.m06] +reference.doi = ["10.1007/s00214-007-0310-x"] +d4.bj-eeq-atm = { s8=0.16366729, a1=0.53456413, a2=6.06192174, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.22948274, a1=0.52927285, a2=6.06516782, doi="10.1063/1.5090222" } + +[parameter.m06l] +reference.doi = ["10.1063/1.2370993"] +d4.bj-eeq-atm = { s8=0.59493760, a1=0.71422359, a2=6.35314182, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.40077779, a1=0.69611405, a2=6.29092087, doi="10.1063/1.5090222" } + +[parameter.mn12sx] +reference.doi = ["10.1039/C2CP42576A"] +d4.bj-eeq-atm = { s8=0.85964873, a1=0.62662681, a2=5.62088906 } + +[parameter.mpw1b95] +reference.doi = ["10.1021/jp048147q"] +d4.bj-eeq-atm = { s8=0.50093024, a1=0.41585097, a2=4.99154869, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.53791835, a1=0.41016913, a2=4.99284176, doi="10.1063/1.5090222" } + +[parameter.mpw1lyp] +d4.bj-eeq-atm = { s8=1.15591153, a1=0.25603493, a2=5.32083895, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.19986100, a1=0.25502469, a2=5.32301304, doi="10.1063/1.5090222" } + +[parameter.mpw1pw] +d4.bj-eeq-atm = { s8=1.80841716, a1=0.42961819, a2=4.68892341, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.80656973, a1=0.42456967, a2=4.68132317, doi="10.1063/1.5090222" } + +[parameter.mpw2plyp] +d4.bj-eeq-atm = { s6=0.7500, s8=0.45788846, a1=0.42997704, a2=5.07650682, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.7500, s8=0.61161179, a1=0.43748316, a2=5.12540364, doi="10.1063/1.5090222" } + +[parameter.mpwb1k] +reference.doi = ["10.1021/jp048147q"] +d4.bj-eeq-atm = { s8=0.57338313, a1=0.44687975, a2=5.21266777, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.62221146, a1=0.44216745, a2=5.21324659, doi="10.1063/1.5090222" } + +[parameter.mpwlyp] +d4.bj-eeq-atm = { s8=1.25842942, a1=0.25773894, a2=5.02319542, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.18243337, a1=0.38968985, a2=4.30835285, doi="10.1063/1.5090222" } + +[parameter.mpwpw] +d4.bj-eeq-atm = { s8=1.82596836, a1=0.34526745, a2=4.84620734, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.79674014, a1=0.33870479, a2=4.83442213, doi="10.1063/1.5090222" } + +[parameter.o3lyp] +d4.bj-eeq-atm = { s8=1.75762508, a1=0.10348980, a2=6.16233282, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.77793802, a1=0.09961745, a2=6.16089304, doi="10.1063/1.5090222" } + +[parameter.olyp] +d4.bj-eeq-atm = { s8=2.74836820, a1=0.60184498, a2=2.53292167, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.58717041, a1=0.59759271, a2=2.48760353, doi="10.1063/1.5090222" } + +[parameter.opbe] +d4.bj-eeq-atm = { s8=3.06917417, a1=0.68267534, a2=2.22849018, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=2.93544102, a1=0.67903933, a2=2.19810071, doi="10.1063/1.5090222" } + +[parameter.pbe0_2] +d4.bj-eeq-atm = { s6=0.5000, s8=0.64299082, a1=0.76542115, a2=5.78578675, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.5000, s8=0.98834859, a1=0.77911062, a2=5.90389569, doi="10.1063/1.5090222" } + +[parameter.pbe0] +reference.doi = ["10.1063/1.478522", "10.1063/1.478401"] +d4.bj-eeq-atm = { s8=1.20065498, a1=0.40085597, a2=5.02928789, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.26829475, a1=0.39907098, a2=5.03951304, doi="10.1063/1.5090222" } + +[parameter.pbe0_dh] +d4.bj-eeq-atm = { s6=0.8750, s8=0.96811578, a1=0.47592488, a2=5.08622873, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.8750, s8=1.19306002, a1=0.46106784, a2=5.25210480, doi="10.1063/1.5090222" } + +[parameter.pbe] +reference.doi = ["10.1103/PhysRevLett.77.3865"] +d4.bj-eeq-atm = { s8=0.95948085, a1=0.38574991, a2=4.80688534, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.99924614, a1=0.38142528, a2=4.81839284, doi="10.1063/1.5090222" } + +[parameter.pbesol] +reference.doi = ["10.1063/1.3691197"] +d4.bj-eeq-atm = { s8=1.71885698, a1=0.47901421, a2=5.96771589 } + +[parameter.pw1pw] +d4.bj-eeq-atm = { s8=0.96850170, a1=0.42427511, a2=5.02060636, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.09759050, a1=0.42759830, a2=5.04559572, doi="10.1063/1.5090222" } + +[parameter.pw6b95] +reference.doi = ["10.1021/jp050536c"] +d4.bj-eeq-atm = { s8=-0.31926054, a1=0.04142919, a2=5.84655608, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=-0.31629935, a1=0.03999357, a2=5.83690254, doi="10.1063/1.5090222" } + +[parameter.pw86pbe] +d4.bj-eeq-atm = { s8=1.21362856, a1=0.40510366, a2=4.66737724, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.22842987, a1=0.39998824, a2=4.66739111, doi="10.1063/1.5090222" } + +[parameter.pw91] +d4.bj-eeq-atm = { s8=0.77283111, a1=0.39581542, a2=4.93405761, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.81406882, a1=0.34094706, a2=5.18568823, doi="10.1063/1.5090222" } + +[parameter.pwp1] +d4.bj-eeq-atm = { s8=0.60492565, a1=0.46855837, a2=5.76921413, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.95936222, a1=0.48552982, a2=5.84956411, doi="10.1063/1.5090222" } + +[parameter.pwpb95] +reference.doi = ["10.1021/ct100466k"] +d4.bj-eeq-atm = { s6=0.8200, s8=-0.34639127, a1=0.41080636, a2=3.83878274, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.8200, s8=-0.46453780, a1=0.29884136, a2=3.87641255, doi="10.1063/1.5090222" } + +[parameter.pwp] +d4.bj-eeq-atm = { s8=0.32801227, a1=0.35874687, a2=6.05861168, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.66056055, a1=0.37768052, a2=6.14787138, doi="10.1063/1.5090222" } + +[parameter.revpbe0] +d4.bj-eeq-atm = { s8=1.57185414, a1=0.38705966, a2=4.11028876, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.47198256, a1=0.37471756, a2=4.08904369, doi="10.1063/1.5090222" } + +[parameter.revpbe0dh] +d4.bj-eeq-atm = { s6=0.8750, s8=1.24456037, a1=0.36730560, a2=4.71126482, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s6=0.8750, s8=1.22494188, a1=0.35904781, a2=4.70216012, doi="10.1063/1.5090222" } + +[parameter.revpbe38] +d4.bj-eeq-atm = { s8=1.66597472, a1=0.39476833, a2=4.39026628, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.60423529, a1=0.38938475, a2=4.35557832, doi="10.1063/1.5090222" } + +[parameter.revpbe] +reference.doi = ["10.1103/PhysRevLett.80.890"] +d4.bj-eeq-atm = { s8=1.74676530, a1=0.53634900, a2=3.07261485, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.62543693, a1=0.54031831, a2=2.97965648, doi="10.1063/1.5090222" } + +[parameter.revtpss0] +d4.bj-eeq-atm = { s8=1.54664499, a1=0.45890964, a2=4.78426405, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.55321888, a1=0.45355319, a2=4.77588598, doi="10.1063/1.5090222" } + +[parameter.revtpss] +reference.doi = ["10.1103/PhysRevLett.103.026403"] +d4.bj-eeq-atm = { s8=1.53089454, a1=0.44880597, a2=4.64042317, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.51858035, a1=0.44243222, a2=4.62881620, doi="10.1063/1.5090222" } + +[parameter.revtpssh] +d4.bj-eeq-atm = { s8=1.52740307, a1=0.45161957, a2=4.70779483, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.52542064, a1=0.44570207, a2=4.69883717, doi="10.1063/1.5090222" } + +[parameter.rpbe] +reference.doi = ["10.1103/PhysRevB.59.7413"] +d4.bj-eeq-atm = { s8=1.31183787, a1=0.46169493, a2=3.15711757, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.11793696, a1=0.44632488, a2=3.08890917, doi="10.1063/1.5090222" } + +[parameter.rpw86pbe] +reference.doi = ["10.1103/PhysRevLett.77.3865", "10.1021/ct900365q"] +d4.bj-eeq-atm = { s8=1.12624034, a1=0.38151218, a2=4.75480472, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.13795871, a1=0.37636536, a2=4.75236384, doi="10.1063/1.5090222" } + +[parameter.scan] +reference.doi = ["10.1103/PhysRevLett.115.036402"] +d4.bj-eeq-atm = { s8=1.46126056, a1=0.62930855, a2=6.31284039, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.75408315, a1=0.63571334, a2=6.35690748, doi="10.1063/1.5090222" } + +[parameter.rscan] +reference.doi = ["10.1063/1.5094646"] +d4.bj-eeq-atm = { s8=0.87728975, a1=0.49116966, a2=5.75859346, doi="10.1063/5.0041008" } + +[parameter.r2scan] +reference.doi = ["10.1021/acs.jpclett.0c02405", "10.1021/acs.jpclett.0c03077"] +d4.bj-eeq-atm = { s8=0.60187490, a1=0.51559235, a2=5.77342911, doi="10.1063/5.0041008" } + +[parameter.r2scanh] +reference.doi = ["10.1021/acs.jpclett.0c02405", "10.1021/acs.jpclett.0c03077", "10.1063/5.0086040"] +d4.bj-eeq-atm = { s8=0.8324, a1=0.4944, a2=5.9019, doi="10.1063/5.0086040" } + +[parameter.r2scan0] +reference.doi = ["10.1021/acs.jpclett.0c02405", "10.1021/acs.jpclett.0c03077", "10.1063/5.0086040"] +d4.bj-eeq-atm = { s8=0.8992, a1=0.4778, a2=5.8779, doi="10.1063/5.0086040" } + +[parameter.r2scan50] +reference.doi = ["10.1021/acs.jpclett.0c02405", "10.1021/acs.jpclett.0c03077", "10.1063/5.0086040"] +d4.bj-eeq-atm = { s8=1.0471, a1=0.4574, a2=5.8969, doi="10.1063/5.0086040" } + +[parameter.r2scan-3c] +reference.doi = ["10.1063/5.0040021"] +d4.bj-eeq-atm = { s8=0.00, a1=0.42, a2=5.65, s9=2.0, doi="10.1063/5.0040021" } + +[parameter.tpss0] +d4.bj-eeq-atm = { s8=1.62438102, a1=0.40329022, a2=4.80537871, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.66752698, a1=0.40074746, a2=4.80927196, doi="10.1063/1.5090222" } + +[parameter.tpss] +reference.doi = ["10.1103/PhysRevLett.91.146401"] +d4.bj-eeq-atm = { s8=1.76596355, a1=0.42822303, a2=4.54257102, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.91130849, a1=0.43332851, a2=4.56986797, doi="10.1063/1.5090222" } + +[parameter.tpssh] +d4.bj-eeq-atm = { s8=1.85897750, a1=0.44286966, a2=4.60230534, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.88783525, a1=0.43968167, a2=4.60342700, doi="10.1063/1.5090222" } + +[parameter.b97d] +reference.doi = ["10.1002/jcc.20495"] +d4.bj-eeq-atm = { s8=1.69460052, a1=0.28904684, a2=4.13407323 } + +[parameter.wb97] +reference.doi = ["10.1063/1.2834918"] +d4.bj-eeq-atm = { s8=6.55792598, a1=0.76666802, a2=8.36027334, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=7.11022468, a1=0.76423345, a2=8.44559334, doi="10.1063/1.5090222" } + +[parameter.wb97x] +reference.doi = ["10.1063/1.2834918"] +d4.bj-eeq-atm = { s8=-0.07519516, a1=0.45094893, a2=6.78425255, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=0.38815338, a1=0.47448629, a2=6.91367384, doi="10.1063/1.5090222" } + +[parameter.wb97x-rev] +reference.doi = ["10.1063/1.4952647"] +d4.bj-eeq-atm = { s8=0.4485, a1=0.3306, a2=4.279, doi="10.1063/5.0133026" } + +[parameter.wb97x-3c] +reference.doi = ["10.1063/5.0133026"] +d4.bj-eeq-atm = { s8=0.0, a1=0.2464, a2=4.737, doi="10.1063/5.0133026" } + +[parameter.b97m] +reference.doi = ["10.1063/1.4907719"] +d4.bj-eeq-atm = { s8=0.6633, a1=0.4288, a2=3.9935, doi="10.1002/jcc.26411" } + +[parameter.wb97m] +reference.doi = ["10.1063/1.4952647"] +d4.bj-eeq-atm = { s8=0.7761, a1=0.7514, a2=2.7099, doi="10.1002/jcc.26411" } + +[parameter.wb97m-rev] +reference.doi = ["10.1063/1.4952647"] +d4.bj-eeq-atm = { s8=0.842, a1=0.359, a2=4.668 , doi="10.1021/acs.jctc.3c00717" } + +[parameter.x3lyp] +d4.bj-eeq-atm = { s8=1.54701429, a1=0.20318443, a2=5.61852648, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.55067492, a1=0.19818545, a2=5.61262748, doi="10.1063/1.5090222" } + +[parameter.xlyp] +d4.bj-eeq-atm = { s8=1.62972054, a1=0.11268673, a2=5.40786417, doi="10.1063/1.5090222" } +d4.bj-eeq-mbd = { s8=1.51577878, a1=0.10026585, a2=5.37506460, doi="10.1063/1.5090222" } + +[parameter.revdsdpbep86] +reference.doi = ["10.1021/acs.jpca.9b03157"] +d4.bj-eeq-atm = { s6=0.5132, s8=0.0, a1=0.44, a2=3.60, doi="10.1021/acs.jpca.9b03157" } + +[parameter.revdsdpbe] +reference.doi = ["10.1021/acs.jpca.9b03157"] +d4.bj-eeq-atm = { s6=0.6706, s8=0.0, a1=0.40, a2=3.60, doi="10.1021/acs.jpca.9b03157" } + +[parameter.revdsdblyp] +reference.doi = ["10.1021/acs.jpca.9b03157"] +d4.bj-eeq-atm = { s6=0.6141, s8=0.0, a1=0.38, a2=3.52, doi="10.1021/acs.jpca.9b03157" } + +[parameter.revdodpbep86] +reference.doi = ["10.1021/acs.jpca.9b03157"] +d4.bj-eeq-atm = { s6=0.5552, s8=0.0, a1=0.44, a2=3.60, doi="10.1021/acs.jpca.9b03157" } + +[parameter.dftb_3ob] +d4.bj-eeq-two = { s8=0.4727337, a1=0.5467502, a2=4.4955068, doi="10.1063/1.5143190" } +d4.bj-eeq-atm = { s8=0.6635015, a1=0.5523240, a2=4.3537076, doi="10.1063/1.5143190" } + +[parameter.dftb_matsci] +d4.bj-eeq-two = { s8=2.7711819, a1=0.4681712, a2=5.2918629, doi="10.1063/1.5143190" } +d4.bj-eeq-atm = { s8=3.3157614, a1=0.4826330, a2=5.3811976, doi="10.1063/1.5143190" } + +[parameter.dftb_mio] +d4.bj-eeq-two = { s8=1.1948145, a1=0.6074567, a2=4.9336133, doi="10.1063/1.5143190" } +d4.bj-eeq-atm = { s8=1.2916225, a1=0.5965326, a2=4.8778602, doi="10.1063/1.5143190" } + +[parameter.dftb_ob2] +d4.bj-eeq-two = { s8=2.7611320, a1=0.6037249, a2=5.3900004, doi="10.1063/1.5143190" } +d4.bj-eeq-atm = { s8=2.9692689, a1=0.6068916, a2=5.4476789, doi="10.1063/1.5143190" } + +[parameter.dftb_pbc] +d4.bj-eeq-two = { s8=1.7303734, a1=0.5546548, a2=4.7973454, doi="10.1063/1.5143190" } +d4.bj-eeq-atm = { s8=2.1667394, a1=0.5646391, a2=4.9576353, doi="10.1063/1.5143190" } + +[parameter.wr2scan] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=1.0000, s8=1.0000, a1=0.3834, a2=5.7889, doi="10.1063/5.0174988" } + +[parameter.r2scan0-dh] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.9424, s8=0.3856, a1=0.4271, a2=5.8565, doi="10.1063/5.0174988" } + +[parameter.r2scan-cidh] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.8666, s8=0.5336, a1=0.4171, a2=5.8565, doi="10.1063/5.0174988" } + +[parameter.r2scan-qidh] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.7867, s8=0.2955, a1=0.4001, a2=5.8300, doi="10.1063/5.0174988" } + +[parameter.r2scan-0-2] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.7386, s8=0.0000, a1=0.4030, a2=5.5142, doi="10.1063/5.0174988" } + +[parameter.pr2scan50] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.7964, s8=0.3421, a1=0.4663, a2=5.7916, doi="10.1063/5.0174988" } + +[parameter.pr2scan69] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.7167, s8=0.0000, a1=0.4644, a2=5.2563, doi="10.1063/5.0174988" } + +[parameter.kpr2scan50] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.8402, s8=0.1212, a1=0.4382, a2=5.8232, doi="10.1063/5.0174988" } + +[parameter.wpr2scan50] +reference.doi = ["10.1063/5.0174988"] +d4.bj-eeq-atm = { s6=0.8143, s8=0.3842, a1=0.4135, a2=5.8773, doi="10.1063/5.0174988" } diff --git a/src/tad_dftd4/damping/parameters/read.py b/src/tad_dftd4/damping/parameters/read.py new file mode 100644 index 0000000..9c3c2bd --- /dev/null +++ b/src/tad_dftd4/damping/parameters/read.py @@ -0,0 +1,134 @@ +# This file is part of tad-dftd4. +# +# SPDX-Identifier: Apache-2.0 +# Copyright (C) 2024 Grimme Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Damping Parameters +================== + +Read damping parameters from toml file. +""" + +from __future__ import annotations + +from pathlib import Path +from typing import Literal + +import torch + +from ...typing import Tensor + +__all__ = ["get_params", "get_params_default"] + + +def get_params( + func: str, + variant: Literal["bj-eeq-atm"] = "bj-eeq-atm", + with_reference: bool = False, + device: torch.device | None = None, + dtype: torch.dtype | None = None, +) -> dict[str, Tensor]: + """ + Obtain damping parameters for a given functional. + + Parameters + ---------- + func : str + Functional name, case-insensitive. + variant : Literal["bj-eeq-atm"] + D4 variant. Only 'bj-eeq-atm' (default D4 model) is supported. + device : torch.device | None, optional + Pytorch device for calculations. Defaults to `None`. + dtype : torch.dtype | None, optional + Pytorch dtype for calculations. Defaults to `None`. + + Returns + ------- + dict[str, Tensor] + Damping parameters for the given functional. + + Raises + ------ + KeyError + If functional or D4 variant is not found in damping parameters file. + """ + # pylint: disable=import-outside-toplevel + import tomli as toml + + table: dict[str, dict[str, dict[str, dict[str, dict[str, float | str]]]]] + with open(Path(__file__).parent / "parameters.toml", mode="rb") as f: + table = toml.load(f) + + func_section = table["parameter"] + if func not in func_section: + raise KeyError( + f"Functional '{func.casefold()}' not found in damping parameters." + ) + + variant_section = func_section[func]["d4"] + if variant not in variant_section: + raise KeyError( + f"Variant '{variant}' not found in damping parameters for '{func}'." + ) + + par_section = variant_section[variant] + + d = {} + for k, v in par_section.items(): + if k == "doi": + if with_reference is False: + continue + d[k] = v + else: + d[k] = torch.tensor(v, device=device, dtype=dtype) + + return d + + +def get_params_default( + variant: Literal["bj-eeq-atm", "d4.bj-eeq-two", "d4.bj-eeq-mbd"] = "bj-eeq-atm", + device: torch.device | None = None, + dtype: torch.dtype | None = None, +) -> dict[str, Tensor]: + """ + Obtain default damping parameters and method info. + + Parameters + ---------- + device : torch.device | None, optional + Pytorch device for calculations. Defaults to `None`. + dtype : torch.dtype | None, optional + Pytorch dtype for calculations. Defaults to `None`. + + Returns + ------- + dict[str, Tensor] + Damping parameters for the given functional. + """ + # pylint: disable=import-outside-toplevel + import tomli as toml + + table: dict[str, dict[str, dict[str, dict[str, dict[str, float | str]]]]] + with open(Path(__file__).parent / "parameters.toml", mode="rb") as f: + table = toml.load(f) + + d = {} + for k, v in table["default"]["parameter"]["d4"][variant].items(): + if isinstance(v, float): + d[k] = torch.tensor(v, device=device, dtype=dtype) + else: + d[k] = v + + return d diff --git a/test/test_param/__init__.py b/test/test_param/__init__.py new file mode 100644 index 0000000..046c016 --- /dev/null +++ b/test/test_param/__init__.py @@ -0,0 +1,16 @@ +# This file is part of tad-dftd4. +# +# SPDX-Identifier: Apache-2.0 +# Copyright (C) 2024 Grimme Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/test/test_param/test_fail.py b/test/test_param/test_fail.py new file mode 100644 index 0000000..5df49f9 --- /dev/null +++ b/test/test_param/test_fail.py @@ -0,0 +1,34 @@ +# This file is part of tad-dftd4. +# +# SPDX-Identifier: Apache-2.0 +# Copyright (C) 2024 Grimme Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Test reading parameters from TOML file. +""" +from __future__ import annotations + +import pytest + +from tad_dftd4.damping import get_params + + +def test_unknown_func() -> None: + with pytest.raises(KeyError): + get_params("unknown") + + +def test_unknown_variant() -> None: + with pytest.raises(KeyError): + get_params("pbe", variant="unknown") # type: ignore diff --git a/test/test_param/test_read.py b/test/test_param/test_read.py new file mode 100644 index 0000000..0afbad5 --- /dev/null +++ b/test/test_param/test_read.py @@ -0,0 +1,44 @@ +# This file is part of tad-dftd4. +# +# SPDX-Identifier: Apache-2.0 +# Copyright (C) 2024 Grimme Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Test reading parameters from TOML file. +""" +from __future__ import annotations + +import pytest + +from tad_dftd4.damping.parameters import get_params, get_params_default + + +def test_default() -> None: + params = get_params_default() + assert isinstance(params, dict) + assert "s6" in params + + +@pytest.mark.parametrize("func", ["pbe", "b3lyp", "revpbe"]) +def test_func(func: str) -> None: + params = get_params(func) + assert isinstance(params, dict) + assert "a1" in params + assert "a2" in params + + +def test_with_doi() -> None: + params = get_params("pbe", with_reference=True) + assert isinstance(params, dict) + assert "doi" in params diff --git a/tox.ini b/tox.ini index d3e1538..2c0dda1 100644 --- a/tox.ini +++ b/tox.ini @@ -18,11 +18,11 @@ min_version = 4.0 isolated_build = True envlist = - py38-torch{1110,1121,1131,201,212,222,231,241}, - py39-torch{1110,1121,1131,201,212,222,231,241}, - py310-torch{1110,1121,1131,201,212,222,231,241}, - py311-torch{1131,201,212,222,231,241} - py312-torch{222,231,241} + py38-torch{1110,1121,1131,201,212,222,231,240,241}, + py39-torch{1110,1121,1131,201,212,222,231,240,241,250,260}, + py310-torch{1110,1121,1131,201,212,222,231,240,241,250,260}, + py311-torch{1131,201,212,222,231,240,241,250,260} + py312-torch{222,231,240,241,250,260} [testenv] setenv = @@ -47,6 +47,7 @@ deps = torch240: torch==2.4.0 torch241: torch==2.4.1 torch250: torch==2.5.0 + torch250: torch==2.6.0 .[tox] commands =