# -*- coding: utf-8 -*-
from enum import Enum as _Enum, unique as _unique
from rivapy import _pyvacon_available
"""
The following Enum sub-classes replace to corresponding former classes one-on-one. The main reason for this replacement
is the more comfortable iterations over the enumeration class members. Moreover, the Enum class provides potentially
useful functionalities like comparisons, pickling, ... Finally, the decorator @unique ensures unique enumeration values.
"""
class _MyEnum(_Enum):
@classmethod
def has_value(cls, value):
return value in cls._value2member_map_
@classmethod
def to_string(cls, value) -> str:
"""Checks if given enum class contains the value and raises exception if not. If value is str
Args:
enum (_type_): _description_
value (_type_): _description_
Returns:
str: _description_
"""
def has_value(cls, value):
return value in cls._value2member_map_
if isinstance(value, str):
if not cls.has_value(value):
raise Exception("Unknown " + cls.__name__ + ": " + value)
return value
if isinstance(value, cls):
return value.value
raise Exception("Given value " + str(value) + " does not belong to enum " + cls.__name__)
class _MyIntEnum(_Enum):
@classmethod
def has_value(cls, value):
return value in cls._value2member_map_
@classmethod
def to_string(cls, value) -> str:
"""Checks if given enum class contains the value and raises exception if not. If value is str
Args:
enum (_type_): _description_
value (_type_): _description_
Returns:
str: _description_
"""
def has_value(cls, value):
return value in cls._value2member_map_
if isinstance(value, str):
cls[value] # check if the string exists as key
return value
elif isinstance(value, int):
return cls._value2member_map_[value].name
if isinstance(value, cls):
return value.name
raise Exception("Given value " + str(value) + " does not belong to enum " + cls.__name__)
if _pyvacon_available:
from pyvacon.finance.definition import DayCounter as _DayCounter
DayCounterType = _DayCounter.Type
from pyvacon.numerics.interpolation import InterpolationType
from pyvacon.numerics.extrapolation import ExtrapolationType
else:
[docs]
@_unique
class InterpolationType(_MyEnum):
CONSTANT = "CONSTANT"
LINEAR = "LINEAR"
LINEAR_LOG = "LINEARLOG"
CONSTRAINED_SPLINE = "CONSTRAINED_SPLINE"
HAGAN = "HAGAN"
HAGAN_DF = "HAGAN_DF"
[docs]
@_unique
class SecuritizationLevel(_MyEnum):
NONE = "NONE"
COLLATERALIZED = "COLLATERALIZED"
SENIOR_SECURED = "SENIOR_SECURED"
SENIOR_UNSECURED = "SENIOR_UNSECURED"
SUBORDINATED = "SUBORDINATED"
MEZZANINE = "MEZZANINE"
EQUITY = "EQUITY"
PREFERRED_SENIOR = "PREFERRED_SENIOR"
NON_PREFERRED_SENIOR = "NON_PREFERRED_SENIOR"
# class SecuritizationLevel:
# NONE = 'NONE'
# COLLATERALIZED = 'COLLATERALIZED' #,,,'','SUBORDINATED','MEZZANINE','EQUITY']
# SENIOR_SECURED = 'SENIOR_SECURED'
# SENIOR_UNSECURED = 'SENIOR_UNSECURED'
# SUBORDINATED = 'SUBORDINATED'
# MEZZANINE = 'MEZZANINE'
# EQUITY = 'EQUITY'
# @_unique
# class ProductType(_MyEnum):
# BOND = 'BOND'
# CALLABLE_BOND = 'CALLABLE_BOND'
# @_unique
# class PricerType(_MyEnum):
# ANALYTIC = 'ANALYTIC'
# PDE = 'PDE'
# MONTE_CARLO = 'MONTE_CARLO'
# COMBO = 'COMBO'
@_unique
class EnergyTimeGridStructure(_MyEnum):
BASE = "BASE"
PEAK = "PEAK"
OFFPEAK = "OFFPEAK"
@_unique
class Model(_MyEnum):
BLACK76 = "BLACK76"
CIR = "CIR"
HULL_WHITE = "HULL_WHITE"
HESTON = "HESTON"
LV = "LV"
GBM = "GBM"
G2PP = "G2PP"
VASICEK = "VASICEK"
# class Model:
# BLACK76 = 'BLACK76'
# CIR ='CIR'
# HULL_WHITE = 'HULL_WHITE'
# HESTON = 'HESTON'
# LV = 'LV'
# GBM = 'GBM'
# G2PP = 'G2PP'
# VASICEK = 'VASICEK'
@_unique
class Period(_MyEnum):
A = "A"
SA = "SA"
Q = "Q"
M = "M"
D = "D"
# class Period:
# A = 'A'
# SA = 'SA'
# Q = 'Q'
# M = 'M'
# D = 'D'
[docs]
@_unique
class RollConvention(_MyEnum):
FOLLOWING = "Following"
MODIFIED_FOLLOWING = "ModifiedFollowing"
MODIFIED_FOLLOWING_EOM = "ModifiedFollowingEOM"
MODIFIED_FOLLOWING_BIMONTHLY = "ModifiedFollowingBimonthly"
PRECEDING = "Preceding"
MODIFIED_PRECEDING = "ModifiedPreceding"
NEAREST = "Nearest"
UNADJUSTED = "Unadjusted"
# class RollConvention:
# FOLLOWING = 'Following'
# MODIFIED_FOLLOWING = 'ModifiedFollowing'
# MODIFIED_FOLLOWING_EOM = 'ModifiedFollowingEOM'
# PRECEDING = 'Preceding'
# MODIFIED_PRECEDING = 'ModifiedPreceding'
# UNADJUSTED = 'Unadjusted'
[docs]
@_unique
class DayCounterType(_MyEnum):
ACT_ACT = "ActAct"
Act365Fixed = "Act365Fixed"
ACT360 = "Act360"
ThirtyU360 = "30U360"
ThirtyE360 = "30E360"
ACT252 = "Act252"
[docs]
@_unique
class InflationInterpolation(_MyEnum):
UNDEFINED = "UNDEFINED"
GERMAN = "GERMAN"
JAPAN = "JAPAN"
CONSTANT = "CONSTANT"
@_unique
class Sector(_MyEnum):
UNDEFINED = "UNDEFINED"
# BASIC_MATERIALS = 'BasicMaterials'
CONGLOMERATES = "Conglomerates"
CONSUMER_GOODS = "ConsumerGoods"
# FINANCIAL = 'Financial'
# HEALTHCARE = 'Healthcare'
# INDUSTRIAL_GOODS = 'IndustrialGoods'
SERVICES = "Services"
# TECHNOLOGY = 'Technology'
# UTILITIES = 'Utilities'
COMMUNICATION_SERVICES = "CommunicationServices"
CONSUMER_STAPLES = "ConsumerStaples"
CONSUMER_DISCRETIONARY = "ConsumerDiscretionary"
ENERGY = "Energy"
FINANCIAL = "Financial"
HEALTH_CARE = "HealthCare"
INDUSTRIALS = "Industrials"
INFORMATION_TECHNOLOGY = "InformationTechnology"
MATERIALS = "Materials"
REAL_ESTATE = "RealEstate"
UTILITIES = "Utilities"
@_unique
class ESGRating(_MyEnum): # see MSCI ESG ratings
AAA = "AAA"
AA = "AA"
A = "A"
BBB = "BBB"
BB = "BB"
B = "B"
CCC = "CCC"
@_unique
class Rating(_MyEnum):
# cf. https://www.moneyland.ch/de/vergleich-rating-agenturen
AAA = "AAA"
AA_PLUS = "AA+"
AA = "AA"
AA_MINUS = "AA-"
A_PLUS = "A+"
A = "A"
A_MINUS = "A-"
BBB_PLUS = "BBB+"
BBB = "BBB"
BBB_MINUS = "BBB-"
BB_PLUS = "BB+"
BB = "BB"
BB_MINUS = "BB-"
B_PLUS = "B+"
B = "B"
B_MINUS = "B-"
CCC_PLUS = "CCC+"
CCC = "CCC"
CCC_MINUS = "CCC-"
CC = "CC"
C = "C"
D = "D"
NONE = "NONE" # not rated
# class ProductType:
# BOND = 'BOND'
# CALLABLE_BOND = 'CALLABLE_BOND'
class PricerType:
ANALYTIC = "ANALYTIC"
PDE = "PDE"
MONTE_CARLO = "MONTE_CARLO"
COMBO = "COMBO"
[docs]
@_unique
class VolatilityStickyness(_MyEnum):
NONE = "NONE"
StickyStrike = "StickyStrike"
StickyXStrike = "StickyXStrike"
StickyFwdMoneyness = "StickyFwdMoneyness"
@_unique
class Currency(_MyEnum):
AED = "AED"
AFN = "AFN"
ALL = "ALL"
AMD = "AMD"
ANG = "ANG"
AOA = "AOA"
ARS = "ARS"
AUD = "AUD"
AWG = "AWG"
AZN = "AZN"
BAM = "BAM"
BBD = "BBD"
BDT = "BDT"
BGN = "BGN"
BHD = "BHD"
BIF = "BIF"
BMD = "BMD"
BND = "BND"
BOB = "BOB"
BRL = "BRL"
BSD = "BSD"
BTN = "BTN"
BWP = "BWP"
BYR = "BYR"
BZD = "BZD"
CAD = "CAD"
CDF = "CDF"
CHF = "CHF"
CLP = "CLP"
CNH = "CNH"
CNY = "CNY"
COP = "COP"
CRC = "CRC"
CUC = "CUC"
CUP = "CUP"
CVE = "CVE"
CZK = "CZK"
DJF = "DJF"
DKK = "DKK"
DOP = "DOP"
DZD = "DZD"
EGP = "EGP"
ERN = "ERN"
ETB = "ETB"
EUR = "EUR"
FJD = "FJD"
FKP = "FKP"
GBP = "GBP"
GEL = "GEL"
GGP = "GGP"
GHS = "GHS"
GIP = "GIP"
GMD = "GMD"
GNF = "GNF"
GTQ = "GTQ"
GYD = "GYD"
HKD = "HKD"
HNL = "HNL"
HRK = "HRK"
HTG = "HTG"
HUF = "HUF"
IDR = "IDR"
ILS = "ILS"
IMP = "IMP"
INR = "INR"
IQD = "IQD"
IRR = "IRR"
ISK = "ISK"
JEP = "JEP"
JMD = "JMD"
JOD = "JOD"
JPY = "JPY"
KES = "KES"
KGS = "KGS"
KHR = "KHR"
KMF = "KMF"
KPW = "KPW"
KRW = "KRW"
KWD = "KWD"
KYD = "KYD"
KZT = "KZT"
LAK = "LAK"
LBP = "LBP"
LKR = "LKR"
LRD = "LRD"
LSL = "LSL"
LTL = "LTL"
LVL = "LVL"
LYD = "LYD"
MAD = "MAD"
MDL = "MDL"
MGA = "MGA"
MKD = "MKD"
MMK = "MMK"
MNT = "MNT"
MOP = "MOP"
MRO = "MRO"
MUR = "MUR"
MVR = "MVR"
MWK = "MWK"
MXN = "MXN"
MYR = "MYR"
MZN = "MZN"
NAD = "NAD"
NGN = "NGN"
NIO = "NIO"
NOK = "NOK"
NPR = "NPR"
NZD = "NZD"
OMR = "OMR"
PAB = "PAB"
PEN = "PEN"
PGK = "PGK"
PHP = "PHP"
PKR = "PKR"
PLN = "PLN"
PYG = "PYG"
QAR = "QAR"
RON = "RON"
RSD = "RSD"
RUB = "RUB"
RWF = "RWF"
SAR = "SAR"
SBD = "SBD"
SCR = "SCR"
SDG = "SDG"
SEK = "SEK"
SGD = "SGD"
SHP = "SHP"
SLL = "SLL"
SOS = "SOS"
SPL = "SPL"
SRD = "SRD"
STD = "STD"
SVC = "SVC"
SYP = "SYP"
SZL = "SZL"
THB = "THB"
TJS = "TJS"
TMT = "TMT"
TND = "TND"
TOP = "TOP"
TRY = "TRY"
TTD = "TTD"
TVD = "TVD"
TWD = "TWD"
TZS = "TZS"
UAH = "UAH"
UGX = "UGX"
USD = "USD"
UYU = "UYU"
UZS = "UZS"
VEF = "VEF"
VND = "VND"
VUV = "VUV"
WST = "WST"
XAF = "XAF"
XAG = "XAG"
XAU = "XAU"
XPD = "XPD"
XPT = "XPT"
XCD = "XCD"
XDR = "XDR"
XOF = "XOF"
XPF = "XPF"
YER = "YER"
ZAR = "ZAR"
ZMW = "ZMW"
ZWD = "ZWD"
class Country(_MyEnum):
DE = "DE"
FR = "FR"
CA = "CA"
US = "US"
GB = "GB"
JP = "JP"
CN = "CN"