Source code for cppfunctions

""""""  #
"""
Copyright (c) 2020-2024, Dany Cajas
All rights reserved.
This work is licensed under BSD 3-Clause "New" or "Revised" License.
License available at https://github.com/dcajasn/Riskfolio-Lib/blob/master/LICENSE.txt
"""

import numpy as np
import pandas as pd
from riskfolio.external.functions import *
from itertools import product


[docs] def duplication_matrix(n: int): r""" Calculate duplication matrix of size "n" as shown in :cite:`d-Magnus1980`. Parameters ---------- n : int Number of assets. Returns ------- D: np.ndarray Duplication matrix """ return cpp_duplication_matrix(n)
[docs] def duplication_elimination_matrix(n: int): r""" Calculate duplication elimination matrix of size "n" as shown in :cite:`d-Magnus1980`. Parameters ---------- n : int Number of assets. Returns ------- L: np.ndarray Duplication matrix """ return cpp_duplication_elimination_matrix(n)
[docs] def duplication_summation_matrix(n: int): r""" Calculate duplication summation matrix of size "n" as shown in :cite:`d-Cajas4`. Parameters ---------- n : int Number of assets. Returns ------- S: np.ndarray Duplication summation matrix. """ return cpp_duplication_summation_matrix(n)
[docs] def commutation_matrix(T: int, n: int): r""" Calculate commutation matrix of size T x n. Parameters ---------- T : int Number of rows. n : int Number of columns. Returns ------- K: np.ndarray Duplication summation matrix. """ return cpp_commutation_matrix(T, n)
[docs] def coskewness_matrix(Y: np.ndarray): r""" Calculates coskewness rectangular matrix as shown in :cite:`d-Cajas4`. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_sample x n_features. Returns ------- M3 : ndarray The lower semi coskewness rectangular matrix. Raises ------ ValueError when the value cannot be calculated. """ flag = False if isinstance(Y, pd.DataFrame): assets = Y.columns.tolist() cols = list(product(assets, assets)) cols = [str(y) + " - " + str(x) for x, y in cols] flag = True Y_ = np.array(Y, ndmin=2) M3 = cpp_coskewness_matrix(Y_, semi=False) if flag: M3 = pd.DataFrame(M3, index=assets, columns=cols) return M3
[docs] def semi_coskewness_matrix(Y: np.ndarray): r""" Calculates lower semi coskewness rectangular matrix as shown in :cite:`d-Cajas4`. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_samples x n_features. Returns ------- s_M3 : ndarray The lower semi coskewness rectangular matrix. Raises ------ ValueError when the value cannot be calculated. """ flag = False if isinstance(Y, pd.DataFrame): assets = Y.columns.tolist() cols = list(product(assets, assets)) cols = [str(y) + " - " + str(x) for x, y in cols] flag = True Y_ = np.array(Y, ndmin=2) s_M3 = cpp_coskewness_matrix(Y_, semi=True) if flag: s_M3 = pd.DataFrame(s_M3, index=assets, columns=cols) return s_M3
[docs] def cokurtosis_matrix(Y: np.ndarray): r""" Calculates cokurtosis square matrix as shown in :cite:`d-Cajas4`. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_samples x n_features. Returns ------- S4 : ndarray The cokurtosis square matrix. Raises ------ ValueError when the value cannot be calculated. """ flag = False if isinstance(Y, pd.DataFrame): assets = Y.columns.tolist() cols = list(product(assets, assets)) cols = [str(y) + " - " + str(x) for x, y in cols] flag = True Y_ = np.array(Y, ndmin=2) S4 = cpp_cokurtosis_matrix(Y_, semi=False) if flag: S4 = pd.DataFrame(S4, index=cols, columns=cols) return S4
[docs] def semi_cokurtosis_matrix(Y): r""" Calculates lower semi cokurtosis square matrix as shown in :cite:`d-Cajas4`. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_sample x n_features. Returns ------- s_S4 : ndarray The lower semi cokurtosis square matrix. Raises ------ ValueError when the value cannot be calculated. """ flag = False if isinstance(Y, pd.DataFrame): assets = Y.columns.tolist() cols = list(product(assets, assets)) cols = [str(y) + " - " + str(x) for x, y in cols] flag = True Y_ = np.array(Y, ndmin=2) s_S4 = cpp_cokurtosis_matrix(Y_, semi=True) if flag: s_S4 = pd.DataFrame(s_S4, index=cols, columns=cols) return s_S4
[docs] def k_eigh(Y, k): r""" Calculates lower semi cokurtosis square matrix as shown in :cite:`d-Cajas4`. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_sample x n_features. Returns ------- s_S4 : ndarray The lower semi cokurtosis square matrix. Raises ------ ValueError when the value cannot be calculated. """ Y_ = np.array(Y, ndmin=2) eigvalues, eigvectors = cpp_k_eigh(Y_, k) return eigvalues, eigvectors
[docs] def d_corr(X, Y): r""" Calculates the distance correlation of X and Y. Parameters ---------- X : ndarray or dataframe Returns series of shape n_sample x n_features. Y : ndarray or dataframe Returns series of shape n_sample x n_features. Returns ------- value : float Distance correlation. Raises ------ ValueError when the value cannot be calculated. """ X_ = np.array(X, ndmin=2) Y_ = np.array(Y, ndmin=2) value = cpp_dcorr(X_, Y_) return value
[docs] def d_corr_matrix(Y): r""" Calculates the distance correlation matrix of matrix of variables Y. Parameters ---------- Y : ndarray or dataframe Returns series of shape n_sample x n_features. Returns ------- value : float Distance correlation. Raises ------ ValueError when the value cannot be calculated. """ Y_ = np.array(Y, ndmin=2) value = cpp_dcorr_matrix(Y_) return value