Source code for wulfric._exceptions

# ================================== LICENSE ===================================
# Wulfric - Cell, Atoms, K-path, visualization.
# Copyright (C) 2023 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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/>.
#
# ================================ END LICENSE =================================

import sys

__all__ = [
    "ConventionNotSupported",
    "FailedToDeduceAtomSpecies",
    "NiggliReductionFailed",
    "PotentialBugError",
]

_SUPPORT_FOOTER = "\nPlease contact developers of wulfric (see https://docs.wulfric.org/en/latest/support.html)."


def _raise_with_message(e, message):
    # Python < 3.11
    if sys.version_info[1] < 11:
        args = e.args
        if not args:
            arg0 = message
        else:
            arg0 = f"{args[0]}\n{message}"
        e.args = (arg0,) + args[1:]
        raise e
    # Python >= 3.11
    else:
        e.add_note(message)
        raise e


[docs] class ConventionNotSupported(Exception): """ Raised when the convention for the cell/crystall is not one of the supported ones. """ def __init__(self, convention: str, supported_conventions: list): self.message = ( f'Convention "{convention}" is not supported. Supported conventions are\n * ' + "\n * ".join(supported_conventions) ) def __str__(self): return self.message
[docs] class FailedToDeduceAtomSpecies(Exception): r""" Raised when the automatic deduction of the atom species from its name fails. """ def __init__(self, name: str): self.message = f"Tried to deduce name from '{name}'. Failed." def __str__(self): return self.message
[docs] class NiggliReductionFailed(Exception): r""" Raised when niggli reduction reaches ``max_iterations``. """ def __init__(self, max_iterations: int): self.message = f"Niggli reduction algorithm reached maximum amount of iterations: {max_iterations}" def __str__(self): return self.message
[docs] class PotentialBugError(Exception): def __init__(self, error_summary): self.message = ( error_summary + "\nIf you see this error, than there might be a bug in wulfric." + _SUPPORT_FOOTER ) def __str__(self): return self.message