Skip to content

Commit

Permalink
Add Prechecks (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexAxthelm authored Aug 14, 2024
1 parent d6eea34 commit 82bbc29
Show file tree
Hide file tree
Showing 11 changed files with 819 additions and 14 deletions.
3 changes: 2 additions & 1 deletion .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
^LICENSE\.md$
^docker-compose.yml$
^input_dir/
^output_dir/
^analysis_output_dir/
^pacta-data/
^portfolios/
^run-pacta.sh$
^workflow.pacta.Rproj$
6 changes: 6 additions & 0 deletions .lintr
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
linters: all_linters()
exclusions: list(
"tests/testthat.R",
"inst/extdata/scripts/run_pacta.R"
)

8 changes: 6 additions & 2 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: workflow.pacta
Title: Run PACTA
Version: 0.0.0.9005
Version: 0.0.0.9006
Authors@R:
c(person(given = "CJ",
family = "Yetman",
Expand Down Expand Up @@ -40,4 +40,8 @@ Remotes:
RMI-PACTA/pacta.portfolio.audit,
RMI-PACTA/pacta.portfolio.import,
RMI-PACTA/pacta.portfolio.utils,
RMI-PACTA/pacta.workflow.utils
RMI-PACTA/pacta.workflow.utils@develop
Suggests:
testthat (>= 3.0.0),
withr
Config/testthat/edition: 3
48 changes: 48 additions & 0 deletions R/calc_weights_and_outputs.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ calc_weights_and_outputs <- function(
start_year,
time_horizon
) {
log_debug("Checking IO for calc_weights_and_outputs.")
calc_weights_prechecks(
total_portfolio = total_portfolio,
portfolio_type = portfolio_type,
output_dir = output_dir,
data_dir = data_dir
)

log_info("Starting {portfolio_type} calculations.")

Expand Down Expand Up @@ -178,3 +185,44 @@ calc_weights_and_outputs <- function(
}

}

calc_weights_prechecks <- function(
total_portfolio,
portfolio_type,
output_dir,
data_dir
) {
if (is.null(total_portfolio)) {
log_warn("Portfolio is NULL.")
} else if (nrow(total_portfolio) == 0L) {
log_error("Portfolio has no rows.")
stop("Portfolio has no rows.")
}
if (portfolio_type == "Equity") {
input_files <- c(
# merge_abcd_from_db
file.path(data_dir, "equity_abcd_scenario.rds"),
# get_abcd_raw
file.path(data_dir, "masterdata_ownership_datastore.rds")
)
} else if (portfolio_type == "Bonds") {
input_files <- c(
# merge_abcd_from_db
file.path(data_dir, "bonds_abcd_scenario.rds"),
# get_abcd_raw
file.path(data_dir, "masterdata_debt_datastore.rds")
)
} else {
stop("Invalid portfolio type.")
}
pacta.workflow.utils::check_io(
input_files = input_files,
output_dir = output_dir
)
return(
list(
input_files = input_files,
output_dir = output_dir
)
)
}
48 changes: 38 additions & 10 deletions R/run_analysis.R
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,12 @@ run_analysis <- function(
# quit if there's no relevant PACTA assets --------------------------------

total_portfolio_path <- file.path(output_dir, "total_portfolio.rds")
if (file.exists(total_portfolio_path)) {
total_portfolio <- readRDS(total_portfolio_path)
log_trace(
"Checking for PACTA relevant data in file: \"{total_portfolio_path}\"."
)
pacta.portfolio.utils::quit_if_no_pacta_relevant_data(total_portfolio)
} else {
log_warn("file \"{total_portfolio_path}\" does not exist.")
warning("File \"total_portfolio.rds\" file does not exist.")
}
analysis_prechecks(
total_portfolio_path = total_portfolio_path,
pacta_data_dir = pacta_data_dir,
output_dir = output_dir
)
total_portfolio <- readRDS(total_portfolio_path)


calc_weights_and_outputs(
Expand Down Expand Up @@ -60,3 +56,35 @@ run_analysis <- function(

log_info("Finished PACTA calculations.")
}

analysis_prechecks <- function(
total_portfolio_path,
pacta_data_dir,
output_dir
) {
pacta.workflow.utils::check_io(
input_files = total_portfolio_path,
output_dir = output_dir
)
if (is.null(total_portfolio_path)) {
total_portfolio <- NULL
} else {
total_portfolio <- readRDS(total_portfolio_path)
log_trace(
"Checking for PACTA relevant data in file: \"{total_portfolio_path}\"."
)
pacta.portfolio.utils::quit_if_no_pacta_relevant_data(total_portfolio)
}
calc_weights_prechecks(
total_portfolio = total_portfolio,
portfolio_type = "Equity",
output_dir = output_dir,
data_dir = pacta_data_dir
)
calc_weights_prechecks(
total_portfolio = total_portfolio,
portfolio_type = "Bonds",
output_dir = output_dir,
data_dir = pacta_data_dir
)
}
38 changes: 38 additions & 0 deletions R/run_audit.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ run_audit <- function(
portfolio_files,
output_dir
) {
# Prechecks ----------------------------------------------------------------
audit_io_files <- audit_prechecks(
pacta_data_dir = pacta_data_dir,
portfolio_dir = portfolio_dir,
portfolio_files = portfolio_files,
output_dir = output_dir
)

log_info("Starting portfolio audit")

Expand Down Expand Up @@ -139,4 +146,35 @@ run_audit <- function(
saveRDS(emissions_totals, file.path(output_dir, "emissions.rds"))

log_info("Portfolio audit finished.")
return(audit_io_files)
}

audit_prechecks <- function(
pacta_data_dir,
portfolio_dir,
portfolio_files,
output_dir
) {
input_files <- c(
file.path(pacta_data_dir, "currencies.rds"),
file.path(pacta_data_dir, "fund_data.rds"),
file.path(pacta_data_dir, "total_fund_list.rds"),
file.path(pacta_data_dir, "isin_to_fund_table.rds"),
file.path(pacta_data_dir, "financial_data.rds"),
file.path(pacta_data_dir, "abcd_flags_equity.rds"),
file.path(pacta_data_dir, "abcd_flags_bonds.rds"),
file.path(pacta_data_dir, "iss_entity_emission_intensities.rds"),
file.path(pacta_data_dir, "iss_average_sector_emission_intensities.rds"),
file.path(portfolio_dir, portfolio_files)
)
pacta.workflow.utils::check_io(
input_files = input_files,
output_dir = output_dir
)
return(
list(
input_files = input_files,
output_dir = output_dir
)
)
}
14 changes: 13 additions & 1 deletion R/run_pacta.R
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ run_pacta <- function(
stop("Invalid raw input parameters.")
}

params <- pacta.workflow.utils:::parse_params(
params <- pacta.workflow.utils:::parse_params( #nolint
json = raw_params,
inheritence_search_paths = system.file(
"extdata", "parameters",
Expand All @@ -59,6 +59,18 @@ run_pacta <- function(
)
)

audit_prechecks(
portfolio_files = params[["portfolio"]][["files"]],
pacta_data_dir = pacta_data_dir,
portfolio_dir = portfolio_dir,
output_dir = output_dir
)
analysis_prechecks(
total_portfolio_path = NULL,
pacta_data_dir = pacta_data_dir,
output_dir = output_dir
)

run_audit(
portfolio_files = params[["portfolio"]][["files"]],
pacta_data_dir = pacta_data_dir,
Expand Down
12 changes: 12 additions & 0 deletions tests/testthat.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# This file is part of the standard setup for testthat.
# It is recommended that you do not modify it.
#
# Where should you do additional test configuration?
# Learn more about the roles of various files in:
# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
# * https://testthat.r-lib.org/articles/special-files.html

library(testthat)
library(workflow.pacta)

test_check("workflow.pacta")
Loading

0 comments on commit 82bbc29

Please sign in to comment.