sparse-ir 1.0.0__tar.gz → 1.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. sparse-ir-1.1.1/LICENSE.txt +20 -0
  2. sparse-ir-1.1.1/PKG-INFO +150 -0
  3. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/README.rst +2 -2
  4. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/__init__.py +2 -2
  5. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/abstract.py +15 -3
  6. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/augment.py +15 -7
  7. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/basis.py +21 -6
  8. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/poly.py +1 -1
  9. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/sampling.py +85 -13
  10. sparse-ir-1.1.1/src/sparse_ir.egg-info/PKG-INFO +150 -0
  11. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir.egg-info/SOURCES.txt +1 -0
  12. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_sampling.py +33 -0
  13. sparse-ir-1.0.0/PKG-INFO +0 -147
  14. sparse-ir-1.0.0/src/sparse_ir.egg-info/PKG-INFO +0 -147
  15. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/setup.cfg +0 -0
  16. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/setup.py +0 -0
  17. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/_gauss.py +0 -0
  18. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/_roots.py +0 -0
  19. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/_util.py +0 -0
  20. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/adapter.py +0 -0
  21. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/basis_set.py +0 -0
  22. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/dlr.py +0 -0
  23. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/kernel.py +0 -0
  24. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/svd.py +0 -0
  25. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir/sve.py +0 -0
  26. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir.egg-info/dependency_links.txt +0 -0
  27. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir.egg-info/requires.txt +0 -0
  28. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/src/sparse_ir.egg-info/top_level.txt +0 -0
  29. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_augment.py +0 -0
  30. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_basis_set.py +0 -0
  31. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_compare.py +0 -0
  32. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_dlr.py +0 -0
  33. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_gauss.py +0 -0
  34. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_kernel.py +0 -0
  35. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_poly.py +0 -0
  36. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_scipost_sample_code.py +0 -0
  37. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_sve.py +0 -0
  38. {sparse-ir-1.0.0 → sparse-ir-1.1.1}/test/test_whitespace.py +0 -0
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2020-2021 Markus Wallerberger and others
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,150 @@
1
+ Metadata-Version: 2.1
2
+ Name: sparse-ir
3
+ Version: 1.1.1
4
+ Summary: intermediate representation (IR) basis for electronic propagator
5
+ Home-page: https://github.com/SpM-lab/sparse-ir
6
+ Author: ['Markus Wallerberger', 'Hiroshi Shinaoka', 'Kazuyoshi Yoshimi', 'Junya Otsuki', 'Chikano Naoya']
7
+ Author-email: markus.wallerberger@tuwien.ac.at
8
+ License: UNKNOWN
9
+ Keywords: irbasis many-body propagator svd
10
+ Platform: UNKNOWN
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Topic :: Scientific/Engineering :: Physics
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Requires-Python: >=3
18
+ Description-Content-Type: text/x-rst
19
+ Provides-Extra: doc
20
+ Provides-Extra: test
21
+ Provides-Extra: xprec
22
+ License-File: LICENSE.txt
23
+
24
+ sparse-ir - A library for the intermediate representation of propagators
25
+ ========================================================================
26
+ This library provides routines for constructing and working with the
27
+ intermediate representation of correlation functions. It provides:
28
+
29
+ - on-the-fly computation of basis functions for arbitrary cutoff Λ
30
+ - basis functions and singular values are accurate to full precision
31
+ - routines for sparse sampling
32
+
33
+
34
+ Installation
35
+ ------------
36
+ Install via `pip <https://pypi.org/project/sparse-ir>`_::
37
+
38
+ pip install sparse-ir[xprec]
39
+
40
+ The above line is the recommended way to install `sparse-ir`. It automatically
41
+ installs the `xprec <https://github.com/tuwien-cms/xprec>`_ package, which
42
+ allows one to compute the IR basis functions with greater accuracy. If you do
43
+ not want to do this, simply remove the string ``[xprec]`` from the above command.
44
+
45
+ Install via `conda <https://anaconda.org/spm-lab/sparse-ir>`_::
46
+
47
+ conda install -c spm-lab sparse-ir xprec
48
+
49
+ Other than the optional xprec dependency, sparse-ir requires only
50
+ `numpy <https://numpy.org/>`_ and `scipy <https://scipy.org/>`_.
51
+
52
+ To manually install the current development version, you can use the following::
53
+
54
+ # Only recommended for developers - no automatic updates!
55
+ git clone https://github.com/SpM-lab/sparse-ir
56
+ pip install -e sparse-ir/[xprec]
57
+
58
+ Documentation and tutorial
59
+ --------------------------
60
+ Check out our `comprehensive tutorial`_, where we self-contained
61
+ notebooks for several many-body methods - GF(2), GW, Eliashberg equations,
62
+ Lichtenstein formula, FLEX, ... - are presented.
63
+
64
+ Refer to the `API documentation`_ for more details on how to work
65
+ with the python library.
66
+
67
+ There is also a `Julia library`_ and (currently somewhat restricted)
68
+ `Fortran library`_ available for the IR basis and sparse sampling.
69
+
70
+ .. _comprehensive tutorial: https://spm-lab.github.io/sparse-ir-tutorial
71
+ .. _API documentation: https://sparse-ir.readthedocs.io
72
+ .. _Julia library: https://github.com/SpM-lab/SparseIR.jl
73
+ .. _Fortran library: https://github.com/SpM-lab/sparse-ir-fortran
74
+
75
+ Getting started
76
+ ---------------
77
+ Here is a full second-order perturbation theory solver (GF(2)) in a few
78
+ lines of Python code::
79
+
80
+ # Construct the IR basis and sparse sampling for fermionic propagators
81
+ import sparse_ir, numpy as np
82
+ basis = sparse_ir.FiniteTempBasis('F', beta=10, wmax=8, eps=1e-6)
83
+ stau = sparse_ir.TauSampling(basis)
84
+ siw = sparse_ir.MatsubaraSampling(basis, positive_only=True)
85
+
86
+ # Solve the single impurity Anderson model coupled to a bath with a
87
+ # semicircular states with unit half bandwidth.
88
+ U = 1.2
89
+ def rho0w(w):
90
+ return np.sqrt(1-w.clip(-1,1)**2) * 2/np.pi
91
+
92
+ # Compute the IR basis coefficients for the non-interacting propagator
93
+ rho0l = basis.v.overlap(rho0w)
94
+ G0l = -basis.s * rho0l
95
+
96
+ # Self-consistency loop: alternate between second-order expression for the
97
+ # self-energy and the Dyson equation until convergence.
98
+ Gl = G0l
99
+ Gl_prev = 0
100
+ while np.linalg.norm(Gl - Gl_prev) > 1e-6:
101
+ Gl_prev = Gl
102
+ Gtau = stau.evaluate(Gl)
103
+ Sigmatau = U**2 * Gtau**3
104
+ Sigmal = stau.fit(Sigmatau)
105
+ Sigmaiw = siw.evaluate(Sigmal)
106
+ G0iw = siw.evaluate(G0l)
107
+ Giw = 1/(1/G0iw - Sigmaiw)
108
+ Gl = siw.fit(Giw)
109
+
110
+ You may want to start with reading up on the `intermediate representation`_.
111
+ It is tied to the analytic continuation of bosonic/fermionic spectral
112
+ functions from (real) frequencies to imaginary time, a transformation mediated
113
+ by a kernel ``K``. The kernel depends on a cutoff, which you should choose to
114
+ be ``lambda_ >= beta * W``, where ``beta`` is the inverse temperature and ``W``
115
+ is the bandwidth.
116
+
117
+ One can now perform a `singular value expansion`_ on this kernel, which
118
+ generates two sets of orthonormal basis functions, one set ``v[l](w)`` for
119
+ real frequency side ``w``, and one set ``u[l](tau)`` for the same obejct in
120
+ imaginary (Euclidean) time ``tau``, together with a "coupling" strength
121
+ ``s[l]`` between the two sides.
122
+
123
+ By this construction, the imaginary time basis can be shown to be *optimal* in
124
+ terms of compactness.
125
+
126
+ .. _intermediate representation: https://arxiv.org/abs/2106.12685
127
+ .. _singular value expansion: https://w.wiki/3poQ
128
+
129
+ License and citation
130
+ --------------------
131
+ This software is released under the MIT License. See LICENSE.txt for details.
132
+
133
+ If you find the intermediate representation, sparse sampling, or this software
134
+ useful in your research, please consider citing the following papers:
135
+
136
+ - Hiroshi Shinaoka et al., `Phys. Rev. B 96, 035147`_ (2017)
137
+ - Jia Li et al., `Phys. Rev. B 101, 035144`_ (2020)
138
+ - Markus Wallerberger et al., `SoftwareX 21, 101266`_ (2023)
139
+
140
+ If you are discussing sparse sampling in your research specifically, please
141
+ also consider citing an independently discovered, closely related approach, the
142
+ MINIMAX isometry method (Merzuk Kaltak and Georg Kresse,
143
+ `Phys. Rev. B 101, 205145`_, 2020).
144
+
145
+ .. _Phys. Rev. B 96, 035147: https://doi.org/10.1103/PhysRevB.96.035147
146
+ .. _Phys. Rev. B 101, 035144: https://doi.org/10.1103/PhysRevB.101.035144
147
+ .. _SoftwareX 21, 101266: https://doi.org/10.1016/j.softx.2022.101266
148
+ .. _Phys. Rev. B 101, 205145: https://doi.org/10.1103/PhysRevB.101.205145
149
+
150
+
@@ -112,7 +112,7 @@ useful in your research, please consider citing the following papers:
112
112
 
113
113
  - Hiroshi Shinaoka et al., `Phys. Rev. B 96, 035147`_ (2017)
114
114
  - Jia Li et al., `Phys. Rev. B 101, 035144`_ (2020)
115
- - Markus Wallerberger et al., `arXiv 2206.11762`_ (2022)
115
+ - Markus Wallerberger et al., `SoftwareX 21, 101266`_ (2023)
116
116
 
117
117
  If you are discussing sparse sampling in your research specifically, please
118
118
  also consider citing an independently discovered, closely related approach, the
@@ -121,5 +121,5 @@ MINIMAX isometry method (Merzuk Kaltak and Georg Kresse,
121
121
 
122
122
  .. _Phys. Rev. B 96, 035147: https://doi.org/10.1103/PhysRevB.96.035147
123
123
  .. _Phys. Rev. B 101, 035144: https://doi.org/10.1103/PhysRevB.101.035144
124
- .. _arXiv 2206.11762: https://doi.org/10.48550/arXiv.2206.11762
124
+ .. _SoftwareX 21, 101266: https://doi.org/10.1016/j.softx.2022.101266
125
125
  .. _Phys. Rev. B 101, 205145: https://doi.org/10.1103/PhysRevB.101.205145
@@ -10,9 +10,9 @@ intermediate representation of correlation functions. It provides:
10
10
  - basis functions and singular values are accurate to full precision
11
11
  - routines for sparse sampling
12
12
  """
13
- __copyright__ = "2020-2022 Markus Wallerberger, Hiroshi Shinaoka, and others"
13
+ __copyright__ = "2020-2024 Markus Wallerberger, Hiroshi Shinaoka, and others"
14
14
  __license__ = "MIT"
15
- __version__ = "1.0.0"
15
+ __version__ = "1.1.1"
16
16
 
17
17
  from .kernel import RegularizedBoseKernel, LogisticKernel
18
18
  from .sve import compute as compute_sve, SVEResult
@@ -150,14 +150,26 @@ class AbstractBasis:
150
150
  """Real frequency cutoff or `None` if not present"""
151
151
  raise NotImplementedError()
152
152
 
153
- def default_tau_sampling_points(self):
154
- """Default sampling points on the imaginary time axis"""
153
+ def default_tau_sampling_points(self, *, npoints=None):
154
+ """Default sampling points on the imaginary time axis
155
+
156
+ Arguments:
157
+ npoints (int):
158
+ Minimum number of sampling points to return.
159
+
160
+ .. versionadded: 1.1
161
+ """
155
162
  raise NotImplementedError()
156
163
 
157
- def default_matsubara_sampling_points(self, *, positive_only=False):
164
+ def default_matsubara_sampling_points(self, *, npoints=None,
165
+ positive_only=False):
158
166
  """Default sampling points on the imaginary frequency axis
159
167
 
160
168
  Arguments:
169
+ npoints (int):
170
+ Minimum number of sampling points to return.
171
+
172
+ .. versionadded: 1.1
161
173
  positive_only (bool):
162
174
  Only return non-negative frequencies. This is useful if the
163
175
  object to be fitted is symmetric in Matsubura frequency,
@@ -106,13 +106,21 @@ class AugmentedBasis(abstract.AbstractBasis):
106
106
  def wmax(self):
107
107
  return self._basis.wmax
108
108
 
109
- def default_tau_sampling_points(self):
110
- x = basis._default_sampling_points(self._basis.sve_result.u, self.size)
111
- return self.beta/2 * (x + 1)
112
-
113
- def default_matsubara_sampling_points(self, *, positive_only=False):
114
- return basis._default_matsubara_sampling_points(
115
- self._basis._uhat_full, self.size, positive_only=positive_only)
109
+ def default_tau_sampling_points(self, *, npoints=None):
110
+ if npoints is None:
111
+ npoints = self.size
112
+
113
+ # Return the sampling points of the underlying basis, but since we
114
+ # use the size of self, we add two further points. One then has to
115
+ # hope that these give good sampling points.
116
+ return self._basis.default_tau_sampling_points(npoints=npoints)
117
+
118
+ def default_matsubara_sampling_points(self, *, npoints=None,
119
+ positive_only=False):
120
+ if npoints is None:
121
+ npoints = self.size
122
+ return self._basis.default_matsubara_sampling_points(
123
+ npoints=npoints, positive_only=positive_only)
116
124
 
117
125
  @property
118
126
  def is_well_conditioned(self):
@@ -169,16 +169,31 @@ class FiniteTempBasis(abstract.AbstractBasis):
169
169
  def sve_result(self):
170
170
  return self._sve_result
171
171
 
172
- def default_tau_sampling_points(self):
173
- x = _default_sampling_points(self._sve_result.u, self.size)
172
+ def default_tau_sampling_points(self, *, npoints=None):
173
+ if npoints is None:
174
+ npoints = self.size
175
+ x = _default_sampling_points(self._sve_result.u, npoints)
174
176
  return self._beta/2 * (x + 1)
175
177
 
176
- def default_matsubara_sampling_points(self, *, positive_only=False):
177
- return _default_matsubara_sampling_points(self._uhat_full, self.size,
178
+ def default_matsubara_sampling_points(self, *, npoints=None,
179
+ positive_only=False):
180
+ if npoints is None:
181
+ npoints = self.size
182
+ return _default_matsubara_sampling_points(self._uhat_full, npoints,
178
183
  positive_only=positive_only)
179
184
 
180
- def default_omega_sampling_points(self):
181
- y = _default_sampling_points(self._sve_result.v, self.size)
185
+ def default_omega_sampling_points(self, *, npoints=None):
186
+ """Return default sampling points in imaginary time.
187
+
188
+ Arguments:
189
+ npoints (int):
190
+ Minimum number of sampling points to return.
191
+
192
+ .. versionadded: 1.1
193
+ """
194
+ if npoints is None:
195
+ npoints = self.size
196
+ y = _default_sampling_points(self._sve_result.v, npoints)
182
197
  return self._wmax * y
183
198
 
184
199
  def rescale(self, new_beta):
@@ -208,7 +208,7 @@ class PiecewiseLegendreFT:
208
208
  ``n`` must be odd.
209
209
  """
210
210
  _DEFAULT_GRID = np.hstack([np.arange(2**6),
211
- (2**np.linspace(6, 25, 16*(25-6)+1)).astype(int)])
211
+ (2**np.linspace(6, 35, 16*(35-6)+1)).astype(int)])
212
212
 
213
213
  def __init__(self, poly, freq='even', n_asymp=None, power_model=None):
214
214
  if poly.xmin != -1 or poly.xmax != 1:
@@ -20,13 +20,74 @@ class AbstractSampling:
20
20
  |________________| fit |___________________|
21
21
 
22
22
  """
23
- def evaluate(self, al, axis=None):
24
- """Evaluate the basis coefficients at the sparse sampling points"""
23
+ def evaluate(self, al, axis=None, *, points=None):
24
+ """Evaluate the basis coefficients at sampling points.
25
+
26
+ Arguments:
27
+ al (array):
28
+ Array where the `l`-th item along `axis` corresponds to the
29
+ `l`-th basis coefficient
30
+ axis (integer):
31
+ Axis or dimension of `al` along which to evaluate the function.
32
+ Defaults to the last, i.e., rightmost axis.
33
+ points (vector):
34
+ Points on which the results should be evaluated. Defaults
35
+ to the sampling points for which the sampling objects was
36
+ created.
37
+
38
+ .. versionadded:: 1.1
39
+
40
+ Return:
41
+ Array where the `n`-th item along `axis` corresponds to the
42
+ value on the `n`-th sampling point (or value on `point[n]`, if
43
+ given.)
44
+
45
+ Note:
46
+ If `points` is given, a new sampling is created at each invocation,
47
+ which can result in a performance hit. Consider caching sampling
48
+ objects or simply using the `.u()` and `.uhat()` methods of the
49
+ underlying basis.
50
+ """
51
+ if points is not None:
52
+ return self._for_sampling_points(points).evaluate(al, axis)
53
+
25
54
  return self.matrix.matmul(al, axis)
26
55
 
27
- def fit(self, ax, axis=None):
28
- """Fit basis coefficients from the sparse sampling points"""
29
- return self.matrix.lstsq(ax, axis)
56
+ def fit(self, ax, axis=None, *, points=None):
57
+ """Fit the basis coefficients from the sampling points.
58
+
59
+ Arguments:
60
+ ax (array):
61
+ Array where the `n`-th item along `axis` corresponds to the
62
+ value on the `n`-th sampling point (or value on `point[n]`, if
63
+ given.)
64
+ axis (integer):
65
+ Axis or dimension of `ax` along which to fit the function.
66
+ Defaults to the last, i.e., rightmost axis.
67
+ points (vector):
68
+ Points on which the `ax` is given. Defaults to the sampling
69
+ points for which the sampling objects was created.
70
+
71
+ .. versionadded:: 1.1
72
+
73
+ Return:
74
+ Array where the `l`-th item along `axis` corresponds to the
75
+ `l`-th basis coefficient
76
+
77
+ Note:
78
+ If `points` is given, a new sampling is created at each invocation,
79
+ which can result in a performance hit. Consider caching sampling
80
+ objects.
81
+ """
82
+ if points is not None:
83
+ return self._for_sampling_points(points).fit(ax, axis)
84
+
85
+ matrix = self.matrix
86
+ if self.basis.is_well_conditioned and not (matrix.cond <= 1e8):
87
+ warn(f"Sampling matrix is poorly conditioned "
88
+ f"(kappa = {matrix.cond:.2g})", ConditioningWarning)
89
+
90
+ return matrix.lstsq(ax, axis)
30
91
 
31
92
  @property
32
93
  def cond(self):
@@ -48,6 +109,9 @@ class AbstractSampling:
48
109
  """Basis instance"""
49
110
  raise NotImplementedError()
50
111
 
112
+ def _for_sampling_points(self, x):
113
+ raise RuntimeError("Changing sampling points is not possible")
114
+
51
115
 
52
116
  class TauSampling(AbstractSampling):
53
117
  """Sparse sampling in imaginary time.
@@ -68,10 +132,6 @@ class TauSampling(AbstractSampling):
68
132
  self._sampling_points = sampling_points
69
133
  self._matrix = DecomposedMatrix(matrix)
70
134
 
71
- if basis.is_well_conditioned and self._matrix.cond > 1e8:
72
- warn(f"Sampling matrix is poorly conditioned "
73
- f"(kappa = {self._matrix.cond:.2g})", ConditioningWarning)
74
-
75
135
  @property
76
136
  def basis(self): return self._basis
77
137
 
@@ -86,6 +146,10 @@ class TauSampling(AbstractSampling):
86
146
  """Sampling points in (reduced) imaginary time"""
87
147
  return self._sampling_points
88
148
 
149
+ def _for_sampling_points(self, x):
150
+ x = np.asarray(x)
151
+ return TauSampling(self._basis, x)
152
+
89
153
 
90
154
  class MatsubaraSampling(AbstractSampling):
91
155
  """Sparse sampling in Matsubara frequencies.
@@ -125,10 +189,6 @@ class MatsubaraSampling(AbstractSampling):
125
189
  else:
126
190
  self._matrix = DecomposedMatrix(matrix)
127
191
 
128
- if basis.is_well_conditioned and self._matrix.cond > 1e8:
129
- warn(f"Sampling matrix is poorly conditioned "
130
- f"(kappa = {self._matrix.cond:.2g})", ConditioningWarning)
131
-
132
192
  @property
133
193
  def basis(self): return self._basis
134
194
 
@@ -148,6 +208,11 @@ class MatsubaraSampling(AbstractSampling):
148
208
  """Sampling points as (reduced) Matsubara frequencies"""
149
209
  return self._sampling_points
150
210
 
211
+ def _for_sampling_points(self, x):
212
+ x = np.asarray(x)
213
+ return MatsubaraSampling(self._basis, x,
214
+ positive_only=self._positive_only)
215
+
151
216
 
152
217
  class DecomposedMatrix:
153
218
  """Matrix in SVD decomposed form for fast and accurate fitting.
@@ -314,6 +379,13 @@ class SplitDecomposedMatrix:
314
379
 
315
380
 
316
381
  class ConditioningWarning(RuntimeWarning):
382
+ """Warns about a poorly conditioned problem.
383
+
384
+ This warning is issued if the library detects a poorly conditioned fitting
385
+ problem. This essentially means there is a high degree of ambiguity in how
386
+ to choose the solution. One must therefore expect to lose significant
387
+ precision in the parameter values.
388
+ """
317
389
  pass
318
390
 
319
391
 
@@ -0,0 +1,150 @@
1
+ Metadata-Version: 2.1
2
+ Name: sparse-ir
3
+ Version: 1.1.1
4
+ Summary: intermediate representation (IR) basis for electronic propagator
5
+ Home-page: https://github.com/SpM-lab/sparse-ir
6
+ Author: ['Markus Wallerberger', 'Hiroshi Shinaoka', 'Kazuyoshi Yoshimi', 'Junya Otsuki', 'Chikano Naoya']
7
+ Author-email: markus.wallerberger@tuwien.ac.at
8
+ License: UNKNOWN
9
+ Keywords: irbasis many-body propagator svd
10
+ Platform: UNKNOWN
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Topic :: Scientific/Engineering :: Physics
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Requires-Python: >=3
18
+ Description-Content-Type: text/x-rst
19
+ Provides-Extra: doc
20
+ Provides-Extra: test
21
+ Provides-Extra: xprec
22
+ License-File: LICENSE.txt
23
+
24
+ sparse-ir - A library for the intermediate representation of propagators
25
+ ========================================================================
26
+ This library provides routines for constructing and working with the
27
+ intermediate representation of correlation functions. It provides:
28
+
29
+ - on-the-fly computation of basis functions for arbitrary cutoff Λ
30
+ - basis functions and singular values are accurate to full precision
31
+ - routines for sparse sampling
32
+
33
+
34
+ Installation
35
+ ------------
36
+ Install via `pip <https://pypi.org/project/sparse-ir>`_::
37
+
38
+ pip install sparse-ir[xprec]
39
+
40
+ The above line is the recommended way to install `sparse-ir`. It automatically
41
+ installs the `xprec <https://github.com/tuwien-cms/xprec>`_ package, which
42
+ allows one to compute the IR basis functions with greater accuracy. If you do
43
+ not want to do this, simply remove the string ``[xprec]`` from the above command.
44
+
45
+ Install via `conda <https://anaconda.org/spm-lab/sparse-ir>`_::
46
+
47
+ conda install -c spm-lab sparse-ir xprec
48
+
49
+ Other than the optional xprec dependency, sparse-ir requires only
50
+ `numpy <https://numpy.org/>`_ and `scipy <https://scipy.org/>`_.
51
+
52
+ To manually install the current development version, you can use the following::
53
+
54
+ # Only recommended for developers - no automatic updates!
55
+ git clone https://github.com/SpM-lab/sparse-ir
56
+ pip install -e sparse-ir/[xprec]
57
+
58
+ Documentation and tutorial
59
+ --------------------------
60
+ Check out our `comprehensive tutorial`_, where we self-contained
61
+ notebooks for several many-body methods - GF(2), GW, Eliashberg equations,
62
+ Lichtenstein formula, FLEX, ... - are presented.
63
+
64
+ Refer to the `API documentation`_ for more details on how to work
65
+ with the python library.
66
+
67
+ There is also a `Julia library`_ and (currently somewhat restricted)
68
+ `Fortran library`_ available for the IR basis and sparse sampling.
69
+
70
+ .. _comprehensive tutorial: https://spm-lab.github.io/sparse-ir-tutorial
71
+ .. _API documentation: https://sparse-ir.readthedocs.io
72
+ .. _Julia library: https://github.com/SpM-lab/SparseIR.jl
73
+ .. _Fortran library: https://github.com/SpM-lab/sparse-ir-fortran
74
+
75
+ Getting started
76
+ ---------------
77
+ Here is a full second-order perturbation theory solver (GF(2)) in a few
78
+ lines of Python code::
79
+
80
+ # Construct the IR basis and sparse sampling for fermionic propagators
81
+ import sparse_ir, numpy as np
82
+ basis = sparse_ir.FiniteTempBasis('F', beta=10, wmax=8, eps=1e-6)
83
+ stau = sparse_ir.TauSampling(basis)
84
+ siw = sparse_ir.MatsubaraSampling(basis, positive_only=True)
85
+
86
+ # Solve the single impurity Anderson model coupled to a bath with a
87
+ # semicircular states with unit half bandwidth.
88
+ U = 1.2
89
+ def rho0w(w):
90
+ return np.sqrt(1-w.clip(-1,1)**2) * 2/np.pi
91
+
92
+ # Compute the IR basis coefficients for the non-interacting propagator
93
+ rho0l = basis.v.overlap(rho0w)
94
+ G0l = -basis.s * rho0l
95
+
96
+ # Self-consistency loop: alternate between second-order expression for the
97
+ # self-energy and the Dyson equation until convergence.
98
+ Gl = G0l
99
+ Gl_prev = 0
100
+ while np.linalg.norm(Gl - Gl_prev) > 1e-6:
101
+ Gl_prev = Gl
102
+ Gtau = stau.evaluate(Gl)
103
+ Sigmatau = U**2 * Gtau**3
104
+ Sigmal = stau.fit(Sigmatau)
105
+ Sigmaiw = siw.evaluate(Sigmal)
106
+ G0iw = siw.evaluate(G0l)
107
+ Giw = 1/(1/G0iw - Sigmaiw)
108
+ Gl = siw.fit(Giw)
109
+
110
+ You may want to start with reading up on the `intermediate representation`_.
111
+ It is tied to the analytic continuation of bosonic/fermionic spectral
112
+ functions from (real) frequencies to imaginary time, a transformation mediated
113
+ by a kernel ``K``. The kernel depends on a cutoff, which you should choose to
114
+ be ``lambda_ >= beta * W``, where ``beta`` is the inverse temperature and ``W``
115
+ is the bandwidth.
116
+
117
+ One can now perform a `singular value expansion`_ on this kernel, which
118
+ generates two sets of orthonormal basis functions, one set ``v[l](w)`` for
119
+ real frequency side ``w``, and one set ``u[l](tau)`` for the same obejct in
120
+ imaginary (Euclidean) time ``tau``, together with a "coupling" strength
121
+ ``s[l]`` between the two sides.
122
+
123
+ By this construction, the imaginary time basis can be shown to be *optimal* in
124
+ terms of compactness.
125
+
126
+ .. _intermediate representation: https://arxiv.org/abs/2106.12685
127
+ .. _singular value expansion: https://w.wiki/3poQ
128
+
129
+ License and citation
130
+ --------------------
131
+ This software is released under the MIT License. See LICENSE.txt for details.
132
+
133
+ If you find the intermediate representation, sparse sampling, or this software
134
+ useful in your research, please consider citing the following papers:
135
+
136
+ - Hiroshi Shinaoka et al., `Phys. Rev. B 96, 035147`_ (2017)
137
+ - Jia Li et al., `Phys. Rev. B 101, 035144`_ (2020)
138
+ - Markus Wallerberger et al., `SoftwareX 21, 101266`_ (2023)
139
+
140
+ If you are discussing sparse sampling in your research specifically, please
141
+ also consider citing an independently discovered, closely related approach, the
142
+ MINIMAX isometry method (Merzuk Kaltak and Georg Kresse,
143
+ `Phys. Rev. B 101, 205145`_, 2020).
144
+
145
+ .. _Phys. Rev. B 96, 035147: https://doi.org/10.1103/PhysRevB.96.035147
146
+ .. _Phys. Rev. B 101, 035144: https://doi.org/10.1103/PhysRevB.101.035144
147
+ .. _SoftwareX 21, 101266: https://doi.org/10.1016/j.softx.2022.101266
148
+ .. _Phys. Rev. B 101, 205145: https://doi.org/10.1103/PhysRevB.101.205145
149
+
150
+
@@ -1,3 +1,4 @@
1
+ LICENSE.txt
1
2
  README.rst
2
3
  setup.py
3
4
  src/sparse_ir/__init__.py
@@ -100,3 +100,36 @@ def test_wn_noise(sve_logistic, stat, lambda_, positive_only):
100
100
  Gl_n = smpl.fit(Giw_n)
101
101
  np.testing.assert_allclose(Gl, Gl_n,
102
102
  atol=12 * np.sqrt(1 + positive_only) * noise * Gl_magn, rtol=0)
103
+
104
+
105
+ @pytest.mark.parametrize("stat, lambda_", [('F', 42)])
106
+ @pytest.mark.parametrize("positive_only", [False, True])
107
+ def test_wn_eval_other(sve_logistic, stat, lambda_, positive_only):
108
+ basis = sparse_ir.FiniteTempBasis(stat, 1, lambda_,
109
+ sve_result=sve_logistic[lambda_])
110
+ smpl = sparse_ir.MatsubaraSampling(basis, positive_only=positive_only)
111
+
112
+ n2 = [1, 3, 7]
113
+ smpl2 = sparse_ir.MatsubaraSampling(basis, sampling_points=n2)
114
+
115
+ rhol = basis.v([+.998, -.01, .5]) @ [0.8, -.2, 0.5]
116
+ Gl = basis.s * rhol
117
+ Gl_magn = np.linalg.norm(Gl)
118
+ np.testing.assert_allclose(smpl.evaluate(Gl, points=n2), smpl2.evaluate(Gl),
119
+ rtol=1e-15 * Gl_magn)
120
+
121
+
122
+ @pytest.mark.parametrize("stat, lambda_", [('F', 42)])
123
+ def test_tau_eval_other(sve_logistic, stat, lambda_):
124
+ basis = sparse_ir.FiniteTempBasis(stat, 1, lambda_,
125
+ sve_result=sve_logistic[lambda_])
126
+ smpl = sparse_ir.TauSampling(basis)
127
+
128
+ n2 = (0.1, 0.4)
129
+ smpl2 = sparse_ir.TauSampling(basis, sampling_points=n2)
130
+
131
+ rhol = basis.v([+.998, -.01, .5]) @ [0.8, -.2, 0.5]
132
+ Gl = basis.s * rhol
133
+ Gl_magn = np.linalg.norm(Gl)
134
+ np.testing.assert_allclose(smpl.evaluate(Gl, points=n2), smpl2.evaluate(Gl),
135
+ rtol=1e-15 * Gl_magn)
sparse-ir-1.0.0/PKG-INFO DELETED
@@ -1,147 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: sparse-ir
3
- Version: 1.0.0
4
- Summary: intermediate representation (IR) basis for electronic propagator
5
- Home-page: https://github.com/SpM-lab/sparse-ir
6
- Author: ['Markus Wallerberger', 'Hiroshi Shinaoka', 'Kazuyoshi Yoshimi', 'Junya Otsuki', 'Chikano Naoya']
7
- Author-email: markus.wallerberger@tuwien.ac.at
8
- License: UNKNOWN
9
- Description: sparse-ir - A library for the intermediate representation of propagators
10
- ========================================================================
11
- This library provides routines for constructing and working with the
12
- intermediate representation of correlation functions. It provides:
13
-
14
- - on-the-fly computation of basis functions for arbitrary cutoff Λ
15
- - basis functions and singular values are accurate to full precision
16
- - routines for sparse sampling
17
-
18
-
19
- Installation
20
- ------------
21
- Install via `pip <https://pypi.org/project/sparse-ir>`_::
22
-
23
- pip install sparse-ir[xprec]
24
-
25
- The above line is the recommended way to install `sparse-ir`. It automatically
26
- installs the `xprec <https://github.com/tuwien-cms/xprec>`_ package, which
27
- allows one to compute the IR basis functions with greater accuracy. If you do
28
- not want to do this, simply remove the string ``[xprec]`` from the above command.
29
-
30
- Install via `conda <https://anaconda.org/spm-lab/sparse-ir>`_::
31
-
32
- conda install -c spm-lab sparse-ir xprec
33
-
34
- Other than the optional xprec dependency, sparse-ir requires only
35
- `numpy <https://numpy.org/>`_ and `scipy <https://scipy.org/>`_.
36
-
37
- To manually install the current development version, you can use the following::
38
-
39
- # Only recommended for developers - no automatic updates!
40
- git clone https://github.com/SpM-lab/sparse-ir
41
- pip install -e sparse-ir/[xprec]
42
-
43
- Documentation and tutorial
44
- --------------------------
45
- Check out our `comprehensive tutorial`_, where we self-contained
46
- notebooks for several many-body methods - GF(2), GW, Eliashberg equations,
47
- Lichtenstein formula, FLEX, ... - are presented.
48
-
49
- Refer to the `API documentation`_ for more details on how to work
50
- with the python library.
51
-
52
- There is also a `Julia library`_ and (currently somewhat restricted)
53
- `Fortran library`_ available for the IR basis and sparse sampling.
54
-
55
- .. _comprehensive tutorial: https://spm-lab.github.io/sparse-ir-tutorial
56
- .. _API documentation: https://sparse-ir.readthedocs.io
57
- .. _Julia library: https://github.com/SpM-lab/SparseIR.jl
58
- .. _Fortran library: https://github.com/SpM-lab/sparse-ir-fortran
59
-
60
- Getting started
61
- ---------------
62
- Here is a full second-order perturbation theory solver (GF(2)) in a few
63
- lines of Python code::
64
-
65
- # Construct the IR basis and sparse sampling for fermionic propagators
66
- import sparse_ir, numpy as np
67
- basis = sparse_ir.FiniteTempBasis('F', beta=10, wmax=8, eps=1e-6)
68
- stau = sparse_ir.TauSampling(basis)
69
- siw = sparse_ir.MatsubaraSampling(basis, positive_only=True)
70
-
71
- # Solve the single impurity Anderson model coupled to a bath with a
72
- # semicircular states with unit half bandwidth.
73
- U = 1.2
74
- def rho0w(w):
75
- return np.sqrt(1-w.clip(-1,1)**2) * 2/np.pi
76
-
77
- # Compute the IR basis coefficients for the non-interacting propagator
78
- rho0l = basis.v.overlap(rho0w)
79
- G0l = -basis.s * rho0l
80
-
81
- # Self-consistency loop: alternate between second-order expression for the
82
- # self-energy and the Dyson equation until convergence.
83
- Gl = G0l
84
- Gl_prev = 0
85
- while np.linalg.norm(Gl - Gl_prev) > 1e-6:
86
- Gl_prev = Gl
87
- Gtau = stau.evaluate(Gl)
88
- Sigmatau = U**2 * Gtau**3
89
- Sigmal = stau.fit(Sigmatau)
90
- Sigmaiw = siw.evaluate(Sigmal)
91
- G0iw = siw.evaluate(G0l)
92
- Giw = 1/(1/G0iw - Sigmaiw)
93
- Gl = siw.fit(Giw)
94
-
95
- You may want to start with reading up on the `intermediate representation`_.
96
- It is tied to the analytic continuation of bosonic/fermionic spectral
97
- functions from (real) frequencies to imaginary time, a transformation mediated
98
- by a kernel ``K``. The kernel depends on a cutoff, which you should choose to
99
- be ``lambda_ >= beta * W``, where ``beta`` is the inverse temperature and ``W``
100
- is the bandwidth.
101
-
102
- One can now perform a `singular value expansion`_ on this kernel, which
103
- generates two sets of orthonormal basis functions, one set ``v[l](w)`` for
104
- real frequency side ``w``, and one set ``u[l](tau)`` for the same obejct in
105
- imaginary (Euclidean) time ``tau``, together with a "coupling" strength
106
- ``s[l]`` between the two sides.
107
-
108
- By this construction, the imaginary time basis can be shown to be *optimal* in
109
- terms of compactness.
110
-
111
- .. _intermediate representation: https://arxiv.org/abs/2106.12685
112
- .. _singular value expansion: https://w.wiki/3poQ
113
-
114
- License and citation
115
- --------------------
116
- This software is released under the MIT License. See LICENSE.txt for details.
117
-
118
- If you find the intermediate representation, sparse sampling, or this software
119
- useful in your research, please consider citing the following papers:
120
-
121
- - Hiroshi Shinaoka et al., `Phys. Rev. B 96, 035147`_ (2017)
122
- - Jia Li et al., `Phys. Rev. B 101, 035144`_ (2020)
123
- - Markus Wallerberger et al., `arXiv 2206.11762`_ (2022)
124
-
125
- If you are discussing sparse sampling in your research specifically, please
126
- also consider citing an independently discovered, closely related approach, the
127
- MINIMAX isometry method (Merzuk Kaltak and Georg Kresse,
128
- `Phys. Rev. B 101, 205145`_, 2020).
129
-
130
- .. _Phys. Rev. B 96, 035147: https://doi.org/10.1103/PhysRevB.96.035147
131
- .. _Phys. Rev. B 101, 035144: https://doi.org/10.1103/PhysRevB.101.035144
132
- .. _arXiv 2206.11762: https://doi.org/10.48550/arXiv.2206.11762
133
- .. _Phys. Rev. B 101, 205145: https://doi.org/10.1103/PhysRevB.101.205145
134
-
135
- Keywords: irbasis many-body propagator svd
136
- Platform: UNKNOWN
137
- Classifier: Development Status :: 5 - Production/Stable
138
- Classifier: Intended Audience :: Developers
139
- Classifier: Intended Audience :: Science/Research
140
- Classifier: Topic :: Scientific/Engineering :: Physics
141
- Classifier: License :: OSI Approved :: MIT License
142
- Classifier: Programming Language :: Python :: 3
143
- Requires-Python: >=3
144
- Description-Content-Type: text/x-rst
145
- Provides-Extra: doc
146
- Provides-Extra: test
147
- Provides-Extra: xprec
@@ -1,147 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: sparse-ir
3
- Version: 1.0.0
4
- Summary: intermediate representation (IR) basis for electronic propagator
5
- Home-page: https://github.com/SpM-lab/sparse-ir
6
- Author: ['Markus Wallerberger', 'Hiroshi Shinaoka', 'Kazuyoshi Yoshimi', 'Junya Otsuki', 'Chikano Naoya']
7
- Author-email: markus.wallerberger@tuwien.ac.at
8
- License: UNKNOWN
9
- Description: sparse-ir - A library for the intermediate representation of propagators
10
- ========================================================================
11
- This library provides routines for constructing and working with the
12
- intermediate representation of correlation functions. It provides:
13
-
14
- - on-the-fly computation of basis functions for arbitrary cutoff Λ
15
- - basis functions and singular values are accurate to full precision
16
- - routines for sparse sampling
17
-
18
-
19
- Installation
20
- ------------
21
- Install via `pip <https://pypi.org/project/sparse-ir>`_::
22
-
23
- pip install sparse-ir[xprec]
24
-
25
- The above line is the recommended way to install `sparse-ir`. It automatically
26
- installs the `xprec <https://github.com/tuwien-cms/xprec>`_ package, which
27
- allows one to compute the IR basis functions with greater accuracy. If you do
28
- not want to do this, simply remove the string ``[xprec]`` from the above command.
29
-
30
- Install via `conda <https://anaconda.org/spm-lab/sparse-ir>`_::
31
-
32
- conda install -c spm-lab sparse-ir xprec
33
-
34
- Other than the optional xprec dependency, sparse-ir requires only
35
- `numpy <https://numpy.org/>`_ and `scipy <https://scipy.org/>`_.
36
-
37
- To manually install the current development version, you can use the following::
38
-
39
- # Only recommended for developers - no automatic updates!
40
- git clone https://github.com/SpM-lab/sparse-ir
41
- pip install -e sparse-ir/[xprec]
42
-
43
- Documentation and tutorial
44
- --------------------------
45
- Check out our `comprehensive tutorial`_, where we self-contained
46
- notebooks for several many-body methods - GF(2), GW, Eliashberg equations,
47
- Lichtenstein formula, FLEX, ... - are presented.
48
-
49
- Refer to the `API documentation`_ for more details on how to work
50
- with the python library.
51
-
52
- There is also a `Julia library`_ and (currently somewhat restricted)
53
- `Fortran library`_ available for the IR basis and sparse sampling.
54
-
55
- .. _comprehensive tutorial: https://spm-lab.github.io/sparse-ir-tutorial
56
- .. _API documentation: https://sparse-ir.readthedocs.io
57
- .. _Julia library: https://github.com/SpM-lab/SparseIR.jl
58
- .. _Fortran library: https://github.com/SpM-lab/sparse-ir-fortran
59
-
60
- Getting started
61
- ---------------
62
- Here is a full second-order perturbation theory solver (GF(2)) in a few
63
- lines of Python code::
64
-
65
- # Construct the IR basis and sparse sampling for fermionic propagators
66
- import sparse_ir, numpy as np
67
- basis = sparse_ir.FiniteTempBasis('F', beta=10, wmax=8, eps=1e-6)
68
- stau = sparse_ir.TauSampling(basis)
69
- siw = sparse_ir.MatsubaraSampling(basis, positive_only=True)
70
-
71
- # Solve the single impurity Anderson model coupled to a bath with a
72
- # semicircular states with unit half bandwidth.
73
- U = 1.2
74
- def rho0w(w):
75
- return np.sqrt(1-w.clip(-1,1)**2) * 2/np.pi
76
-
77
- # Compute the IR basis coefficients for the non-interacting propagator
78
- rho0l = basis.v.overlap(rho0w)
79
- G0l = -basis.s * rho0l
80
-
81
- # Self-consistency loop: alternate between second-order expression for the
82
- # self-energy and the Dyson equation until convergence.
83
- Gl = G0l
84
- Gl_prev = 0
85
- while np.linalg.norm(Gl - Gl_prev) > 1e-6:
86
- Gl_prev = Gl
87
- Gtau = stau.evaluate(Gl)
88
- Sigmatau = U**2 * Gtau**3
89
- Sigmal = stau.fit(Sigmatau)
90
- Sigmaiw = siw.evaluate(Sigmal)
91
- G0iw = siw.evaluate(G0l)
92
- Giw = 1/(1/G0iw - Sigmaiw)
93
- Gl = siw.fit(Giw)
94
-
95
- You may want to start with reading up on the `intermediate representation`_.
96
- It is tied to the analytic continuation of bosonic/fermionic spectral
97
- functions from (real) frequencies to imaginary time, a transformation mediated
98
- by a kernel ``K``. The kernel depends on a cutoff, which you should choose to
99
- be ``lambda_ >= beta * W``, where ``beta`` is the inverse temperature and ``W``
100
- is the bandwidth.
101
-
102
- One can now perform a `singular value expansion`_ on this kernel, which
103
- generates two sets of orthonormal basis functions, one set ``v[l](w)`` for
104
- real frequency side ``w``, and one set ``u[l](tau)`` for the same obejct in
105
- imaginary (Euclidean) time ``tau``, together with a "coupling" strength
106
- ``s[l]`` between the two sides.
107
-
108
- By this construction, the imaginary time basis can be shown to be *optimal* in
109
- terms of compactness.
110
-
111
- .. _intermediate representation: https://arxiv.org/abs/2106.12685
112
- .. _singular value expansion: https://w.wiki/3poQ
113
-
114
- License and citation
115
- --------------------
116
- This software is released under the MIT License. See LICENSE.txt for details.
117
-
118
- If you find the intermediate representation, sparse sampling, or this software
119
- useful in your research, please consider citing the following papers:
120
-
121
- - Hiroshi Shinaoka et al., `Phys. Rev. B 96, 035147`_ (2017)
122
- - Jia Li et al., `Phys. Rev. B 101, 035144`_ (2020)
123
- - Markus Wallerberger et al., `arXiv 2206.11762`_ (2022)
124
-
125
- If you are discussing sparse sampling in your research specifically, please
126
- also consider citing an independently discovered, closely related approach, the
127
- MINIMAX isometry method (Merzuk Kaltak and Georg Kresse,
128
- `Phys. Rev. B 101, 205145`_, 2020).
129
-
130
- .. _Phys. Rev. B 96, 035147: https://doi.org/10.1103/PhysRevB.96.035147
131
- .. _Phys. Rev. B 101, 035144: https://doi.org/10.1103/PhysRevB.101.035144
132
- .. _arXiv 2206.11762: https://doi.org/10.48550/arXiv.2206.11762
133
- .. _Phys. Rev. B 101, 205145: https://doi.org/10.1103/PhysRevB.101.205145
134
-
135
- Keywords: irbasis many-body propagator svd
136
- Platform: UNKNOWN
137
- Classifier: Development Status :: 5 - Production/Stable
138
- Classifier: Intended Audience :: Developers
139
- Classifier: Intended Audience :: Science/Research
140
- Classifier: Topic :: Scientific/Engineering :: Physics
141
- Classifier: License :: OSI Approved :: MIT License
142
- Classifier: Programming Language :: Python :: 3
143
- Requires-Python: >=3
144
- Description-Content-Type: text/x-rst
145
- Provides-Extra: doc
146
- Provides-Extra: test
147
- Provides-Extra: xprec
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes