Source code for triqs_maxent.alpha_meshes

# TRIQS application maxent
# Copyright (C) 2018 Gernot J. Kraberger
# Copyright (C) 2018 Simons Foundation
# Authors: Gernot J. Kraberger and Manuel Zingl
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.




import numpy as np
import warnings


[docs] class BaseAlphaMesh(np.ndarray): """ Base class for alpha meshes. All meshes inherit from this class. """ def __new__(cls, alpha_min=0.0001, alpha_max=20, n_points=20, *args, **kwargs): obj = super(BaseAlphaMesh, cls).__new__(cls, shape=(n_points)) return obj def __init__(self, alpha_min=0.0001, alpha_max=20, n_points=20): if n_points > 1: if alpha_min > alpha_max: raise Exception('alpha_min must be smaller than alpha_max') if (alpha_min <= 0) or (alpha_max <= 0): raise Exception('All alpha values must be positive') self.alpha_min = alpha_min self.alpha_max = alpha_max self.n_points = n_points
[docs] class DataAlphaMesh(BaseAlphaMesh): """ Alpha mesh from data array The :math:`\\alpha`-points are picked from a user-supplied array. Parameters ---------- data : array the alpha points """ def __new__(cls, data): return super(DataAlphaMesh, cls).__new__(cls, np.min(data), np.max(data), len(data)) def __init__(self, data): super(DataAlphaMesh, self).__init__(np.min(data), np.max(data), len(data)) self[:] = sorted(data, reverse=True)
[docs] class LogAlphaMesh(BaseAlphaMesh): """ Alpha mesh with logarithmically spaced data points Parameters ---------- alpha_min : float the minimal alpha (NOT its log) alpha_max: float the maximal alpha (NOT its log) n_points : int the number of points in the alpha mesh """ def __init__(self, alpha_min=0.0001, alpha_max=20, n_points=20): super(LogAlphaMesh, self).__init__(alpha_min, alpha_max, n_points) self[:] = np.logspace(np.log10(alpha_min), np.log10(alpha_max), n_points)[::-1]
[docs] class LinearAlphaMesh(BaseAlphaMesh): """ Alpha mesh with linearly spaced data points Parameters ---------- alpha_min : float the minimal alpha alpha_max: float the maximal alpha n_points : int the number of points in the alpha mesh """ def __init__(self, alpha_min=0.0001, alpha_max=20, n_points=20): super(LinearAlphaMesh, self).__init__(alpha_min, alpha_max, n_points) self[:] = np.linspace(alpha_min, alpha_max, n_points)[::-1]