Skip to content

Add Base Currency column to scenario reports#335

Open
mattmenefee wants to merge 2 commits intoOpenSourceRisk:masterfrom
mattmenefee:add-base-currency-to-scenario-report
Open

Add Base Currency column to scenario reports#335
mattmenefee wants to merge 2 commits intoOpenSourceRisk:masterfrom
mattmenefee:add-base-currency-to-scenario-report

Conversation

@mattmenefee
Copy link

@mattmenefee mattmenefee commented Mar 7, 2026

Summary

  • Add a "Base Currency" column to scenario reports (placed after "Base NPV") so users can see which currency the NPV values are denominated in
  • Add baseCurrency parameter to ReportWriter::writeScenarioReport() and update all three callers (pricinganalytic, crifanalytic, xvaenginecg) to pass the simulation base currency
  • Add unit test verifying column structure, header names, and data values
  • Update comparison_config.json with "Base Currency" column settings (null tolerances for exact string matching)
  • Update all expected output CSV files to include the new column

Motivation

Scenario reports previously had no indication of which currency the NPV values were denominated in. In multi-currency portfolios, this made it difficult to interpret the Base NPV, Scenario NPV, and Difference columns without cross-referencing the simulation configuration.

Test plan

  • orea-test-suite passes (includes new testWriteScenarioReportBaseCurrency)
  • Full ctest suite passes
  • Example expected outputs verified against regenerated CSVs

Scenario reports previously had no indication of which currency the
NPV values were denominated in, making it difficult to interpret
results in multi-currency portfolios.

- Add baseCurrency parameter to writeScenarioReport() with
  QL_REQUIRE validation, and insert a "Base Currency" column after
  "Base NPV" in the scenario report output
- Update all three callers (pricinganalytic, crifanalytic,
  xvaenginecg) to pass baseCurrency from simMarketData, using a
  single hoisted variable for consistency
- Add unit test verifying column structure, data values, and
  currency pass-through with both EUR and USD
- Update comparison_config.json with Base Currency column settings
  using null tolerances for exact string matching
- Update all expected output CSV files to include the new column
@mattmenefee
Copy link
Author

@alexchow-acadia here are the changes that I promised a few months ago!

The earlier commit (b40e463) missed three files that still imported
and used nose as the test runner. Replace nose with pytest in:
- Examples/ORE-API/run_examples_testsuite.py
- Examples/ORE-API/run_json_testsuite.py
- ORE-SWIG/test/OREAnalyticsTestSuite.py

Also remove the collections.Callable compatibility hack that was only
needed for nose on Python 3.10+.
@mattmenefee
Copy link
Author

Additional change: Complete nose → pytest migration

The latest commit (22dcc569) removes the remaining nose references that were missed in the original migration (commit b40e4637). Three files still imported and used nose as the test runner:

  • Examples/ORE-API/run_examples_testsuite.py
  • Examples/ORE-API/run_json_testsuite.py
  • ORE-SWIG/test/OREAnalyticsTestSuite.py

These now use pytest consistently, and the collections.Callable compatibility hack (only needed for nose on Python 3.10+) has been removed.

@pcaspers — do these nose-related fixes already exist upstream? Want to make sure we're not duplicating effort.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant