pax_global_header00006660000000000000000000000064152633542460014524gustar00rootroot0000000000000052 comment=ab4cb476d35f7275834bc05b47d1324403d1823b QuantLib-1.44/000077500000000000000000000000001526335424600131735ustar00rootroot00000000000000QuantLib-1.44/.agents/000077500000000000000000000000001526335424600145325ustar00rootroot00000000000000QuantLib-1.44/.agents/README.md000066400000000000000000000051311526335424600160110ustar00rootroot00000000000000# `.agents/` — On-Demand Guides for AI Agents `AGENTS.md` at the repository root is loaded into an agent's context at the start of *every* session, so it is deliberately kept short: hard constraints, coding conventions, build/test entry points, pitfalls, and pointers. The files in this directory hold the material that is only needed for a *specific* task — adding an instrument, registering files in the build systems, deprecating an API. `AGENTS.md` links to them; an agent reads one only when the task calls for it, so they cost no context otherwise. ## Contents | File | Read it when | | --- | --- | | [`architecture.md`](architecture.md) | You need the instrument/engine lifecycle, the recalculation triggers, the cash-flow hierarchy, or the design patterns. | | [`build-and-test.md`](build-and-test.md) | You are configuring a build, picking build options, running the test suite, or checking which CI workflow covers a change. | | [`registering-new-files.md`](registering-new-files.md) | You add or remove a `.hpp`/`.cpp` file and must update CMake, Autotools, and the Visual Studio projects. | | [`extending-quantlib.md`](extending-quantlib.md) | You are adding a new instrument, term structure, calendar, or day counter. | | [`deprecation.md`](deprecation.md) | You are deprecating or removing a public API. | | [`maintaining-agent-docs.md`](maintaining-agent-docs.md) | You are editing `AGENTS.md` or one of the files above. | ## Why this directory There is no cross-agent standard location for supplementary instruction files. The [`AGENTS.md` convention](https://agents.md/) specifies only the file itself (plus nested `AGENTS.md` files, which are path-scoped rather than task-scoped). Task-scoped, load-on-demand instructions *are* standardized by the [Agent Skills specification](https://agentskills.io/specification), but the directories agents discover skills in remain vendor-specific: `.claude/skills/` for [Claude Code][cc-skills], `.agents/skills/` and `.opencode/skills/` for [opencode][oc-skills]. Plain Markdown referenced by relative path from `AGENTS.md` is the option that works with every agent that can read a file, and with humans, without depending on any one vendor's discovery rules. `.agents/` borrows its name from the vendor-neutral skills path. If these guides later warrant automatic activation, they can be promoted to `SKILL.md` files without changing anything here. What belongs in these files, and what belongs in `AGENTS.md` instead, is [`maintaining-agent-docs.md`](maintaining-agent-docs.md). [cc-skills]: https://code.claude.com/docs/en/skills [oc-skills]: https://opencode.ai/docs/skills/ QuantLib-1.44/.agents/architecture.md000066400000000000000000000077441526335424600175520ustar00rootroot00000000000000# Architecture Deep Dive Companion to [`AGENTS.md`](../AGENTS.md). Read this when you need to understand how pricing, notification, and cash-flow machinery fit together, rather than just where files live. ## 1. Instrument-Engine Lifecycle When you call `instrument.NPV()`: 1. `Instrument::calculate()` checks `isExpired()` → if expired, calls `setupExpired()`. 2. If `calculated_ == true` (no dependency change), cached results are reused immediately. 3. Otherwise, `Instrument::performCalculations()` runs the engine cycle: `engine_->reset()` → `setupArguments()` → `validate()` → `engine_->calculate()` → `fetchResults()` Engines receive all data through the `arguments` struct and write all outputs to the `results` struct. They never hold references to the instrument. **Recalculation triggers** — any of these call `notifyObservers()`, ultimately clearing `calculated_` via `LazyObject::update()`: - **Quote value change** — `SimpleQuote::setValue()`. - **Handle relink/forward** — `Handle::Link::linkTo()` / `update()`. - **Evaluation date change** — `Settings::evaluationDate() = newDate`, via `ObservableValue::operator=()`. - **Term-structure update** — `TermStructure::update()` (sets `updated_ = false`). - **Index update** — `Index::update()`. - **Engine replacement** — `Instrument::setPricingEngine()` (re-registers the engine and calls `update()`). **`calculated_` flag** (in `ql/patterns/lazyobject.hpp`): set `true` **before** `performCalculations()` (to break bootstrap cycles), reset to `false` on `update()` or if `performCalculations()` throws. `recalculate()` forces an immediate recomputation. ## 2. CashFlow and Coupon Subsystem ```mermaid graph TD Event["Event"] --> CashFlow LazyObject["LazyObject"] --> CashFlow CashFlow --> SimpleCashFlow CashFlow --> Coupon CashFlow --> InflationCoupon CashFlow --> IndexedCashFlow Coupon --> FixedRateCoupon Coupon --> FloatingRateCoupon FloatingRateCoupon --> IborFamily["Ibor/OIS/CMS/CappedFloored..."] ``` - `CashFlow` API: `date()`, `amount()`, `hasOccurred()`, `exCouponDate()`. - `Leg` is a type alias, not a class: `std::vector >` (`ql/cashflow.hpp`). There is nothing to derive from or extend. - `Coupon` adds accrual data (`nominal()`, `rate()`, `dayCounter()`, `accrualPeriod()`). - `FloatingRateCoupon` delegates pricing to `FloatingRateCouponPricer` (`ql/cashflows/couponpricer.hpp`). - Utility analytics are in `ql/cashflows/cashflows.hpp` (`npv`, `bps`, `yield`, `duration`, `convexity`, `zSpread`, ...). ## 3. Design Patterns You Must Respect - **Observer/Observable** (`ql/patterns/observable.hpp`) — market-data updates invalidate downstream pricing caches. - **LazyObject** (`ql/patterns/lazyobject.hpp`) — cache plus recompute-on-demand behavior. - **Handle/RelinkableHandle** (`ql/handle.hpp`) — relinking propagates notifications through the dependency graph. - **Singleton** (`ql/patterns/singleton.hpp`) — process-global by default; per-session when sessions are enabled (`Settings`, `IndexManager`, lazy defaults). - **Bridge/Pimpl** (`ql/time/calendar.hpp`, `ql/time/daycounter.hpp`) — swappable behavior behind stable interfaces. - **Visitor** (`ql/patterns/visitor.hpp`) — runtime dispatch for payoff/instrument hierarchies. `LazyObject` details worth remembering (`ql/patterns/lazyobject.hpp`): - Inherits **both** `Observable` and `Observer`. - `calculate()` sets `calculated_ = true` before `performCalculations()` to avoid recursive blowups. - On exception, `calculated_` is reset to `false`. - `update()` invalidates cache and forwards notifications per object/default policy. - `freeze()`/`unfreeze()` can intentionally suppress/release notifications. - `LazyObject::Defaults` changes apply to **newly created** lazy objects. ## 4. About `ql/experimental/` Treat `ql/experimental/*` as unstable API: useful, often production-grade in parts, but not guaranteed to keep interface compatibility across releases. QuantLib-1.44/.agents/build-and-test.md000066400000000000000000000102771526335424600176770ustar00rootroot00000000000000# Build and Test Companion to [`AGENTS.md`](../AGENTS.md), which carries only the two commands needed most often. This file holds the full set of build options, test invocations, and CI entry points. ## 1. CMake (recommended for agents) Autotools and the Visual Studio solution are equally supported and exercised in CI; CMake is only the shortest path for an agent in a fresh checkout, because `CMakePresets.json` already spells out the toolchain and options. ```bash mkdir build && cd build cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release \ -DQL_BUILD_TEST_SUITE=ON -DQL_BUILD_EXAMPLES=ON cmake --build . ``` Preset example (exists in `CMakePresets.json`): ```bash cmake --preset linux-gcc-ninja-release cmake --build build/linux-gcc-ninja-release ``` Key CMake options from `CMakeLists.txt`: - `QL_BUILD_TEST_SUITE` default `ON` - `QL_BUILD_EXAMPLES` default `ON` - `QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER` default `OFF` - `QL_COMPILE_WARNING_AS_ERROR` default `OFF` - `QL_USE_STD_CLASSES` default `OFF` Note: CI often overrides defaults (for example, `QL_COMPILE_WARNING_AS_ERROR=ON` in CMake workflows/presets). ## 2. Autotools ```bash ./autogen.sh ./configure --with-boost-include=/path/to/boost make -j 4 ``` Frequently used configure flags (`configure.ac`): - `--enable-unity-build` - `--enable-intraday` - `--enable-std-classes` - `--enable-thread-safe-observer-pattern` - `--enable-sessions` - `--enable-openmp` - `--enable-parallel-unit-test-runner` ## 3. Visual Studio / MSVC - Open `QuantLib.sln` and build the desired config/platform, or use `msbuild`. - Ensure the Boost include path is configured (for example via `Build.props`, see `.ci/VS2022.props`). ## 4. Running Tests ```bash # CMake build tree (run from build/) ./test-suite/quantlib-test-suite --log_level=message # Autotools build from repo root ./test-suite/quantlib-test-suite --log_level=message # CMake after install may expose the binary in PATH quantlib-test-suite --log_level=message # Specific suite (run from build/) ./test-suite/quantlib-test-suite --log_level=message \ --run_test=QuantLibTests/EuropeanOptionTests # Single test case (run from build/) ./test-suite/quantlib-test-suite --log_level=message \ --run_test=QuantLibTests/EuropeanOptionTests/testValues # CTest path ctest -V ``` ## 5. CI Reality Check Workflows are under `.github/workflows/`. Core validation files include: - `linux.yml`, `macos.yml`, `msvc.yml`, `cmake.yml` - `tidy.yml`, `headers.yml`, `filelists.yml` The following matrices do **not** run on pull requests — they are triggered by a weekly `schedule`, by `workflow_dispatch`, or by `workflow_call`: - `linux-nondefault.yml`, `linux-full-tests.yml`, `msvc-nondefault.yml`, `cmake-latest-runners.yml` For portability-sensitive changes they still need to be checked. All four accept `workflow_dispatch`, so an agent can trigger them itself in the contributor's fork: ```bash gh workflow run linux-nondefault.yml --repo --ref gh run list --workflow=linux-nondefault.yml --repo --limit 1 ``` **These matrices are long running, so use them sparingly.** An agent must ask for explicit approval before dispatching one — never start a run on its own initiative. Prefer reading the most recent scheduled run, dispatch only the workflow that covers the change, and flag in the PR that the change may affect these matrices. The non-default settings themselves can also be exercised locally, which is usually enough: the `./configure` flags from section 2, the matching `QL_*` CMake variables from section 1, or the `.ci/*.props` files for MSVC from section 3. Only the compiler/Boost spread and the runner images really need the remote matrices. Automation workflows (e.g., generated headers/includes/namespaces/copyright) also exist and can change over time; header and file-list touches should stay green in `generated-headers.yml`, `includes.yml`, and `filelists.yml`. ## 6. Source of Truth When any of the above looks stale, verify against: - `.github/workflows/{linux,linux-nondefault,linux-full-tests,macos,msvc,msvc-nondefault,cmake,cmake-latest-runners}.yml` - `CMakeLists.txt`, `CMakePresets.json`, `configure.ac` - `test-suite/CMakeLists.txt`, `test-suite/Makefile.am` - `.clang-format`, `.clang-tidy` QuantLib-1.44/.agents/deprecation.md000066400000000000000000000045461526335424600173620ustar00rootroot00000000000000# Deprecation and Backward Compatibility Read this before deprecating, changing, or removing any public API. QuantLib follows a convention-driven deprecation strategy: features deprecated in release **N** are removed in release **N + 5**, then removed in bulk. There is no single formal compatibility-policy document; the operational practice is encoded in source annotations, release notes, and a consistent removal cadence. ## Mechanics Defined in `ql/qldefines.hpp`: - Use `[[deprecated("message")]]` everywhere — methods, constructors, typedefs, classes, and data members. - Do **not** use the legacy `QL_DEPRECATED` macro in new code. It only existed to deprecate constructors under VC++2015, which is no longer supported since the move to C++17; the macro is itself slated for deprecation. - First try to avoid warnings by using the new interfaces, and only if that's not possible suppress internal warnings with `QL_DEPRECATED_DISABLE_WARNING` / `QL_DEPRECATED_ENABLE_WARNING`. - Always pair the annotation with a Doxygen `\deprecated` comment stating the replacement and "Deprecated in version X.YZ" — this anchors the N+5 removal timeline. ## Pitfalls When a data member is deprecated, some compilers emit a deprecation warning for the class destructor, even when that destructor is implicitly generated. Give the class an explicit destructor with the warning suppressed: ```cpp QL_DEPRECATED_DISABLE_WARNING ~SomeClass() = default; // add `override` if the destructor is virtual QL_DEPRECATED_ENABLE_WARNING ``` The destructor can be dropped again once the deprecated data member is removed. ## Checklist - [ ] **DO NOT** change public API; only deprecate, with the replacement API in place. - [ ] Add `[[deprecated("message")]]` to the declaration. - [ ] Add a `\deprecated` Doxygen comment with the replacement API and "Deprecated in version X.YZ." - [ ] Provide an overload or replacement so callers have a migration path. - [ ] Move internal library usage to the replacement API; only where that is not possible, wrap it with `QL_DEPRECATED_DISABLE_WARNING` / `QL_DEPRECATED_ENABLE_WARNING`. - [ ] When deprecating a data member, add the explicit destructor described under [Pitfalls](#pitfalls). - [ ] Update tests and examples to use the replacement API. - [ ] Document the change in `News.md` under "Removals and deprecations." QuantLib-1.44/.agents/extending-quantlib.md000066400000000000000000000025361526335424600206640ustar00rootroot00000000000000# Extending QuantLib Safely Read this when adding a new instrument, term structure, calendar, or day counter. Every recipe below ends with the same step: register the new files in all three build systems, per [`registering-new-files.md`](registering-new-files.md). For the lifecycle and notification machinery these classes plug into, see [`architecture.md`](architecture.md). ## New Instrument 1. Add the instrument class in `ql/instruments/` (override `isExpired()`, implement `setupArguments()`/`fetchResults()`). 2. Add an engine in `ql/pricingengines//` using `GenericEngine`. 3. Add tests in `test-suite/`. 4. Register all new files in CMake, Autotools, and the Visual Studio projects. ## New Term Structure - Inherit the appropriate base (yield/vol/default/inflation). - Implement the required `*Impl()` method. - Choose fixed-date or moving-date reference mode. - Register with dependent handles. ## New Calendar / DayCounter - Calendar: add the implementation in `ql/time/calendars/` with `name()` and `isBusinessDay()`. - DayCounter: add the implementation in `ql/time/daycounters/` with `dayCount()` and `yearFraction()`. ## Experimental Work Prefer `ql/experimental//` for unstable or new APIs, but keep coding quality and tests high. Interfaces there are not guaranteed to stay compatible across releases. QuantLib-1.44/.agents/maintaining-agent-docs.md000066400000000000000000000047771526335424600214130ustar00rootroot00000000000000# Maintaining the Agent Guides Companion to [`AGENTS.md`](../AGENTS.md). Read this when you are editing `AGENTS.md` itself or a file in this directory — not when you are working on QuantLib. ## 1. Instructions, Not Overviews Write what an agent should *do* or *avoid*, not what the repository *contains*. Directory trees, file inventories, and "what lives where" tours do not measurably help an agent find the right file, they go stale, and `ls` and `grep` answer the same question on demand. Prefer a rule an agent cannot derive from the codebase in one command. The evidence is [Gloaguen et al., *Evaluating AGENTS.md*][paper]. Across SWE-bench and a purpose-built benchmark of repositories carrying developer-written context files, agents reliably *followed* instructions given in those files, but repository overviews did not improve their results — while the files raised inference cost by over 20%. Two caveats before treating that as settled. The overview finding is "does not earn its tokens" rather than "actively harmful": removing the overview section changed accuracy insignificantly in the authors' own ablation. And the study is Python-only, which the authors flag first under Limitations — for a well-represented language, tooling knowledge may already sit in the model's weights. QuantLib's three parallel build systems, hand-maintained `.vcxproj` files, `tools/check_filelists.sh`, and N+5 deprecation cadence are the opposite case, and are worth writing down. ## 2. Smallest Scope That Works `AGENTS.md` is loaded at the start of *every* session, whatever the task, so a line there is paid for by every agent forever. A line here is paid for only by the agent that needed it. - Needed on *every* task → `AGENTS.md`. - Needed for *one kind* of task → a file in this directory, plus a row in the `AGENTS.md` task-guide table so an agent knows when to load it. Corollary: keep external links out of `AGENTS.md`. An agent that finds a URL in its always-loaded context may fetch it before doing the work it was asked to do. Links belong in these on-demand files, where the reader has already chosen the topic. ## 3. Accuracy and Cadence Verify a claim against the repository before writing it down. A guide that confidently states something false is worse than no guide, because an agent has no reason to doubt it. Update `AGENTS.md` when build/test entry points, workflow files, or major conventions change: - quick check before release candidates - deeper full pass quarterly [paper]: https://arxiv.org/abs/2602.11988 QuantLib-1.44/.agents/registering-new-files.md000066400000000000000000000037101526335424600212660ustar00rootroot00000000000000# Registering New Files in the Build Systems Read this whenever you add, rename, or remove a `.hpp` or `.cpp` file. Every new `.hpp` or `.cpp` file must be added to **all three** build systems. CI enforces consistency via `tools/check_filelists.sh` (run by `.github/workflows/filelists.yml`), which diffs the actual source tree against every build-system file list and fails on any mismatch. ## CMake Add entries to the explicit lists in `ql/CMakeLists.txt` (paths relative to `ql/`): - Headers → `set(QL_HEADERS ...)` — e.g. `instruments/myinstrument.hpp` - Sources → `set(QL_SOURCES ...)` — e.g. `instruments/myinstrument.cpp` For test files, use `test-suite/CMakeLists.txt`: - Test sources → `set(QL_TEST_SOURCES ...)` - Test headers → `set(QL_TEST_HEADERS ...)` ## Autotools Each subdirectory under `ql/` has its own `Makefile.am`. Add to the one matching your file's directory: - Headers → `this_include_HEADERS` variable - Sources → `cpp_files` variable For test files, use `test-suite/Makefile.am`: - Test sources → `QL_TEST_SRCS` - Test headers → `QL_TEST_HDRS` ## Visual Studio Add entries to `QuantLib.vcxproj` (paths use backslashes, relative to the repository root): - Headers → `` - Sources → `` And add matching entries in `QuantLib.vcxproj.filters` so files appear in the correct Solution Explorer folder: ```xml instruments instruments ``` For test files, update `test-suite/testsuite.vcxproj` and `test-suite/testsuite.vcxproj.filters` analogously (test paths are relative to `test-suite/`, and the filter is typically `Source Files` or `Header Files`). ## Local Verification Run the same check CI uses: ```bash ./autogen.sh && ./configure && ./tools/check_filelists.sh ``` QuantLib-1.44/.appveyor.yml000066400000000000000000000003221526335424600156360ustar00rootroot00000000000000image: Visual Studio 2017 platform: x64 configuration: Release version: ci.{build} before_build: - COPY .ci\VS2017.props .\Build.props build: parallel: false project: QuantLib.sln verbosity: normal QuantLib-1.44/.ci/000077500000000000000000000000001526335424600136445ustar00rootroot00000000000000QuantLib-1.44/.ci/Unity.props000066400000000000000000000002551526335424600160430ustar00rootroot00000000000000 true QuantLib-1.44/.ci/VS2017.props000066400000000000000000000014711526335424600155760ustar00rootroot00000000000000 false C:\Libraries\boost_1_69_0;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) Disabled C:\Libraries\boost_1_69_0\lib64-msvc-14.1;%(AdditionalLibraryDirectories) QuantLib-1.44/.ci/VS2019.alt.props000066400000000000000000000014661526335424600163630ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true stdcpp17 _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) QuantLib-1.44/.ci/VS2019.props000066400000000000000000000010741526335424600155770ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true QuantLib-1.44/.ci/VS2022.alt.props000066400000000000000000000014661526335424600163550ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true stdcpp17 _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) QuantLib-1.44/.ci/VS2022.props000066400000000000000000000010741526335424600155710ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true QuantLib-1.44/.ci/VS2026.alt.props000066400000000000000000000014661526335424600163610ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true stdcpp17 _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) QuantLib-1.44/.ci/VS2026.props000066400000000000000000000010741526335424600155750ustar00rootroot00000000000000 C:\local\boost;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) true QuantLib-1.44/.ci/userconfig2019.alt.hpp000066400000000000000000000076721526335424600176300ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2004, 2011 Ferdinando Ametrano Copyright (C) 2004, 2005 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ #ifndef quantlib_config_hpp #define quantlib_config_hpp /*************************************************************** User configuration section: modify the following definitions to suit your preferences. Do not modify this file if you are using a Linux/Unix system: it will not be read by the compiler. The definitions below will be provided by running ./configure instead. ****************************************************************/ /* Define this if error messages should include current function information. */ #ifndef QL_ERROR_FUNCTIONS # define QL_ERROR_FUNCTIONS #endif /* Define this if error messages should include file and line information. */ #ifndef QL_ERROR_LINES # define QL_ERROR_LINES #endif /* Define this if tracing messages should be allowed (whether they are actually emitted will depend on run-time settings.) */ #ifndef QL_ENABLE_TRACING # define QL_ENABLE_TRACING #endif /* Define this if extra safety checks should be performed. This can degrade performance. */ #ifndef QL_EXTRA_SAFETY_CHECKS # define QL_EXTRA_SAFETY_CHECKS #endif /* Define this to use indexed coupons instead of par coupons in floating legs as the default in 'bool IborCoupon::Settings::usingAtParCoupons();'. */ #ifndef QL_USE_INDEXED_COUPON # define QL_USE_INDEXED_COUPON #endif /* Define this to have singletons return different instances for different threads; in particular, this means that the evaluation date, the stored index fixings and any other settings will be per-thread. */ #ifndef QL_ENABLE_SESSIONS # define QL_ENABLE_SESSIONS #endif /* Define this to enable the thread-safe observer pattern. You should enable it if you want to use QuantLib via the SWIG layer within the JVM or .NET eco system or any environment with an async garbage collector */ #ifndef QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN # define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN #endif /* Define this to enable a date resolution down to microseconds and allow for accurate intraday pricing. */ #ifndef QL_HIGH_RESOLUTION_DATE # define QL_HIGH_RESOLUTION_DATE #endif /* Define this if you want to throw an exception when a notification loop is detected. Enabling this option is recommended but might cause existing code to throw. */ #ifndef QL_THROW_IN_CYCLES # define QL_THROW_IN_CYCLES #endif /* Undefine this if you want lazy objects to forward all notifications instead of just the first. Disabling this option is safer in some cases but can be a lot slower. */ #ifndef QL_FASTER_LAZY_OBJECTS //# define QL_FASTER_LAZY_OBJECTS #endif /* Define this to use standard smart pointers instead of Boost ones. Note that std::shared_ptr does not check access and can cause segmentation faults. */ #ifndef QL_USE_STD_SHARED_PTR # define QL_USE_STD_SHARED_PTR #endif /* Define this to enable the implementation of Null as template functions. */ #ifndef QL_NULL_AS_FUNCTIONS # define QL_NULL_AS_FUNCTIONS #endif /* Define this to enable the parallel unit test runner */ #ifndef QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER //# define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER #endif #endif QuantLib-1.44/.ci/userconfig2022.alt.hpp000066400000000000000000000076721526335424600176220ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2004, 2011 Ferdinando Ametrano Copyright (C) 2004, 2005 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ #ifndef quantlib_config_hpp #define quantlib_config_hpp /*************************************************************** User configuration section: modify the following definitions to suit your preferences. Do not modify this file if you are using a Linux/Unix system: it will not be read by the compiler. The definitions below will be provided by running ./configure instead. ****************************************************************/ /* Define this if error messages should include current function information. */ #ifndef QL_ERROR_FUNCTIONS # define QL_ERROR_FUNCTIONS #endif /* Define this if error messages should include file and line information. */ #ifndef QL_ERROR_LINES # define QL_ERROR_LINES #endif /* Define this if tracing messages should be allowed (whether they are actually emitted will depend on run-time settings.) */ #ifndef QL_ENABLE_TRACING # define QL_ENABLE_TRACING #endif /* Define this if extra safety checks should be performed. This can degrade performance. */ #ifndef QL_EXTRA_SAFETY_CHECKS # define QL_EXTRA_SAFETY_CHECKS #endif /* Define this to use indexed coupons instead of par coupons in floating legs as the default in 'bool IborCoupon::Settings::usingAtParCoupons();'. */ #ifndef QL_USE_INDEXED_COUPON # define QL_USE_INDEXED_COUPON #endif /* Define this to have singletons return different instances for different threads; in particular, this means that the evaluation date, the stored index fixings and any other settings will be per-thread. */ #ifndef QL_ENABLE_SESSIONS # define QL_ENABLE_SESSIONS #endif /* Define this to enable the thread-safe observer pattern. You should enable it if you want to use QuantLib via the SWIG layer within the JVM or .NET eco system or any environment with an async garbage collector */ #ifndef QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN # define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN #endif /* Define this to enable a date resolution down to microseconds and allow for accurate intraday pricing. */ #ifndef QL_HIGH_RESOLUTION_DATE # define QL_HIGH_RESOLUTION_DATE #endif /* Define this if you want to throw an exception when a notification loop is detected. Enabling this option is recommended but might cause existing code to throw. */ #ifndef QL_THROW_IN_CYCLES # define QL_THROW_IN_CYCLES #endif /* Undefine this if you want lazy objects to forward all notifications instead of just the first. Disabling this option is safer in some cases but can be a lot slower. */ #ifndef QL_FASTER_LAZY_OBJECTS //# define QL_FASTER_LAZY_OBJECTS #endif /* Define this to use standard smart pointers instead of Boost ones. Note that std::shared_ptr does not check access and can cause segmentation faults. */ #ifndef QL_USE_STD_SHARED_PTR # define QL_USE_STD_SHARED_PTR #endif /* Define this to enable the implementation of Null as template functions. */ #ifndef QL_NULL_AS_FUNCTIONS # define QL_NULL_AS_FUNCTIONS #endif /* Define this to enable the parallel unit test runner */ #ifndef QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER //# define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER #endif #endif QuantLib-1.44/.ci/userconfig2026.alt.hpp000066400000000000000000000076721526335424600176260ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2004, 2011 Ferdinando Ametrano Copyright (C) 2004, 2005 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ #ifndef quantlib_config_hpp #define quantlib_config_hpp /*************************************************************** User configuration section: modify the following definitions to suit your preferences. Do not modify this file if you are using a Linux/Unix system: it will not be read by the compiler. The definitions below will be provided by running ./configure instead. ****************************************************************/ /* Define this if error messages should include current function information. */ #ifndef QL_ERROR_FUNCTIONS # define QL_ERROR_FUNCTIONS #endif /* Define this if error messages should include file and line information. */ #ifndef QL_ERROR_LINES # define QL_ERROR_LINES #endif /* Define this if tracing messages should be allowed (whether they are actually emitted will depend on run-time settings.) */ #ifndef QL_ENABLE_TRACING # define QL_ENABLE_TRACING #endif /* Define this if extra safety checks should be performed. This can degrade performance. */ #ifndef QL_EXTRA_SAFETY_CHECKS # define QL_EXTRA_SAFETY_CHECKS #endif /* Define this to use indexed coupons instead of par coupons in floating legs as the default in 'bool IborCoupon::Settings::usingAtParCoupons();'. */ #ifndef QL_USE_INDEXED_COUPON # define QL_USE_INDEXED_COUPON #endif /* Define this to have singletons return different instances for different threads; in particular, this means that the evaluation date, the stored index fixings and any other settings will be per-thread. */ #ifndef QL_ENABLE_SESSIONS # define QL_ENABLE_SESSIONS #endif /* Define this to enable the thread-safe observer pattern. You should enable it if you want to use QuantLib via the SWIG layer within the JVM or .NET eco system or any environment with an async garbage collector */ #ifndef QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN # define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN #endif /* Define this to enable a date resolution down to microseconds and allow for accurate intraday pricing. */ #ifndef QL_HIGH_RESOLUTION_DATE # define QL_HIGH_RESOLUTION_DATE #endif /* Define this if you want to throw an exception when a notification loop is detected. Enabling this option is recommended but might cause existing code to throw. */ #ifndef QL_THROW_IN_CYCLES # define QL_THROW_IN_CYCLES #endif /* Undefine this if you want lazy objects to forward all notifications instead of just the first. Disabling this option is safer in some cases but can be a lot slower. */ #ifndef QL_FASTER_LAZY_OBJECTS //# define QL_FASTER_LAZY_OBJECTS #endif /* Define this to use standard smart pointers instead of Boost ones. Note that std::shared_ptr does not check access and can cause segmentation faults. */ #ifndef QL_USE_STD_SHARED_PTR # define QL_USE_STD_SHARED_PTR #endif /* Define this to enable the implementation of Null as template functions. */ #ifndef QL_NULL_AS_FUNCTIONS # define QL_NULL_AS_FUNCTIONS #endif /* Define this to enable the parallel unit test runner */ #ifndef QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER //# define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER #endif #endif QuantLib-1.44/.clang-format000066400000000000000000000021431526335424600155460ustar00rootroot00000000000000--- Language: Cpp Standard: c++17 # The following is close to the style we've been using all these years # without formalizing it. Formatting won't be enforced, but this file # can help if you want to use the general feel of the library. # General appearance: BasedOnStyle: LLVM IndentWidth: 4 ColumnLimit: 100 NamespaceIndentation: All MaxEmptyLinesToKeep: 2 FixNamespaceComments: false # Function declarations: BinPackParameters: false AllowShortFunctionsOnASingleLine: Inline AlwaysBreakTemplateDeclarations: true # T& x, not T &x: DerivePointerAlignment: false PointerAlignment: Left # QuantLib headers first, then Boost, then std SortIncludes: true IncludeBlocks: Merge IncludeCategories: - Regex: '^"' Priority: 1 - Regex: '^ -*, bugprone-*, -bugprone-assignment-in-if-condition, -bugprone-branch-clone, -bugprone-crtp-constructor-accessibility, -bugprone-easily-swappable-parameters, -bugprone-empty-catch, -bugprone-implicit-widening-of-multiplication-result, -bugprone-macro-parentheses, -bugprone-narrowing-conversions, -bugprone-non-zero-enum-to-bool-conversion, -bugprone-suspicious-include, clang-analyzer-*, -clang-analyzer-core.UndefinedBinaryOperatorResult, -clang-analyzer-core.uninitialized.Assign, -clang-analyzer-optin.cplusplus.UninitializedObject, -clang-analyzer-optin.performance.Padding, -clang-analyzer-security.FloatLoopCounter, cppcoreguidelines-*, -cppcoreguidelines-avoid-c-arrays, -cppcoreguidelines-avoid-const-or-ref-data-members, -cppcoreguidelines-avoid-do-while, -cppcoreguidelines-avoid-goto, -cppcoreguidelines-avoid-magic-numbers, -cppcoreguidelines-avoid-non-const-global-variables, -cppcoreguidelines-init-variables, -cppcoreguidelines-macro-to-enum, -cppcoreguidelines-macro-usage, -cppcoreguidelines-narrowing-conversions, -cppcoreguidelines-non-private-member-variables-in-classes, -cppcoreguidelines-owning-memory, -cppcoreguidelines-prefer-member-initializer, -cppcoreguidelines-pro-bounds-array-to-pointer-decay, -cppcoreguidelines-pro-bounds-constant-array-index, -cppcoreguidelines-pro-bounds-pointer-arithmetic, -cppcoreguidelines-pro-type-const-cast, -cppcoreguidelines-pro-type-member-init, -cppcoreguidelines-pro-type-vararg, -cppcoreguidelines-use-default-member-init, misc-*, -misc-confusable-identifiers, -misc-const-correctness, -misc-include-cleaner, -misc-no-recursion, -misc-non-private-member-variables-in-classes, -misc-use-anonymous-namespace, -misc-use-internal-linkage, -misc-unused-parameters, modernize-*, -modernize-avoid-c-arrays, -modernize-concat-nested-namespaces, -modernize-macro-to-enum, -modernize-return-braced-init-list, -modernize-use-trailing-return-type, -modernize-use-using, -modernize-use-nodiscard, performance-*, -performance-avoid-endl, -performance-enum-size, readability-*, -readability-avoid-nested-conditional-operator, -readability-braces-around-statements, -readability-const-return-type, -readability-convert-member-functions-to-static, -readability-else-after-return, -readability-enum-initial-value, -readability-function-cognitive-complexity, -readability-identifier-length, -readability-inconsistent-declaration-parameter-name, -readability-isolate-declaration, -readability-magic-numbers, -readability-make-member-function-const, -readability-math-missing-parentheses, -readability-named-parameter, -readability-redundant-casting, -readability-redundant-declaration, -readability-simplify-boolean-expr, -readability-suspicious-call-argument, -readability-use-anyofallof, -readability-use-std-min-max, HeaderFilterRegex: '.*' FormatStyle: none CheckOptions: - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor value: 1 - key: modernize-make-shared.MakeSmartPtrFunction value: ext::make_shared - key: modernize-make-shared.MakeSmartPtrFunctionHeader value: - key: modernize-use-default-member-init.UseAssignment value: 1 ... QuantLib-1.44/.codecov.yml000066400000000000000000000015411526335424600154170ustar00rootroot00000000000000coverage: precision: 1 # We put red at 50 to have a chance at some non-red build. # I would be happy with 80 right now, so that's where the target is. range: 50...80 ignore: - "test-suite" - "Examples" # The process to get a correct report is a bit fiddly. # This worked in the past, and is added here for reference: # # - clone the repo and mount it in a recent quantlib-devenv image; # - run the following: # # apt update && apt install -y lcov curl git # mkdir build # cd build # CXXFLAGS='-O1 -fprofile-arcs -ftest-coverage' LDFLAGS='-lgcov' cmake .. # CXXFLAGS='-O1 -fprofile-arcs -ftest-coverage' LDFLAGS='-lgcov' make -j 4 # ./test-suite/quantlib-test-suite --log_level=message # bash <(curl -s https://codecov.io/bash) -t @cc_token # # where the file `cc_token` contains the Codecov upload token. QuantLib-1.44/.github/000077500000000000000000000000001526335424600145335ustar00rootroot00000000000000QuantLib-1.44/.github/boring-cyborg.yml000066400000000000000000000011451526335424600200220ustar00rootroot00000000000000 # Comment to be posted to welcome users when they open their first PR firstPRWelcomeComment: > Thanks for opening this pull request! It might take a while before we look at it, so don't worry if there seems to be no feedback. We'll get to it. # Comment to be posted to congratulate user on their first merged PR firstPRMergeComment: > Congratulations on your first merged pull request! # Comment to be posted to on first time issues firstIssueWelcomeComment: > Thanks for posting! It might take a while before we look at your issue, so don't worry if there seems to be no feedback. We'll get to it. QuantLib-1.44/.github/dependabot.yml000066400000000000000000000002611526335424600173620ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: # Check for updates to GitHub Actions every weekday interval: "weekly" QuantLib-1.44/.github/workflows/000077500000000000000000000000001526335424600165705ustar00rootroot00000000000000QuantLib-1.44/.github/workflows/cmake-latest-runners.yml000066400000000000000000000103701526335424600233600ustar00rootroot00000000000000name: CMake build for the latest runners and C++ standards on: schedule: # At 02:35 on Monday - cron: '35 2 * * 1' workflow_dispatch: workflow_call: jobs: cmake-build-and-test: strategy: fail-fast: false matrix: settings: [ { os: macos-latest, cc: clang, cxx: clang++ }, { os: ubuntu-latest, cc: clang, cxx: clang++ }, { os: ubuntu-latest, cc: gcc, cxx: g++ }, { os: windows-latest, cc: cl, cxx: cl } ##### This is the full set of currently available runners and compilers. ##### # { os: macos-15, cc: clang, cxx: clang++ }, # # { os: ubuntu-22.04, cc: clang-13, cxx: clang++-13 }, # { os: ubuntu-22.04, cc: clang-14, cxx: clang++-14 }, # { os: ubuntu-22.04, cc: clang-15, cxx: clang++-15 }, # # { os: ubuntu-22.04, cc: gcc-10, cxx: g++-10 }, # { os: ubuntu-22.04, cc: gcc-11, cxx: g++-11 }, # { os: ubuntu-22.04, cc: gcc-12, cxx: g++-12 }, # # { os: ubuntu-24.04, cc: clang-16, cxx: clang++-16 }, # { os: ubuntu-24.04, cc: clang-17, cxx: clang++-17 }, # { os: ubuntu-24.04, cc: clang-18, cxx: clang++-18 }, # # { os: ubuntu-24.04, cc: gcc-12, cxx: g++-12 }, # { os: ubuntu-24.04, cc: gcc-13, cxx: g++-13 }, # { os: ubuntu-24.04, cc: gcc-14, cxx: g++-14 }, # # { os: windows-2022, cc: cl, cxx: cl }, # { os: windows-2025, cc: cl, cxx: cl } ] cxx-standard: [ 17, 20, 23 ] cmake-build-type: [ release ] runs-on: ${{ matrix.settings.os }} steps: - uses: actions/checkout@v7 - name: Determine ccache variant shell: bash run: | echo "CMAKE_CXX_COMPILER_LAUNCHER=${{ ( (runner.os == 'Windows') && 'sccache' ) || 'ccache' }}" >> $GITHUB_ENV - name: Setup CCache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-latest-${{ inputs.os }}-${{ inputs.cxx }}-${{ inputs.cxx-standard }} restore-keys: | cmake-latest-${{ inputs.os }}-${{ inputs.cxx }}-${{ inputs.cxx-standard }} cmake-latest-${{ inputs.os }}-${{ inputs.cxx }} cmake-latest-${{ inputs.os }} variant: ${{ env.CMAKE_CXX_COMPILER_LAUNCHER }} - name: Setup Linux if: runner.os == 'Linux' shell: bash run: | sudo apt-get update sudo apt-get install -y ccache ninja-build eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" brew update brew install boost echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH - name: Setup macOS if: runner.os == 'macOS' shell: bash run: | HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja boost echo "CXXFLAGS=-stdlib=libc++" >> $GITHUB_ENV - name: Setup Windows if: runner.os == 'Windows' shell: pwsh run: | $BoostUri = "https://archives.boost.io/release/1.92.0/binaries/boost_1_92_0-msvc-14.3-64.exe" Start-BitsTransfer -Source $BoostUri -Destination $env:RUNNER_TEMP\boost.exe Start-Process -Wait -FilePath "$env:RUNNER_TEMP\boost.exe" "/SILENT","/SP-","/SUPPRESSMSGBOXES","/DIR=$env:RUNNER_TEMP\boost" choco install -y ninja Write "Boost_DIR=$env:RUNNER_TEMP\boost\lib64-msvc-14.3\cmake\Boost-1.92.0" >> $env:GITHUB_ENV - name: Set up Visual Studio shell on Windows if: runner.os == 'Windows' uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: Configure CMake and build env: CC: ${{ matrix.settings.cc }} CXX: ${{ matrix.settings.cxx }} run: | cmake --version cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DCMAKE_CXX_STANDARD=${{ matrix.cxx-standard }} -DQL_COMPILE_WARNING_AS_ERROR=ON -L cmake --build build --verbose - name: Run the test-suite run: | ./build/test-suite/quantlib-test-suite -l message QuantLib-1.44/.github/workflows/cmake.yml000066400000000000000000000173231526335424600204010ustar00rootroot00000000000000name: CMake build on: push: branches: - '**' pull_request: jobs: cmake-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev ccache ninja-build - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-linux-ci-build-${{ github.ref }} restore-keys: | cmake-linux-ci-build-${{ github.ref }} cmake-linux-ci-build-refs/heads/master cmake-linux-ci-build- - name: Compile run: | mkdir build cd build cmake .. -GNinja -DBOOST_ROOT=/usr -DCMAKE_BUILD_TYPE=Release -DQL_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -L cat ql/config.hpp cmake --build . --verbose sudo cmake --install . sudo ldconfig - name: Test run: | quantlib-test-suite --log_level=message - name: Run benchmark run: | quantlib-benchmark --size=1 cmake-linux-with-options: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-all-dev ccache ninja-build - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-linux-ci-opts-${{ github.ref }} restore-keys: | cmake-linux-ci-opts-${{ github.ref }} cmake-linux-ci-opts-refs/heads/master cmake-linux-ci-opts- - name: Compile run: | cmake --preset linux-ci-build-with-nonstandard-options -L cd build/linux-ci-build-with-nonstandard-options cat ql/config.hpp cmake --build . --verbose sudo cmake --build . --target install - name: Test run: | quantlib-test-suite --log_level=message cmake-win: runs-on: windows-2022 steps: - uses: actions/checkout@v7 - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-windows-ci-build-${{ github.ref }} restore-keys: | cmake-windows-ci-build-${{ github.ref }} cmake-windows-ci-build-refs/heads/master cmake-windows-ci-build- variant: sccache - name: Setup run: | $Url = "https://archives.boost.io/release/1.92.0/source/boost_1_92_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_92_0" -NewName "boost" $Url = "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\ninja-win.zip") Expand-Archive -Path "$RUNNER_TEMP\ninja-win.zip" -DestinationPath C:\local\ninja Add-Content $env:GITHUB_PATH "C:\local\ninja" - name: Setup MSVC++ environment uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: Compile env: BOOST_ROOT: C:\local\boost shell: cmd run: | mkdir build cd build cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DQL_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -L type ql\config.hpp cmake --build . --verbose cmake --install . dir ql\*.lib - name: Test run: | & "C:\Program Files (x86)\QuantLib\bin\quantlib-test-suite" --log_level=message cmake-win-dynamic-runtime: runs-on: windows-2022 steps: - uses: actions/checkout@v7 - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-windows-ci-dyn-build-${{ github.ref }} restore-keys: | cmake-windows-ci-dyn-build-${{ github.ref }} cmake-windows-ci-dyn-build-refs/heads/master cmake-windows-ci-dyn-build- variant: sccache - name: Setup run: | $Url = "https://archives.boost.io/release/1.92.0/source/boost_1_92_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_92_0" -NewName "boost" $Url = "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\ninja-win.zip") Expand-Archive -Path "$RUNNER_TEMP\ninja-win.zip" -DestinationPath C:\local\ninja Add-Content $env:GITHUB_PATH "C:\local\ninja" - name: Setup MSVC++ environment uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: Compile env: BOOST_ROOT: C:\local\boost shell: cmd run: | mkdir build cd build cmake .. -GNinja -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL -DCMAKE_BUILD_TYPE=Release -DQL_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -L type ql\config.hpp cmake --build . --verbose cmake --install . dir ql\*.lib - name: Test run: | & "C:\Program Files (x86)\QuantLib\bin\quantlib-test-suite" --log_level=message cmake-win-with-options: runs-on: windows-2022 steps: - uses: actions/checkout@v7 - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-windows-ci-opts-${{ github.ref }} restore-keys: | cmake-windows-ci-opts-${{ github.ref }} cmake-windows-ci-opts-refs/heads/master cmake-windows-ci-opts- variant: sccache - name: Setup run: | $Url = "https://archives.boost.io/release/1.92.0/source/boost_1_92_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_92_0" -NewName "boost" $Url = "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\ninja-win.zip") Expand-Archive -Path "$RUNNER_TEMP\ninja-win.zip" -DestinationPath C:\local\ninja Add-Content $env:GITHUB_PATH "C:\local\ninja" - name: Setup MSVC++ environment uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: Compile env: BOOST_ROOT: C:\local\boost shell: cmd run: | cmake --preset windows-ci-build-with-nonstandard-options -L cd build/windows-ci-build-with-nonstandard-options type ql\config.hpp cmake --build . --verbose cmake --build . --target install - name: Test run: | & "C:\Program Files (x86)\QuantLib\bin\quantlib-test-suite" --log_level=message cmake-macos: runs-on: macos-latest steps: - uses: actions/checkout@v7 - name: Setup env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | brew install boost ccache ninja - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: cmake-macos-ci-${{ github.ref }} restore-keys: | cmake-macos-ci-${{ github.ref }} cmake-macos-ci-refs/heads/master cmake-macos-ci- - name: Compile run: | mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DQL_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -GNinja -L cat ql/config.hpp cmake --build . --verbose sudo cmake --install . - name: Test run: | DYLD_LIBRARY_PATH=/usr/local/lib quantlib-test-suite --log_level=message QuantLib-1.44/.github/workflows/codeql-analysis.yml000066400000000000000000000027161526335424600224110ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. name: "CodeQL" on: schedule: - cron: '0 0 * * 0' workflow_dispatch: jobs: analyze: name: CodeQL analysis runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v7 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: cpp # Set up build environment - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v4 # ℹï¸� Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # âœ�ï¸� If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 QuantLib-1.44/.github/workflows/copyrights.yml000066400000000000000000000011661526335424600215120ustar00rootroot00000000000000name: Update copyright list on: push: branches-ignore: - 'dependabot/**' jobs: check-copyrights: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | ./tools/check_copyrights.sh - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.GITHUB_TOKEN }} branch: update-copyright-list-${{ github.ref_name }} delete-branch: true commit-message: 'Update copyright list in license' title: 'Update copyright list in license' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/coveralls.yml000066400000000000000000000027141526335424600213110ustar00rootroot00000000000000name: Coverage report on: push: branches: - master pull_request: workflow_dispatch: jobs: coverage: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y lcov libboost-dev - name: Compile run: | ./autogen.sh ./configure --disable-shared CXXFLAGS='-O1 -fprofile-arcs -ftest-coverage' LDFLAGS='-lgcov' make -j 4 - name: Capture baseline run: | mkdir -p coverage tmp lcov --no-external --capture --initial --directory . --output-file ./tmp/lcov_base.info --ignore-errors mismatch,empty,source - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make -C Examples check-examples - name: Capture coverage run: | lcov --no-external --capture --directory . --output-file ./tmp/lcov_run.info --ignore-errors mismatch,empty,source lcov --add-tracefile ./tmp/lcov_base.info --add-tracefile ./tmp/lcov_run.info --output-file ./tmp/lcov_total.info lcov --remove ./tmp/lcov_total.info "$PWD/Examples/*" "$PWD/test-suite/*" --output-file ./coverage/lcov.info - name: Upload coverage to Coveralls uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.GITHUB_TOKEN }} file: ./coverage/lcov.info QuantLib-1.44/.github/workflows/devenv-images.yml000066400000000000000000000033101526335424600220420ustar00rootroot00000000000000name: Build quantlib-devenv Docker images on: workflow_dispatch: inputs: boostVersion: description: 'Boost version' required: true env: ROLLING: resolute jobs: docker-images: runs-on: ubuntu-latest strategy: matrix: tag: [plucky, questing, resolute, stonking] steps: - uses: actions/checkout@v7 - name: Build CI images working-directory: dockerfiles run: | docker build -f ci.Dockerfile \ --build-arg tag=${{ matrix.tag }} \ --build-arg boost_version=${{ github.event.inputs.boostVersion }} \ --build-arg boost_dir=boost_$(echo "${{ github.event.inputs.boostVersion }}" | sed "s/\./_/g") \ -t ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} . docker tag ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }}-${{ github.event.inputs.boostVersion }} if test "${{ matrix.tag }}" = "$ROLLING" ; then docker tag ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} ghcr.io/lballabio/quantlib-devenv:rolling fi - name: Login to GitHub Container Registry uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GHCR_PAT }} - name: Push Docker images run: | docker push ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }}-${{ github.event.inputs.boostVersion }} docker push ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} if test "${{ matrix.tag }}" = "$ROLLING" ; then docker push ghcr.io/lballabio/quantlib-devenv:rolling fi QuantLib-1.44/.github/workflows/doxygen.yml000066400000000000000000000012601526335424600207670ustar00rootroot00000000000000name: Check doc generation on: push: branches: - '**' pull_request: jobs: docs: runs-on: macos-latest steps: - uses: actions/checkout@v7 - name: Setup env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | brew install automake autoconf libtool boost doxygen graphviz ./autogen.sh ./configure --with-boost-include=$(brew --prefix)/include - name: Doxygen version run: | doxygen --version - name: Check run: | make docs header-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | ./tools/check_all_header_docs.sh QuantLib-1.44/.github/workflows/filelists.yml000066400000000000000000000007501526335424600213130ustar00rootroot00000000000000name: Check CMake file list and VC++ projects on: push: branches: - '**' pull_request: jobs: filelists: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev - name: Configure run: | ./autogen.sh ./configure - name: Check run: | ./tools/check_filelists.sh QuantLib-1.44/.github/workflows/generated-headers.yml000066400000000000000000000017231526335424600226650ustar00rootroot00000000000000name: Update generated headers on: push: branches-ignore: - 'dependabot/**' jobs: generate-headers: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev - name: Configure run: | ./autogen.sh ./configure - name: Update headers run: | find ql -name *.am | xargs touch make dist rm QuantLib-*.tar.gz - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: update-generated-headers-${{ github.ref_name }} delete-branch: true commit-message: 'Update generated headers' title: 'Update generated headers' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/headers.yml000066400000000000000000000012671526335424600207340ustar00rootroot00000000000000name: Compile single headers on: push: branches: - '**' pull_request: jobs: headers: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev ccache - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: single-headers-${{ github.ref }} restore-keys: | single-headers-${{ github.ref }} single-headers-refs/heads/master single-headers- - name: Check env: CXX: ccache g++ run: | ./tools/check_all_headers.sh QuantLib-1.44/.github/workflows/includes.yml000066400000000000000000000014541526335424600211250ustar00rootroot00000000000000name: Fix inclusions of ql headers in double quotes on: push: branches-ignore: - 'dependabot/**' jobs: check-includes: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | shopt -s globstar sed -i -E -e 's|#include *"(ql/.*\.hpp)"|#include <\1>|g' **/*.[hc]pp - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: fix-include-in-quotes-${{ github.ref_name }} delete-branch: true commit-message: 'Fix inclusions of ql headers in double quotes' title: 'Fix inclusions of ql headers in double quotes' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/increase-version-number.yml000066400000000000000000000036731526335424600240660ustar00rootroot00000000000000name: Increase version number on: release: types: [published] jobs: increase-version: runs-on: ubuntu-latest if: ${{ github.event.release.prerelease == false }} steps: - uses: actions/checkout@v7 with: ref: 'master' fetch-depth: 0 fetch-tags: true - name: Setup git run: | git config user.name 'lballabio[bot]' git config user.email '224797326+lballabio-bot@users.noreply.github.com' - name: Calculate versions env: GH_TOKEN: ${{ github.token }} run: | export LATEST_RELEASE=${{ github.ref_name }} echo ${LATEST_RELEASE} | awk -F '.' '{ print "LATEST_MINOR=" $2 }' | tee -a $GITHUB_ENV echo ${LATEST_RELEASE} | awk -F '.' '{ print "NEXT_MINOR=" $2 + 1 }' | tee -a $GITHUB_ENV - name: Update version numbers run: | sed -i -e "s/^AC_INIT(\[QuantLib\].*$/AC_INIT([QuantLib], [1.${NEXT_MINOR}-dev],/g" configure.ac sed -i -e "s/^#define QL_VERSION.*$/#define QL_VERSION \"1.${NEXT_MINOR}-dev\"/g" ql/version.hpp sed -i -e "s/^#define QL_HEX_VERSION.*$/#define QL_HEX_VERSION 0x01${NEXT_MINOR}0000/g" ql/version.hpp sed -i -e "s/^set(QUANTLIB_VERSION_MINOR .*$/set(QUANTLIB_VERSION_MINOR ${NEXT_MINOR})/g" CMakeLists.txt sed -i -e "s/^set(PACKAGE_VERSION .*$/set(PACKAGE_VERSION \"1.${NEXT_MINOR}-dev\"\)/g" CMakeLists.txt sed -i -e "s/^set(PACKAGE_VERSION_HEX.*$/set(PACKAGE_VERSION_HEX \"0x01${NEXT_MINOR}0000\"\)/g" CMakeLists.txt git commit -a -m "Set version to 1.${NEXT_MINOR}-dev" - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: increase-version delete-branch: true base: master title: 'Set version to 1.${{ env.NEXT_MINOR }}-dev' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/license-url.yml000066400000000000000000000013641526335424600215410ustar00rootroot00000000000000name: Update old license links on: push: branches-ignore: - 'dependabot/**' jobs: license-urls: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | shopt -s globstar sed -i -e 's|http://quantlib\.org/license\.shtml|https://www.quantlib.org/license.shtml|g' **/*.[hc]pp **/*.ac **/*.docs **/*.cfg **/*.sh **/*.el - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.GITHUB_TOKEN }} branch: update-license-links-${{ github.ref_name }} delete-branch: true commit-message: 'Update old license links' title: 'Update old license links' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/linux-full-tests.yml000066400000000000000000000160421526335424600225550ustar00rootroot00000000000000name: Linux build with full test matrix on: schedule: - cron: '0 0 * * 0' workflow_dispatch: workflow_call: jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - name: "gcc 8.3 (Boost 1.72)" shortname: gcc8 tag: cosmic cc: gcc cxx: g++ - name: "gcc 9.3 (Boost 1.78)" shortname: gcc9 tag: focal cc: gcc cxx: g++ - name: "gcc 10.3 (Boost 1.79)" shortname: gcc10 tag: hirsute cc: gcc cxx: g++ - name: "gcc 11.4 (Boost 1.82)" shortname: gcc11 tag: jammy cc: gcc cxx: g++ - name: "gcc 12.3 (Boost 1.86)" shortname: gcc12 tag: lunar cc: gcc cxx: g++ - name: "gcc 13.3 (Boost 1.89)" shortname: gcc13 tag: noble cc: gcc cxx: g++ - name: "gcc 14.x" shortname: gcc14 tag: plucky cc: gcc cxx: g++ - name: "gcc 15.x" shortname: gcc15 tag: questing cc: gcc cxx: g++ - name: "Clang 7 (Boost 1.72)" shortname: clang7 tag: cosmic cc: clang cxx: clang++ - name: "Clang 8 (Boost 1.72)" shortname: clang8 tag: disco cc: clang cxx: clang++ - name: "Clang 9 (Boost 1.74)" shortname: clang9 tag: eoan cc: clang cxx: clang++ - name: "Clang 10 (Boost 1.78)" shortname: clang10 tag: focal cc: clang cxx: clang++ - name: "Clang 11 (Boost 1.78)" shortname: clang11 tag: groovy cc: clang cxx: clang++ - name: "Clang 12 (Boost 1.79)" shortname: clang12 tag: hirsute cc: clang cxx: clang++ - name: "Clang 13 (Boost 1.79)" shortname: clang13 tag: impish cc: clang cxx: clang++ - name: "Clang 14 (Boost 1.82)" shortname: clang14 tag: jammy cc: clang cxx: clang++ - name: "Clang 15 (Boost 1.86)" shortname: clang15 tag: lunar cc: clang cxx: clang++ - name: "Clang 16 (Boost 1.86)" shortname: clang16 tag: mantic cc: clang cxx: clang++ - name: "Clang 17 (Boost 1.84)" shortname: clang17 tag: clang-17 cc: clang cxx: clang++ - name: "Clang 18 (Boost 1.89)" shortname: clang18 tag: noble cc: clang cxx: clang++ - name: "Clang 19 (Boost 1.89)" shortname: clang19 tag: oracular cc: clang cxx: clang++ - name: "Clang 20" shortname: clang20 tag: questing cc: clang cxx: clang++ - name: "Clang 21" shortname: clang21 tag: resolute cc: clang cxx: clang++ - name: "Clang 22" shortname: clang22 tag: stonking cc: clang cxx: clang++ - name: "C++17 mode" shortname: c++17 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++17" - name: "C++20 mode" shortname: c++20 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++20" - name: "C++23 mode" shortname: c++23 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++23" - name: "C++26 mode" shortname: c++26 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++26" - name: "Unity build enabled" shortname: unity tag: rolling cc: gcc cxx: g++ configureflags: --enable-unity-build - name: "Intraday calculations enabled" shortname: intraday tag: rolling cc: gcc cxx: g++ configureflags: --enable-intraday - name: "Throwing in cycles enabled" shortname: cycles tag: rolling cc: gcc cxx: g++ configureflags: --enable-throwing-in-cycles --disable-faster-lazy-objects - name: "Indexed coupons enabled" shortname: indexed tag: rolling cc: gcc cxx: g++ configureflags: --enable-indexed-coupons - name: "Standard Library classes enabled" shortname: stdclasses tag: rolling cc: gcc cxx: g++ configureflags: --enable-std-classes - name: "Thread-safe observer enabled" shortname: threadsafe tag: rolling cc: gcc cxx: g++ configureflags: --enable-thread-safe-observer-pattern - name: "Sessions enabled" shortname: sessions tag: rolling cc: gcc cxx: g++ configureflags: --enable-sessions - name: "OpenMP enabled" shortname: openmp tag: rolling cc: gcc cxx: g++ configureflags: --enable-openmp - name: "Parallel unit-test runner" shortname: paralleltests tag: rolling cc: gcc cxx: g++ configureflags: --enable-parallel-unit-test-runner - name: "Null as function template" shortname: nullfunctions tag: rolling cc: gcc cxx: g++ configureflags: --enable-null-as-functions container: ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} steps: - uses: actions/checkout@v7 - name: Compiler version run: | ${{ matrix.cc }} --version - name: Build run: | ./autogen.sh ./configure --disable-static ${{ matrix.configureflags }} CC="${{ matrix.cc }}" CXX="${{ matrix.cxx }}" CXXFLAGS="-O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }}" cat ql/config.hpp make -j 4 - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make check-examples - name: Check global header run: | echo "#include " > test1.cpp && echo "int main() { return 0; }" >> test1.cpp echo "#include " > test2.cpp make install ${{ matrix.cxx }} -O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }} `quantlib-config --cflags` test1.cpp test2.cpp `quantlib-config --libs` QuantLib-1.44/.github/workflows/linux-nondefault.yml000066400000000000000000000135401526335424600226120ustar00rootroot00000000000000name: Linux build with non-default configuration on: schedule: - cron: '0 0 * * 0' workflow_dispatch: workflow_call: jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - name: "gcc 8.3 (Boost 1.72)" shortname: gcc8 tag: cosmic cc: gcc cxx: g++ - name: "gcc 9.3 (Boost 1.78)" shortname: gcc9 tag: focal cc: gcc cxx: g++ - name: "gcc 10.3 (Boost 1.79)" shortname: gcc10 tag: hirsute cc: gcc cxx: g++ - name: "gcc 11.4 (Boost 1.82)" shortname: gcc11 tag: jammy cc: gcc cxx: g++ - name: "gcc 12.3 (Boost 1.86)" shortname: gcc12 tag: lunar cc: gcc cxx: g++ - name: "gcc 13.3 (Boost 1.89)" shortname: gcc13 tag: noble cc: gcc cxx: g++ - name: "gcc 14.x" shortname: gcc14 tag: plucky cc: gcc cxx: g++ - name: "gcc 15.x" shortname: gcc15 tag: questing cc: gcc cxx: g++ - name: "Clang 7 (Boost 1.72)" shortname: clang7 tag: cosmic cc: clang cxx: clang++ - name: "Clang 8 (Boost 1.72)" shortname: clang8 tag: disco cc: clang cxx: clang++ - name: "Clang 9 (Boost 1.74)" shortname: clang9 tag: eoan cc: clang cxx: clang++ - name: "Clang 10 (Boost 1.78)" shortname: clang10 tag: focal cc: clang cxx: clang++ - name: "Clang 11 (Boost 1.78)" shortname: clang11 tag: groovy cc: clang cxx: clang++ - name: "Clang 12 (Boost 1.79)" shortname: clang12 tag: hirsute cc: clang cxx: clang++ - name: "Clang 13 (Boost 1.79)" shortname: clang13 tag: impish cc: clang cxx: clang++ - name: "Clang 14 (Boost 1.82)" shortname: clang14 tag: jammy cc: clang cxx: clang++ - name: "Clang 15 (Boost 1.86)" shortname: clang15 tag: lunar cc: clang cxx: clang++ - name: "Clang 16 (Boost 1.86)" shortname: clang16 tag: mantic cc: clang cxx: clang++ - name: "Clang 18 (Boost 1.89)" shortname: clang18 tag: noble cc: clang cxx: clang++ - name: "Clang 19 (Boost 1.89)" shortname: clang19 tag: oracular cc: clang cxx: clang++ - name: "Clang 20" shortname: clang20 tag: questing cc: clang cxx: clang++ - name: "Clang 21" shortname: clang21 tag: resolute cc: clang cxx: clang++ - name: "Clang 22" shortname: clang22 tag: stonking cc: clang cxx: clang++ - name: "C++17 mode" shortname: c++17 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++17" - name: "C++20 mode" shortname: c++20 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++20" - name: "C++23 mode" shortname: c++23 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++23" - name: "C++26 mode" shortname: c++26 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++26" - name: "Unity build enabled" shortname: unity tag: rolling cc: gcc cxx: g++ configureflags: --enable-unity-build - name: "Standard Library classes enabled" shortname: stdclasses tag: oracular cc: gcc cxx: g++ configureflags: --enable-std-pointers --disable-std-any --disable-std-optional - name: "OpenMP enabled" shortname: openmp tag: rolling cc: gcc cxx: g++ configureflags: --enable-openmp container: ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} steps: - uses: actions/checkout@v7 - name: Compiler version run: | ${{ matrix.cc }} --version - name: Build run: | ./autogen.sh ./configure --disable-static --enable-error-lines --enable-error-functions --enable-tracing --enable-indexed-coupons --enable-extra-safety-checks --enable-sessions --enable-thread-safe-observer-pattern --enable-intraday --disable-faster-lazy-objects --enable-throwing-in-cycles --enable-null-as-functions ${{ matrix.configureflags }} CC="${{ matrix.cc }}" CXX="${{ matrix.cxx }}" CPPFLAGS="-Wall -Wno-unknown-pragmas -Wno-array-bounds -Werror" CXXFLAGS="-O2 -g0 ${{ matrix.cxxflags }}" cat ql/config.hpp make -j 4 - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make check-examples - name: Check global header run: | echo "#include " > test1.cpp && echo "int main() { return 0; }" >> test1.cpp echo "#include " > test2.cpp make install ${{ matrix.cxx }} -O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }} `quantlib-config --cflags` test1.cpp test2.cpp `quantlib-config --libs` QuantLib-1.44/.github/workflows/linux.yml000066400000000000000000000133361526335424600204600ustar00rootroot00000000000000name: Linux build on: push: branches: - '**' pull_request: jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - name: "gcc 9.3 (Boost 1.78)" shortname: gcc9 tag: focal cc: gcc cxx: g++ - name: "gcc 11.4 (Boost 1.82)" shortname: gcc11 tag: jammy cc: gcc cxx: g++ - name: "gcc 13.3 (Boost 1.89)" shortname: gcc13 tag: noble cc: gcc cxx: g++ tests: true - name: "gcc 15.x" shortname: gcc15 tag: questing cc: gcc cxx: g++ tests: true - name: "Clang 10 (Boost 1.78)" shortname: clang10 tag: focal cc: clang cxx: clang++ - name: "Clang 14 (Boost 1.82)" shortname: clang14 tag: jammy cc: clang cxx: clang++ - name: "Clang 18 (Boost 1.89)" shortname: clang18 tag: noble cc: clang cxx: clang++ tests: true - name: "Clang 21" shortname: clang21 tag: resolute cc: clang cxx: clang++ tests: true - name: "Clang 22" shortname: clang22 tag: stonking cc: clang cxx: clang++ tests: true - name: "C++17 mode" shortname: c++17 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++17" - name: "C++20 mode" shortname: c++20 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++20" - name: "C++23 mode" shortname: c++23 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++23" - name: "C++26 mode" shortname: c++26 tag: rolling cc: gcc cxx: g++ cxxflags: "-std=c++26" - name: "Unity build enabled" shortname: unity tag: rolling cc: gcc cxx: g++ configureflags: --enable-unity-build - name: "Intraday calculations enabled" shortname: intraday tag: rolling cc: gcc cxx: g++ configureflags: --enable-intraday tests: true - name: "Throwing in cycles enabled" shortname: cycles tag: rolling cc: gcc cxx: g++ configureflags: --enable-throwing-in-cycles --disable-faster-lazy-objects tests: true - name: "Indexed coupons enabled" shortname: indexed tag: rolling cc: gcc cxx: g++ configureflags: --enable-indexed-coupons tests: true - name: "Standard Library classes enabled" shortname: stdclasses tag: rolling cc: gcc cxx: g++ configureflags: --enable-std-classes tests: true - name: "Thread-safe observer enabled" shortname: threadsafe tag: rolling cc: gcc cxx: g++ configureflags: --enable-thread-safe-observer-pattern tests: true - name: "Sessions enabled" shortname: sessions tag: rolling cc: gcc cxx: g++ configureflags: --enable-sessions tests: true - name: "OpenMP enabled" shortname: openmp tag: rolling cc: gcc cxx: g++ configureflags: --enable-openmp tests: true - name: "Parallel unit-test runner" shortname: paralleltests tag: rolling cc: gcc cxx: g++ configureflags: --enable-parallel-unit-test-runner tests: true - name: "Null as function template" shortname: nullfunctions tag: rolling cc: gcc cxx: g++ configureflags: --enable-null-as-functions tests: true container: ghcr.io/lballabio/quantlib-devenv:${{ matrix.tag }} steps: - uses: actions/checkout@v7 - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: linux-ci-build-${{ matrix.shortname }}-${{ github.ref }} restore-keys: | linux-ci-build-${{ matrix.shortname }}-${{ github.ref }} linux-ci-build-${{ matrix.shortname }}-refs/heads/master linux-ci-build-${{ matrix.shortname }}- - name: Compiler version run: | ${{ matrix.cc }} --version - name: Build run: | ./autogen.sh ./configure --disable-static ${{ matrix.configureflags }} CC="ccache ${{ matrix.cc }}" CXX="ccache ${{ matrix.cxx }}" CXXFLAGS="-O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }}" cat ql/config.hpp make -j 4 - name: Run tests if: ${{ matrix.tests }} run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples if: ${{ matrix.tests }} run: | make check-examples - name: Check global header if: ${{ matrix.tests }} run: | echo "#include " > test1.cpp && echo "int main() { return 0; }" >> test1.cpp echo "#include " > test2.cpp make install ${{ matrix.cxx }} -O2 -g0 -Wall -Wno-unknown-pragmas -Werror ${{ matrix.cxxflags }} `quantlib-config --cflags` test1.cpp test2.cpp `quantlib-config --libs` QuantLib-1.44/.github/workflows/macos-nondefault.yml000066400000000000000000000025261526335424600225570ustar00rootroot00000000000000name: Mac OS build with non-default configuration on: schedule: - cron: '0 0 * * 0' workflow_dispatch: workflow_call: jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-15, macos-26] classes: [boost, std] include: - classes: std configureflags: --enable-std-pointers --disable-std-any steps: - uses: actions/checkout@v7 - name: Setup env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | brew install automake autoconf libtool boost - name: Compiler version run: | clang --version - name: Build run: | ./autogen.sh ./configure --disable-shared --with-boost-include=`brew --prefix`/include --enable-error-lines --enable-error-functions --enable-tracing --enable-indexed-coupons --enable-extra-safety-checks --enable-sessions --enable-thread-safe-observer-pattern --enable-intraday --disable-faster-lazy-objects --enable-throwing-in-cycles --enable-null-as-functions ${{ matrix.configureflags }} CC="clang" CXX="clang++" CXXFLAGS="-O2 -g0 -Wall -Werror" cat ql/config.hpp make -j 3 - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make -C Examples check-examples QuantLib-1.44/.github/workflows/macos.yml000066400000000000000000000023301526335424600204130ustar00rootroot00000000000000name: Mac OS build on: push: branches: - '**' pull_request: jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-15, macos-26] steps: - uses: actions/checkout@v7 - name: Setup env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | brew install automake autoconf libtool boost ccache - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: macos-ci-build-${{ matrix.os }}-${{ github.ref }} restore-keys: | macos-ci-build-${{ matrix.os }}-${{ github.ref }} macos-ci-build-${{ matrix.os }}-refs/heads/master macos-ci-build-${{ matrix.os }}- - name: Compiler version run: | clang --version - name: Build run: | ./autogen.sh ./configure --disable-shared --with-boost-include=`brew --prefix`/include ${{ matrix.configureflags }} CC="ccache clang" CXX="ccache clang++" CXXFLAGS="-O2 -g0 -Wall -Werror ${{ matrix.cxxflags }}" make -j 3 - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make -C Examples check-examples QuantLib-1.44/.github/workflows/misspell.yml000066400000000000000000000012021526335424600211360ustar00rootroot00000000000000name: Misspell fixer on: push: branches-ignore: - 'dependabot/**' jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - uses: sobolevn/misspell-fixer-action@master - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: misspell-fixes-${{ github.ref_name }} delete-branch: true commit-message: 'Fixes by misspell-fixer' title: 'Typos fixed by misspell-fixer' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/msvc-all-configs.yml000066400000000000000000000044051526335424600224620ustar00rootroot00000000000000name: Windows build with all configurations on: schedule: - cron: '0 0 * * 0' workflow_dispatch: workflow_call: jobs: msbuild: strategy: fail-fast: false matrix: toolset: [v142, v143, v145] platform: [x64, Win32] configuration: ['Release', 'Debug', 'Release (static runtime)', 'Debug (static runtime)'] unity: [unity, singles] include: - toolset: v142 boost_version: 77 vsversion: 2019 image: windows-2022 - toolset: v143 boost_version: 92 vsversion: 2022 image: windows-2022 - toolset: v145 boost_version: 92 vsversion: 2026 image: windows-2025-vs2026 runs-on: ${{ matrix.image }} steps: - uses: actions/checkout@v7 - name: Setup MSVC++ environment uses: microsoft/setup-msbuild@v3 with: msbuild-architecture: x64 - name: Setup Boost run: | $Url = "https://archives.boost.io/release/1.${{ matrix.boost_version }}.0/source/boost_1_${{ matrix.boost_version }}_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_${{ matrix.boost_version }}_0" -NewName "boost" - name: Setup local properties shell: cmd run: | COPY .ci\VS${{ matrix.vsversion }}.props .\Build.props - name: Setup unity build if: ${{ matrix.unity == 'unity' }} shell: cmd run: | COPY .ci\Unity.props .\Directory.Build.props - name: Build run: | msbuild ./QuantLib.sln /verbosity:normal /property:Configuration="${{ matrix.configuration }}" /property:Platform=${{ matrix.platform }} /property:PlatformToolset=${{ matrix.toolset }} - name: Test if: ${{ contains(matrix.configuration, 'Release') }} run: | .\test-suite\bin\QuantLib-test-suite*.exe --log_level=message - name: Run examples if: ${{ contains(matrix.configuration, 'Release') }} run: | foreach ($file in Get-ChildItem -Path .\Examples\*.exe -Recurse) { & $file.FullName if (!$?) { Exit $LASTEXITCODE } } QuantLib-1.44/.github/workflows/msvc-analysis.yml000066400000000000000000000030521526335424600221040ustar00rootroot00000000000000name: Microsoft C++ Code Analysis on: schedule: - cron: '0 0 * * 0' workflow_dispatch: env: # Path to the CMake build directory. build: '${{ github.workspace }}/build' jobs: analyze: name: Analyze runs-on: windows-2022 steps: - name: Checkout repository uses: actions/checkout@v7 - name: Setup run: | $Url = "https://archives.boost.io/release/1.92.0/source/boost_1_92_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_92_0" -NewName "boost" - name: Configure CMake env: BOOST_ROOT: C:\local\boost run: cmake -B ${{ env.build }} -DQL_USE_STD_CLASSES=ON - name: Run MSVC Code Analysis uses: microsoft/msvc-code-analysis-action@v0.1.1 # Provide a unique ID to access the sarif output path id: run-analysis env: CAExcludePath: C:\local\boost with: cmakeBuildDirectory: ${{ env.build }} buildConfiguration: Release ruleset: '${{ github.workspace }}/.msvc-analysis.ruleset' - name: Upload SARIF to GitHub uses: github/codeql-action/upload-sarif@v4 with: sarif_file: ${{ steps.run-analysis.outputs.sarif }} - name: Upload SARIF as an Artifact uses: actions/upload-artifact@v7 with: name: sarif-file path: ${{ steps.run-analysis.outputs.sarif }} QuantLib-1.44/.github/workflows/msvc-nondefault.yml000066400000000000000000000041611526335424600224220ustar00rootroot00000000000000name: Windows build with non-default configuration on: schedule: - cron: '0 0 * * 0' workflow_dispatch: workflow_call: jobs: msbuild: strategy: fail-fast: false matrix: toolset: [v142, v143, v145] platform: [x64, Win32] unity: [unity, singles] include: - toolset: v142 boost_version: 77 vsversion: 2019 image: windows-2022 - toolset: v143 boost_version: 92 vsversion: 2022 image: windows-2022 - toolset: v145 boost_version: 92 vsversion: 2026 image: windows-2025-vs2026 runs-on: ${{ matrix.image }} steps: - uses: actions/checkout@v7 - name: Setup MSVC++ environment uses: microsoft/setup-msbuild@v3 with: msbuild-architecture: x64 - name: Setup Boost run: | $Url = "https://archives.boost.io/release/1.${{ matrix.boost_version }}.0/source/boost_1_${{ matrix.boost_version }}_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_${{ matrix.boost_version }}_0" -NewName "boost" - name: Setup local properties shell: cmd run: | COPY .ci\VS${{ matrix.vsversion }}.alt.props .\Build.props COPY .ci\userconfig${{ matrix.vsversion }}.alt.hpp .\ql\userconfig.hpp - name: Setup unity build if: ${{ matrix.unity == 'unity' }} shell: cmd run: | COPY .ci\Unity.props .\Directory.Build.props - name: Build run: | msbuild ./QuantLib.sln /verbosity:normal /property:Configuration=Release /property:Platform=${{ matrix.platform }} /property:PlatformToolset=${{ matrix.toolset }} - name: Test run: | .\test-suite\bin\QuantLib-test-suite*.exe --log_level=message - name: Run examples run: | foreach ($file in Get-ChildItem -Path .\Examples\*.exe -Recurse) { & $file.FullName if (!$?) { Exit $LASTEXITCODE } } QuantLib-1.44/.github/workflows/msvc.yml000066400000000000000000000036661526335424600202760ustar00rootroot00000000000000name: Windows build on: push: branches: - '**' pull_request: jobs: msbuild: strategy: fail-fast: false matrix: toolset: [v142, v143, v145] unity: [unity, singles] include: - toolset: v142 boost_version: 77 vsversion: 2019 image: windows-2022 - toolset: v143 boost_version: 92 vsversion: 2022 image: windows-2022 - toolset: v145 boost_version: 92 vsversion: 2026 image: windows-2025-vs2026 runs-on: ${{ matrix.image }} steps: - uses: actions/checkout@v7 - name: Setup MSVC++ environment uses: microsoft/setup-msbuild@v3 with: msbuild-architecture: x64 - name: Setup Boost run: | $Url = "https://archives.boost.io/release/1.${{ matrix.boost_version }}.0/source/boost_1_${{ matrix.boost_version }}_0.zip" (New-Object System.Net.WebClient).DownloadFile($Url, "$RUNNER_TEMP\boost.zip") Expand-Archive -Path "$RUNNER_TEMP\boost.zip" -DestinationPath C:\local Rename-Item -Path "C:\local\boost_1_${{ matrix.boost_version }}_0" -NewName "boost" - name: Setup local properties shell: cmd run: | COPY .ci\VS${{ matrix.vsversion }}.props .\Build.props - name: Setup unity build if: ${{ matrix.unity == 'unity' }} shell: cmd run: | COPY .ci\Unity.props .\Directory.Build.props - name: Build run: | msbuild ./QuantLib.sln /verbosity:normal /property:Configuration=Release /property:Platform=x64 /property:PlatformToolset=${{ matrix.toolset }} - name: Test run: | .\test-suite\bin\QuantLib-test-suite*.exe --log_level=message - name: Run examples run: | foreach ($file in Get-ChildItem -Path .\Examples\*.exe -Recurse) { & $file.FullName if (!$?) { Exit $LASTEXITCODE } } QuantLib-1.44/.github/workflows/namespaces.yml000066400000000000000000000016751526335424600214430ustar00rootroot00000000000000name: Fix deprecated uses of ext namespace on: push: branches-ignore: - 'dependabot/**' jobs: check-namespaces: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | shopt -s globstar sed -i -e 's/ext::any\b/std::any/g' **/*.[hc]pp sed -i -e 's/ext::any_cast\b/std::any_cast/g' **/*.[hc]pp sed -i -e 's/ext::optional\b/std::optional/g' **/*.[hc]pp sed -i -e 's/ext::nullopt\b/std::nullopt/g' **/*.[hc]pp - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: fix-ext-namespace-${{ github.ref_name }} delete-branch: true commit-message: 'Fix deprecated uses of ext namespace' title: 'Fix deprecated uses of ext namespace' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/prepare-patch-release.yml000066400000000000000000000042711526335424600234700ustar00rootroot00000000000000name: Prepare patch release on: workflow_dispatch: jobs: update-for-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 fetch-tags: true - name: Setup git run: | git config user.name 'lballabio[bot]' git config user.email '224797326+lballabio-bot@users.noreply.github.com' - name: Calculate versions env: GH_TOKEN: ${{ github.token }} run: | export LATEST_RELEASE=`gh release list --json name,isLatest --jq '.[] | select(.isLatest)|.name'` echo LATEST_TAG=v${LATEST_RELEASE} | tee -a $GITHUB_ENV echo ${LATEST_RELEASE} | awk -F '.' '{ print "LAST_MINOR=" $2 }' | tee -a $GITHUB_ENV echo ${LATEST_RELEASE} | awk -F '.' '{ print "NEXT_PATCH=" $3 + 1 }' | tee -a $GITHUB_ENV - name: Update version numbers run: | sed -i -e "s/^AC_INIT(\[QuantLib\].*$/AC_INIT([QuantLib], [1.${LAST_MINOR}.${NEXT_PATCH}],/g" configure.ac sed -i -e "s/^#define QL_VERSION.*$/#define QL_VERSION \"1.${LAST_MINOR}.${NEXT_PATCH}\"/g" ql/version.hpp sed -i -e "s/^#define QL_HEX_VERSION.*$/#define QL_HEX_VERSION 0x01${LAST_MINOR}0${NEXT_PATCH}f0/g" ql/version.hpp sed -i -e "s/^set(PACKAGE_VERSION .*$/set(PACKAGE_VERSION \"1.${LAST_MINOR}.${NEXT_PATCH}\"\)/g" CMakeLists.txt sed -i -e "s/^set(PACKAGE_VERSION_HEX.*$/set(PACKAGE_VERSION_HEX \"0x01${LAST_MINOR}0${NEXT_PATCH}f0\"\)/g" CMakeLists.txt git commit -a -m "Set version to 1.${LAST_MINOR}.${NEXT_PATCH}" - name: Update ChangeLog run: | git log --pretty=medium --date=rfc --stat --grep='Merge [^p]' --grep='[Mm]erged' --grep='[Pp]ull from' --invert-grep ${LATEST_TAG}.. > ChangeLog.txt git commit -a -m "Update changelog" - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: update-version-for-release-${{ github.ref_name }} delete-branch: true title: 'Set version to 1.${{ env.LAST_MINOR }}.${{ env.NEXT_PATCH }} final' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/prepare-release-candidate.yml000066400000000000000000000037541526335424600243120ustar00rootroot00000000000000name: Prepare release candidate on: workflow_dispatch: jobs: update-for-rc: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 fetch-tags: true - name: Setup git run: | git config user.name 'lballabio[bot]' git config user.email '224797326+lballabio-bot@users.noreply.github.com' - name: Calculate versions env: GH_TOKEN: ${{ github.token }} run: | export LATEST_RELEASE=`gh release list --json name,isLatest --jq '.[] | select(.isLatest)|.name'` echo LATEST_TAG=v${LATEST_RELEASE} | tee -a $GITHUB_ENV echo ${LATEST_RELEASE} | awk -F '.' '{ print "NEXT_MINOR=" $2 + 1 }' | tee -a $GITHUB_ENV - name: Update version numbers run: | sed -i -e "s/^AC_INIT(\[QuantLib\].*$/AC_INIT([QuantLib], [1.${NEXT_MINOR}-rc],/g" configure.ac sed -i -e "s/^#define QL_VERSION.*$/#define QL_VERSION \"1.${NEXT_MINOR}-rc\"/g" ql/version.hpp sed -i -e "s/^#define QL_HEX_VERSION.*$/#define QL_HEX_VERSION 0x01${NEXT_MINOR}00c0/g" ql/version.hpp sed -i -e "s/^set(PACKAGE_VERSION .*$/set(PACKAGE_VERSION \"1.${NEXT_MINOR}-rc\"\)/g" CMakeLists.txt sed -i -e "s/^set(PACKAGE_VERSION_HEX.*$/set(PACKAGE_VERSION_HEX \"0x01${NEXT_MINOR}00c0\"\)/g" CMakeLists.txt git commit -a -m "Set version to 1.${NEXT_MINOR}-rc" - name: Update ChangeLog run: | git log --pretty=medium --date=rfc --stat --grep='Merge [^p]' --grep='[Mm]erged' --grep='[Pp]ull from' --invert-grep ${LATEST_TAG}.. > ChangeLog.txt git commit -a -m "Update changelog" - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: set-to-rc-${{ github.ref_name }} delete-branch: true title: 'Set version to 1.${{ env.NEXT_MINOR }}-rc' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/prepare-release.yml000066400000000000000000000037571526335424600224030ustar00rootroot00000000000000name: Prepare release on: workflow_dispatch: jobs: update-for-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 fetch-tags: true - name: Setup git run: | git config user.name 'lballabio[bot]' git config user.email '224797326+lballabio-bot@users.noreply.github.com' - name: Calculate versions env: GH_TOKEN: ${{ github.token }} run: | export LATEST_RELEASE=`gh release list --json name,isLatest --jq '.[] | select(.isLatest)|.name'` echo LATEST_TAG=v${LATEST_RELEASE} | tee -a $GITHUB_ENV echo ${LATEST_RELEASE} | awk -F '.' '{ print "NEXT_MINOR=" $2 + 1 }' | tee -a $GITHUB_ENV - name: Update version numbers run: | sed -i -e "s/^AC_INIT(\[QuantLib\].*$/AC_INIT([QuantLib], [1.${NEXT_MINOR}],/g" configure.ac sed -i -e "s/^#define QL_VERSION.*$/#define QL_VERSION \"1.${NEXT_MINOR}\"/g" ql/version.hpp sed -i -e "s/^#define QL_HEX_VERSION.*$/#define QL_HEX_VERSION 0x01${NEXT_MINOR}00f0/g" ql/version.hpp sed -i -e "s/^set(PACKAGE_VERSION .*$/set(PACKAGE_VERSION \"1.${NEXT_MINOR}\"\)/g" CMakeLists.txt sed -i -e "s/^set(PACKAGE_VERSION_HEX.*$/set(PACKAGE_VERSION_HEX \"0x01${NEXT_MINOR}00f0\"\)/g" CMakeLists.txt git commit -a -m "Set version to 1.${NEXT_MINOR}" - name: Update ChangeLog run: | git log --pretty=medium --date=rfc --stat --grep='Merge [^p]' --grep='[Mm]erged' --grep='[Pp]ull from' --invert-grep ${LATEST_TAG}.. > ChangeLog.txt git commit -a -m "Update changelog" - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: update-version-for-release-${{ github.ref_name }} delete-branch: true title: 'Set version to 1.${{ env.NEXT_MINOR }} final' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/prerelease-checks.yml000066400000000000000000000007411526335424600227020ustar00rootroot00000000000000name: Pre-release checks on: workflow_dispatch: jobs: full-linux-tests: uses: ./.github/workflows/linux-full-tests.yml full-msvc-tests: uses: ./.github/workflows/msvc-all-configs.yml linux-alt-config: uses: ./.github/workflows/linux-nondefault.yml msvc-alt-config: uses: ./.github/workflows/msvc-nondefault.yml macos-alt-config: uses: ./.github/workflows/macos-nondefault.yml cmake-latest: uses: ./.github/workflows/cmake-latest-runners.yml QuantLib-1.44/.github/workflows/publish-release-candidate.yml000066400000000000000000000034231526335424600243130ustar00rootroot00000000000000name: Publish release candidate on: push: tags: - 'v1.*-rc' permissions: contents: write packages: write jobs: publish-rc: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 fetch-tags: true - name: Setup run: | sudo apt update sudo apt install -y libboost-dev tofrodos ./autogen.sh ./configure - name: Make tarballs run: | mkdir tarballs make dist mv QuantLib-*.tar.gz tarballs cd tarballs && ../tools/tgz2zip *.tar.gz && ls -lh - name: Extract version run: | echo ${{ github.ref_name }} | awk -F '[v-]' '{ print "VERSION_NUMBER=" $2 }' | tee -a $GITHUB_ENV - name: Create prerelease env: GH_TOKEN: ${{ github.token }} run: | echo "This is a release candidate. Please try it out and report any issues here on GitHub." >> tarballs/notes.txt echo "" >> tarballs/notes.txt echo "Downloads:" >> tarballs/notes.txt echo "==========" >> tarballs/notes.txt echo "" >> tarballs/notes.txt echo "- [QuantLib-${VERSION_NUMBER}-rc.tar.gz](https://github.com/lballabio/QuantLib/releases/download/v${VERSION_NUMBER}-rc/QuantLib-${VERSION_NUMBER}-rc.tar.gz)" >> tarballs/notes.txt echo "- [QuantLib-${VERSION_NUMBER}-rc.zip](https://github.com/lballabio/QuantLib/releases/download/v${VERSION_NUMBER}-rc/QuantLib-${VERSION_NUMBER}-rc.zip)" >> tarballs/notes.txt echo "" >> tarballs/notes.txt gh release create ${{ github.ref_name }} \ --title "${VERSION_NUMBER} release candidate" \ --prerelease \ --notes-file tarballs/notes.txt \ --generate-notes \ tarballs/*.tar.gz tarballs/*.zip QuantLib-1.44/.github/workflows/publish-release.yml000066400000000000000000000065101526335424600224010ustar00rootroot00000000000000name: Draft new release on: push: tags: - 'v1.[0-9]+' - 'v1.[0-9]+.[0-9]+' permissions: contents: write packages: write jobs: draft-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 fetch-tags: true - name: Setup run: | sudo apt update sudo apt install -y libboost-dev tofrodos ./autogen.sh ./configure - name: Make tarballs run: | mkdir tarballs make dist mv QuantLib-*.tar.gz tarballs cd tarballs && ../tools/tgz2zip *.tar.gz && ls -lh - name: Extract version run: | echo ${{ github.ref_name }} | awk -F '[v-]' '{ print "VERSION_NUMBER=" $2 }' | tee -a $GITHUB_ENV - name: Prepare release notes run: | echo "Downloads:" >> tarballs/notes.txt echo "==========" >> tarballs/notes.txt echo "" >> tarballs/notes.txt echo "- [QuantLib-${VERSION_NUMBER}.tar.gz](https://github.com/lballabio/QuantLib/releases/download/v${VERSION_NUMBER}/QuantLib-${VERSION_NUMBER}.tar.gz)" >> tarballs/notes.txt echo "- [QuantLib-${VERSION_NUMBER}.zip](https://github.com/lballabio/QuantLib/releases/download/v${VERSION_NUMBER}/QuantLib-${VERSION_NUMBER}.zip)" >> tarballs/notes.txt echo "" >> tarballs/notes.txt awk '/Full list of pull requests/{ exit } { print }' News.md >> tarballs/notes.txt - name: Remove prerelease continue-on-error: true env: GH_TOKEN: ${{ github.token }} run: | gh release delete ${{ github.ref_name }}-rc --cleanup-tag --yes - name: Create draft release env: GH_TOKEN: ${{ github.token }} run: | gh release create ${{ github.ref_name }} \ --title "${VERSION_NUMBER}" \ --draft \ --notes-file tarballs/notes.txt \ --generate-notes \ tarballs/*.tar.gz tarballs/*.zip reference-manual: runs-on: macos-latest steps: - uses: actions/checkout@v7 - name: Setup env: HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 run: | brew install automake autoconf libtool boost doxygen graphviz - name: Doxygen version run: | doxygen --version - name: Generate docs run: | ./autogen.sh ./configure --with-boost-include=$(brew --prefix)/include make docs - uses: actions/checkout@v7 with: repository: quantlib/quantlib.github.io path: site - name: Update docs working-directory: site run: | rm -rf reference mv ../Docs/html reference git add reference cp ../LICENSE.TXT _includes/LICENSE.TXT - uses: peter-evans/create-pull-request@v8 with: path: site token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/quantlib.github.io branch: reference-docs-${{ github.ref_name }} delete-branch: true commit-message: 'Update reference docs for ${{ github.ref_name }}' title: 'Update reference docs for ${{ github.ref_name }}' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> body: | This is an automated PR generated by the [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action. QuantLib-1.44/.github/workflows/sanitizer.yml000066400000000000000000000026461526335424600213330ustar00rootroot00000000000000name: Linux build with address sanitizer enabled on: schedule: - cron: '0 0 * * 0' workflow_dispatch: jobs: sanitize-address-undefined: runs-on: ubuntu-latest container: ghcr.io/lballabio/quantlib-devenv:rolling steps: - uses: actions/checkout@v7 - name: Compiler version run: | gcc --version - name: Build run: | ./autogen.sh ./configure --disable-static CC="gcc" CXX="g++" CXXFLAGS="-O2 -g0 -fsanitize=address,undefined -fno-sanitize-recover=all -fno-omit-frame-pointer -Wall -Wno-unknown-pragmas -Werror" make -j 4 - name: Run tests run: | LSAN_OPTIONS=suppressions=.lsan.txt ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make check-examples sanitize-thread: runs-on: ubuntu-latest container: ghcr.io/lballabio/quantlib-devenv:rolling steps: - uses: actions/checkout@v7 - name: Compiler version run: | gcc --version - name: Build run: | ./autogen.sh ./configure --disable-static --enable-sessions --enable-thread-safe-observer-pattern CC="gcc" CXX="g++" CXXFLAGS="-O2 -g0 -fsanitize=thread -fno-sanitize-recover=all -Wall -Wno-unknown-pragmas -Werror" make -j 4 - name: Run tests run: | ./test-suite/quantlib-test-suite --log_level=message - name: Run examples run: | make check-examples QuantLib-1.44/.github/workflows/stale.yml000066400000000000000000000022241526335424600204230ustar00rootroot00000000000000name: Close stale issues and PR on: schedule: - cron: '30 1 * * *' jobs: staleness-check: runs-on: ubuntu-latest steps: - uses: actions/stale@v11 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue was automatically marked as stale because it has been open 60 days with no activity. Remove stale label or comment, or this will be closed in two weeks.' close-issue-message: 'This issue was automatically closed because it has been stalled for two weeks with no further activity.' stale-pr-message: 'This PR was automatically marked as stale because it has been open 60 days with no activity. Remove stale label or comment, or this will be closed in two weeks.' close-pr-message: 'This PR was automatically closed because it has been stalled for two weeks with no further activity.' days-before-stale: 60 days-before-close: 14 stale-issue-label: 'stale' stale-pr-label: 'stale' exempt-issue-labels: 'help wanted,in progress' exempt-pr-labels: 'help wanted,in progress' exempt-all-milestones: true QuantLib-1.44/.github/workflows/sync-org-repo.yml000066400000000000000000000014511526335424600220200ustar00rootroot00000000000000name: Sync quantlib organization repository on: release: types: [published] permissions: contents: write jobs: sync-org-repo: runs-on: ubuntu-latest if: ${{ github.event.release.prerelease == false }} steps: - uses: actions/checkout@v7 with: repository: quantlib/QuantLib token: ${{ secrets.ORG_PUSH_PAT }} ref: master path: quantlib - name: Setup second remote run: | cd quantlib git remote add src https://github.com/lballabio/QuantLib.git git fetch src - name: Push new commits env: GITHUB_TOKEN: ${{ secrets.ORG_PUSH_PAT }} run: | cd quantlib git push origin ${{ github.ref_name }} git merge --ff-only ${{ github.ref_name }} git push origin master QuantLib-1.44/.github/workflows/sync-qldefines.yml000066400000000000000000000017351526335424600222450ustar00rootroot00000000000000name: Keep qldefines.hpp.cfg in sync with original header on: push: branches-ignore: - 'dependabot/**' jobs: sync-files: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Check run: | cp ql/qldefines.hpp ql/qldefines.hpp.cfg sed -i -e 's|^#if defined(HAVE_CONFIG_H).*$|#if defined(QL_HAVE_CONFIG_H) // Dynamically created by cmake|g' ql/qldefines.hpp.cfg sed -i -e 's|^/\* install-hook \*/.*$|#cmakedefine QL_HAVE_CONFIG_H|g' ql/qldefines.hpp.cfg - uses: peter-evans/create-pull-request@v8 with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: sync-qldefine-${{ github.ref_name }} delete-branch: true commit-message: 'Sync qldefines.hpp.cfg with original header' title: 'Sync qldefines.hpp.cfg with original header' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> QuantLib-1.44/.github/workflows/test-times.yml000066400000000000000000000021601526335424600214100ustar00rootroot00000000000000name: Check test times on: push: branches: - '**' pull_request: jobs: check-test-times: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Cache uses: hendrikmuhs/ccache-action@v1.2.24 with: key: linux-ci-test-times-${{ github.ref }} restore-keys: | linux-ci-test-times-${{ github.ref }} linux-ci-test-times-refs/heads/master linux-ci-test-times- - name: Setup run: | sudo rm /etc/apt/sources.list.d/microsoft-prod.list sudo apt update sudo apt install -y libboost-dev autoconf automake libtool ccache - name: Build run: | ./autogen.sh ./configure --disable-static CC="ccache gcc" CXX="ccache g++" CXXFLAGS="-O2 -g0" make -j 4 - name: Run all tests run: | ./test-suite/quantlib-test-suite --logger=JUNIT,warning,all.xml:HRF,message - name: Save test times uses: actions/upload-artifact@v7 with: name: test-reports path: ./*.xml - name: Check test times run: | python ./tools/check_test_times.py QuantLib-1.44/.github/workflows/tidy.yml000066400000000000000000000021461526335424600202670ustar00rootroot00000000000000name: Apply clang-tidy fixes on: schedule: - cron: '0 0 * * 0' workflow_dispatch: jobs: check: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v7 - name: Setup run: | sudo apt-get update sudo apt-get install -y clang-tidy-20 libboost-dev - name: Check run: | cmake --preset linux-ci-build-with-clang-tidy cd build/linux-ci-build-with-clang-tidy cmake --build . -j1 - uses: peter-evans/create-pull-request@v8 if: ${{ always() }} with: token: ${{ secrets.MACHINE_ACCOUNT_PAT }} push-to-fork: ${{ vars.MACHINE_ACCOUNT }}/QuantLib branch: clang-tidy-fixes-${{ github.ref_name }} delete-branch: true commit-message: 'Automated fixes by clang-tidy' title: 'Automated fixes by clang-tidy' author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> body: | This is an automated PR generated by the [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action. Please review the changes before merging. QuantLib-1.44/.gitignore000066400000000000000000000041061526335424600151640ustar00rootroot00000000000000# Compilation artifacts __pycache__/ configure quantlib-config libtool aclocal.m4 autom4te.cache config.log config.status config/* !config/Makefile.am m4/*.m4 ql/config.hpp ql/config.hpp.in ql/stamp-h1 elc-stamp quantlib.elc quantlib.pc QuantLib.spec CMakeCache.txt CMakeUserPresets.json Docs/.time-stamp Docs/.time-stamp-html Docs/.time-stamp-online Docs/.time-stamp-man Docs/LICENSE.TXT Docs/reference-*/ Docs/html/ Docs/man/ Examples/*/bin/ Examples/*/build/ Examples/*/*.trs build/ install/ lib/ test-suite/bin/QuantLib-test-suite-*.manifest test-suite/build/ test-suite/*.trs # Build outputs **/x64/Debug **/x64/Release **/Debug **/Release **/bin/*.xml **/bin/*.manifest # Artifacts created in multiple directories Makefile Makefile.in unity.cpp unity_*.cpp testCaseCollection.xml .deps .libs *.la *.lo *.o *.so .build-stamp *.exe *.dll *.exp *.lib *.pdb *.ilk *~ *.ncb *.suo *.vcproj.*.user *.vcxproj.user *.VC.db *.VC.opendb *.log *.sdf *.opensdf *.pch *.idb *.ipch CMakeFiles *.cmake !cmake/*.cmake TAGS .dirstamp # Outputs Examples/BasketLosses/BasketLosses Examples/BermudanSwaption/BermudanSwaption Examples/Bonds/Bonds Examples/CallableBonds/CallableBonds Examples/CDS/CDS Examples/ConvertibleBonds/ConvertibleBonds Examples/CVAIRS/CVAIRS Examples/DiscreteHedging/DiscreteHedging Examples/EquityOption/EquityOption Examples/FittedBondCurve/FittedBondCurve Examples/FRA/FRA Examples/Gaussian1dModels/Gaussian1dModels Examples/GlobalOptimizer/GlobalOptimizer Examples/LatentModel/LatentModel Examples/MarketModels/MarketModels Examples/MultidimIntegral/MultidimIntegral Examples/MulticurveBootstrapping/MulticurveBootstrapping Examples/Replication/Replication Examples/Repo/Repo test-suite/quantlib-test-suite test-suite/quantlib-benchmark test-suite/bin/*.exp test-suite/bin/*.lib test-suite/bin/*.pdb test-suite/.unit_test_profile.txt # IDEs .vs .vscode .idea cmake-build-* nbproject .cproject # User customizations .dir-locals.el Build.props Directory.Build.props # clangd index cache and compilation database symlink # (generated via CMAKE_EXPORT_COMPILE_COMMANDS=ON) .cache/ compile_commands.json QuantLib-1.44/.lgtm.yml000066400000000000000000000002461526335424600147410ustar00rootroot00000000000000 path_classifiers: docs: - Docs - Examples test: - test-suite library: - tools queries: - exclude: cpp/fixme-comment QuantLib-1.44/.lsan.txt000066400000000000000000000000011526335424600147360ustar00rootroot00000000000000 QuantLib-1.44/.misspell-fixer.ignore000066400000000000000000000000221526335424600174130ustar00rootroot00000000000000^./ChangeLog.txt QuantLib-1.44/.msvc-analysis.ruleset000066400000000000000000000011671526335424600174540ustar00rootroot00000000000000 QuantLib-1.44/AGENTS.md000066400000000000000000000154041526335424600145020ustar00rootroot00000000000000# AGENTS.md — AI Agent Guide for QuantLib > How AI coding agents should work in this codebase. ## 1. Hard Constraints Two things a change has to respect, neither of which is obvious from the file it touches: - **C++17 is the baseline, not a floor to build on.** `CMakeLists.txt` defaults `CMAKE_CXX_STANDARD` to 17 and `configure.ac` checks for it. CI additionally compiles under newer language modes up to C++26, so a post-C++17 construct will pass some matrices and fail the default build. - **Three build systems are exercised in CI** — CMake, Autotools, *and* a Visual Studio solution. A new source file has to be registered in all of them, or `filelists.yml` fails on the pull request. See [`.agents/registering-new-files.md`](.agents/registering-new-files.md). ## 2. Task Guides Task-specific detail lives in [`.agents/`](.agents/README.md). Read one when the task calls for it: | Read this | When | | --- | --- | | [`.agents/architecture.md`](.agents/architecture.md) | You need the instrument/engine lifecycle, the recalculation triggers, the cash-flow hierarchy, or the design patterns. | | [`.agents/build-and-test.md`](.agents/build-and-test.md) | You need build options, configure flags, test invocations, or the CI workflow map. | | [`.agents/registering-new-files.md`](.agents/registering-new-files.md) | You add, rename, or remove a `.hpp`/`.cpp` file. | | [`.agents/extending-quantlib.md`](.agents/extending-quantlib.md) | You add a new instrument, term structure, calendar, or day counter. | | [`.agents/deprecation.md`](.agents/deprecation.md) | You deprecate, change, or remove a public API. | | [`.agents/maintaining-agent-docs.md`](.agents/maintaining-agent-docs.md) | You edit this file or anything in `.agents/`. | ## 3. Coding Conventions ### 3.1 Formatting and Includes Source of truth: `.clang-format`. - 4-space indent, no tabs. - 100-column limit. - Namespace indentation enabled. - Pointer/reference alignment: `T* p`, `T& x`. - Include order: local (`"..."`) → `` → `` → standard headers. ### 3.2 Naming and API Style - Types/classes: `PascalCase` - Functions/methods: `lowerCamelCase` - Data members: trailing underscore (`engine_`, `calculated_`) - Macros: `QL_UPPER_CASE` - Prefer `const` correctness and pass heavy objects by `const&`. ### 3.3 Memory and Ownership Use the QuantLib portability aliases in `ql/shared_ptr.hpp`: - `ext::shared_ptr` - `ext::make_shared(...)` - `ext::dynamic_pointer_cast(...)` Use `std::unique_ptr` for strict local ownership in implementations. Prefer `ext::make_shared(arg1, arg2)` to `ext::shared_ptr(new T(arg1, arg2))`, prefer `ext::make_shared(arg1, arg2)` to `ext::shared_ptr(new Derived(arg1, arg2))`, and prefer `auto x = ext::make_shared(arg1, arg2)` when declaring a variable. If some code that you're already working on can be improved as above, do it (even if `x` was previously declared as a `shared_ptr`). The same goes for `unique_ptr` and `make_unique`. ### 3.4 Error Handling Use the `ql/errors.hpp` macros, not raw `throw`/`assert`: - `QL_REQUIRE` - `QL_ENSURE` - `QL_FAIL` - `QL_ASSERT` ### 3.5 Header Pattern New headers should have: - The standard QuantLib license block - Doxygen `\file` and brief - Include guard `quantlib__hpp` - Self-contained includes ## 4. Build and Test — Quick Start ```bash cmake --preset linux-gcc-ninja-release cmake --build build/linux-gcc-ninja-release ./build/linux-gcc-ninja-release/test-suite/quantlib-test-suite \ --log_level=message ``` Build options, Autotools and MSVC instructions, targeted test invocations, and the CI workflow map are in [`.agents/build-and-test.md`](.agents/build-and-test.md). ## 5. High-Impact Pitfalls These mostly fail silently — a wrong number or undefined behavior rather than a build error, so no compiler or test will point at them for you. ### 5.1 Global Settings - `Settings::evaluationDate()` is global by default; with sessions enabled it becomes per-session/per-thread. - Test cases do **not** need their own `SavedSettings`. `TopLevelFixture` (`test-suite/toplevelfixture.hpp`) already holds one, so settings are restored after every case. ### 5.2 Lazy Evaluation Surprises `Instrument::NPV()` returns a cached result and re-runs the pricing engine only after an observed dependency has notified a change. Most of the non-obvious behavior in this library follows from that: - **Result accessors do not recompute on demand.** `NPV()` and its siblings return whatever the last `performCalculations()` cached. When a changed input does not move a price, the cause is almost always a missing notification, not a wrong formula. - **Anything a price depends on has to arrive as an observable.** A data member holding a value copied at construction will never invalidate the cache; take a `Handle` or a term-structure handle and `registerWith()` it. - Notification forwarding behavior can differ (default/per-object, compile-time macro influence). - Cycle handling can be silent unless `QL_THROW_IN_CYCLES` is enabled. - Misused `freeze()` can leave stale values. Before changing anything that touches caching, notification, or curve construction, read [`.agents/architecture.md`](.agents/architecture.md). ### 5.3 Handles and Lifetimes - `Handle` defaults to `registerAsObserver=true`. - If a handle does not own the pointee safely, observer callbacks can outlive valid memory. - Relinking a `RelinkableHandle` can trigger broad recalculation cascades. ### 5.4 Dates and Conventions - 30/360 variants differ materially. - Actual/Actual ISMA requires schedule context for irregular periods. - `Calendar::isEndOfMonth()` is business-day aware, not raw month-end. ### 5.5 Numerical Robustness - Prefer robust solvers (often Brent) when derivatives are unavailable or noisy. - Set realistic tolerances and max evaluations. - Validate implied-vol and calibration outputs against known references. ### 5.6 Type Alias Nuance `ql/types.hpp` aliases are macro-backed (`QL_REAL`, `QL_INTEGER`, `QL_BIG_INTEGER` in `ql/qldefines.hpp`) and configurable; do not hard-code assumptions beyond the defaults. ## 6. Validation Checklist Before finishing a change: - [ ] Build passes with no new warnings. - [ ] Relevant tests pass. - [ ] New behavior has tests. - [ ] New price inputs are observables the object registered with, and a test shows that changing one moves the result (see 5.2). - [ ] Build lists are updated where needed (`ql/*`, `test-suite/*`). - [ ] Visual Studio project/filter files are updated for new files (`QuantLib.vcxproj*`, `test-suite/testsuite.vcxproj*`). - [ ] Headers are self-contained. - [ ] Error handling uses `QL_*` macros. - [ ] Pointer types use `ext::shared_ptr` conventions where appropriate. - [ ] Numerical tolerances are justified for quant outputs. QuantLib-1.44/CITATION.cff000066400000000000000000000005551526335424600150720ustar00rootroot00000000000000cff-version: 1.2.0 message: If you use this software, please cite it using these metadata. title: "QuantLib: a free/open-source library for quantitative finance" authors: - name: "The QuantLib contributors" url: "https://www.quantlib.org/" type: software doi: 10.5281/zenodo.1440997 license: BSD-3-Clause repository-code: "https://github.com/lballabio/QuantLib" QuantLib-1.44/CLAUDE.md000066400000000000000000000000131526335424600144440ustar00rootroot00000000000000@AGENTS.md QuantLib-1.44/CMakeLists.txt000066400000000000000000000247521526335424600157450ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15.0) # For MSVC RUNTIME LIBRARY, need CMP0091=NEW and cmake 3.15+ cmake_policy(SET CMP0091 NEW) # Version info set(QUANTLIB_VERSION_MAJOR 1) set(QUANTLIB_VERSION_MINOR 44) set(QUANTLIB_VERSION_PATCH 0) set(QUANTLIB_VERSION ${QUANTLIB_VERSION_MAJOR}.${QUANTLIB_VERSION_MINOR}.${QUANTLIB_VERSION_PATCH}) # Project Info set(PACKAGE_NAME "QuantLib") set(PACKAGE_VERSION "1.44") set(PACKAGE_VERSION_HEX "0x014400f0") set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}") set(PACKAGE_BUGREPORT "https://github.com/lballabio/QuantLib/issues/") # Default build type for single-config generators (set this before project() command) # For multi-config generators, such as Visual Studio, use: cmake --build . --config= if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type for single-config generators" FORCE) endif() project(${PACKAGE_NAME} LANGUAGES CXX DESCRIPTION "The QuantLib C++ Library") # Path for package-local cmake modules set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) # Installation directories set(QL_INSTALL_BINDIR "bin" CACHE STRING "Installation directory for executables") set(QL_INSTALL_LIBDIR "lib" CACHE STRING "Installation directory for libraries") set(QL_INSTALL_INCLUDEDIR "include" CACHE STRING "Installation directory for headers") set(QL_INSTALL_EXAMPLESDIR "lib/QuantLib/examples" CACHE STRING "Installation directory for examples") set(QL_INSTALL_CMAKEDIR "lib/cmake/${PACKAGE_NAME}" CACHE STRING "Installation directory for CMake scripts") # Options option(QL_BUILD_EXAMPLES "Build examples" ON) option(QL_BUILD_TEST_SUITE "Build test suite" ON) option(QL_BUILD_FUZZ_TEST_SUITE "Build fuzz test suite" OFF) option(QL_ENABLE_OPENMP "Detect and use OpenMP" OFF) option(QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER "Enable the parallel unit test runner" OFF) option(QL_ENABLE_SESSIONS "Singletons return different instances for different sessions" OFF) option(QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN "Enable the thread-safe observer pattern" OFF) option(QL_ENABLE_TRACING "Tracing messages should be allowed" OFF) option(QL_ENABLE_DEFAULT_WARNING_LEVEL "Enable the default warning level to pass the ci pipeline" ON) option(QL_COMPILE_WARNING_AS_ERROR "Specify whether to treat warnings on compile as errors." OFF) option(QL_ERROR_FUNCTIONS "Error messages should include current function information" OFF) option(QL_ERROR_LINES "Error messages should include file and line information" OFF) option(QL_EXTRA_SAFETY_CHECKS "Extra safety checks should be performed" OFF) option(QL_HIGH_RESOLUTION_DATE "Enable date resolution down to microseconds" OFF) option(QL_THROW_IN_CYCLES "Throw an exception when a notification loop is detected" OFF) option(QL_FASTER_LAZY_OBJECTS "Cause lazy objects to forward just the first notification instead of every one" ON) option(QL_NULL_AS_FUNCTIONS "Enable the implementation of Null as template functions" OFF) option(QL_INSTALL_BENCHMARK "Install benchmark" ON) option(QL_INSTALL_EXAMPLES "Install examples" ON) option(QL_INSTALL_TEST_SUITE "Install test suite" ON) option(QL_TAGGED_LAYOUT "Library names use layout tags" ${MSVC}) option(QL_USE_CLANG_TIDY "Use clang-tidy when building" OFF) option(QL_USE_INDEXED_COUPON "Use indexed coupons instead of par coupons" OFF) option(QL_USE_STD_CLASSES "Enable all QL_USE_STD_ options" OFF) option(QL_USE_STD_SHARED_PTR "Use standard smart pointers instead of Boost ones" OFF) set(QL_EXTERNAL_SUBDIRECTORIES "" CACHE STRING "Optional list of external source directories to be added to the build (semicolon-separated)") # set -lpapi here set(QL_EXTRA_LINK_LIBRARIES "" CACHE STRING "Optional extra link libraries to add to QuantLib") # Require C++17 or higher if (NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) elseif(CMAKE_CXX_STANDARD LESS 17) message(FATAL_ERROR "Please specify CMAKE_CXX_STANDARD of 17 or higher") endif() if (NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() # Avoid use of compiler language extensions, i.e. -std=c++17 not -std=gnu++17 if (NOT DEFINED CMAKE_CXX_EXTENSIONS) set(CMAKE_CXX_EXTENSIONS FALSE) endif() # Convenience option to activate all STD options if (QL_USE_STD_CLASSES) set(QL_USE_STD_SHARED_PTR ON) endif() # Set the default warning level we use to pass the GitHub workflows if (QL_ENABLE_DEFAULT_WARNING_LEVEL) if (MSVC) # warning level 3 # There are also specific warnings disabled for MSCV in cmake/Platform.cmake. add_compile_options(-W3) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") # lots of warnings add_compile_options(-Wall -Wno-unknown-pragmas -Wno-array-bounds) endif() endif() # Treat warnings on compile as errors if (QL_COMPILE_WARNING_AS_ERROR) # all compiler warnings as errors if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") # since v3.24 cmake can set all compiler warnings as errors itself set(CMAKE_COMPILE_WARNING_AS_ERROR ON) else() # or set them manually if (MSVC) add_compile_options(-WX) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") add_compile_options(-Werror) endif() endif() endif() if (QL_USE_CLANG_TIDY) if (NOT DEFINED QL_CLANG_TIDY) set(QL_CLANG_TIDY clang-tidy) endif() if (NOT DEFINED QL_CLANG_TIDY_OPTIONS) set(QL_CLANG_TIDY_OPTIONS) endif() if (QL_CLANG_TIDY_OPTIONS) set(CMAKE_CXX_CLANG_TIDY "${QL_CLANG_TIDY};${QL_CLANG_TIDY_OPTIONS}") else() set(CMAKE_CXX_CLANG_TIDY "${QL_CLANG_TIDY}") endif() endif() # Project shared libs ON for UNIX if (NOT DEFINED BUILD_SHARED_LIBS) set(BUILD_SHARED_LIBS ${UNIX}) endif() # Boost static libs ON for MSVC if (NOT DEFINED Boost_USE_STATIC_LIBS) set(Boost_USE_STATIC_LIBS ${MSVC}) endif() # Boost static runtime ON for MSVC if (NOT DEFINED Boost_USE_STATIC_RUNTIME) set(Boost_USE_STATIC_RUNTIME ${MSVC}) endif() if (NOT DEFINED QL_BOOST_VERSION) # Boost 1.75.0 or greater required for compiling with C++20 if (CMAKE_CXX_STANDARD GREATER_EQUAL 20) set(QL_BOOST_VERSION 1.75.0) else() set(QL_BOOST_VERSION 1.58.0) endif() endif() if (CMAKE_CXX_COMPILER STREQUAL "icpx") find_package(IntelDPCPP REQUIRED) endif() find_package(Boost ${QL_BOOST_VERSION} REQUIRED) # Do not warn about Boost versions higher than 1.58.0 set(Boost_NO_WARN_NEW_VERSIONS ON) # Avoid using Boost auto-linking add_compile_definitions(BOOST_ALL_NO_LIB) if (QL_ENABLE_OPENMP) find_package(OpenMP REQUIRED) endif() # Prefer pthread flag as per https://cmake.org/cmake/help/latest/module/FindThreads.html if (NOT DEFINED THREADS_PREFER_PTHREAD_FLAG) set(THREADS_PREFER_PTHREAD_FLAG ON) endif() # Add Threads dependency when any of the threading features are enabled if (QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER OR QL_ENABLE_SESSIONS OR QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN) find_package(Threads REQUIRED) # Parallel test runner needs library rt on *nix for shm_open, etc. if (QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER AND UNIX AND NOT APPLE) find_library(RT_LIBRARY rt REQUIRED) set(QL_THREAD_LIBRARIES Threads::Threads ${RT_LIBRARY}) else() set(QL_THREAD_LIBRARIES Threads::Threads) endif() endif() # If available, use PIC for shared libs and PIE for executables if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() if (CMAKE_POSITION_INDEPENDENT_CODE) # cmake policy CMP0083: add PIE support if possible (need cmake 3.14) include(CheckPIESupported) check_pie_supported() endif() # Configure files set(QL_HAVE_CONFIG_H ON) set(QL_VERSION ${PACKAGE_VERSION}) set(QL_HEX_VERSION ${PACKAGE_VERSION_HEX}) configure_file(ql/config.hpp.cfg ql/config.hpp @ONLY) configure_file(ql/qldefines.hpp.cfg ql/qldefines.hpp @ONLY) # Generate quantlib-config # Define the variables to be substituted in the input file set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix "\${prefix}") set(includedir "\${prefix}/include") set(libdir "\${exec_prefix}/lib") if (QL_ENABLE_OPENMP) set(OPENMP_CXXFLAGS ${OpenMP_CXX_FLAGS}) endif() configure_file(quantlib-config.in quantlib-config @ONLY) configure_file(quantlib.pc.in quantlib.pc @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/quantlib-config TYPE BIN) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/quantlib.pc DESTINATION lib/pkgconfig) include(Platform) # Check for library name layout tagging if (QL_TAGGED_LAYOUT) if (${CMAKE_SIZEOF_VOID_P} EQUAL 8) set(DEBUG_POSTFIX "-x64") set(RELEASE_POSTFIX "-x64") endif() set(DEBUG_POSTFIX ${DEBUG_POSTFIX}-mt) set(RELEASE_POSTFIX ${RELEASE_POSTFIX}-mt) if (CMAKE_MSVC_RUNTIME_LIBRARY MATCHES ".*DLL$") set(DEBUG_POSTFIX ${DEBUG_POSTFIX}-gd) else() set(DEBUG_POSTFIX ${DEBUG_POSTFIX}-sgd) set(RELEASE_POSTFIX ${RELEASE_POSTFIX}-s) endif() set(CMAKE_DEBUG_POSTFIX ${DEBUG_POSTFIX}) set(CMAKE_RELEASE_POSTFIX ${RELEASE_POSTFIX}) set(CMAKE_RELWITHDEBINFO_POSTFIX ${RELEASE_POSTFIX}) set(CMAKE_MINSIZEREL_POSTFIX ${RELEASE_POSTFIX}) endif() include(CTest) # extension subdirectories if they exist (hook for external projects) foreach(extdir ${QL_EXTERNAL_SUBDIRECTORIES}) get_filename_component(name_without_dir "${extdir}" NAME) add_subdirectory(${extdir} ${name_without_dir}) endforeach() # Add subdirectories add_subdirectory(ql) if (QL_BUILD_EXAMPLES) add_subdirectory(Examples) endif() if (QL_BUILD_TEST_SUITE) add_subdirectory(test-suite) endif() if ('${CMAKE_CXX_COMPILER_ID}' MATCHES 'Clang' AND QL_BUILD_FUZZ_TEST_SUITE) add_subdirectory(fuzz-test-suite) endif() # CPack support (make package, make package_source) set(CPACK_PACKAGE_VERSION_MAJOR ${QUANTLIB_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${QUANTLIB_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${QUANTLIB_VERSION_PATCH}) set(CPACK_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION}) set(CPACK_GENERATOR "TGZ" "ZIP" "7Z") set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION}) set(CPACK_SOURCE_GENERATOR "TGZ" "ZIP" "7Z") set(CPACK_SOURCE_IGNORE_FILES "~$" "\\\\.swp$" "/[Bb]uild" "/\\\\.app" "/\\\\.cla" "/\\\\.cod" "/\\\\.git" "/\\\\.lgt" "/\\\\.mis") include(CPack) QuantLib-1.44/CMakePresets.json000066400000000000000000000173621526335424600164250ustar00rootroot00000000000000{ "version": 3, "configurePresets": [ { "name": "windows-base", "hidden": true, "binaryDir": "${sourceDir}/build/${presetName}", "architecture": { "value": "x64", "strategy": "external" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "windows-msvc-base", "hidden": true, "inherits": "windows-base", "cacheVariables": { "CMAKE_CXX_COMPILER": "cl.exe" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "intelliSenseMode": "windows-msvc-x64" } } }, { "name": "windows-clang-base", "hidden": true, "inherits": "windows-base", "cacheVariables": { "CMAKE_CXX_COMPILER": "clang-cl.exe" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "intelliSenseMode": "windows-clang-x64" } } }, { "name": "linux-base", "hidden": true, "binaryDir": "${sourceDir}/build/${presetName}", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, "vendor": { "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}" }, "microsoft.com/VisualStudioSettings/CMake/1.0": { "intelliSenseMode": "linux-gcc-x64", "hostOS": [ "Linux" ] } } }, { "name": "linux-gcc-base", "hidden": true, "inherits": "linux-base", "cacheVariables": { "CMAKE_CXX_COMPILER": "g++" } }, { "name": "linux-clang-base", "hidden": true, "inherits": "linux-base", "cacheVariables": { "CMAKE_CXX_COMPILER": "clang++" } }, { "name": "apple-arm64-base", "hidden": true, "binaryDir": "${sourceDir}/build/${presetName}", "architecture": { "value": "arm64", "strategy": "external" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" } }, { "name": "ninja", "hidden": true, "generator": "Ninja" }, { "name": "make", "hidden": true, "generator": "Unix Makefiles" }, { "name": "_release", "hidden": true, "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }, { "name": "_debug", "hidden": true, "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } }, { "name": "_relwithdebinfo", "hidden": true, "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo" } }, { "name": "linux-clang-debug", "inherits": [ "linux-clang-base", "make", "_debug" ] }, { "name": "linux-clang-release", "inherits": [ "linux-clang-base", "make", "_release" ] }, { "name": "linux-clang-relwithdebinfo", "inherits": [ "linux-clang-base", "make", "_relwithdebinfo" ] }, { "name": "linux-gcc-debug", "inherits": [ "linux-gcc-base", "make", "_debug" ] }, { "name": "linux-gcc-release", "inherits": [ "linux-gcc-base", "make", "_release" ] }, { "name": "linux-gcc-relwithdebinfo", "inherits": [ "linux-gcc-base", "make", "_relwithdebinfo" ] }, { "name": "linux-clang-ninja-debug", "inherits": [ "ninja", "linux-clang-debug" ] }, { "name": "linux-clang-ninja-release", "inherits": [ "ninja", "linux-clang-release" ] }, { "name": "linux-clang-ninja-relwithdebinfo", "inherits": [ "ninja", "linux-clang-relwithdebinfo" ] }, { "name": "linux-gcc-ninja-debug", "inherits": [ "ninja", "linux-gcc-debug" ] }, { "name": "linux-gcc-ninja-release", "inherits": [ "ninja", "linux-gcc-release" ] }, { "name": "linux-gcc-ninja-relwithdebinfo", "inherits": [ "ninja", "linux-gcc-relwithdebinfo" ] }, { "name": "linux-gcc-debug-with-clang-tidy", "inherits": [ "linux-gcc-debug" ], "cacheVariables": { "QL_CLANG_TIDY_OPTIONS": "-warnings-as-errors=*", "QL_USE_CLANG_TIDY": "ON" } }, { "name": "windows-clang-release", "inherits": [ "windows-clang-base", "ninja", "_release" ] }, { "name": "windows-clang-debug", "inherits": [ "windows-clang-base", "ninja", "_debug" ] }, { "name": "windows-clang-relwithdebinfo", "inherits": [ "windows-clang-base", "ninja", "_relwithdebinfo" ] }, { "name": "windows-msvc-release", "inherits": [ "windows-msvc-base", "ninja", "_release" ] }, { "name": "windows-msvc-debug", "inherits": [ "windows-msvc-base", "ninja", "_debug" ] }, { "name": "windows-msvc-relwithdebinfo", "inherits": [ "windows-msvc-base", "ninja", "_relwithdebinfo" ] }, { "name": "linux-ci-build-with-clang-tidy", "inherits": [ "linux-gcc-debug" ], "cacheVariables": { "BOOST_ROOT": "/usr", "CMAKE_UNITY_BUILD": "ON", "QL_CLANG_TIDY": "clang-tidy-20", "QL_CLANG_TIDY_OPTIONS": "-quiet;-fix", "QL_USE_CLANG_TIDY": "ON", "QL_USE_STD_CLASSES": "ON" } }, { "name": "linux-ci-build-with-nonstandard-options", "inherits": [ "linux-gcc-ninja-release" ], "cacheVariables": { "BOOST_ROOT": "/usr", "BUILD_SHARED_LIBS": false, "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", "QL_ENABLE_SESSIONS": "ON", "QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN": "ON", "QL_HIGH_RESOLUTION_DATE": "ON", "QL_FASTER_LAZY_OBJECTS": "OFF", "QL_THROW_IN_CYCLES": "ON", "QL_NULL_AS_FUNCTIONS": "ON", "QL_USE_INDEXED_COUPON": "ON", "QL_USE_STD_SHARED_PTR": "ON", "QL_COMPILE_WARNING_AS_ERROR": "ON" } }, { "name": "windows-ci-build-with-nonstandard-options", "inherits": [ "windows-msvc-release" ], "cacheVariables": { "CMAKE_UNITY_BUILD": "ON", "QL_ENABLE_SESSIONS": "ON", "QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN": "ON", "QL_HIGH_RESOLUTION_DATE": "ON", "QL_FASTER_LAZY_OBJECTS": "OFF", "QL_THROW_IN_CYCLES": "ON", "QL_NULL_AS_FUNCTIONS": "ON", "QL_USE_INDEXED_COUPON": "ON", "QL_USE_STD_SHARED_PTR": "ON", "QL_COMPILE_WARNING_AS_ERROR": "ON", "CMAKE_CXX_COMPILER_LAUNCHER": "sccache" } }, { "name": "apple-arm64-ninja-debug", "description": "Apple M series preset Debug", "inherits": [ "apple-arm64-base", "ninja", "_debug" ] }, { "name": "apple-arm64-ninja-release", "description": "Apple M series preset Release", "inherits": [ "apple-arm64-base", "ninja", "_release" ] }, { "name": "apple-arm64-ninja-relwithdebinfo", "description": "Apple M series preset RelWithDebInfo", "inherits": [ "apple-arm64-base", "ninja", "_relwithdebinfo" ] } ] } QuantLib-1.44/CONTRIBUTING.md000066400000000000000000000036311526335424600154270ustar00rootroot00000000000000 # Contributing to QuantLib Thanks for considering a contribution! We're looking forward to it. The preferred way to contribute is through a pull request on GitHub. This gives us some convenient tooling to look at your changes and provide feedback; also, opening a pull request triggers automated building and testing of your code and often gives you feedback before a human has a chance to look at it (the time we can give to the project is, unfortunately, limited). So, in short: get a GitHub account if you don't have it already and clone the repository at with the "Fork" button in the top right corner of the page. Check out your clone to your machine, code away, push your changes to your clone and submit a pull request: links to more detailed instructions are at the end of this file. A note: a pull request will show any new changes committed and pushed to the corresponding branch. For this reason, we strongly advise you to use a feature branch for your changes, instead of your `master` branch. This gives you the freedom to add unrelated changes to your master, and also gives the maintainers the freedom to push further changes to the branch. It's likely that we won't merge your code right away, and we'll ask for some changes instead. Don't be discouraged! That's normal; the library is complex, and thus it might take some time to become familiar with it and to use it in an idiomatic way. Again, thanks — and welcome! We're looking forward to your contributions. #### Useful links Instructions for forking a cloning a repository are at . More detailed instructions for creating pull requests are at . Finally, a basic guide to GitHub is at . GitHub also provides interactive learning at . QuantLib-1.44/ChangeLog.txt000066400000000000000000010334631526335424600155750ustar00rootroot00000000000000commit 55e05cbc31303e8a838ed9c3013aed4663b6f7dd Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Mon, 12 Oct 2026 06:28:24 +0000 Set version to 1.44 CMakeLists.txt | 4 ++-- configure.ac | 2 +- ql/version.hpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit 966a4cc101049ca36a888b2ce223aa96d3f3b22d Author: Luigi Ballabio Date: Sat, 3 Oct 2026 13:43:40 +0200 Add download links to generated prerelease .github/workflows/publish-release-candidate.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 28976268a65344ef07aaf89dca0ecc692aedbaf5 Author: Luigi Ballabio Date: Fri, 2 Oct 2026 22:24:19 +0200 Remove obsoleted macos-14 from CI builds .github/workflows/cmake-latest-runners.yml | 1 - .github/workflows/macos-nondefault.yml | 2 +- .github/workflows/macos.yml | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) commit 2d7a355e26f4ef2497ccbec3ceee7e5e6c63b1a3 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Fri, 2 Oct 2026 10:38:16 +0000 Update changelog ChangeLog.txt | 8644 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 5998 insertions(+), 2646 deletions(-) commit eb3f7423630f6504b76c77140f44e14a43a4a1a2 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Fri, 2 Oct 2026 10:38:15 +0000 Set version to 1.44-rc CMakeLists.txt | 4 ++-- configure.ac | 2 +- ql/version.hpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit db8beb5a39ede6fa8b78f5cddd72b6769c83138c Author: Luigi Ballabio Date: Fri, 2 Oct 2026 12:35:36 +0200 Update news and contributors Contributors.txt | 18 ++++++++++++++++++ News.md | 26 ++++++++++++++++++-------- 2 files changed, 36 insertions(+), 8 deletions(-) commit 2dca7d18c8ad46be2519e2d86eea7937ae06171a Author: Luigi Ballabio Date: Fri, 2 Oct 2026 10:58:57 +0200 Tweak parameters in optimization example Examples/GlobalOptimizer/GlobalOptimizer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a933b870bf8727e84ea29b12777d1447f103f748 Author: Luigi Ballabio Date: Thu, 1 Oct 2026 18:01:50 +0200 Fix test-case message test-suite/sofrfutures.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 62cbcf038b612ba51c3abe62c438612fecc38d40 Author: Luigi Ballabio Date: Thu, 1 Oct 2026 10:14:42 +0200 Add Clang 22 to CI builds .github/workflows/devenv-images.yml | 4 ++-- .github/workflows/linux-full-tests.yml | 5 +++++ .github/workflows/linux-nondefault.yml | 5 +++++ .github/workflows/linux.yml | 6 ++++++ 4 files changed, 18 insertions(+), 2 deletions(-) commit a0a8202964901390175f28572cc9d288c47665d9 Merge: fd7155965 61cf97827 Author: Luigi Ballabio Date: Thu, 1 Oct 2026 16:43:32 +0200 Return a zero implied standard deviation from Li-RS at intrinsic (#2838) commit fd7155965610519b7be7c210fd51ee99620c7b30 Merge: 822644bd2 73cd61477 Author: Luigi Ballabio Date: Thu, 1 Oct 2026 10:38:06 +0200 Keep the RS implied-standard-deviation approximation finite (#2835) commit 73cd6147711c7d242bf528d18b74e4f635626f2d Author: Abhayindia Date: Thu, 1 Oct 2026 07:52:52 +0900 Return the limiting standard deviation where the RS gamma is not finite ql/pricingengines/blackformula.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit fa313c178b4ff7566e12f47d1a2d9de7b9984dd8 Author: Abhayindia Date: Wed, 30 Sep 2026 03:42:13 +0900 Return a zero implied standard deviation from Li-RS at intrinsic ql/pricingengines/blackformula.cpp | 3 +++ test-suite/blackformula.cpp | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) commit 4b2e92da1bdf4f79943d07bb87d2856dba940917 Author: Abhayindia Date: Wed, 30 Sep 2026 02:31:23 +0900 Drop the explanatory comments ql/pricingengines/blackformula.cpp | 8 -------- test-suite/blackformula.cpp | 13 ------------- 2 files changed, 21 deletions(-) commit 3c7b1a340b5c35beb5e5e93ee1784a388ee6988d Author: Abhayindia Date: Mon, 28 Sep 2026 20:39:10 +0900 Keep the RS implied-standard-deviation approximation finite ql/pricingengines/blackformula.cpp | 20 ++++++++++++--- test-suite/blackformula.cpp | 51 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) commit 822644bd268d67089fa9b50dd8015ec62789831d Merge: 0291fa137 e8f198cd0 Author: Luigi Ballabio Date: Tue, 29 Sep 2026 15:59:43 +0200 Give Bjerksund-Stensland a value where beta is one (#2814) commit 0291fa13722cea77134b8b8112981b351d16470e Merge: aaf51ca29 faacf6b9a Author: Luigi Ballabio Date: Tue, 29 Sep 2026 15:40:28 +0200 Expand calendar test coverage (#2832) commit faacf6b9a1709fd40d53e0f64c53eefa360d87a7 Author: Luigi Ballabio Date: Tue, 29 Sep 2026 11:32:00 +0200 Moved a few tests around, avoided deprecation warning test-suite/calendars.cpp | 121 ++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 64 deletions(-) commit aaf51ca29c47566601e211db473f11c13ca3afb5 Merge: 43f1bff99 94ba36fab Author: Luigi Ballabio Date: Tue, 29 Sep 2026 11:12:57 +0200 Fix asset ITM probabilities at zero standard deviation (#2829) commit 43f1bff992338e62e1336bbb5c20d58a13bcbde3 Merge: cdaaaee30 83c54d0be Author: Luigi Ballabio Date: Tue, 29 Sep 2026 11:12:26 +0200 Keep Period comparison consistent for negative months and years (#2830) commit cdaaaee30b9e92ab9c8198c9663718e50e1565c7 Merge: 424b30aa8 4965224f0 Author: Luigi Ballabio Date: Mon, 28 Sep 2026 17:21:53 +0200 Add new Italian holiday (#2836) commit 4965224f02fd1f8da4ca19a02af04ce1d2d9461c Author: Luigi Ballabio Date: Mon, 28 Sep 2026 14:26:40 +0200 Add new Italian holiday ql/time/calendars/italy.cpp | 4 ++ ql/time/calendars/italy.hpp | 27 +++++-------- test-suite/calendars.cpp | 92 +++++++++++++++++++++++++++++---------------- 3 files changed, 74 insertions(+), 49 deletions(-) commit 424b30aa8fe59c0422214928ad7bf58b95610589 Merge: 489bf0989 2227d83e1 Author: Luigi Ballabio Date: Mon, 28 Sep 2026 12:20:24 +0200 Fix multiple-resets swap schedules and helper pillar (#2833) commit 489bf098915bc8786f626f43d864f1f88e6cf76a Merge: 292825c34 4b2555615 Author: Luigi Ballabio Date: Mon, 28 Sep 2026 10:09:06 +0200 Cms market calibration coverage (#2828) commit 292825c34984c44c6e0c468df50d6c028c1287f5 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 27 Sep 2026 02:07:24 +0000 Automated fixes by clang-tidy ql/experimental/barrieroption/perturbativebarrieroptionengine.cpp | 4 ++-- ql/time/daycounters/yearfractiontodate.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 9773e0fa1b4f2da7df29b3b0f2eb99b2f0371505 Merge: 0191ca7cc ddad9e4d6 Author: Luigi Ballabio Date: Mon, 28 Sep 2026 08:59:26 +0200 Added tanh-sinh Fourier integration (#2823) commit 2227d83e1836776b62f3beac65391ba314846d41 Author: Amit Kumar Jha <77675138+AIM-IT4@users.noreply.github.com> Date: Sun, 27 Sep 2026 11:10:55 +0000 Fix multiple-resets swap schedules and helper pillar MakeMultipleResetsSwap adjusted the end date before generating the schedules backwards from it. When the maturity fell on a holiday, all dates were shifted and a short stub was added at the start; with more than one reset per coupon this made construction fail, otherwise it silently mispriced the swap. The end date is now left unadjusted, as in MakeVanillaSwap, and the schedules adjust it. MultipleResetsSwapRateHelper also ignored that the last fixing forecasts the index until its own maturity, which can be after the end of the swap; the bootstrap then required the curve to extrapolate past the helper pillar. The latest relevant date now includes it, as in SwapRateHelper. ql/instruments/makemultipleresetsswap.cpp | 7 ++- .../yield/multipleresetsswaphelper.cpp | 16 +++++- test-suite/multipleresetsswap.cpp | 60 ++++++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) commit f1a8d0591fa404ba5dfa6d89cf292ba94a3413a4 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 27 Sep 2026 09:56:03 +0100 Expand calendar test coverage test-suite/calendars.cpp | 208 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 204 insertions(+), 4 deletions(-) commit 83c54d0be4bce0f2f8871dd7c1cf5f94daf5b9cd Author: WatchTree-19 <119982314+WatchTree-19@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:46:11 +0000 Keep Period comparison consistent for negative months and years daysMinMax returned (28n, 31n) and (365n, 366n) for n months or years, which puts the larger value first when n is negative. The undecidable check then never fired, so -1M < -30D and -30D < -1M were both true and equality built on operator< was wrong. Swap the bounds for negative lengths so negative periods behave like positive ones. ql/time/period.cpp | 7 +++++-- test-suite/period.cpp | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) commit 94ba36fab3c49034b65655db30c2b6bd6ed73482 Author: WatchTree-19 <119982314+WatchTree-19@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:46:10 +0000 Fix asset ITM probabilities at zero standard deviation blackFormulaAssetItmProbability compared forward and strike the wrong way round when stdDev is zero, so an in-the-money call returned 0 and an out-of-the-money one returned 1 (the cash version uses the right comparison). bachelierBlackFormulaAssetItmProbability returned the intrinsic value max(F - K, 0) instead of a probability. Both now return 1 or 0, the limit of the formulas as stdDev goes to zero. This also fixes optionletsDelta in the Black and Bachelier cap/floor engines at zero volatility. ql/pricingengines/blackformula.cpp | 8 +++---- test-suite/blackformula.cpp | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) commit 4b25556156bdb0363379d83e371f28914e2a29bf Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:55:05 +0100 Improve CMS market calibration coverage .../volatility/swaption/cmsmarketcalibration.cpp | 75 +++++++------ test-suite/cms.cpp | 119 +++++++++++++++++++++ 2 files changed, 160 insertions(+), 34 deletions(-) commit 9fb7bedf8778639fcad0fb8af7d3345b386e95f8 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:13:52 +0100 Fix lazy SABR cube recalibration .../volatility/swaption/sabrswaptionvolatilitycube.hpp | 2 ++ test-suite/cms.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+) commit ddad9e4d6bd5d763e9398c8972343707f594b772 Author: Klaus Spanderen Date: Fri, 25 Sep 2026 19:05:42 +0200 removed boilerplate code ql/math/integrals/fourierintegration.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 0191ca7cccbb62e538fd10f5c88f640594d4eaed Merge: 2021745ec 195ac3afe Author: Luigi Ballabio Date: Fri, 25 Sep 2026 17:02:14 +0200 Expose the instruments underlying three more rate helpers (#2824) commit 2021745ec80af92807a4581aa524b21fb48efd1f Merge: 3929b7581 aaed737ba Author: Luigi Ballabio Date: Fri, 25 Sep 2026 14:52:05 +0200 Check the payoff type in the FD vanilla engines (#2825) commit 3929b7581c28b2732d90505a3844748eb73ee252 Merge: 0da955c14 4cf3a2ce9 Author: Luigi Ballabio Date: Fri, 25 Sep 2026 10:04:54 +0200 Allow specifying fixedDayCount in OISRateHelper (#2821) commit 0da955c148e37dfcc323727d965db78c6365cec1 Merge: 65a571aef d20d44074 Author: Luigi Ballabio Date: Fri, 25 Sep 2026 10:01:48 +0200 yearfractiontodate: intraday support for "invertible" day counter (#2818) commit aaed737ba0d11a95b1df4c97c256c500275884df Author: Sergei Khorev Date: Fri, 25 Sep 2026 10:01:07 +0200 Check the payoff type in the FD vanilla engines FdBlackScholesVanillaEngine, FdHestonVanillaEngine and FdCIRVanillaEngine cast the payoff to StrikedTypePayoff and call strike() on the result without checking it. A OneAssetOption with any other payoff dereferences a null pointer: with boost::shared_ptr and the assertion handler this throws "Boost assertion failed: px != 0", and with std::shared_ptr it is undefined behaviour. Require a striked payoff, as the analytic engines already do. Co-Authored-By: Claude Opus 5.5 .../vanilla/fdblackscholesvanillaengine.cpp | 1 + ql/pricingengines/vanilla/fdcirvanillaengine.cpp | 2 ++ .../vanilla/fdhestonvanillaengine.cpp | 1 + test-suite/europeanoption.cpp | 42 ++++++++++++++++++++++ 4 files changed, 46 insertions(+) commit 195ac3afedd46b5c938b839b72bbcf5fe733a781 Author: Sergei Khorev Date: Fri, 25 Sep 2026 09:59:18 +0200 Expose the instruments underlying three more rate helpers SwapRateHelper, OISRateHelper, the basis-swap helpers and the cross-currency helpers already expose the instrument they reprice. BMASwapRateHelper and MultipleResetsSwapRateHelper keep their swap protected, and OvernightIndexFutureRateHelper keeps its future private, so client code cannot inspect the coupons or the averaging period the helper depends on, for example to find which past fixings a bootstrapped curve reads. Add swap() to the first two and future() to the latter, which also covers SofrFutureRateHelper. Co-Authored-By: Claude Opus 5.5 .../yield/multipleresetsswaphelper.hpp | 2 ++ .../yield/overnightindexfutureratehelper.hpp | 1 + ql/termstructures/yield/ratehelpers.hpp | 5 +++++ test-suite/multipleresetsswap.cpp | 19 ++++++++++++++++ test-suite/piecewiseyieldcurve.cpp | 25 ++++++++++++++++++++++ test-suite/sofrfutures.cpp | 17 +++++++++++++++ 6 files changed, 69 insertions(+) commit 65a571aef543483691f5d2ab14dd0df8a211aade Merge: c3fa9ec6c 6f1b14736 Author: Luigi Ballabio Date: Fri, 25 Sep 2026 09:57:15 +0200 Keep Gauss-Hermite and hyperbolic quadrature weights finite at high orders (#2819) commit c3fa9ec6c86666abd06fbc62cc1cc56bbf93a2d4 Merge: 302d025f2 83cb8932d Author: Luigi Ballabio Date: Fri, 25 Sep 2026 09:05:22 +0200 Codacy review (#2782) commit 83cb8932d0e92e8f4cc4f156321892ac9e5ae70e Author: LO <46852948+losterbr@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:02:18 +0100 Clean LatentModel alignment whitespace ql/experimental/math/latentmodel.hpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit e9eed39a1ba29b5c14f3f1672faf3f851fd80e5b Author: LO <46852948+losterbr@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:58:18 +0100 Align LatentModel default arguments ql/experimental/math/latentmodel.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5d311d3461365af6ed3c625374171ca1eaed6f7d Author: LO <46852948+losterbr@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:56:22 +0100 Finish constructor argument alignment ql/experimental/math/latentmodel.hpp | 17 +++++++++-------- ql/pricingengines/barrier/fdhestonrebateengine.hpp | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) commit 16e8c9bb86e19362dff9fabcbef8cada21dd3dca Author: LO <46852948+losterbr@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:45:16 +0100 Align multiline constructor arguments ql/cashflows/overnightindexedcoupon.hpp | 8 +-- ql/experimental/math/latentmodel.hpp | 12 ++-- ql/indexes/ibor/audlibor.hpp | 2 +- ql/indexes/ibor/bibor.cpp | 2 +- ql/indexes/ibor/chflibor.hpp | 4 +- ql/indexes/ibor/euribor.hpp | 4 +- ql/indexes/ibor/jpylibor.hpp | 4 +- ql/indexes/ibor/mosprime.hpp | 2 +- ql/indexes/ibor/pribor.hpp | 2 +- ql/indexes/ibor/seklibor.hpp | 2 +- ql/indexes/ibor/thbfix.hpp | 2 +- ql/indexes/ibor/tibor.hpp | 2 +- ql/indexes/ibor/usdlibor.hpp | 4 +- ql/indexes/ibor/wibor.hpp | 2 +- ql/indexes/swap/gbpliborswap.hpp | 2 +- ql/instruments/perpetualfutures.hpp | 8 +-- ql/math/interpolations/loginterpolation.hpp | 14 ++--- .../pathwisegreeks/vegabumpcluster.hpp | 2 +- .../shortrate/onefactormodels/coxingersollross.hpp | 8 +-- ql/models/shortrate/onefactormodels/hullwhite.hpp | 2 +- ql/models/shortrate/onefactormodels/vasicek.hpp | 4 +- ql/pricingengines/vanilla/jumpdiffusionengine.hpp | 4 +- ql/termstructures/globalbootstrap.hpp | 2 +- ql/termstructures/volatility/abcd.hpp | 6 +- .../volatility/equityfx/blackvoltermstructure.hpp | 24 ++++---- .../yield/nonlinearfittingmethods.hpp | 64 +++++++++++----------- 26 files changed, 96 insertions(+), 96 deletions(-) commit ea1ca12e7311813abc42353ab88e127b60ee9848 Author: Klaus Spanderen Date: Thu, 24 Sep 2026 20:36:23 +0200 removed redundant code in hestonprocess.cpp added tanhsinh Fourier integration ql/math/integrals/fourierintegration.cpp | 13 ++++- ql/math/integrals/fourierintegration.hpp | 3 +- .../integrals/gausslaguerrecosinepolynomial.hpp | 2 +- .../integrals/momentbasedgaussianpolynomial.hpp | 2 +- ql/processes/hestonprocess.cpp | 66 +--------------------- test-suite/hestonmodel.cpp | 52 ++++++++++++----- 6 files changed, 56 insertions(+), 82 deletions(-) commit 4cf3a2ce9484d7e95134fe0e0a4b6d831e4bdcab Author: Eugene Toder Date: Thu, 24 Sep 2026 11:44:27 -0400 Allow specifying fixedDayCount in OISRateHelper ql/termstructures/yield/oisratehelper.cpp | 13 +++++++++---- ql/termstructures/yield/oisratehelper.hpp | 7 +++++-- 2 files changed, 14 insertions(+), 6 deletions(-) commit 302d025f29155e060c74c708d173c49bedcb8ccc Merge: 54aba84fa c01e07c02 Author: Luigi Ballabio Date: Thu, 24 Sep 2026 13:19:45 +0200 Floor the QD+ and QD fixed-point American engines at the exercise value (#2813) commit 54aba84faf59ca8ca3162ae65e71ec112092fffa Merge: a4f435eb2 6efc1ed09 Author: Luigi Ballabio Date: Thu, 24 Sep 2026 13:18:48 +0200 Keep the binary barrier price finite at low volatility (#2816) commit a4f435eb23e67ec38416a8660ab950452c235a75 Merge: a57397f6d 9f041831b Author: Luigi Ballabio Date: Thu, 24 Sep 2026 13:17:53 +0200 Keep the digital American at-hit price finite and accurate at low volatility (#2815) commit a57397f6d962ea2e1a34fbaedb75e53b2780fe7b Author: Luigi Ballabio Date: Thu, 24 Sep 2026 13:16:23 +0200 Suggest modernizations to agents AGENTS.md | 7 +++++++ 1 file changed, 7 insertions(+) commit 608aea210bbf9e38f5ec2c507bace2da8bace8b9 Author: Klaus Spanderen Date: Thu, 24 Sep 2026 12:20:38 +0200 fixed visual studio warning ql/time/daycounters/yearfractiontodate.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit dc8360a33f35a624a12802ee778d827b342f5709 Merge: 20f6557f0 97414971a Author: Luigi Ballabio Date: Thu, 24 Sep 2026 09:40:41 +0200 Feature/improve perturbative barrier (#2807) commit 6f1b14736aec9369a61cf13c86b7a9320a51d221 Author: Abhayindia Date: Thu, 24 Sep 2026 13:06:37 +0900 Keep Gauss-Hermite and hyperbolic quadrature weights finite at high orders ql/math/integrals/gaussianorthogonalpolynomial.cpp | 8 +++++ ql/math/integrals/gaussianorthogonalpolynomial.hpp | 1 + ql/math/integrals/gaussianquadratures.cpp | 18 ++++++++++ test-suite/gaussianquadratures.cpp | 42 ++++++++++++++++++++++ 4 files changed, 69 insertions(+) commit 0ab3f766f5d92fdd7350e22e6482ac7f2e21b146 Merge: 3a1830ec2 c0c60a47e Author: Klaus Spanderen Date: Wed, 23 Sep 2026 22:30:59 +0200 Merge pull request #71 from klausspanderen/update-copyright-list-intraday_year_fraction_to_date Update copyright list in license commit c0c60a47ef595cb629b849c17e7df493faa00ef6 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:27:53 +0000 Update copyright list in license LICENSE.TXT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3a1830ec2bac2e59ff8d3a65eac08ef08eb07320 Author: Klaus Spanderen Date: Wed, 23 Sep 2026 22:27:05 +0200 avoid unnecessary includes ql/time/daycounters/yearfractiontodate.cpp | 3 +++ test-suite/daycounters.cpp | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) commit d404c6df72d404fbac2aecf1c5b75c2aec477482 Author: Klaus Spanderen Date: Wed, 23 Sep 2026 22:20:25 +0200 yearfractiontodate: intraday support for "invertible" day counter ql/time/daycounters/yearfractiontodate.cpp | 59 ++++++++++++++++++++++++---- ql/time/daycounters/yearfractiontodate.hpp | 1 + test-suite/basketoption.cpp | 6 +-- test-suite/daycounters.cpp | 63 +++++++++++++++++++++++++++++- 4 files changed, 118 insertions(+), 11 deletions(-) commit b461ec323dd1e82032e4fd03bdbb78ebc542d537 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:03:24 +0100 Remove added explicit-constructor suppressions ql/exercise.hpp | 3 --- ql/experimental/credit/loss.hpp | 1 - ql/experimental/math/levyflightdistribution.hpp | 1 - ql/instruments/bonds/btp.hpp | 2 -- ql/legacy/libormarketmodels/lmconstwrappercorrmodel.hpp | 1 - ql/math/abcdmathfunction.hpp | 1 - ql/math/copulas/alimikhailhaqcopula.hpp | 1 - ql/math/copulas/farliegumbelmorgensterncopula.hpp | 1 - ql/math/copulas/gumbelcopula.hpp | 1 - ql/math/copulas/plackettcopula.hpp | 1 - ql/math/distributions/bivariatenormaldistribution.hpp | 2 -- ql/math/distributions/gammadistribution.hpp | 1 - ql/math/distributions/normaldistribution.hpp | 6 ------ ql/math/distributions/poissondistribution.hpp | 3 --- ql/math/interpolations/flatextrapolation2d.hpp | 1 - ql/math/matrixutilities/getcovariance.hpp | 1 - ql/math/optimization/leastsquare.hpp | 1 - ql/math/randomnumbers/randomizedlds.hpp | 1 - ql/methods/montecarlo/multipath.hpp | 1 - ql/methods/montecarlo/path.hpp | 1 - ql/models/marketmodels/correlations/expcorrelations.hpp | 1 - ql/models/marketmodels/models/fwdtocotswapadapter.hpp | 2 -- ql/models/marketmodels/models/pseudorootfacade.hpp | 1 - ql/termstructures/volatility/smilesectionutils.hpp | 1 - ql/time/calendars/israel.hpp | 1 - 25 files changed, 37 deletions(-) commit 54c6d1119a6a127fcc090c0697f1551abe2ff7e6 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 23 Sep 2026 19:58:39 +0100 Align explicit constructor parameters ql/exercise.hpp | 2 +- ql/experimental/credit/defaultevent.hpp | 4 ++-- ql/math/abcdmathfunction.hpp | 9 +++++---- ql/math/optimization/leastsquare.hpp | 4 ++-- ql/math/randomnumbers/randomizedlds.hpp | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-) commit 97414971ae6b48d10f47e88a45ffa8f7aa55498a Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 23 Sep 2026 19:45:40 +0100 Run full-resolution barrier test test-suite/barrieroption.cpp | 3 --- 1 file changed, 3 deletions(-) commit 20f6557f09796b905c0281ed569967da292edd01 Merge: 261d556ab 1548c79a3 Author: Luigi Ballabio Date: Wed, 23 Sep 2026 16:51:55 +0200 Remove code duplication in Null (#2810) commit e8f198cd01dd9e6f45965ea51e4cebbee42b2092 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Tue, 22 Sep 2026 22:41:37 +0100 Give Bjerksund-Stensland a value where beta is one For a call with q = 0 and -sigma^2/2 <= r < 0, or a put with r = 0 and -sigma^2/2 <= q < 0, beta is exactly 1 and BInfinity = beta/(beta-1)*X is infinite, so I = B0 + (BInfinity - B0)*(1 - exp(ht)) is inf times zero and the value and every greek came back NaN. As beta tends to 1 that product tends to a = (bT + 2 sqrt(v)) B0, and the derivatives of I to the matching limits, which are used within 1e-8 of beta = 1. Where r = -sigma^2/2 exactly, rounding could also take beta's radicand below zero, so it is floored there. Values and greeks at beta = 1 now agree with those for a carry 1e-6 away. .../vanilla/bjerksundstenslandengine.cpp | 34 +++++++--- test-suite/americanoption.cpp | 74 ++++++++++++++++++++++ 2 files changed, 99 insertions(+), 9 deletions(-) commit 6efc1ed096bae6d18814309a11441f13d5e97cba Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Tue, 22 Sep 2026 23:16:34 +0100 Keep the binary barrier price finite at low volatility In AnalyticBinaryBarrierEngine, (H/S)^(2 mu) overflows at small variance while the N(y) it multiplies underflows, and the product came out NaN. It is finite, so it is now formed in logs, with the asymptotic tail of log N where N underflows. Over 2688 options with volatility from 10% down to 1e-6, master gives 364 NaN; with this change none, and every value is within 4e-12 relative of the same formula evaluated in 50-digit arithmetic. .../barrier/analyticbinarybarrierengine.cpp | 23 +++++++++ test-suite/binaryoption.cpp | 58 ++++++++++++++++++++++ 2 files changed, 81 insertions(+) commit 9f041831ba0eb8fd42390b35989e4906c3fb8af4 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Tue, 22 Sep 2026 23:10:59 +0100 Keep the digital American at-hit price finite and accurate at low volatility For an out-of-the-money call, AmericanPayoffAtHit took N(-d) as 1 - N(d), which cancels to zero once d is above about 8. That probability multiplies (H/S)^(mu+lambda), which is large at low volatility, so the lost term is not small: at 1% volatility, r 8%, q 3% and a barrier 5% above spot the value came out 5.1103 against 5.4765. N(-d) is now computed directly. At lower volatility the power overflows while the probability underflows, and the value and greeks were NaN. Where the power is not finite, the product is formed in logs, with the asymptotic tail of log N where N underflows. Over 1152 options with volatility from 10% down to 1e-6, values agree with the closed form evaluated in 50-digit arithmetic to 2.5e-7 relative, where master had 192 NaN and 10 values off by more than 1e-6. ql/pricingengines/americanpayoffathit.cpp | 41 +++++++++++++-- test-suite/digitaloption.cpp | 87 +++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 3 deletions(-) commit c01e07c0230563cde46f641c2c13ad4f20dcd718 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Tue, 22 Sep 2026 22:13:43 +0100 Floor the QD+ and QD fixed-point American engines at the exercise value Both engines price through QdPutCallParityEngine, which adds an approximated early-exercise premium to the European value. Deep in the money that sum can fall below intrinsic: over a grid of 9800 options, QD+ lands below it on 80 points, by up to 0.0195 on a ten-year call struck at 60, and the fixed-point engine on 181, by up to 0.00015. The holder can always exercise, so the value is now floored at the payoff. ql/pricingengines/vanilla/qdplusamericanengine.cpp | 3 ++ test-suite/americanoption.cpp | 53 ++++++++++++++++++++++ 2 files changed, 56 insertions(+) commit 261d556ab9eba9a968e2561212b893f6b1ab5c73 Merge: 12f80f371 f5b6d2123 Author: Luigi Ballabio Date: Wed, 23 Sep 2026 14:45:03 +0200 Floor the Ju approximation at the exercise value (#2812) commit 12f80f37181a4dc281865cac10bdc4ba087a49a5 Merge: 7cb155d6e f2071d436 Author: Luigi Ballabio Date: Wed, 23 Sep 2026 14:44:35 +0200 Report binomial greeks as not provided when a tree collapses to one price (#2811) commit 7cb155d6e4d1300b97a5221d00cfe40242b5e7c9 Merge: a9d0d36e1 dbee28eb1 Author: Luigi Ballabio Date: Wed, 23 Sep 2026 10:39:45 +0200 Feature/improve distribution coverage (#2805) commit a9d0d36e1188a48f6e047fb454b8ff171818cf32 Merge: 04e2e7d2a 21fb9e8fa Author: Luigi Ballabio Date: Wed, 23 Sep 2026 10:37:15 +0200 Feature/improve calendar coverage (#2806) commit 21fb9e8fab099cc255aba774da3b2b5b1ee379a0 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 22:41:31 +0100 Clean up calendar documentation ql/time/calendars/thailand.cpp | 2 +- ql/time/calendars/turkey.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 2233ca9d938e65e6f49f4dac0c47fdcb41bf412b Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 22:37:01 +0100 Expand calendar coverage tests test-suite/calendars.cpp | 221 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) commit f5b6d2123f05eeb07b956d3fa9fcd3a24a4f3952 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:14:26 +0100 Floor the Ju approximation at the exercise value Deep in the money at ordinary positive rates, the Ju-Zhong correction term can put the price below what immediate exercise pays. Over a grid of 6953 priced points, 9 fall below intrinsic, the widest by 0.1425 on a put struck at 140 with spot 100, r 3%, q 4%, vol 3% and ten years to expiry; Barone- Adesi-Whaley stays above intrinsic on the same grid. The engine now takes the exercise value there, with the delta and gamma of the exercise region, as it already does above the critical price. ql/pricingengines/vanilla/juquadraticengine.cpp | 8 ++++ test-suite/americanoption.cpp | 52 +++++++++++++++++++++++++ 2 files changed, 60 insertions(+) commit 3340b2b91721a303e18514840be3823ab750742b Author: LO <46852948+losterbr@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:03:08 +0100 Use double for normal distribution constant ql/math/distributions/normaldistribution.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 04cd237ad064203ad0aaa33e5fc03e757dad5692 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Tue, 22 Sep 2026 20:51:17 +0100 Optimize perturbative barrier calculations .../perturbativebarrieroptionengine.cpp | 34 +++++++++++++--------- 1 file changed, 20 insertions(+), 14 deletions(-) commit 44b9abe9eb3eff0cbb16b989101665a359539106 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Tue, 22 Sep 2026 20:45:07 +0100 Use double for perturbative barrier constants .../barrieroption/perturbativebarrieroptionengine.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit f2071d4367793ee0d3f15f0dff689196eeb1d7fa Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:42:00 +0500 Report binomial greeks as absent when the tree collapses to one price Leisen-Reimer deep in the money at low volatility gives a valid up probability but up and down factors that round to the same double, so every node of a step sits at one price and the greeks divide by zero. The rolled back value is unaffected. Set delta and gamma to Null() instead, which is what AnalyticEuropeanEngine already does for a theta it cannot compute, and theta with them, since blackScholesTheta would turn a null delta into a finite number. OneAssetOption then reports "delta not provided" rather than returning nan. ql/pricingengines/vanilla/binomialengine.hpp | 28 ++++++++++++------- test-suite/europeanoption.cpp | 40 ++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 9 deletions(-) commit 1548c79a38a8ab1285a30627b53331865b3d9281 Author: Eugene Toder Date: Tue, 22 Sep 2026 15:04:29 -0400 Remove code duplication in Null ql/utilities/null.hpp | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) commit 04e2e7d2adabc04c673f9b429a85f24cc43e05d0 Merge: d7498465f 4602d8c80 Author: Luigi Ballabio Date: Tue, 22 Sep 2026 18:17:20 +0200 Narrow the C++17 deprecation silencing to the macros boost needs (#2809) commit d7498465ffab6dbef1ee20ddb803f9db26b3932c Merge: cb8894faa 460090d45 Author: Luigi Ballabio Date: Tue, 22 Sep 2026 11:05:42 +0200 Fix NaN in GaussLaguerreIntegration for large orders (#2779) commit 9d2830e7a63ce3678980912466dd8b7736e2a3c4 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:54:42 +0100 Narrow second barrier probability scope ql/experimental/barrieroption/perturbativebarrieroptionengine.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 512241666b8c9ea74abd15b49e24bd710ffa506c Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:52:45 +0100 Narrow barrier probability variable scope ql/experimental/barrieroption/perturbativebarrieroptionengine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0eeeebb54c65f670f4b32be350ff06c7dcc39625 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:48:27 +0100 Address Codacy warnings .../barrieroption/perturbativebarrieroptionengine.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit cfe3d7e551740e8d9e316352069dc5883d43409b Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:45:44 +0100 Fix sanitizer build warnings .../barrieroption/perturbativebarrieroptionengine.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit d7144a57536033bd20d76ae6db72c0c74c6915cf Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 19:29:18 +0100 Guard slow perturbative barrier test test-suite/barrieroption.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 73751e34b60ef8a1a175d2908fb9bb57bbfe0fdf Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 19:17:45 +0100 Document distribution helper review .../barrieroption/perturbativebarrieroptionengine.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit b01a02d41b8638a80bf44c7d483a22aa12843b6f Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:56:26 +0100 Split perturbative barrier tests test-suite/barrieroption.cpp | 83 +++++++++++++------------------------------- 1 file changed, 25 insertions(+), 58 deletions(-) commit 09fd29a58d9bf4b6b8ef0f7b62ff26cf4061d239 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:49:03 +0100 Add fast perturbative order-2 smoke test test-suite/barrieroption.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 02d0855b0e23004e4ef7d0e0574db3a39621133f Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:48:59 +0100 Make perturbative integration resolution configurable .../barrieroption/perturbativebarrieroptionengine.cpp | 16 +++++++++------- .../barrieroption/perturbativebarrieroptionengine.hpp | 6 +++++- 2 files changed, 14 insertions(+), 8 deletions(-) commit 174d0636113e5ae522250131034f39bdd74972b5 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:35:33 +0100 Optimize perturbative barrier calculations .../perturbativebarrieroptionengine.cpp | 75 ++++++++++++---------- 1 file changed, 41 insertions(+), 34 deletions(-) commit fd40e8b2f684eecdb0d7d23f49db40abde0d22c1 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:23:54 +0100 Optimize perturbative barrier engine .../perturbativebarrieroptionengine.cpp | 550 ++++++++++----------- test-suite/barrieroption.cpp | 2 +- 2 files changed, 258 insertions(+), 294 deletions(-) commit cb8894faa0eba62416e6549c80dfc68f3ace871a Merge: a972b7478 94820b373 Author: Luigi Ballabio Date: Mon, 21 Sep 2026 11:00:05 +0200 Fix convexity term in CashFlows::basisPointValue (#2769) commit a972b7478c54b6bfe631fb5054c3c9929338e75a Merge: 1fefeb12a e342e7286 Author: Luigi Ballabio Date: Mon, 21 Sep 2026 08:41:24 +0200 Replace CMA-ES Eigendecomposition With a Cholesky Factorization (#2756) commit 1fefeb12a5c83b93dc816d4272e0f9f22fdaccdf Merge: 2ed185d34 15d946462 Author: Luigi Ballabio Date: Mon, 21 Sep 2026 08:40:11 +0200 Move the C26812 suppression into the analysis ruleset (#2804) commit 94820b3730300942b4dd5d971a835173a845de71 Author: uppalbh Date: Sun, 20 Sep 2026 21:36:57 -0400 Fix BPV tolerance variable name test-suite/bonds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dbee28eb18255b8abc1780607d0e308ac59c62fc Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 22:52:14 +0100 Make Student boundary test portable test-suite/distributions.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit b9136c15c1e65b994b8a2d644374e2f62fc74c2e Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 21:13:29 +0100 Clean up distribution header includes ql/math/distributions/bivariatenormaldistribution.hpp | 2 +- ql/math/distributions/bivariatestudenttdistribution.hpp | 1 - ql/math/distributions/chisquaredistribution.hpp | 1 - ql/math/distributions/gammadistribution.hpp | 1 - ql/math/distributions/studenttdistribution.hpp | 1 - 5 files changed, 1 insertion(+), 5 deletions(-) commit 304f7481539f8d12f04716056dee5f4a9da47efc Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 21:08:39 +0100 Add chi-square distribution coverage tests test-suite/distributions.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 46e8e691a0980000c77ebadf2e8584b72bf851de Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:39:46 +0100 Add Student distribution coverage tests test-suite/distributions.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 4b9bcd349920e5c8917b334e1ee170df974a5161 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:33:45 +0100 Add cumulative gamma distribution tests test-suite/functions.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit 245e530f0d0cfc29648ce0d4bb0dece03218e81e Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 18:28:09 +0100 Add binomial distribution coverage tests test-suite/distributions.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) commit 02e8826163329c418fbfc232db5ac52080dc0e4f Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:31:09 +0100 Fix Poisson inverse CDF at zero ql/math/distributions/poissondistribution.hpp | 2 ++ test-suite/distributions.cpp | 37 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) commit 26f6c8b27d564f3e750b5ca7680dc2320984dfce Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 16:34:18 +0100 Expand bivariate Student distribution tests test-suite/distributions.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit c715c2f15cf135f6e1d9c043d078042e11e05be7 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 19 Sep 2026 15:39:24 +0100 Validate bivariate Student distribution parameters ql/math/distributions/bivariatestudenttdistribution.cpp | 6 +++++- test-suite/distributions.cpp | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) commit 2ed185d34e7547098d29f675243cc29e8bc940c1 Merge: 24fe67ee0 8378bafac Author: Luigi Ballabio Date: Fri, 18 Sep 2026 16:59:44 +0200 Compile the sources as UTF-8 instead of suppressing C4819 (#2803) commit 24fe67ee07927ff320e5cb1c318429c74e5d2578 Merge: b8744affb 428f70f5a Author: Luigi Ballabio Date: Fri, 18 Sep 2026 16:05:02 +0200 Pin ccache-action to v1.2.24 to stop the Node 20 deprecation warning (#2802) commit 428f70f5ae37b70808dabe915d2dccb1445d6204 Author: RalfKonrad Date: Fri, 18 Sep 2026 14:53:45 +0200 Pin ccache-action to v1.2.24 to stop the Node 20 deprecation warning The floating v1.2 tag still points at a commit whose action.yml declares `runs.using: "node20"`, so every job using it ends with ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: hendrikmuhs/ccache-action@v1.2 v1.2.24 declares node24. Pinning the patch level also restores Dependabot coverage, which never offered this bump because v1.2 and v1.2.24 share the same major.minor. Co-Authored-By: Claude Opus 5 (1M context) .github/workflows/cmake-latest-runners.yml | 2 +- .github/workflows/cmake.yml | 12 ++++++------ .github/workflows/headers.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/macos.yml | 2 +- .github/workflows/test-times.yml | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) commit b8744affb015a5286136e5df2042d75a2f4f8d86 Merge: 72810e63d 978056222 Author: Luigi Ballabio Date: Thu, 17 Sep 2026 18:29:57 +0200 Fix the unsafe CRT call sites and stop suppressing C4996 (#2801) commit 97805622266f60a252103a126398f6954a3e059d Author: RalfKonrad Date: Thu, 17 Sep 2026 17:01:53 +0200 Retry across midnight instead of relaxing the todaysDate check The +/-1 day slack made the cross-check against boost::gregorian::day_clock nearly vacuous: it would also pass if Date::todaysDate() were genuinely off by a day. Re-read both clocks once on mismatch and then compare strictly, as suggested in review. Co-Authored-By: Claude Opus 5 (1M context) test-suite/dates.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) commit 8827f2dd1113bb4282673e43e4c075c6d65257e6 Author: RalfKonrad Date: Wed, 16 Sep 2026 19:32:47 +0200 Also silence the deprecated std::allocator members Narrowing the C++17 deprecation silencing uncovered a second thing boost needs it for: older boost::unordered reads std::allocator::is_always_equal, deprecated in C++17. The Windows build against boost 1.77 reported it from test-suite/timeseries.cpp, which instantiates TimeSeries with a boost::unordered_map to exercise the custom-container support. Name that deprecation as well. Both suppressions stay targeted, so a deprecated construct introduced in QuantLib itself would still be reported. Co-Authored-By: Claude Opus 5 (1M context) .ci/VS2019.alt.props | 2 +- .ci/VS2022.alt.props | 2 +- .ci/VS2026.alt.props | 2 +- Examples/AsianOption/AsianOption.vcxproj | 16 ++++++++-------- Examples/BasketLosses/BasketLosses.vcxproj | 16 ++++++++-------- Examples/BermudanSwaption/BermudanSwaption.vcxproj | 16 ++++++++-------- Examples/Bonds/Bonds.vcxproj | 16 ++++++++-------- Examples/CDS/CDS.vcxproj | 16 ++++++++-------- Examples/CVAIRS/CVAIRS.vcxproj | 16 ++++++++-------- Examples/CallableBonds/CallableBonds.vcxproj | 16 ++++++++-------- Examples/ConvertibleBonds/ConvertibleBonds.vcxproj | 16 ++++++++-------- Examples/DiscreteHedging/DiscreteHedging.vcxproj | 16 ++++++++-------- Examples/EquityOption/EquityOption.vcxproj | 16 ++++++++-------- Examples/FRA/FRA.vcxproj | 16 ++++++++-------- Examples/FittedBondCurve/FittedBondCurve.vcxproj | 16 ++++++++-------- Examples/Gaussian1dModels/Gaussian1dModels.vcxproj | 16 ++++++++-------- Examples/GlobalOptimizer/GlobalOptimizer.vcxproj | 16 ++++++++-------- Examples/LatentModel/LatentModel.vcxproj | 16 ++++++++-------- Examples/MarketModels/MarketModels.vcxproj | 16 ++++++++-------- .../MulticurveBootstrapping.vcxproj | 16 ++++++++-------- Examples/MultidimIntegral/MultidimIntegral.vcxproj | 16 ++++++++-------- Examples/Replication/Replication.vcxproj | 16 ++++++++-------- Examples/Repo/Repo.vcxproj | 16 ++++++++-------- QuantLib.vcxproj | 16 ++++++++-------- cmake/Platform.cmake | 19 ++++++++++++------- test-suite/testsuite.vcxproj | 16 ++++++++-------- 26 files changed, 191 insertions(+), 186 deletions(-) commit 5f138f37fb4f61b00cf9e80a41df12d037ed8cb5 Author: RalfKonrad Date: Wed, 16 Sep 2026 18:59:42 +0200 Remove the obsolete C4819 pragmas from the currency headers These six headers each wrapped their whole body in a C4819 suppression. They were inert in the cmake build to begin with -- QL_PATCH_MSVC is defined only in ql/config.msvc.hpp, which a cmake build never includes -- and four of the six files contain no non-ASCII characters at all. With /utf-8 now set in both build systems the remaining two are redundant as well. Co-Authored-By: Claude Opus 5 (1M context) ql/currencies/africa.hpp | 9 --------- ql/currencies/america.hpp | 9 --------- ql/currencies/asia.hpp | 9 --------- ql/currencies/crypto.hpp | 9 --------- ql/currencies/europe.hpp | 9 --------- ql/currencies/oceania.hpp | 9 --------- 6 files changed, 54 deletions(-) commit f523a21d62e87850f8a06a9836d74b827dc5002c Author: RalfKonrad Date: Wed, 16 Sep 2026 19:00:18 +0200 Move the C26812 suppression into the analysis ruleset C26812 ("Prefer 'enum class' over 'enum'") is a code-analysis diagnostic: cl never emits it without /analyze, and the only build that runs /analyze is the scheduled Microsoft C++ Code Analysis workflow, which already passes .msvc-analysis.ruleset. Suppressing it through the ordinary compile options and through an installed public header meant every MSVC build -- and every downstream translation unit including -- carried a suppression for a diagnostic it would never see. Put it where the other two suppressed analysis rules already live. The rule itself stays suppressed: the 167 unscoped enums are public API, and several of them rely on the implicit conversion to int, so changing them is not an option. Co-Authored-By: Claude Opus 5 (1M context) .msvc-analysis.ruleset | 1 + cmake/Platform.cmake | 5 +---- ql/config.msvc.hpp | 5 ----- 3 files changed, 2 insertions(+), 9 deletions(-) commit 642637e667a03a4580c02c1e627a77a2b9f04995 Author: RalfKonrad Date: Wed, 16 Sep 2026 19:00:58 +0200 Narrow the C++17 deprecation silencing to std::iterator _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS was introduced for one concrete reason -- older boost::ublas derives its iterators from the deprecated std::iterator -- and was widened to the blanket form only for parity with the vcxproj files. The blanket version also hides any deprecated construct we introduce ourselves, of which there are currently none. Go back to the targeted macro in both build systems. It stays unconditional: the supported boost versions start at 1.58, and the Visual Studio matrix still builds against 1.77, where ublas has not yet been fixed. Co-Authored-By: Claude Opus 5 (1M context) .ci/VS2019.alt.props | 2 +- .ci/VS2022.alt.props | 2 +- .ci/VS2026.alt.props | 2 +- Examples/AsianOption/AsianOption.vcxproj | 16 ++++++++-------- Examples/BasketLosses/BasketLosses.vcxproj | 16 ++++++++-------- Examples/BermudanSwaption/BermudanSwaption.vcxproj | 16 ++++++++-------- Examples/Bonds/Bonds.vcxproj | 16 ++++++++-------- Examples/CDS/CDS.vcxproj | 16 ++++++++-------- Examples/CVAIRS/CVAIRS.vcxproj | 16 ++++++++-------- Examples/CallableBonds/CallableBonds.vcxproj | 16 ++++++++-------- Examples/ConvertibleBonds/ConvertibleBonds.vcxproj | 16 ++++++++-------- Examples/DiscreteHedging/DiscreteHedging.vcxproj | 16 ++++++++-------- Examples/EquityOption/EquityOption.vcxproj | 16 ++++++++-------- Examples/FRA/FRA.vcxproj | 16 ++++++++-------- Examples/FittedBondCurve/FittedBondCurve.vcxproj | 16 ++++++++-------- Examples/Gaussian1dModels/Gaussian1dModels.vcxproj | 16 ++++++++-------- Examples/GlobalOptimizer/GlobalOptimizer.vcxproj | 16 ++++++++-------- Examples/LatentModel/LatentModel.vcxproj | 16 ++++++++-------- Examples/MarketModels/MarketModels.vcxproj | 16 ++++++++-------- .../MulticurveBootstrapping.vcxproj | 16 ++++++++-------- Examples/MultidimIntegral/MultidimIntegral.vcxproj | 16 ++++++++-------- Examples/Replication/Replication.vcxproj | 16 ++++++++-------- Examples/Repo/Repo.vcxproj | 16 ++++++++-------- QuantLib.vcxproj | 16 ++++++++-------- cmake/Platform.cmake | 9 +++++++-- test-suite/testsuite.vcxproj | 16 ++++++++-------- 26 files changed, 186 insertions(+), 181 deletions(-) commit 1582b9b007a73a6dcfcf10b6a321e4ff20905d7d Author: RalfKonrad Date: Wed, 16 Sep 2026 18:58:21 +0200 Compile the sources as UTF-8 instead of suppressing C4819 The sources are UTF-8: author names in the licence headers, mathematical symbols in the documentation. 42 files use characters outside Latin-1, so C4819 is reachable even on a Western code page, and /wd4819 was hiding it rather than resolving it. Tell the compiler the source encoding instead -- /utf-8 in the cmake build, and the same option in QuantLib.props, which all 22 Visual Studio projects already import, so it takes one entry rather than one per configuration. The preceding commit removed the last non-ASCII narrow string literals, so setting the execution character set alongside the source one does not change the generated code. Co-Authored-By: Claude Opus 5 (1M context) QuantLib.props | 7 +++++++ cmake/Platform.cmake | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) commit f90b482816b0e3e6dd0bce058701c3612ab3f2e1 Author: RalfKonrad Date: Wed, 16 Sep 2026 18:57:43 +0200 Write the remaining non-ASCII string literals in ASCII Three messages held non-ASCII characters. MSVC decodes the UTF-8 source bytes as the active ANSI code page, so "Pade" already reached Error::what() mangled; the accent was a misspelling in any case (the name is Pade, with an acute accent, not a grave one). With these gone the library has no non-ASCII narrow string literals at all, which makes the execution-charset half of the /utf-8 flag added next a provable no-op. Co-Authored-By: Claude Opus 5 (1M context) ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 4 ++-- test-suite/piecewiseblackvariancesurface.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 72810e63dfc158cfd5d5a8220052db0d950538ae Merge: 60b41ace7 dabb7b914 Author: Luigi Ballabio Date: Thu, 17 Sep 2026 12:49:35 +0200 Rework check in fitted bond curve tests (#2778) commit 75df20a7f12a4230ae91ec4c66be9a1535f0c4dc Author: RalfKonrad Date: Wed, 16 Sep 2026 18:57:07 +0200 Stop silencing the CRT deprecation warnings With Date::todaysDate() and the parallel test runner fixed, nothing in the tree calls a CRT function that MSVC considers unsafe, so the blanket suppression is no longer needed: drop _CRT_SECURE_NO_WARNINGS from the cmake build and _CRT_SECURE_NO_DEPRECATE from the Visual Studio projects. _SCL_SECURE_NO_DEPRECATE is a different warning family (unchecked iterators) and is left alone. Both CI paths compile with warnings as errors, so a missed call site fails the build rather than passing quietly. Co-Authored-By: Claude Opus 5 (1M context) Examples/AsianOption/AsianOption.vcxproj | 16 ++++++++-------- Examples/BasketLosses/BasketLosses.vcxproj | 16 ++++++++-------- Examples/BermudanSwaption/BermudanSwaption.vcxproj | 16 ++++++++-------- Examples/Bonds/Bonds.vcxproj | 16 ++++++++-------- Examples/CDS/CDS.vcxproj | 16 ++++++++-------- Examples/CVAIRS/CVAIRS.vcxproj | 16 ++++++++-------- Examples/CallableBonds/CallableBonds.vcxproj | 16 ++++++++-------- Examples/ConvertibleBonds/ConvertibleBonds.vcxproj | 16 ++++++++-------- Examples/DiscreteHedging/DiscreteHedging.vcxproj | 16 ++++++++-------- Examples/EquityOption/EquityOption.vcxproj | 16 ++++++++-------- Examples/FRA/FRA.vcxproj | 16 ++++++++-------- Examples/FittedBondCurve/FittedBondCurve.vcxproj | 16 ++++++++-------- Examples/Gaussian1dModels/Gaussian1dModels.vcxproj | 16 ++++++++-------- Examples/GlobalOptimizer/GlobalOptimizer.vcxproj | 16 ++++++++-------- Examples/LatentModel/LatentModel.vcxproj | 16 ++++++++-------- Examples/MarketModels/MarketModels.vcxproj | 16 ++++++++-------- .../MulticurveBootstrapping.vcxproj | 16 ++++++++-------- Examples/MultidimIntegral/MultidimIntegral.vcxproj | 16 ++++++++-------- Examples/Replication/Replication.vcxproj | 16 ++++++++-------- Examples/Repo/Repo.vcxproj | 16 ++++++++-------- QuantLib.vcxproj | 16 ++++++++-------- cmake/Platform.cmake | 3 --- test-suite/testsuite.vcxproj | 16 ++++++++-------- 23 files changed, 176 insertions(+), 179 deletions(-) commit 7df1ec75c927d6c3fcb4edc33b3c36e06ac977f4 Author: RalfKonrad Date: Wed, 16 Sep 2026 18:56:58 +0200 Avoid std::strncpy in the parallel unit test runner std::strncpy is the second and last thing in the tree that makes MSVC emit C4996. std::string::copy does the same job, needs no , and is not deprecated anywhere. While here, zero-initialize RuntimeLog: the whole struct is sent over an interprocess message queue, so the unused tail of testCaseName was shipping stack garbage. The explicit terminator is still needed because the struct is reused across iterations. Co-Authored-By: Claude Opus 5 (1M context) test-suite/paralleltestrunner.hpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 983cfd244b5ad68fae2fa7b4a6de2679b7947a24 Author: RalfKonrad Date: Wed, 16 Sep 2026 18:52:34 +0200 Use a reentrant localtime in Date::todaysDate() std::localtime returns a pointer into a shared static buffer, so it is neither reentrant nor safe to call from more than one thread, and MSVC flags it as deprecated (C4996) -- which is the only reason the cmake build defines _CRT_SECURE_NO_WARNINGS. Route the conversion through a helper that uses localtime_s on MSVC and localtime_r where Boost reports the reentrant POSIX functions to be available, and keeps std::localtime, with the warning locally suppressed, for the remaining platforms (MinGW among them). No new dependency: the detection macro comes from boost/date_time, already included here. This also removes a latent null-pointer dereference: the return value of std::localtime was used unchecked. Both failure paths now return a null Date, as the failing-std::time path already did. Add a test case for Date::todaysDate(), which had none. Co-Authored-By: Claude Opus 5 (1M context) ql/time/date.cpp | 38 ++++++++++++++++++++++++++++++++++++-- test-suite/dates.cpp | 20 ++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) commit e189b5b5c13a6196690a4bbc549014322d67b556 Author: RalfKonrad Date: Wed, 16 Sep 2026 18:47:50 +0200 Document why C4267 is suppressed in two places /wd4267 in cmake/Platform.cmake and the #pragma in ql/config.msvc.hpp look like a duplication, but they cover disjoint build systems: a cmake build sets QL_HAVE_CONFIG_H and therefore includes the generated ql/config.hpp, never config.msvc.hpp. Say so in both files, and note that the missing push/pop around the pragma is deliberate. No functional change. Co-Authored-By: Claude Opus 5 (1M context) cmake/Platform.cmake | 9 ++++++++- ql/config.msvc.hpp | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) commit 60b41ace76cbf5d5309a6d819030da13d644c4cd Merge: 8fe6cfc7e f05b0587e Author: Luigi Ballabio Date: Thu, 17 Sep 2026 09:07:50 +0200 Fix modifiedBesselFunction_k at integer order and large argument (#2800) commit f05b0587e161881d11cb2800e7e5a41aed4f8c2f Author: Abhayindia Date: Thu, 17 Sep 2026 08:11:58 +0800 Fix modifiedBesselFunction_k at integer order and large argument ql/math/modifiedbessel.cpp | 109 +++++++++++++++++++++++++++++++++++++++++++++ test-suite/functions.cpp | 71 ++++++++++++++++++++++++++--- 2 files changed, 173 insertions(+), 7 deletions(-) commit 34324c84fcbac2b07a04dffd25f7db1714ef3c22 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 16 Sep 2026 20:47:47 +0100 Review implicit constructor annotations ql/exercise.hpp | 10 ++++++--- ql/experimental/credit/loss.hpp | 4 +++- ql/experimental/math/levyflightdistribution.hpp | 5 +++-- ql/instruments/bonds/btp.hpp | 8 ++++++-- .../libormarketmodels/lmconstwrappercorrmodel.hpp | 4 +++- ql/math/abcdmathfunction.hpp | 4 +++- ql/math/copulas/alimikhailhaqcopula.hpp | 4 +++- ql/math/copulas/farliegumbelmorgensterncopula.hpp | 4 +++- ql/math/copulas/gumbelcopula.hpp | 4 +++- ql/math/copulas/plackettcopula.hpp | 4 +++- .../distributions/bivariatenormaldistribution.hpp | 8 ++++++-- ql/math/distributions/gammadistribution.hpp | 4 +++- ql/math/distributions/normaldistribution.hpp | 24 ++++++++++++++++------ ql/math/distributions/poissondistribution.hpp | 12 ++++++++--- ql/math/interpolations/flatextrapolation2d.hpp | 4 +++- ql/math/matrixutilities/getcovariance.hpp | 4 +++- ql/math/optimization/leastsquare.hpp | 4 +++- ql/math/randomnumbers/randomizedlds.hpp | 4 +++- ql/methods/montecarlo/multipath.hpp | 3 ++- ql/methods/montecarlo/path.hpp | 3 ++- .../marketmodels/correlations/expcorrelations.hpp | 4 +++- .../marketmodels/models/fwdtocotswapadapter.hpp | 7 +++++-- ql/models/marketmodels/models/pseudorootfacade.hpp | 4 +++- ql/pricingengines/vanilla/mcdigitalengine.hpp | 2 +- .../credit/interpolatedhazardratecurve.hpp | 4 ++-- ql/termstructures/volatility/smilesectionutils.hpp | 4 +++- ql/time/calendars/israel.hpp | 3 ++- 27 files changed, 108 insertions(+), 41 deletions(-) commit 8fe6cfc7ec7b7a7fa767fa6ad16f0888c796f101 Merge: ef7143566 b1eca5dca Author: Luigi Ballabio Date: Wed, 16 Sep 2026 13:53:47 +0200 Funding helper (#2746) commit b1eca5dca39bb79865c4f89395d1491ed99967b8 Author: kp9991 Date: Wed, 16 Sep 2026 20:14:22 +1000 Removing SavedSettings test-suite/overnightindexedfundingratehelper.cpp | 3 --- 1 file changed, 3 deletions(-) commit ef7143566b584c45f62c16fde5318d33a863cc9b Merge: 858d12aa8 2f7c4e331 Author: Luigi Ballabio Date: Wed, 16 Sep 2026 12:00:53 +0200 Saturate ErrorFunction to exactly 1 for |x| >= 6 (#2799) commit 858d12aa8f0727dcc3a7e0b9f7a8bcdb031505ed Merge: 3d2144280 2ffade2fc Author: Luigi Ballabio Date: Wed, 16 Sep 2026 10:26:34 +0200 Add Philippines calendar (#2789) commit 3d21442800d0ab8675de3550afe2e4eddbd0c869 Merge: 87cdeef7f ecef10a40 Author: Luigi Ballabio Date: Wed, 16 Sep 2026 10:15:58 +0200 Fix `SmileSectionRNDCalculator` tail quantiles for smiles with fat wings (#2772) commit 87cdeef7fd029fc13c801ebaa84d36b553c42651 Merge: e34c461de e94f4bbcf Author: Luigi Ballabio Date: Wed, 16 Sep 2026 09:50:06 +0200 Improve test coverage for normal distribution + minor edge-case fix (#2781) commit 2f7c4e3315cd4b5098e62ce63ec7e1009d6a37a8 Author: sizzywizzy Date: Tue, 15 Sep 2026 19:41:35 +0000 Saturate ErrorFunction to exactly 1 for |x| >= 6 The fdlibm port defined tiny = QL_EPSILON instead of 1e-300, so erf(x) returned 1 - QL_EPSILON for |x| >= 6 while erf(5.99) was already 1. CumulativeNormalDistribution therefore decreased at z = 6*sqrt(2) and stayed one ulp below 1 beyond it, and deep in-the-money Black and Bachelier prices came out one ulp below their intrinsic value (see #2798). ql/math/errorfunction.cpp | 4 +++- test-suite/blackformula.cpp | 41 ++++++++++++++++++++++++++++++++++++ test-suite/distributions.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) commit e34c461de96e1f3afe55b8d94f2e0d6fc418a399 Merge: 790a3b6bc 7e3bc70c3 Author: Luigi Ballabio Date: Tue, 15 Sep 2026 17:20:49 +0200 Accept Bachelier prices that round to intrinsic in the implied-vol inversion (#2792) commit 2ffade2fca2b806fff83e07c340bc529bc9b955a Author: LZ1153 Date: Tue, 15 Sep 2026 18:28:39 +0800 Fixed autotools unity builds ql/time/calendars/philippines.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 790a3b6bce08313da951d1a712042077fb9873e5 Merge: 6ff9aefd0 9bfad368a Author: Luigi Ballabio Date: Tue, 15 Sep 2026 12:20:57 +0200 Modernize python tools (#2784) commit 6ff9aefd0879cf81924925889328697542701203 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Tue, 15 Sep 2026 08:25:48 +0000 Update copyright list in license LICENSE.TXT | 1 + 1 file changed, 1 insertion(+) commit 7ea2f719485fdc46f20dbe0e6d9a933274fadbfe Merge: c240a6092 6a6e79188 Author: Luigi Ballabio Date: Tue, 15 Sep 2026 10:25:14 +0200 Fix out-of-bounds accesses in ExtendedBlackVarianceSurface::setVariances (#2793) commit c240a609284b59bb19653d6b9220ff507af93035 Merge: 73c6e18ae a6b169ebf Author: Luigi Ballabio Date: Tue, 15 Sep 2026 10:16:16 +0200 fix: initialize nominal in fixingDate-based MakeSwaption constructor (#2790) commit 7e3bc70c353abbfb7a140412cc1d6202751d7b67 Author: Abhayindia Date: Tue, 15 Sep 2026 00:16:03 +0900 Initialize impliedVol in the new test for -Werror=maybe-uninitialized test-suite/blackformula.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4fd711d01d4ecc6c789ed80143d116aad2571606 Author: Abhayindia Date: Mon, 14 Sep 2026 23:49:00 +0900 Accept Bachelier prices that round to intrinsic in the implied-vol inversion ql/pricingengines/blackformula.cpp | 8 ++++++-- test-suite/blackformula.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) commit 6a6e79188a1312783d8dec3239b7e6482a2c7f64 Author: Abhayindia Date: Tue, 15 Sep 2026 06:47:37 +0900 Seed the t=0 variance column for every strike, not row 0 across times ql/experimental/volatility/extendedblackvariancesurface.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 9bfad368aebb884c002c89430441b65bc9e316f3 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Mon, 14 Sep 2026 21:14:36 +0100 Restore generic Makefile diagnostic tools/check_filelists_diffs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2db43fca7fabe28fd9bc7849f33aa1dbab408573 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Mon, 14 Sep 2026 21:14:21 +0100 Ignore Python bytecode caches .gitignore | 1 + 1 file changed, 1 insertion(+) commit 23b76cf39cb4ad43b7de6a2f45f30f3a9a1fd733 Merge: a8473224f 881972884 Author: LWO <46852948+losterbr@users.noreply.github.com> Date: Mon, 14 Sep 2026 18:26:33 +0100 Merge pull request #2 from losterbr/sync-qldefine-codacy-review commit 9e83a836fef302a62588a1a42465496ca8131e23 Author: Abhayindia Date: Tue, 15 Sep 2026 00:37:11 +0900 Register the new test in the Visual Studio project test-suite/testsuite.vcxproj | 1 + test-suite/testsuite.vcxproj.filters | 3 +++ 2 files changed, 4 insertions(+) commit 13381bd902f60d4f045e3ea94ba1b58b4dfbd363 Author: Abhayindia Date: Tue, 15 Sep 2026 00:31:01 +0900 Fix out-of-bounds accesses in ExtendedBlackVarianceSurface::setVariances .../volatility/extendedblackvariancesurface.cpp | 10 ++- test-suite/CMakeLists.txt | 1 + test-suite/Makefile.am | 1 + test-suite/extendedblackvariancesurface.cpp | 76 ++++++++++++++++++++++ 4 files changed, 85 insertions(+), 3 deletions(-) commit 73c6e18aeefe880c9238393fd9d6e584089ba29a Merge: e67be8899 9268b697f Author: Luigi Ballabio Date: Mon, 14 Sep 2026 16:51:50 +0200 Fix hybrid annealing temperature termination (#2783) commit e67be889909d10ace43f24dff30180c6fa23d5d2 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 13 Sep 2026 01:51:16 +0000 Automated fixes by clang-tidy ql/cashflows/stubiborcoupon.cpp | 2 +- ql/cashflows/stubiborcoupon.hpp | 2 +- test-suite/bonds.cpp | 4 ++-- test-suite/interestrates.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) commit 90199bc48bc5212db8ab9dc513a8a63e0578c7e1 Author: Luigi Ballabio Date: Mon, 14 Sep 2026 08:35:46 +0200 Avoid warnings on some versions of gcc and clang ql/cashflows/cashflows.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit a6b169ebf8cf672c3c221544c0260a223bfc6c3c Author: Toprak BaÅŸlılar Date: Mon, 14 Sep 2026 12:24:25 +0300 fix: initialize nominal in fixingDate-based MakeSwaption constructor The fixingDate-based MakeSwaption constructor never initialized nominal_, unlike the optionTenor-based constructor which sets it to 1.0. Since Real has no default member initializer, the resulting Swaption's underlying nominal was left uninitialized, which is reachable from Gaussian1dSmileSection::optionPrice. Both constructors now default the nominal to 1.0. Fixes #2788 Co-Authored-By: Claude Sonnet 5 ql/instruments/makeswaption.cpp | 3 ++- test-suite/swaption.cpp | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) commit 9b8efe3d4c735d42902b787dc6e4548344dc4370 Author: LZ1153 Date: Mon, 14 Sep 2026 15:27:21 +0800 Add Philippines calendar QuantLib.vcxproj | 2 + QuantLib.vcxproj.filters | 6 ++ ql/CMakeLists.txt | 2 + ql/time/calendars/Makefile.am | 2 + ql/time/calendars/all.hpp | 1 + ql/time/calendars/philippines.cpp | 164 ++++++++++++++++++++++++++++++++++++++ ql/time/calendars/philippines.hpp | 128 +++++++++++++++++++++++++++++ test-suite/calendars.cpp | 142 +++++++++++++++++++++++++++++++++ 8 files changed, 447 insertions(+) commit ef5ca744a9b6ea05328ebf1249ae94dd64da367a Author: uppalbh Date: Sun, 13 Sep 2026 11:50:07 -0400 Fix basis point value convexity term test-suite/bonds.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 460090d45d7973fd00d4523bbacb9adbbe774cda Author: Krishna Anubhav Date: Sun, 13 Sep 2026 02:32:06 +0530 Widen testLaguerreLargeOrder to n=400 per PR review Azra Bano (#2779 review) independently verified the fix holds well past the originally-tested range: bit-identical below the underflow threshold, correct moments of x^k*exp(-x) for k=0..8 at n=256, and ~1e-14 accuracy from n=184 through 400 in steps of 8 (also checked the analogous Hermite case separately). The underlying failure is unbounded in n, so there's no principled reason to stop testing at 232. Rebuilt via the apple-arm64-ninja-release preset and re-ran both the full GaussianQuadraturesTests suite (11/11 passing, including the widened testLaguerreLargeOrder) and HestonModelTests (38/38, the real-world consumer via AnalyticHestonEngine) before pushing. test-suite/gaussianquadratures.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 9268b697f7e916565fa218d5afd9af94d105a125 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 16:26:56 +0100 Expand hybrid annealing termination tests test-suite/optimizers.cpp | 71 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 13 deletions(-) commit 8df5e8d4295418b1ce5933a9e07c04c8469d3238 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:59:09 +0100 Document header checker subprocess usage tools/check_header.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) commit a7fc2f99e71d60ee056de4ba32544a84f51106cd Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:42:37 +0100 Harden copyright notice collection tools/collect_copyrights.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) commit 08e485ef29940d5c198ae1b0f67b1a935477ac32 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:42:28 +0100 Modernize file-list difference reporting tools/check_filelists_diffs.py | 57 ++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 24 deletions(-) commit d218f3fa87efff68122b3e17f5434d3f7a58c489 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:42:18 +0100 Modernize test timing analysis script tools/check_test_times.py | 98 +++++++++++++++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 33 deletions(-) commit 16ee6faf3b5e1763dc1fb68db7a7853793e91c00 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:42:05 +0100 Modernize Python header validation tools tools/check_header.py | 40 +++++++++++++++++++++++++++++----------- tools/check_header_docs.py | 34 ++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 27 deletions(-) commit 881972884967f70dbaf4ea047e26e1c88d7e5d92 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:11:09 +0000 Sync qldefines.hpp.cfg with original header ql/qldefines.hpp.cfg | 2 ++ 1 file changed, 2 insertions(+) commit 5f31dbc1a08d15cf3337f82f35dd004443546f31 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:09:23 +0100 Fix hybrid annealing temperature termination ql/experimental/math/hybridsimulatedannealing.hpp | 6 ++- test-suite/optimizers.cpp | 46 +++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) commit a8473224f5a11c99ba94073f2255de21ef6a0567 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:48:13 +0100 Revert "Add hybrid annealing termination regression test" This reverts commit aa4efdb2937b023d35b7974740ddc28aa9a0df8a. test-suite/optimizers.cpp | 38 -------------------------------------- 1 file changed, 38 deletions(-) commit aa4efdb2937b023d35b7974740ddc28aa9a0df8a Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:31:24 +0100 Add hybrid annealing termination regression test test-suite/optimizers.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit 1e87c1cb64152db99d22cda935c84f71f66228b6 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:29:11 +0100 Document LSM tuple allocation reuse ql/methods/montecarlo/lsmbasissystem.cpp | 2 ++ 1 file changed, 2 insertions(+) commit db5e7fcc3ca564e3da70df061326de5aee9923c6 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:27:04 +0100 Replace C-style null pointer cast ql/methods/finitedifferences/finitedifferencemodel.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7342382dc4f34ef273fe838b887064cbef6066cd Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 14:26:01 +0100 Document intentional MINPACK pivot condition ql/math/optimization/lmdif.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 77f0592973f2dae97a6b7eaf31fb90fef423cf40 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:53:23 +0100 Document intentional Codacy exceptions dockerfiles/ci.Dockerfile | 2 ++ ql/indexes/swapindex.hpp | 2 ++ ql/methods/finitedifferences/meshers/concentrating1dmesher.cpp | 3 +++ ql/qldefines.hpp | 2 ++ 4 files changed, 9 insertions(+) commit 8421cbfe213f1f8633b57a8ff0d3e9fd55471138 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:19:43 +0100 Address explicit constructor warnings ql/cashflows/couponpricer.hpp | 2 +- ql/exercise.hpp | 8 ++++---- ql/experimental/credit/defaultevent.hpp | 2 +- ql/experimental/credit/loss.hpp | 2 +- ql/experimental/math/levyflightdistribution.hpp | 4 ++-- ql/experimental/math/particleswarmoptimization.hpp | 6 +++--- ql/indexes/ibor/audlibor.hpp | 2 +- ql/indexes/ibor/chflibor.hpp | 4 ++-- ql/indexes/ibor/euribor.hpp | 4 ++-- ql/indexes/ibor/jpylibor.hpp | 4 ++-- ql/indexes/ibor/mosprime.hpp | 2 +- ql/indexes/ibor/pribor.hpp | 2 +- ql/indexes/ibor/seklibor.hpp | 2 +- ql/indexes/ibor/thbfix.hpp | 2 +- ql/indexes/ibor/tibor.hpp | 2 +- ql/indexes/ibor/usdlibor.hpp | 4 ++-- ql/indexes/ibor/wibor.hpp | 2 +- ql/indexes/swap/gbpliborswap.hpp | 2 +- ql/instruments/bonds/btp.hpp | 4 ++-- ql/instruments/swap.hpp | 2 +- ql/legacy/libormarketmodels/lmconstwrappercorrmodel.hpp | 2 +- ql/math/abcdmathfunction.hpp | 4 ++-- ql/math/copulas/alimikhailhaqcopula.hpp | 2 +- ql/math/copulas/farliegumbelmorgensterncopula.hpp | 2 +- ql/math/copulas/gumbelcopula.hpp | 2 +- ql/math/copulas/plackettcopula.hpp | 2 +- ql/math/distributions/bivariatenormaldistribution.hpp | 4 ++-- ql/math/distributions/gammadistribution.hpp | 2 +- ql/math/distributions/normaldistribution.hpp | 12 ++++++------ ql/math/distributions/poissondistribution.hpp | 6 +++--- ql/math/integrals/tanhsinhintegral.hpp | 2 +- ql/math/interpolations/flatextrapolation2d.hpp | 4 ++-- ql/math/interpolations/loginterpolation.hpp | 2 +- ql/math/matrixutilities/getcovariance.hpp | 2 +- ql/math/optimization/bfgs.hpp | 2 +- ql/math/optimization/leastsquare.hpp | 4 ++-- ql/math/optimization/simplex.hpp | 2 +- ql/math/randomnumbers/randomizedlds.hpp | 4 ++-- ql/math/statistics/discrepancystatistics.hpp | 2 +- ql/math/statistics/sequencestatistics.hpp | 2 +- ql/methods/montecarlo/multipath.hpp | 2 +- ql/methods/montecarlo/path.hpp | 2 +- ql/models/marketmodels/correlations/expcorrelations.hpp | 2 +- ql/models/marketmodels/models/fwdtocotswapadapter.hpp | 4 ++-- ql/models/marketmodels/models/pseudorootfacade.hpp | 2 +- ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp | 2 +- ql/models/model.hpp | 4 ++-- ql/models/shortrate/onefactormodels/coxingersollross.hpp | 2 +- ql/models/shortrate/onefactormodels/hullwhite.hpp | 2 +- ql/models/shortrate/onefactormodels/vasicek.hpp | 2 +- ql/models/volatility/garmanklass.hpp | 8 ++++---- ql/pricingengines/asian/analytic_discr_geom_av_price.hpp | 2 +- ql/pricingengines/asian/analytic_discr_geom_av_strike.hpp | 2 +- ql/pricingengines/bond/discountingbondengine.hpp | 2 +- ql/pricingengines/capfloor/analyticcapfloorengine.hpp | 2 +- ql/pricingengines/cliquet/mcperformanceengine.hpp | 4 +++- ql/pricingengines/forward/forwardperformanceengine.hpp | 2 +- ql/pricingengines/forward/mcvarianceswapengine.hpp | 6 ++++-- ql/pricingengines/swap/discountingswapengine.hpp | 2 +- .../swaption/gaussian1djamshidianswaptionengine.hpp | 2 +- ql/pricingengines/swaption/gaussian1dswaptionengine.hpp | 4 ++-- ql/pricingengines/swaption/jamshidianswaptionengine.hpp | 2 +- ql/pricingengines/vanilla/analyticdigitalamericanengine.hpp | 4 ++-- ql/pricingengines/vanilla/bjerksundstenslandengine.hpp | 2 +- ql/pricingengines/vanilla/integralengine.hpp | 2 +- ql/pricingengines/vanilla/jumpdiffusionengine.hpp | 2 +- ql/pricingengines/vanilla/mcdigitalengine.hpp | 4 +++- ql/termstructures/credit/hazardratestructure.hpp | 4 ++-- ql/termstructures/credit/interpolatedhazardratecurve.hpp | 2 +- ql/termstructures/volatility/abcd.hpp | 2 +- .../volatility/equityfx/blackvoltermstructure.hpp | 12 ++++++------ ql/termstructures/volatility/smilesectionutils.hpp | 2 +- ql/termstructures/yield/nonlinearfittingmethods.hpp | 10 +++++----- ql/time/calendars/bespokecalendar.hpp | 2 +- ql/time/calendars/israel.hpp | 2 +- 75 files changed, 122 insertions(+), 116 deletions(-) commit e94f4bbcfdd2ee280fea0ed2921c85e7754d0094 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Sat, 12 Sep 2026 10:10:55 +0100 Fixing Doxygen. ql/math/distributions/normaldistribution.hpp | 30 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit 2c2d0dc0fe9eb1cb93e31e71893b29b36f1d416e Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:43:43 +0100 Improve normal distribution test clarity Document endpoint recovery, reference comparisons, branch boundaries, tolerances, and parameterized Maddock checks. test-suite/distributions.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) commit 4dd22752336a90872a1e990b54471011253c6b52 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:37:08 +0100 Document normal distribution edge-case tests Clarify Moro branch boundaries, reference implementations, tolerances, and Boost endpoint behavior. test-suite/distributions.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) commit 0a29babc703408014dc0061ce45401627c148093 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:33:54 +0100 Expand normal distribution test coverage Separate inverse, Moro, Maddock, and cumulative tests and cover tails, endpoints, invalid parameters, accuracy, monotonicity, and range behavior. test-suite/distributions.cpp | 66 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 11 deletions(-) commit 36099cd1094a0497dfb9da6fa985ad99741390cf Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:28:43 +0100 Improve normal distribution documentation Document density and cumulative formulas, clarify inverse-CDF notation, and describe the Moro approximation regions. ql/math/distributions/normaldistribution.hpp | 50 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 15 deletions(-) commit 1464b8c8e3dd4d73ff67f80b39b643c5fea00f99 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:19:17 +0100 Clarify normal distribution implementation Name the Moro approximation threshold and align derivative formatting with the surrounding header style. ql/math/distributions/normaldistribution.cpp | 5 ++++- ql/math/distributions/normaldistribution.hpp | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) commit e587e97038fc9e21bc995552c029bb63739106f8 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:18:52 +0100 Test Moro inverse normal branch continuity Compare both approximation branches with the Acklam inverse and check continuity around the 0.08 and 0.92 switch points. test-suite/distributions.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 924e9fac3c4929b9e704ab2c08cebedd4232abfb Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:08:27 +0100 Expand normal distribution edge-case coverage Test inverse-CDF branch boundaries, monotonicity, affine scaling, and cumulative-normal tail behavior. test-suite/distributions.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) commit fcede2e01aa969a1164ca92a8318e1e77ff3f91c Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:00:18 +0100 Harden normal distribution edge cases Return zero for derivatives with underflowed density and infinity inputs. Add coverage for inverse-CDF tails, invalid parameters, symmetry, and normal-distribution boundary behavior. ql/math/distributions/normaldistribution.hpp | 4 ++- test-suite/distributions.cpp | 53 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) commit 64f9cbe44ee39483b59c041f25319ef64491ebbc Author: LO <46852948+losterbr@users.noreply.github.com> Date: Fri, 11 Sep 2026 19:57:33 +0100 Align sigma validation across normal distribution constructors Add explicit positive-sigma checks to the Maddock normal distribution constructors so they match the behavior of the other normal distribution implementations and fail consistently at construction time. ql/math/distributions/normaldistribution.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit 22adea9a370bc5f415cfdf0a050ea85f7a83e2ab Author: Krishna Anubhav Date: Fri, 11 Sep 2026 22:37:00 +0530 Fix NaN in GaussLaguerreIntegration for large orders GaussianQuadrature::GaussianQuadrature() computed each weight as mu_0*ev[0][i]^2 / orthPoly.w(x_[i]). For Gauss-Laguerre with n >= 200 the weight function w(x) = x^s*exp(-x) underflows to zero at the largest node while the true weight stays representable, turning the division into inf, and the subsequent f(x)*w(x) sum into inf*0 = NaN. Add a logW() method to GaussianOrthogonalPolynomial (default: log(w(x)), overridden with closed-form, underflow-safe expressions for Laguerre and Hermite) and use it to form the weight in log-space whenever w(x) has underflowed to zero. Below the threshold the fast path is unchanged, so existing results are unaffected; this was checked by running GaussianQuadraturesTests, HestonModelTests (the real-world consumer of GaussLaguerreIntegration(192) in AnalyticHestonEngine), and IntegralTests with no differences. Adds a regression test spanning orders 184-232 that fails on the unmodified code with 5 NaN results (n=200,208,216,224,232) and passes after the fix. Fixes #2776. ql/math/integrals/gaussianorthogonalpolynomial.cpp | 12 +++++++++++ ql/math/integrals/gaussianorthogonalpolynomial.hpp | 7 +++++++ ql/math/integrals/gaussianquadratures.cpp | 12 ++++++++++- test-suite/gaussianquadratures.cpp | 23 ++++++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) commit dabb7b9144ca8e1bbdf376c6f5bb23272f19489a Author: Luigi Ballabio Date: Fri, 11 Sep 2026 10:09:25 +0200 Rework check in fitted bond curve tests test-suite/fittedbonddiscountcurve.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit ca953b7ebdb400f2839d86f18eeb0d4a2a4a30a4 Merge: e06326c4e 21092c511 Author: Luigi Ballabio Date: Fri, 11 Sep 2026 09:11:50 +0200 Avoid test-setup antipatterns no longer needed (#2777) commit 21092c511c12a846287e51f8527f753e171daa5e Author: Luigi Ballabio Date: Thu, 10 Sep 2026 18:19:58 +0200 Avoid test-setup antipatterns no longer needed Before version 1.34, inflation indexes always needed an inflation term structure, even if they weren't used for forecasting. In some of our tests, this forced us to use a setup in which a circular reference was created: an index would be given a handle, a piecewise inflation curve would be given the index, and the curve would be linked to the handle so that the index would have a curve available during bootstrapping. At the end of the test, the cycle would be broken by linking the handle to a null pointer so that the objects could be destroyed. This is no longer necessary. The index required by the curve can now be created with an empty handle. This commit reworks the setup of the affected tests so that the obsolete patterns is no longer copied. test-suite/inflation.cpp | 70 +++++++++++--------------------- test-suite/inflationcapfloor.cpp | 27 ++++-------- test-suite/inflationcapflooredcoupon.cpp | 21 ++++------ test-suite/inflationcpibond.cpp | 17 ++++---- test-suite/inflationcpicapfloor.cpp | 22 ++++------ test-suite/inflationcpiswap.cpp | 19 ++++----- 6 files changed, 61 insertions(+), 115 deletions(-) commit e06326c4ec955421fc58fbd6b6e33a332535ad80 Merge: 1b31e24e7 d8fe96875 Author: Luigi Ballabio Date: Thu, 10 Sep 2026 10:54:17 +0200 Fuse Predictor And Corrector Reduction Loops In `FractionalAdams::solve` (#2761) commit 1b31e24e7b482fccd9c4e1a8c5211cf843087038 Merge: f9dbcda2a 817967cf9 Author: Luigi Ballabio Date: Thu, 10 Sep 2026 10:52:53 +0200 Cache the Riemann-Liouville quadrature weights in the rough Heston engine (#2758) commit f9dbcda2add68c47681e4327ca8db4f381b9d3f5 Merge: f27af2453 593133472 Author: Luigi Ballabio Date: Wed, 9 Sep 2026 15:06:32 +0200 Avoid iterating over all entries on observable disconnect (#2765) commit f27af24532be55cae77f97ca3105801b7cb3a541 Merge: 38baab923 80e149760 Author: Luigi Ballabio Date: Wed, 9 Sep 2026 12:15:00 +0200 Fix duplicated words in documentation comments (#2773) commit 38baab9238d0159dc3d48593debb6eb1841b65ed Merge: d58e69d70 5d033c6d6 Author: Luigi Ballabio Date: Wed, 9 Sep 2026 12:13:49 +0200 Align credit-curve jump handling with the yield-curve implementation (#2771) commit d58e69d70a5e891d7fe288a858b1c6211046a189 Merge: ee21581b0 f26af6063 Author: Luigi Ballabio Date: Wed, 9 Sep 2026 12:06:28 +0200 gh-2172 fix compounding (#2667) commit f26af60639040d0a222cec193b24d7fc1515377f Author: Luigi Ballabio Date: Wed, 9 Sep 2026 10:14:19 +0200 Avoid warning from gcc ql/interestrate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bbe47d64bf19761ca993d7de79df541cb60b958d Author: Luigi Ballabio Date: Wed, 9 Sep 2026 09:49:11 +0200 Disable direct calculations for SimpleThenCompounded and CompoundedThenSimple ql/interestrate.cpp | 27 ++++----------------------- test-suite/interestrates.cpp | 31 ++++++++++++------------------- 2 files changed, 16 insertions(+), 42 deletions(-) commit 80e1497608a4150d2e2cf574f3bdcad82075bc49 Author: geographybuff Date: Wed, 9 Sep 2026 01:18:46 +0000 Fix duplicated words in documentation comments Removes eight accidentally doubled words across six files: "for the the call/put option" in DigitalCoupon, "with digital digital call/put option" in the Ibor, CMS and CMS-spread digital coupons, "overwrite the the swap rate" in YoYCapFloorTermPriceSurface, and "see if if ok" twice in alphafinder.cpp. Comment text only, with no code changes. Six of the eight are Doxygen //! comments on public classes and data members, so they appear in the generated reference documentation. The misspell-fixer workflow does not catch these: it matches misspelled words and a correctly spelled word repeated twice is not a misspelling. Deliberately left alone: "float float swap" in floatfloatswap.hpp and gaussian1dfloatfloatswaptionengine.hpp, which names the FloatFloatSwap instrument, and the "barrier barrier type" column headings in the barrieroption test tables. Co-Authored-By: Claude Opus 5 (1M context) ql/cashflows/digitalcmscoupon.hpp | 2 +- ql/cashflows/digitalcoupon.hpp | 4 ++-- ql/cashflows/digitaliborcoupon.hpp | 2 +- ql/experimental/coupons/digitalcmsspreadcoupon.hpp | 2 +- ql/experimental/inflation/yoycapfloortermpricesurface.hpp | 2 +- ql/models/marketmodels/models/alphafinder.cpp | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) commit ecef10a409015454de618ef8e9cd1ba5fee816ef Author: Yassine Idyiahia Date: Sun, 30 Aug 2026 00:08:59 +0100 Fix `SmileSectionRNDCalculator` tail quantiles for smiles with fat wings .../utilities/smilesectionrndcalculator.cpp | 216 +++++++++++++++++---- .../utilities/smilesectionrndcalculator.hpp | 12 +- test-suite/basketoption.cpp | 75 +++++++ test-suite/riskneutraldensitycalculator.cpp | 194 ++++++++++++++++++ 4 files changed, 456 insertions(+), 41 deletions(-) commit 7eea91f85b35bd6eeadd9e986cbf1773eb9422d5 Author: Luigi Ballabio Date: Tue, 8 Sep 2026 16:24:42 +0200 Restore original behavior of composite compoundings when on their own ql/compounding.hpp | 20 ++++---- ql/interestrate.cpp | 109 +++++++++++++++++++++++++++++-------------- test-suite/interestrates.cpp | 21 ++++++++- 3 files changed, 105 insertions(+), 45 deletions(-) commit 245133b77e392bec2860361f2a9447a38310b3ca Author: Luigi Ballabio Date: Tue, 8 Sep 2026 15:45:22 +0200 Avoid extending signatures of InterestRate methods ql/interestrate.cpp | 18 ++++++++---------- ql/interestrate.hpp | 21 +++++++-------------- 2 files changed, 15 insertions(+), 24 deletions(-) commit 76d7f0888ddec8017e33e799769deac5a9d9ae9e Author: Luigi Ballabio Date: Tue, 8 Sep 2026 15:28:51 +0200 Refactor the choice of stepwise compounding ql/cashflows/cashflows.cpp | 82 +++++++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 26 deletions(-) commit 5d033c6d6e49c597815689341b15b2fa84ba4a0f Author: Abhayindia Date: Tue, 8 Sep 2026 10:13:54 +0900 align credit-curve jump handling with the yield-curve implementation ql/termstructures/defaulttermstructure.cpp | 18 +++++----- test-suite/defaultprobabilitycurves.cpp | 54 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 8 deletions(-) commit ee21581b0350e71f297d8d59bcaccb8a5705049b Merge: 02205d993 35e274bc2 Author: Luigi Ballabio Date: Mon, 7 Sep 2026 17:07:44 +0200 Scale the differencing gap in `SmileSection::density` and `digitalOptionPrice` with the strike (#2768) commit 02205d9935a62ed47b39686d384ca9ea2459b988 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Mon, 7 Sep 2026 14:17:28 +0000 Update copyright list in license LICENSE.TXT | 1 + 1 file changed, 1 insertion(+) commit fbf8ec22ab4694c87f1212e02e9f0d14b2cea5e7 Merge: 12dcf95ee 9b1dcaff1 Author: Luigi Ballabio Date: Mon, 7 Sep 2026 16:16:05 +0200 FGM Copula bug fix (#2767) commit 12dcf95ee65c31b03abe871f107821ceb01ddf4d Merge: 30a523339 5e447e194 Author: Luigi Ballabio Date: Mon, 7 Sep 2026 14:32:13 +0200 Fix binomial trees silently returning zero or NaN prices (#2729) commit 30a52333969c04af17e8fad4fce5d5943ad6a856 Merge: 4f48e95b0 2bea76d08 Author: Luigi Ballabio Date: Mon, 7 Sep 2026 12:46:08 +0200 Handle vanishing volatility in the Barone-Adesi-Whaley and Ju American engines (#2755) commit 4f48e95b03969d7b0d231b88350bcc22c761f934 Merge: c5e433cd3 5807f44ff Author: Luigi Ballabio Date: Mon, 7 Sep 2026 12:43:56 +0200 Return the European value for an American put when early exercise is never optimal (#2754) commit c5e433cd31eb1aea1189ffbad7cc50ea9c2f66b0 Merge: 79f08f66b ef1c3b40d Author: Luigi Ballabio Date: Mon, 7 Sep 2026 12:08:12 +0200 Stub helpers (#2730) commit ef1c3b40da97a527557d0deffa32ec1152c2ed1c Author: Luigi Ballabio Date: Mon, 7 Sep 2026 10:41:24 +0200 Move enum in class scope ql/cashflows/stubiborcoupon.cpp | 65 ++++++++++++++++++--------------- ql/cashflows/stubiborcoupon.hpp | 18 ++++----- test-suite/basisswapratehelpers.cpp | 4 +- test-suite/cashflows.cpp | 20 +++++----- test-suite/crosscurrencyratehelpers.cpp | 8 ++-- 5 files changed, 60 insertions(+), 55 deletions(-) commit de93cbfee5701291acb5a96cb4fbbe3933e765d1 Author: uppalbh Date: Sun, 6 Sep 2026 23:12:17 -0400 Fix convexity term in cash flow basis point value ql/cashflows/cashflows.cpp | 2 +- test-suite/bonds.cpp | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) commit e018a40588f1dbe08b177f97377d679f2dc29254 Author: kp9991 Date: Fri, 4 Sep 2026 16:36:14 +1000 Renaming StubIndexConfig, stub stuff moving to a separate file QuantLib.vcxproj | 4 +- QuantLib.vcxproj.filters | 12 +- ql/CMakeLists.txt | 4 +- ql/cashflows/Makefile.am | 2 + ql/cashflows/all.hpp | 1 + ql/cashflows/iborcoupon.cpp | 178 +------------ ql/cashflows/iborcoupon.hpp | 117 +------- ql/cashflows/stubiborcoupon.cpp | 293 +++++++++++++++++++++ ql/cashflows/stubiborcoupon.hpp | 168 ++++++++++++ ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 10 +- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 23 +- .../termstructures/basisswapratehelpers.cpp | 30 +-- .../termstructures/basisswapratehelpers.hpp | 15 +- .../termstructures/crosscurrencyratehelpers.cpp | 50 ++-- .../termstructures/crosscurrencyratehelpers.hpp | 41 +-- ql/indexes/Makefile.am | 6 +- ql/indexes/all.hpp | 1 - ql/indexes/weightediborindex.cpp | 118 --------- ql/indexes/weightediborindex.hpp | 80 ------ .../constnotionalcrosscurrencybasisswap.cpp | 12 +- .../constnotionalcrosscurrencybasisswap.hpp | 19 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.cpp | 6 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.hpp | 11 +- test-suite/basisswapratehelpers.cpp | 24 +- test-suite/cashflows.cpp | 45 ++-- test-suite/crosscurrencyratehelpers.cpp | 36 +-- 26 files changed, 650 insertions(+), 656 deletions(-) commit 35e274bc23dbc7fb83bec1a3a0bf999c29935eac Author: Yassine Idyiahia Date: Sun, 30 Aug 2026 00:11:54 +0100 Fix `SmileSection::digitalOptionPrice` and `density` losing precision at large strikes ql/termstructures/volatility/smilesection.cpp | 26 ++++-- test-suite/interpolatedsmilesection.cpp | 123 ++++++++++++++++++++++++++ 2 files changed, 142 insertions(+), 7 deletions(-) commit 79f08f66bc7f42ab228f37d15ee0cb4f2d920e0c Merge: 5a5df520b e5cc00011 Author: Luigi Ballabio Date: Thu, 3 Sep 2026 10:27:57 +0200 Fix lost coupon when a callability falls on a coupon date (#2748) commit 9b1dcaff1040a18c60badc45063247c20b021ea9 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 2 Sep 2026 20:45:47 +0100 Fix warning -Wreorder. ql/experimental/math/claytoncopularng.hpp | 2 +- ql/experimental/math/frankcopularng.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit a2c3eddc2e1ddbeb493027add40964c0473b2221 Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 2 Sep 2026 20:38:17 +0100 Fixed bug in FGM copula. ql/experimental/math/farliegumbelmorgensterncopularng.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 76077390e21f118bac4bfdf15914f70d149dc9af Author: LO <46852948+losterbr@users.noreply.github.com> Date: Wed, 2 Sep 2026 20:29:52 +0100 Adde basic test for copulas. test-suite/CMakeLists.txt | 1 + test-suite/Makefile.am | 1 + test-suite/copulas.cpp | 144 +++++++++++++++++++++++++++++++++++ test-suite/testsuite.vcxproj | 3 +- test-suite/testsuite.vcxproj.filters | 9 ++- 5 files changed, 154 insertions(+), 4 deletions(-) commit 5931334725e43b7809355ad3c49e41b9acbedb57 Author: kp9991 Date: Thu, 3 Sep 2026 06:27:44 +1000 copyright ql/patterns/observable.cpp | 1 + test-suite/observable.cpp | 1 + 2 files changed, 2 insertions(+) commit b6cf499cf9aa7dbc64d91c6e38499cea8665c220 Author: kp9991 Date: Wed, 2 Sep 2026 21:29:10 +1000 Using a map to avoid iterating over all entries on disconnect ql/patterns/observable.cpp | 48 ++++++++++++++++++++++++++++++---------------- test-suite/observable.cpp | 30 +++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 17 deletions(-) commit 5a5df520bc77fe4b344bffeff86501307c0ba5bc Merge: cd646ecf6 c66213998 Author: Luigi Ballabio Date: Tue, 1 Sep 2026 21:29:37 +0200 Deprecate most optional arguments in `MakeVanillaSwap` constructor and similar (#2763) commit c66213998f2894c2e5ec044217ab9a31dde82454 Author: Luigi Ballabio Date: Tue, 1 Sep 2026 17:21:34 +0200 Remove optional arguments from MakeOIS constructor ql/indexes/swapindex.cpp | 3 ++- ql/instruments/makeois.cpp | 26 +++++++++++++++++----- ql/instruments/makeois.hpp | 16 ++++++++++--- ql/instruments/makeswaption.cpp | 3 ++- ql/termstructures/yield/oisratehelper.cpp | 4 +++- test-suite/overnightindexedswap.cpp | 37 +++++++++++++++++++------------ test-suite/swaption.cpp | 6 +++-- 7 files changed, 68 insertions(+), 27 deletions(-) commit bc391949114c0a007d1e79273efcd677b9b8bc1f Author: Luigi Ballabio Date: Tue, 1 Sep 2026 16:49:19 +0200 Remove most optional arguments from MakeCms constructor ql/instruments/makecms.cpp | 67 +++++++++++----------- ql/instruments/makecms.hpp | 42 +++++++++----- .../volatility/swaption/cmsmarket.cpp | 11 ++-- test-suite/cms.cpp | 5 +- test-suite/cms_normal.cpp | 3 +- 5 files changed, 70 insertions(+), 58 deletions(-) commit cd646ecf64071579ef0cc9444182581f6940189a Merge: 645f5e3c6 2492aaa7e Author: Luigi Ballabio Date: Tue, 1 Sep 2026 16:29:58 +0200 Use `enum` instead of `enum class` for a couple of inner enumerations (#2762) commit 9f6b51fd44f68014964c09a3143ba227d8955d3e Author: Luigi Ballabio Date: Tue, 1 Sep 2026 16:02:05 +0200 Remove optional arguments from MakeCapFloor constructor ql/instruments/makecapfloor.cpp | 28 +++++++++-- ql/instruments/makecapfloor.hpp | 18 +++++-- .../volatility/gaussian1dsmilesection.cpp | 5 +- test-suite/markovfunctional.cpp | 56 +++++++++++----------- test-suite/optionletstripper.cpp | 31 ++++++------ 5 files changed, 84 insertions(+), 54 deletions(-) commit ac93aa2d6db9c7e4f9fdd3056fbc341224955be9 Author: Luigi Ballabio Date: Tue, 1 Sep 2026 15:11:31 +0200 Remove optional arguments from MakeVanillaSwap constructor Examples/CVAIRS/CVAIRS.cpp | 5 +-- .../swaptions/haganirregularswaptionengine.cpp | 3 +- ql/indexes/swapindex.cpp | 6 ++- ql/instruments/bonds/btp.cpp | 7 +-- ql/instruments/makecapfloor.cpp | 4 +- ql/instruments/makeswaption.cpp | 3 +- ql/instruments/makevanillaswap.cpp | 26 ++++++++--- ql/instruments/makevanillaswap.hpp | 20 ++++++--- ql/pricingengines/swap/cvaswapengine.cpp | 10 ++--- ql/termstructures/yield/ratehelpers.cpp | 4 +- test-suite/bermudanswaption.cpp | 3 +- test-suite/gsr.cpp | 6 ++- test-suite/markovfunctional.cpp | 19 ++++---- test-suite/piecewiseyieldcurve.cpp | 31 ++++++++----- test-suite/swap.cpp | 52 +++++++++++++++------- test-suite/swaption.cpp | 27 +++++++---- 16 files changed, 150 insertions(+), 76 deletions(-) commit 546bcc9b43adae299d0a75319ebee938660d22c5 Author: Colin Alberts Date: Tue, 1 Sep 2026 06:55:37 -0500 Fuse Fractional Adams Predictor-Corrector Loops ql/math/ode/fractionaladams.hpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) commit 2492aaa7e00b3e568f64d9d956e49c6dad9e8333 Author: Luigi Ballabio Date: Tue, 1 Sep 2026 12:53:59 +0200 Use enum instead of enum class for a couple of inner enumerations They are already scoped, and using enum class with SWIG results in Python pseudo-enums that are too verbose. ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 4 +-- .../termstructures/crosscurrencyratehelpers.cpp | 2 +- .../vanilla/analyticroughhestonengine.cpp | 16 ++++++---- .../vanilla/analyticroughhestonengine.hpp | 8 ++--- test-suite/crosscurrencyratehelpers.cpp | 4 +-- test-suite/mtmcrosscurrencybasisswap.cpp | 26 ++++++++--------- test-suite/roughhestonmodel.cpp | 34 +++++++++++----------- 7 files changed, 48 insertions(+), 46 deletions(-) commit 645f5e3c6bf976a0dfd087851bcdbd1d3e76b94c Merge: 204e7ad8f 5ae77fb87 Author: Luigi Ballabio Date: Tue, 1 Sep 2026 12:05:46 +0200 Avoid spurious OIS future helper notifications (#2759) commit 5ae77fb87aaec169f01ff1a946d9106358268e72 Author: Steve Dacek <2327718+sdacek@users.noreply.github.com> Date: Mon, 31 Aug 2026 09:18:36 -0400 Avoid spurious OIS future helper notifications unregister termStructureHandle_ from index in OvernightIndexFutureRateHelper add test coverage .../yield/overnightindexfutureratehelper.cpp | 1 + test-suite/sofrfutures.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) commit 204e7ad8f40d74f731cf8e3021ff5c32b0a53c05 Merge: e0ff5e6b2 8861a0c91 Author: Luigi Ballabio Date: Mon, 31 Aug 2026 12:21:38 +0200 Fix null-deref crash in `XabrSwaptionVolatilityCube::fillVolatilityCube()` (#2753) commit 4068e508ca5d19260351cfa4779884b74ed27bc0 Author: Colin Alberts Date: Sun, 30 Aug 2026 11:54:22 -0500 Adding fractional weight updates for integration scheme. .../vanilla/analyticroughhestonengine.cpp | 33 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 5 deletions(-) commit 81451b33a55649ffbb2d1d8eea08c8999c6180d1 Author: Colin Alberts Date: Sun, 30 Aug 2026 11:52:55 -0500 Adding fractional adams cached weights. ql/math/ode/fractionaladams.hpp | 89 ++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 18 deletions(-) commit cb0ff2ee14413fd7dbac84b0826165dbdb6d78db Author: Colin Alberts Date: Sun, 30 Aug 2026 11:44:40 -0500 minor changes. test-suite/roughhestonmodel.cpp | 52 +++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 28 deletions(-) commit 95683ad023df22a9de594cb2971dc43e89f47881 Author: Colin Alberts Date: Sun, 30 Aug 2026 11:38:30 -0500 Adding tests for Riemann Liouville cache functions. test-suite/roughhestonmodel.cpp | 144 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) commit 3bc93233a9e0825aa22c54d2d2a334271e10c317 Author: Colin Alberts Date: Sun, 30 Aug 2026 11:32:42 -0500 Forward declare unit and fractional weights. ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit e342e7286639adba29bb0987fa35c2233c89058d Author: Colin Alberts Date: Sun, 30 Aug 2026 09:05:39 -0500 Adding diag pivot floor. ql/math/optimization/cmaes.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit ce4cbab818c7b7019610c0c650c01b17f82562bb Author: Colin Alberts Date: Sun, 30 Aug 2026 09:05:14 -0500 Adding ill conditioned quadratic matrix. test-suite/optimizers.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) commit 9ac46a47f434c57d13da2c5b40ff1ba691f8ec59 Author: Colin Alberts Date: Sat, 29 Aug 2026 17:37:31 -0500 Updating CMAES to Cholesky decomposition for compute efficiency. ql/math/optimization/cmaes.cpp | 68 +++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 28 deletions(-) commit 451a204e6eb75460363437c562e6faba73daefaf Author: Colin Alberts Date: Sat, 29 Aug 2026 17:17:57 -0500 Adding ill conditioned and rank-deficient objectives to prod Cholesky decomp. test-suite/optimizers.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) commit 5807f44ff5e26197c1bcc8c32e52f5e2f03e0091 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Thu, 27 Aug 2026 22:30:25 +0100 Extend the Barone-Adesi-Whaley shortcut to puts at non-positive rates .../vanilla/baroneadesiwhaleyengine.cpp | 12 +++- test-suite/americanoption.cpp | 76 +++++++++++++++++++++- 2 files changed, 83 insertions(+), 5 deletions(-) commit 8861a0c9133207d8e7c08b52f445f4ebd19f67c5 Author: Yassine Idyiahia Date: Sat, 29 Aug 2026 13:18:35 +0100 Fix null-deref crash in XabrSwaptionVolatilityCube::fillVolatilityCube() ql/termstructures/volatility/swaption/sabrswaptionvolatilitycube.hpp | 5 +++++ 1 file changed, 5 insertions(+) commit 2bea76d0875239965029b13097b14bdc9fb2f16b Author: Abhayindia Date: Sat, 29 Aug 2026 13:24:41 +0900 handle vanishing volatility in the Barone-Adesi-Whaley and Ju American engines .../vanilla/baroneadesiwhaleyengine.cpp | 10 ++++ ql/pricingengines/vanilla/juquadraticengine.cpp | 5 ++ test-suite/americanoption.cpp | 70 ++++++++++++++++++++++ 3 files changed, 85 insertions(+) commit e0ff5e6b2006a5f59d2008ab56ff1090658ee172 Merge: c7a515afc 42a0c323e Author: Luigi Ballabio Date: Fri, 28 Aug 2026 19:49:30 +0200 Fix AD type compatibility issues (#2750) commit 42a0c323e2709c71f43543f426189fb37fa9088c Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 12:43:37 +0100 Avoid list-initialization from solver result in rough Heston test test-suite/roughhestonmodel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f8230521ffe24e1caf71a6ac1e57ec32b3ddab7a Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 11:35:57 +0100 Use AD-compatible check macros in recently added tests test-suite/basisswapratehelpers.cpp | 6 ++--- test-suite/crosscurrencyratehelpers.cpp | 10 ++++---- test-suite/gsr.cpp | 10 ++++---- test-suite/mtmcrosscurrencybasisswap.cpp | 40 ++++++++++++++++---------------- test-suite/optionletstripper.cpp | 8 +++---- test-suite/overnightindexedswap.cpp | 4 ++-- test-suite/swaptionvolatilitycube.cpp | 16 ++++++------- 7 files changed, 47 insertions(+), 47 deletions(-) commit d0a3885a3ebae1df00cf3cfb4ed44aa39ca5b843 Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 10:38:54 +0100 Fix AD type compatibility in SabrSwaptionVolatilityCube .../volatility/swaption/sabrswaptionvolatilitycube.hpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 6178f8d866122b8db50fea73cd67015874bff862 Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 09:47:25 +0100 Fix AD type compatibility in rough Heston engine ql/math/ode/fractionalkernelapproximation.hpp | 8 ++++++-- ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) commit 9634b272af6c5eeed6be4bd88868fe30a41ee939 Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 08:57:00 +0100 Specify std::max template type for AD compatibility in distributions test test-suite/distributions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a717f57c59c0492da43fffbf633295c77f288988 Author: auto-differentiation-dev <107129969+auto-differentiation-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 08:57:00 +0100 Use Real instead of auto in TripleBandLinearOp::solve_splitting ql/methods/finitedifferences/operators/triplebandlinearop.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c7a515afcbd0561553ca4796ada70061c278e20e Merge: 9a71406d4 cbc5cdc25 Author: Luigi Ballabio Date: Fri, 28 Aug 2026 10:58:14 +0200 Remove 2026-09-28 from the South Korean calendar (#2741) commit 9a71406d4c164e8d57e47102d8ee98bbf928a164 Merge: 557cf6dbf b2ba23493 Author: Luigi Ballabio Date: Fri, 28 Aug 2026 09:47:17 +0200 Guard TreeLattice::stepback OpenMP parallel-for for small tree steps (#2745) commit 557cf6dbfbe2577bafb08a01a430f3e90646f625 Merge: 8174e99cc 4f9239da7 Author: Luigi Ballabio Date: Thu, 27 Aug 2026 22:57:33 +0200 Notify observers when an inflation volatility quote changes (#2747) commit 8174e99cc753033e22df5093482ab7bbe6a83dce Merge: 3550f84be 07c3aadf6 Author: Luigi Ballabio Date: Thu, 27 Aug 2026 22:52:36 +0200 Fix NaN from JuQuadraticApproximationEngine at zero risk-free rate (#2739) commit e5cc000113dc12430f4e6ea4b119f6fdd7c8569c Author: Advit Arora Date: Thu, 27 Aug 2026 23:01:47 +0530 Stop dropping a coupon when a callability falls on a coupon date .../discretizedcallablefixedratebond.cpp | 9 +++ test-suite/callablebonds.cpp | 64 ++++++++++++++++++++++ 2 files changed, 73 insertions(+) commit 4f9239da7cbde0af83e7c5240e87c28a6d1df512 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Thu, 27 Aug 2026 11:49:14 +0100 Notify observers when an inflation volatility quote changes .../volatility/inflation/constantcpivolatility.cpp | 4 +- .../yoyinflationoptionletvolatilitystructure.cpp | 4 +- test-suite/inflationcapfloor.cpp | 43 ++++++++++++++++++++++ test-suite/inflationvolatility.cpp | 35 ++++++++++++++++++ 4 files changed, 84 insertions(+), 2 deletions(-) commit b2ba234934bb7c12bf84a9c2dbaa0885640bed21 Author: Abhayindia Date: Thu, 27 Aug 2026 20:12:38 +0900 Guard TreeLattice::stepback OpenMP parallel-for behind a work-size threshold ql/methods/lattices/lattice.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 3550f84beafc055ffcf115dcd2f6078ddaa8a3fc Merge: 29707ccfe 2ff28a7ad Author: Luigi Ballabio Date: Thu, 27 Aug 2026 12:33:11 +0200 Fix CommodityType parameter order (#2742) commit 07c3aadf6cad75dfd88b8ac51e4c328eb6a9d922 Author: Chanitha Abeygunawardena Date: Thu, 27 Aug 2026 14:12:38 +0530 Restore the risk-free rate check lost in the merge Merging master brought in #2728, which had added dividendDiscount >= riskFreeDiscount to the call shortcut so that a call with r < q <= 0 reaches the critical-price calculation and its negative-rate check. Resolving the conflict kept this branch's rewritten condition, which dropped that clause, so the shortcut fired again and testBaroneAdesiWhaleyNegativeRates no longer saw the expected exception. Restore the clause and make the put condition its exact mirror: riskFreeDiscount >= dividendDiscount rather than dividendDiscount <= 1.0. Both are correct for the null-rate case this branch fixes, but the mirrored form matches the reasoning in #2728 and is symmetric with the call. No test change is needed; the test was right. ql/pricingengines/vanilla/juquadraticengine.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) commit 29707ccfe7adc10d70ac75cf0878d1376845d605 Merge: 7cafe5e4b f1229ae5d Author: Luigi Ballabio Date: Thu, 27 Aug 2026 10:41:19 +0200 Add initial `AGENTS.md` and some additional Markdown files (#2498) commit 79a3004d3cfbd7a163f36cb1434974e71c3fe193 Author: kp9991 Date: Thu, 27 Aug 2026 10:31:18 +1000 OvernightIndexedFundingRateHelper QuantLib.vcxproj | 12 +- QuantLib.vcxproj.filters | 18 ++- ql/CMakeLists.txt | 2 + ql/experimental/termstructures/Makefile.am | 6 +- ql/experimental/termstructures/all.hpp | 1 + .../overnightindexedfundingratehelper.cpp | 179 +++++++++++++++++++++ .../overnightindexedfundingratehelper.hpp | 107 ++++++++++++ test-suite/CMakeLists.txt | 1 + test-suite/Makefile.am | 1 + test-suite/overnightindexedfundingratehelper.cpp | 171 ++++++++++++++++++++ test-suite/testsuite.vcxproj | 7 +- test-suite/testsuite.vcxproj.filters | 11 +- 12 files changed, 496 insertions(+), 20 deletions(-) commit 7cafe5e4b84b3a72a3f6c2f9530ecfb8ca89606a Merge: 096fcf3d3 e6f6a6cbd Author: Luigi Ballabio Date: Wed, 26 Aug 2026 22:32:14 +0200 Fix American call approximations with negative risk-free rates (#2728) commit 096fcf3d36627700121ad75e6f665d9f5308c91c Merge: 2a13d4550 16c57eb8f Author: Luigi Ballabio Date: Wed, 26 Aug 2026 21:46:27 +0200 Use HTTPS for external links in example and test-suite READMEs (#2744) commit 16c57eb8f823d87b7c6e8471a0d207e256c988c3 Author: Hei-MaoM <2847944739@qq.com> Date: Wed, 26 Aug 2026 22:53:45 +0800 Fix obsolete discrete hedging paper link Examples/DiscreteHedging/DiscreteHedging.cpp | 2 +- Examples/README.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 718d7337bc4294dce43c05248fb1ba8baf5b3dfd Author: Hei-MaoM <2847944739@qq.com> Date: Tue, 25 Aug 2026 21:18:04 +0800 Use HTTPS for external documentation links Examples/README.txt | 2 +- test-suite/README.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 2ff28a7ad4393fa646a34e973ec1123e4ff86d67 Author: mameikagou Date: Mon, 24 Aug 2026 00:00:12 +0800 Fix CommodityType parameter order Align the public declaration with the established name-then-code implementation and pin that behavior with a focused test. Fixes #2740 ql/experimental/commodities/commoditytype.hpp | 2 +- test-suite/commodityunitofmeasure.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) commit 8b67dcef9681da995b385e7170a97983b218679f Author: Peter Caspers Date: Sun, 23 Aug 2026 11:42:26 +0200 reinstate basis point factor ql/cashflows/cashflows.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 497668da929ecc5007dfee5187c748ed327d88bb Author: Peter Caspers Date: Sun, 23 Aug 2026 11:20:57 +0200 add an explanation ql/compounding.hpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) commit effc98c939efe91d47df86cefb13ad0d04743413 Author: Peter Caspers Date: Sun, 23 Aug 2026 11:09:44 +0200 avoid dynamic casts in visitor ql/cashflows/cashflows.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) commit 903bdf505b51f92ce95f8fbaaecda689892893bf Author: Peter Caspers Date: Sun, 23 Aug 2026 11:09:25 +0200 avoid compiler warnings ql/cashflows/cashflows.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 1771f77fe56e77659c32f3af058f32de99b3d399 Author: Peter Caspers Date: Sun, 23 Aug 2026 10:51:34 +0200 fix bps() ql/cashflows/cashflows.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) commit 0f06e26f96345fe30be90de79f3533b2b65f19d6 Author: Peter Caspers Date: Sun, 23 Aug 2026 10:51:09 +0200 only compute required results ql/cashflows/cashflows.cpp | 85 ++++++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 36 deletions(-) commit cbc5cdc259b30142bbf6010d49ff6e51047f0871 Author: gs-scott-kim Date: Sun, 23 Aug 2026 06:08:52 +0900 Remove 2026-09-28 from the South Korean calendar Chuseok 2026 falls on Friday 25 September, so the holiday runs 24-26 September and only the last day lands on a weekend, a Saturday. Under the Korean holiday decree a substitute day is granted for Seollal and Chuseok only when the holiday overlaps a Sunday or another public holiday; a Saturday overlap does not create one. The other public holidays do get a Saturday substitute, which is why this file already carries `w == Monday` rules for Samiljeol, Children's Day, Liberation Day, National Foundation Day, Hangeul Day and Christmas, but none for Seollal or Chuseok. That matches the other years widened here: 2018 and 2029 overlap a Sunday, 2017 and 2028 overlap National Foundation Day. 2026 was the only year widened for a bare Saturday. KRX published seventeen non-trading days for 2026 and 28 September is not among them. ql/time/calendars/southkorea.cpp | 2 +- test-suite/calendars.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) commit 034611f788a942eb38c83f6828d5d7c8a2cd6fb9 Author: Peter Caspers Date: Sat, 22 Aug 2026 18:35:06 +0200 some refactoring ql/cashflows/cashflows.cpp | 98 +++++++++++----------------------------------- ql/interestrate.cpp | 85 ++++++++++++++++++++++------------------ ql/interestrate.hpp | 19 +++++++-- 3 files changed, 85 insertions(+), 117 deletions(-) commit fd150d06430b5888f36269676670a6a7099cb197 Merge: 726977889 8efe6fb84 Author: Peter Caspers Date: Sat, 22 Aug 2026 17:28:14 +0200 Merge pull request #10 from rich-amaya/gh-2172-yield-fractional-periods gh-2172 fix bond yield over partial coupon periods commit 1b04d4bed5d15d4038de639fa52f2fc134ccfccb Author: Chanitha Abeygunawardena Date: Thu, 20 Aug 2026 23:11:26 +0530 Fix NaN from JuQuadraticApproximationEngine at zero risk-free rate When the risk-free rate is exactly 0, the discount factor is 1.0 and both alpha and h vanish, so the four quotients that divide by them evaluated to 0/0 and the engine returned NaN. Their ratio alpha/h has the finite limit 2/variance -- the same limit that BaroneAdesiWhaleyApproximationEngine::criticalPrice already special-cases. Each of the other divergent quantities only ever enters the formulas multiplied by alpha, so the block is rewritten in terms of alpha/h, alpha*lambda_prime and alpha*V_E_h, none of which diverge. In part2, alpha/log(riskFreeDiscount) simplifies exactly to -2/variance. The results are algebraically unchanged for a non-null rate. Puts hit a second, unrelated failure at a null rate: early exercise is never optimal there, so the critical price is 0, which makes hA vanish and log(forwardSk/strike) undefined. The existing "early exercise never optimal" branch is extended with the symmetric condition for puts. Fixes #2737. ql/pricingengines/vanilla/juquadraticengine.cpp | 60 ++++++++++++++++++------ test-suite/americanoption.cpp | 62 +++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 15 deletions(-) commit 2a13d455048c748b9fb5c2ff3bb4f4cf56dfb9a9 Merge: 74f64ce5b e9b55ad88 Author: Luigi Ballabio Date: Thu, 20 Aug 2026 19:04:30 +0200 Ibor-Overnight margin leg choice (#2735) commit e9b55ad88e890c23747d2f93c30fbdd0ca51de2a Author: kp9991 Date: Thu, 20 Aug 2026 21:47:47 +1000 Fixing up a unit test test-suite/basisswapratehelpers.cpp | 134 ++++++++++++------------------------ 1 file changed, 45 insertions(+), 89 deletions(-) commit dfe1caf284397d5a4a173438cdcde9ca6aea46de Author: kp9991 Date: Thu, 20 Aug 2026 17:46:33 +1000 Including in the project file QuantLib.vcxproj | 2 ++ QuantLib.vcxproj.filters | 6 ++++++ 2 files changed, 8 insertions(+) commit 81f3194f33ca8d9fdfe41e5be4db0cfe7264cf87 Author: kp9991 Date: Thu, 20 Aug 2026 16:57:52 +1000 weightediborindex ql/CMakeLists.txt | 2 + ql/cashflows/iborcoupon.cpp | 98 ++++++++++++++++++++++---------- ql/cashflows/iborcoupon.hpp | 76 +++++++++++++++---------- ql/indexes/Makefile.am | 6 +- ql/indexes/all.hpp | 1 + ql/indexes/weightediborindex.cpp | 118 +++++++++++++++++++++++++++++++++++++++ ql/indexes/weightediborindex.hpp | 80 ++++++++++++++++++++++++++ 7 files changed, 320 insertions(+), 61 deletions(-) commit 74f64ce5b2493803798565724a71ead8c2aaf51d Merge: 661619d4c 193cfa203 Author: Luigi Ballabio Date: Thu, 20 Aug 2026 08:37:44 +0200 Document the meaning of seed = 0 in `SobolRsg`, `HaltonRsg` and `RandomSequenceGenerator` (#2738) commit 193cfa2030e6d70c967e3b11f507b866e2dc7d06 Author: Advit Arora Date: Thu, 20 Aug 2026 02:53:23 +0530 Document what seed 0 means for SobolRsg, HaltonRsg and RandomSequenceGenerator ql/math/randomnumbers/haltonrsg.hpp | 3 +++ ql/math/randomnumbers/randomsequencegenerator.hpp | 2 ++ ql/math/randomnumbers/sobolrsg.hpp | 4 ++++ 3 files changed, 9 insertions(+) commit 8efe6fb844628f21947f88af6485c2472774ce1d Author: rich-amaya Date: Tue, 18 Aug 2026 19:34:42 -0500 gh-2172 fix bond yield over partial coupon periods Use the right compounding over short first and final periods, and make duration and convexity match the price they come from. Adds tests for long first coupons, quasi-periods, and late redemption. ql/cashflows/cashflows.cpp | 307 ++++++++++++++++++++++++--------------------- test-suite/bonds.cpp | 289 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 451 insertions(+), 145 deletions(-) commit 661619d4cf2b01f1c825996278d6f97d2752787d Merge: d6304a857 8d68e3011 Author: Luigi Ballabio Date: Tue, 18 Aug 2026 20:13:04 +0200 Remove misleading comment (#2734) commit a6a71fe2526ba506894876ffc5f505923ce6f6f1 Author: kp9991 Date: Tue, 18 Aug 2026 16:17:30 +1000 Bool constructor argument basisOnIborLeg .../termstructures/basisswapratehelpers.cpp | 8 +- .../termstructures/basisswapratehelpers.hpp | 7 +- test-suite/basisswapratehelpers.cpp | 116 +++++++++++++++++++++ 3 files changed, 127 insertions(+), 4 deletions(-) commit 8d68e3011f5d514ec3008cc04b020f1f2a322a92 Author: cuiyeshuai Date: Mon, 17 Aug 2026 21:09:26 +0100 Remove redundant swap leg-order comment ql/pricingengines/swap/cvaswapengine.cpp | 2 -- 1 file changed, 2 deletions(-) commit d6304a8571653a6ef7eaae0eec73830f6bd02625 Merge: 36614fc49 8000ea6b1 Author: Luigi Ballabio Date: Mon, 17 Aug 2026 15:24:45 +0200 OvernightOvernightBasisSwapRateHelper (#2700) commit 36614fc496e69547636ee43d657d3e717df88fc4 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:51:55 +0000 Automated fixes by clang-tidy ql/math/randomnumbers/zigguratgaussianrng.hpp | 5 +++-- ql/termstructures/yield/impliedtermstructure.hpp | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) commit 0e2f9c314a3cffdce3c5fe34a672a7b1e7bab556 Author: Yeshuai Cui Date: Sun, 16 Aug 2026 14:26:52 +0100 Fix CVA swap leg-order comment ql/pricingengines/swap/cvaswapengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f0521d3df88fc19344650437bee8c455626eddcc Author: kp9991 Date: Sun, 16 Aug 2026 15:04:19 +1000 Fix for GitHub actions failure test-suite/basisswapratehelpers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0ece3f8e76be146bd79694fdf57f66491814d328 Author: kp9991 Date: Sun, 16 Aug 2026 13:16:50 +1000 Fix for mac os build failure test-suite/cashflows.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit fa770645bbdbec1b1e344821ab6a089cbe59103b Author: kp9991 Date: Sun, 16 Aug 2026 12:51:14 +1000 Removing stale comment ql/experimental/termstructures/crosscurrencyratehelpers.hpp | 2 -- 1 file changed, 2 deletions(-) commit 430fc2417b8555a0a25eed489dca6b6a451ba77b Author: kp9991 Date: Sun, 16 Aug 2026 10:51:44 +1000 Extending to all floating legs ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 6 +- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 9 +- .../termstructures/basisswapratehelpers.cpp | 25 +++- .../termstructures/basisswapratehelpers.hpp | 9 +- .../termstructures/crosscurrencyratehelpers.cpp | 39 ++++-- .../termstructures/crosscurrencyratehelpers.hpp | 23 ++- .../constnotionalcrosscurrencybasisswap.cpp | 7 +- .../constnotionalcrosscurrencybasisswap.hpp | 6 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.cpp | 8 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.hpp | 10 +- test-suite/basisswapratehelpers.cpp | 62 ++++++++ test-suite/crosscurrencyratehelpers.cpp | 156 +++++++++++++++++++++ 12 files changed, 329 insertions(+), 31 deletions(-) commit 2fff3b1b6eec0e9fa320c5d29db15e71b578ade8 Author: kp9991 Date: Sun, 16 Aug 2026 08:18:35 +1000 Refactor StubIborCoupon constructor ql/cashflows/iborcoupon.cpp | 113 ++++++++++++++++++++++++-------------------- ql/cashflows/iborcoupon.hpp | 1 + test-suite/cashflows.cpp | 1 + 3 files changed, 63 insertions(+), 52 deletions(-) commit d11f91c92172f8d195cc6d485b10f8d5007f5eb8 Author: kp9991 Date: Sun, 16 Aug 2026 08:06:33 +1000 StubIndexConfig is now a class ql/cashflows/iborcoupon.cpp | 28 ++++++++++-------- ql/cashflows/iborcoupon.hpp | 33 ++++++++++++++++------ ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 2 -- .../termstructures/basisswapratehelpers.cpp | 5 ++-- .../termstructures/crosscurrencyratehelpers.cpp | 4 +-- .../constnotionalcrosscurrencybasisswap.cpp | 2 -- test-suite/cashflows.cpp | 13 +++++++++ 7 files changed, 57 insertions(+), 30 deletions(-) commit 1f5732b6712e22d53fb8ea7d390f230d853fbb2e Author: kp9991 Date: Sun, 16 Aug 2026 06:52:07 +1000 Renaming, extending to ConstNotionalCrossCurrencyBasisSwap ql/cashflows/iborcoupon.cpp | 82 +++++++++--------- ql/cashflows/iborcoupon.hpp | 55 +++++++----- ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 10 +-- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 12 +-- .../termstructures/basisswapratehelpers.cpp | 18 +++- .../termstructures/basisswapratehelpers.hpp | 12 ++- .../termstructures/crosscurrencyratehelpers.cpp | 40 +++++---- .../termstructures/crosscurrencyratehelpers.hpp | 22 +++-- .../constnotionalcrosscurrencybasisswap.cpp | 9 +- .../constnotionalcrosscurrencybasisswap.hpp | 10 ++- test-suite/basisswapratehelpers.cpp | 66 +++++++++++++++ test-suite/cashflows.cpp | 59 ++++++++----- test-suite/crosscurrencyratehelpers.cpp | 97 ++++++++++++++++++++-- 13 files changed, 362 insertions(+), 130 deletions(-) commit 5e447e194540b661f725c77fdd25d4926fe4f3c8 Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Sat, 15 Aug 2026 04:00:31 +0500 Fix binomial trees silently returning zero or NaN prices Four of the seven trees in binomialtree.cpp built themselves from parameters they never checked. AdditiveEQPBinomialTree takes the square root of 4*variance - 3*drift^2 per step. When the drift dominates, the radicand is negative and every node of the tree is NaN, which rolls back to a price of zero. LeisenReimer divides by the Peizer-Pratt inversion of d2. That inversion computed 0.5 - sqrt(0.25*(1-exp(-x))), which cancels to exactly zero once exp(-x) falls below machine epsilon, so the up and down steps became 0.0/0.0. Writing the small branch as 0.5*exp(-x)/(1+sqrt(1-exp(-x))) keeps its relative accuracy and extends the usable range of the tree by several hundred standard deviations. Joshi4 computes its up probability from a truncated asymptotic expansion that is unbounded in d2, and can return values of order 1e6. Check the radicand and the up probability in the same way that CoxRossRubinstein, Trigeorgis and Tian already check theirs. The trees in ql/experimental/lattices carry the same code and get the same checks. ql/experimental/lattices/extendedbinomialtree.cpp | 11 ++- ql/math/distributions/binomialdistribution.hpp | 8 +- ql/methods/lattices/binomialtree.cpp | 11 ++- test-suite/europeanoption.cpp | 103 ++++++++++++++++++++++ 4 files changed, 125 insertions(+), 8 deletions(-) commit e6f6a6cbdbc4fba5f2c3f066467d8a814e50dc0a Author: mkzung <103102868+mkzung@users.noreply.github.com> Date: Sat, 15 Aug 2026 03:48:11 +0500 Check the risk-free rate before skipping early exercise The Barone-Adesi-Whaley and Ju quadratic engines returned the European value for any call with a non-positive dividend yield. With a negative risk-free rate below that yield, early exercise of the call is optimal and the returned value falls below intrinsic. Require the dividend discount factor to be at least the risk-free one, as the Bjerksund-Stensland engine already does, so that these inputs reach the critical-price calculation and its negative-rate check. .../vanilla/baroneadesiwhaleyengine.cpp | 3 ++- ql/pricingengines/vanilla/juquadraticengine.cpp | 3 ++- test-suite/americanoption.cpp | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) commit 9384002c7ac1bb41c8293ef1b37996ce0a958c86 Author: kp9991 Date: Sat, 15 Aug 2026 17:24:59 +1000 Simplification ql/cashflows/iborcoupon.cpp | 62 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) commit d9fd0d9b19ce0cd21198cbb17bb298f28a20403f Author: kp9991 Date: Sat, 15 Aug 2026 16:57:29 +1000 Overriding hasFixed ql/cashflows/iborcoupon.cpp | 34 +++++++++++++++++++++++++++------ ql/cashflows/iborcoupon.hpp | 9 ++++++++- test-suite/cashflows.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 7 deletions(-) commit 40d209ec39505377d0dc829f02cf5528df7f33c2 Author: kp9991 Date: Sat, 15 Aug 2026 11:33:28 +1000 Restoring userconfig ql/userconfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bb0509e7805d5fd4ccfa4d0dccde7812a254c4a7 Author: kp9991 Date: Fri, 14 Aug 2026 22:49:25 +1000 Broken index config ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 9 +- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 12 ++- .../termstructures/crosscurrencyratehelpers.cpp | 11 ++- .../termstructures/crosscurrencyratehelpers.hpp | 8 +- ql/userconfig.hpp | 2 +- test-suite/crosscurrencyratehelpers.cpp | 96 ++++++++++++++++++++++ 6 files changed, 130 insertions(+), 8 deletions(-) commit 8000ea6b113551f6ad4551602ea1eae175210958 Author: kp9991 Date: Fri, 14 Aug 2026 21:03:48 +1000 Alignment to other XCCY helpers .../termstructures/basisswapratehelpers.cpp | 63 ++++--- .../termstructures/basisswapratehelpers.hpp | 32 +++- test-suite/basisswapratehelpers.cpp | 201 ++++++++++++++++++++- 3 files changed, 257 insertions(+), 39 deletions(-) commit d81cfa91a2ecde5b334421d800bb2f293d5bcd73 Merge: 23de595d2 b9a397931 Author: Luigi Ballabio Date: Fri, 14 Aug 2026 10:47:47 +0200 Stop overnight-index future accrual at holiday maturity (#2726) commit 23de595d24a34fe2db2302ae1be2ba2e4ea6a485 Merge: db577851d 7a641b8a2 Author: Luigi Ballabio Date: Fri, 14 Aug 2026 10:41:30 +0200 More conventions for const-notional XCCY swap and helper (#2723) commit db577851da914b51c2cfe04ee0699f61ea37cb82 Merge: 666edd6a9 625dabbf4 Author: Luigi Ballabio Date: Fri, 14 Aug 2026 09:54:10 +0200 OvernightIborBasisSwapRateHelper (#2696) commit 666edd6a94a26f377b046aecb28c8ce51713b112 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:24:47 +0000 Sync qldefines.hpp.cfg with original header ql/qldefines.hpp.cfg | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) commit 080eb6924638fe232ee152fb6e4a1c094aa0f343 Merge: e6c0b3e91 14e297c50 Author: Luigi Ballabio Date: Thu, 13 Aug 2026 16:02:07 +0200 Pseudo-deprecate `QL_DEPRECATED` (#2725) commit f1229ae5df27fae0a6111527810040734d1220ea Author: RalfKonrad Date: Thu, 13 Aug 2026 15:56:46 +0200 Keep only instructions in AGENTS.md, drop the repository overviews Follow-up to @lballabio's pointer to Gloaguen et al., "Evaluating AGENTS.md" (arXiv:2602.11988). Across SWE-bench and a benchmark built from repositories carrying developer-written context files, agents reliably followed the instructions in those files, but repository overviews did not improve their results — while the files raised inference cost by over 20%. Since AGENTS.md is loaded on every session, its overview-shaped content was paying that cost for no measurable benefit. Removed: - the ql/ module map from .agents/architecture.md - the "Quick Reference" file list from AGENTS.md; every entry was either discoverable by name or already cited where it mattered - the project snapshot, in favour of the two constraints a change can actually get wrong: the C++17 baseline and the three build systems in CI Reshaped: - "Core Abstractions" dissolved into the lazy-evaluation pitfalls, which already covered the same ground; the rules that survive are the ones that fail silently, and the rest moved to .agents/architecture.md - maintenance guidance moved to .agents/maintaining-agent-docs.md, together with the reasoning above. It is only needed when editing the guides, and leaving its citation in AGENTS.md invited an agent to fetch a paper in the middle of an unrelated task. AGENTS.md now has no external links at all. AGENTS.md drops from 193 to 169 lines. Also corrects the SavedSettings advice: TopLevelFixture already holds one, so test cases do not need their own. Addresses https://github.com/lballabio/QuantLib/pull/2498#issuecomment-5278190716 and https://github.com/lballabio/QuantLib/pull/2498#discussion_r3775676090 Co-Authored-By: Claude Opus 5 (1M context) .agents/README.md | 8 ++- .agents/architecture.md | 37 +---------- .agents/maintaining-agent-docs.md | 57 ++++++++++++++++ AGENTS.md | 134 ++++++++++++++++---------------------- 4 files changed, 121 insertions(+), 115 deletions(-) commit b9a397931c5f1c70a0055ef72bd0c86ce835e1a5 Author: Amit Jha Date: Thu, 13 Aug 2026 19:21:12 +0530 Stop overnight-future accrual at maturity ql/instruments/overnightindexfuture.cpp | 5 +++-- test-suite/sofrfutures.cpp | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) commit e6c0b3e91c9f0306f8d5f54c9e0f477aae35c858 Author: Luigi Ballabio Date: Thu, 13 Aug 2026 09:31:24 +0200 Upgrade CI builds to Boost 1.92 .github/workflows/cmake-latest-runners.yml | 4 ++-- .github/workflows/cmake.yml | 12 ++++++------ .github/workflows/msvc-all-configs.yml | 4 ++-- .github/workflows/msvc-analysis.yml | 4 ++-- .github/workflows/msvc-nondefault.yml | 4 ++-- .github/workflows/msvc.yml | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) commit 7a641b8a27088fc6e4c66ae812a62829b2229acd Author: kp9991 Date: Thu, 13 Aug 2026 10:46:26 +1000 paymentLagOnNotionalExchanges .../termstructures/crosscurrencyratehelpers.cpp | 34 +++++++++++++++------- .../termstructures/crosscurrencyratehelpers.hpp | 18 +++++++++--- .../constnotionalcrosscurrencybasisswap.cpp | 10 +++++-- .../constnotionalcrosscurrencybasisswap.hpp | 12 ++++++-- ql/instruments/crosscurrencyswap.cpp | 17 +++++++---- ql/instruments/crosscurrencyswap.hpp | 3 +- 6 files changed, 66 insertions(+), 28 deletions(-) commit aa5c5bd19cefda192f4f778e7b4c8b9d708d6269 Author: RalfKonrad Date: Wed, 12 Aug 2026 20:20:38 +0200 Note that agents can dispatch the non-PR CI matrices themselves Correct the CI section of `.agents/build-and-test.md`: it claimed an agent cannot run `linux-nondefault`, `linux-full-tests`, `msvc-nondefault` and `cmake-latest-runners` and must ask the maintainer. All four accept `workflow_dispatch`, so an agent can trigger them with `gh` in the contributor's fork — sparingly, since they are long running, and only after explicit approval rather than on its own initiative. Also remark that the non-default settings can be exercised locally instead, via the `./configure` flags, the matching `QL_*` CMake variables, or the `.ci/*.props` files for MSVC. Addresses https://github.com/lballabio/QuantLib/pull/2498#discussion_r3767455985 Co-Authored-By: Claude Opus 5 (1M context) .agents/build-and-test.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) commit 14e297c5063aeb0990e073fbdac60f2da3136ea0 Author: Luigi Ballabio Date: Wed, 12 Aug 2026 15:44:54 +0200 Pseudo-deprecate QL_DEPRECATED It's not possible to deprecate a macro; the deprecation is only documented in Doxygen. ql/qldefines.hpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) commit 66bc24435ce0d6e56d44d907abb18aad17648448 Author: Luigi Ballabio Date: Wed, 12 Aug 2026 16:33:56 +0200 Update Doxygen configuration Docs/quantlib.doxy | 12 ++++++++++-- Docs/quantlibextra.css | 6 +++--- Docs/quantlibfooter.html | 10 ++++------ Docs/quantlibheader.html | 40 ++++++++++++++++++++++++++++++++-------- 4 files changed, 49 insertions(+), 19 deletions(-) commit 9f3483bd4859d42c697b48b3b9a5a1a53e0f6073 Author: RalfKonrad Date: Wed, 12 Aug 2026 16:08:51 +0200 Address review feedback on AGENTS.md / .agents guides Follow-up to @lballabio's review on #2498: - Drop the "Header Metadata" block from AGENTS.md; it would not stay up to date. - Drop the per-file listing under ql/cashflows/ in the module map, matching how the other directories are described. - Use [[deprecated("message")]] everywhere and mark QL_DEPRECATED as legacy: the VC++2015 constructor workaround is obsolete since the move to C++17. - Prefer moving to the replacement API over suppressing deprecation warnings, and only suppress where that is not possible. - Document that deprecating a data member can trigger a deprecation warning for the (even implicit) destructor, and how to work around it with an explicit defaulted destructor. - Clarify that CMake is recommended for agents, not the project's preferred build system; all three build systems run in CI. - Spell out that the non-default CI matrices never run on pull requests and have to be triggered on GitHub. .agents/architecture.md | 9 --------- .agents/build-and-test.md | 14 ++++++++++++-- .agents/deprecation.md | 34 ++++++++++++++++++++++++++-------- AGENTS.md | 10 ++-------- 4 files changed, 40 insertions(+), 27 deletions(-) commit be40637de595351dbecb1ad1e81253c6a97142a7 Author: RalfKonrad Date: Wed, 12 Aug 2026 14:54:35 +0200 Split task-specific guidance out of AGENTS.md into .agents/ AGENTS.md is loaded into an agent's context at the start of every session, so it should hold only what is needed every time. Move the material that is task-specific into .agents/, and leave references in AGENTS.md so agents load a guide on demand. Moved out: .agents/architecture.md instrument/engine lifecycle, cash-flow hierarchy, design patterns, module map .agents/build-and-test.md build options, configure flags, test invocations, CI workflow map .agents/registering-new-files.md CMake/Autotools/VS file lists .agents/extending-quantlib.md new instrument/term structure/calendar .agents/deprecation.md deprecation mechanics and checklist AGENTS.md keeps the project snapshot, core abstractions, coding conventions, a build/test quick start, the pitfalls, the validation checklist, and a table pointing at the guides. It drops from 470 to 199 lines. .agents/README.md records why a plain directory of Markdown was chosen over a vendor-specific mechanism. Co-Authored-By: Claude Opus 5 (1M context) .agents/README.md | 40 ++++ .agents/architecture.md | 135 ++++++++++++ .agents/build-and-test.md | 105 ++++++++++ .agents/deprecation.md | 36 ++++ .agents/extending-quantlib.md | 38 ++++ .agents/registering-new-files.md | 66 ++++++ AGENTS.md | 434 ++++++++------------------------------- 7 files changed, 502 insertions(+), 352 deletions(-) commit 75eb30af911829d1f6dfbbf14bfa65a514a8faed Merge: a6e82a92b 744329456 Author: Luigi Ballabio Date: Wed, 12 Aug 2026 12:50:19 +0200 Add DerivedYieldTermStructure helper classes (#2715) commit a6e82a92bab014a8bb1e5eba1fe548d8b07aef96 Merge: e72566914 98396d65f Author: Luigi Ballabio Date: Wed, 12 Aug 2026 12:43:19 +0200 Fix wedge acceptance test in ZigguratGaussianRng (#2722) commit e7256691449114083e03c488e12bea498500a1cd Merge: 7396185b8 6cb2ec6b2 Author: Luigi Ballabio Date: Wed, 12 Aug 2026 12:42:09 +0200 Rfr caplet vol bootstrapping (#2705) commit 6ba56d11f54e9556133a22f047702f2edd4a600e Author: kp9991 Date: Wed, 12 Aug 2026 08:22:08 +1000 Exposing floatPaymentFrequency .../termstructures/crosscurrencyratehelpers.cpp | 23 ++++------ .../termstructures/crosscurrencyratehelpers.hpp | 10 ++++- test-suite/crosscurrencyratehelpers.cpp | 50 +++++++++++++++++++++- 3 files changed, 66 insertions(+), 17 deletions(-) commit 98b73c4e03b329932c68f454c28d330f32308135 Author: kp9991 Date: Wed, 12 Aug 2026 07:17:35 +1000 comment ql/experimental/termstructures/crosscurrencyratehelpers.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 45c0a6c429f43335716c3d8e26531a66c706fa8b Author: kp9991 Date: Wed, 12 Aug 2026 07:16:49 +1000 Using a single convention .../termstructures/crosscurrencyratehelpers.cpp | 48 ++++-------- .../termstructures/crosscurrencyratehelpers.hpp | 43 +---------- test-suite/crosscurrencyratehelpers.cpp | 89 ++-------------------- 3 files changed, 27 insertions(+), 153 deletions(-) commit 0e408067f4fecf3919d7164af73840ecc4b70f3d Author: kp9991 Date: Wed, 12 Aug 2026 06:42:37 +1000 floatingLegConvention driving both legs .../termstructures/crosscurrencyratehelpers.cpp | 40 ++++-- .../termstructures/crosscurrencyratehelpers.hpp | 44 ++++++- test-suite/crosscurrencyratehelpers.cpp | 136 +++++++++++++++++++-- 3 files changed, 192 insertions(+), 28 deletions(-) commit 7443294569d44c1fa87a8703cbcff1f93f822f73 Author: Eugene Toder Date: Wed, 5 Aug 2026 15:43:52 -0400 Add DerivedYieldTermStructure helper classes Factor out common code from multiple derived term structure classes (mostly spreaded curves) into two common classes: * DerivedYieldTermStructure for term structures that have their own referenceDate * RelativeDerivedYieldTermStructure for term structures that forward referenceDate from the underlying term structure QuantLib.vcxproj | 1 + QuantLib.vcxproj.filters | 3 + ql/CMakeLists.txt | 1 + ql/termstructures/yield/Makefile.am | 1 + ql/termstructures/yield/all.hpp | 1 + ql/termstructures/yield/derivedtermstructure.hpp | 120 +++++++++++++++++++++ .../yield/forwardspreadedtermstructure.hpp | 61 +---------- ql/termstructures/yield/impliedtermstructure.hpp | 42 ++------ .../piecewiseforwardspreadedtermstructure.hpp | 48 ++------- .../yield/piecewisezerospreadedtermstructure.hpp | 49 ++------- ql/termstructures/yield/spreaddiscountcurve.hpp | 65 +++-------- .../yield/ultimateforwardtermstructure.hpp | 48 +-------- .../yield/zerospreadedtermstructure.hpp | 62 +---------- ql/termstructures/yieldtermstructure.cpp | 24 ++--- 14 files changed, 190 insertions(+), 336 deletions(-) commit 7396185b83e7c5860c03953ce9cdd0175df6a9aa Author: Luigi Ballabio Date: Tue, 11 Aug 2026 15:13:45 +0200 Move cleaning of exchange rates in the common test fixture test-suite/crosscurrencyratehelpers.cpp | 7 +------ test-suite/exchangerate.cpp | 3 --- test-suite/money.cpp | 2 -- test-suite/mtmcrosscurrencybasisswap.cpp | 13 ------------- test-suite/toplevelfixture.hpp | 2 ++ 5 files changed, 3 insertions(+), 24 deletions(-) commit 98396d65f654eb0e59df09231d04ec42a5319bc6 Author: Jose Moya Date: Tue, 11 Aug 2026 06:01:12 -0600 Harden the wedge test helper and name the acceptance-test locals Both points from review. drawFor() silently produced the wrong encoding for out-of-range inputs. A layer of 256 or more aliases through `r & 0xff` -- 256 decodes as layer 0, which is the tail case, not a wedge -- and u = 1 rounds the bucket up to 2^53, whose shift by 11 overflows to zero and decodes back as u = -1. Both call sites are in range, so no behaviour changes here, but a test helper that silently encodes a different draw than the one requested is the wrong thing to leave lying around. Preconditions now reject both cases, the 2^53 constant comes from std::ldexp rather than a conversion from 1ULL << 53, and a post-check guards the shift. In nextReal(), the acceptance test evaluated normF(i + 1) twice inside a dense inequality. normF and normX are pure and nextReal() is called once either way, so lifting the three values into named locals is behaviour-preserving; it drops the redundant lookup and makes the inequality read as the formula does, in the one expression that harboured the precedence bug. Verified: testWedgeDrawIsAccepted still fails when the original parenthesis placement is reintroduced, so hardening the helper has not weakened what the test detects. testStatisticsOfNextReal still passes. Signed-off-by: Jose Moya ql/math/randomnumbers/zigguratgaussianrng.hpp | 9 ++++++++- test-suite/zigguratgaussian.cpp | 18 +++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) commit 625dabbf43252fee25a79cafbd75b697d50e7b53 Author: kp9991 Date: Tue, 11 Aug 2026 21:41:10 +1000 Removing iborPaymentFrequency ql/experimental/termstructures/basisswapratehelpers.cpp | 8 +++----- ql/experimental/termstructures/basisswapratehelpers.hpp | 8 +++----- test-suite/basisswapratehelpers.cpp | 16 +++++++++------- 3 files changed, 15 insertions(+), 17 deletions(-) commit 6cb2ec6b2ce2ee551e9ec008294fe24cb7e40604 Author: kp9991 Date: Tue, 11 Aug 2026 21:23:00 +1000 Post-code review .../volatility/optionlet/optionletstripper.cpp | 18 ++++-- .../volatility/optionlet/optionletstripper1.cpp | 10 ++-- .../volatility/optionlet/optionletstripper2.cpp | 69 +++++++++------------- .../volatility/optionlet/optionletstripper2.hpp | 13 ---- test-suite/optionletstripper.cpp | 17 +++++- 5 files changed, 60 insertions(+), 67 deletions(-) commit 20f3989747ea2b073d5b68da3b6138f9ca6491a5 Author: Jose Moya Date: Tue, 11 Aug 2026 05:08:35 -0600 Fix wedge acceptance test in ZigguratGaussianRng The Marsaglia-Tsang wedge acceptance test in nextReal() has a misplaced closing parenthesis: normF(i + 1) + (normF(i) - normF(i + 1) * u) < pdf(x) so the uniform draw scales only normF(i + 1) instead of the whole difference normF(i) - normF(i + 1). It should read normF(i + 1) + (normF(i) - normF(i + 1)) * u < pdf(x) Effect: the wedge is accepted far too rarely. Over 2,000,000 draws that actually reach the wedge test -- Monte Carlo over the generator's own sampling measure -- acceptance is 1.79% where the correct test gives 54.52%, roughly a 30x deficit. Rejected draws are re-drawn, so the generated stream under-weights the wedge region between normX(i + 1) and normX(i) at every layer. The aggregate distortion is small. A Kolmogorov-Smirnov test against the standard normal CDF at n = 1,000,000 fails to reject in both cases (D = 0.00164 before, 0.00135 after, 99.9% critical value 0.00195), and the existing moment-based test passes either way. That is why this was not caught. The regression test added here is therefore deterministic rather than statistical. ZigguratGaussianRng is a template over its uniform source, so a scripted RNG can drive one exact draw: layer 1 with x = 3.5, inside the wedge spanning normX(2) = 3.449278 to normX(1) = 3.654153, and u = 0.5. The correct test accepts that draw by a margin of 2.5e-04; the shipped test rejects it by 3.8e-04 and falls through to the following draw, which the test distinguishes by value. Signed-off-by: Jose Moya ql/math/randomnumbers/zigguratgaussianrng.hpp | 2 +- test-suite/zigguratgaussian.cpp | 95 +++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) commit 701f177487ee8a1c269a57a1e1465f616d39a341 Merge: fad176cb3 3e6d7fe67 Author: Luigi Ballabio Date: Tue, 11 Aug 2026 13:04:07 +0200 Adds Lifted (Multi-Factor Markovian) Approximation Route for the Rough Heston Riccati Equation (#2709) commit 3e6d7fe6738c80ed4653feeec98c91f91635f094 Author: Luigi Ballabio Date: Tue, 11 Aug 2026 11:41:56 +0200 No need to break lines at 80 characters, 100 or even 120 is ok. test-suite/roughhestonmodel.cpp | 60 ++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 40 deletions(-) commit bb6cfb1d87afcb34979036c05ae3dd75579cb633 Author: Luigi Ballabio Date: Tue, 11 Aug 2026 11:39:29 +0200 Hide from Doxygen internal functions and docs in cpp files ql/math/ode/fractionalkernelapproximation.hpp | 2 +- ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit fad176cb3e4f19b58a84bdb7ef89097f9f40f837 Merge: a289c645d 9461a059f Author: Luigi Ballabio Date: Mon, 10 Aug 2026 16:06:41 +0200 Guard zero leg BPS in FixedVsFloatingSwap fair rate and spread (#2690) commit a289c645d334e1e21528f4e0db816cc443a285eb Merge: 3cf1a861a 4d482c395 Author: Luigi Ballabio Date: Mon, 10 Aug 2026 16:04:02 +0200 Guard zero leg BPS in CPI and YoY inflation swap fair values (#2692) commit 3cf1a861abddf69fc3df595ef5ee89e27a1d84f7 Author: Luigi Ballabio Date: Mon, 10 Aug 2026 13:07:41 +0200 Fix or silence a few warnings clang-tidy can't autofix ql/time/calendars/southafrica.cpp | 2 -- ql/utilities/clone.hpp | 3 ++- test-suite/array.cpp | 4 ++-- test-suite/crosscurrencyratehelpers.cpp | 4 ++-- test-suite/mtmcrosscurrencybasisswap.cpp | 9 +++++---- 5 files changed, 11 insertions(+), 11 deletions(-) commit deaf4f9e885579358ec2afa65217b697b61dcd2b Author: Luigi Ballabio Date: Mon, 10 Aug 2026 09:50:48 +0200 Fix double move added by clang-tidy ql/experimental/termstructures/crosscurrencyratehelpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bb9042a11ae1445055aeb52213150a7ab8bcac99 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 9 Aug 2026 01:34:15 +0000 Automated fixes by clang-tidy ql/experimental/fx/fxresetcashflows.cpp | 4 ++-- ql/experimental/fx/fxresetcashflows.hpp | 2 +- ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 2 +- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 4 ++-- ql/experimental/termstructures/crosscurrencyratehelpers.cpp | 2 +- ql/pricingengines/bond/discretizedconvertible.cpp | 2 +- ql/pricingengines/bond/discretizedconvertible.hpp | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) commit bd25397b6bbd799d4353344bbd50e7bd65e340b7 Author: kp9991 Date: Sun, 9 Aug 2026 07:51:11 +1000 Supplying conventions for both legs .../termstructures/crosscurrencyratehelpers.cpp | 14 ++++++---- .../termstructures/crosscurrencyratehelpers.hpp | 9 ++++++- test-suite/crosscurrencyratehelpers.cpp | 31 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 6 deletions(-) commit 4d482c395e093548e28957cb0d170a7d39b8225d Author: PureSaber Date: Fri, 7 Aug 2026 09:37:42 +0800 Fix CPI and YoY zero-BPS tests for CI Use single-date CPISwap setup without float fixings; link YoY inflation term structure in YoY swap tests. Co-authored-by: Cursor test-suite/inflation.cpp | 15 ++++++ test-suite/inflationcpiswap.cpp | 102 +++++++++++++--------------------------- 2 files changed, 47 insertions(+), 70 deletions(-) commit 78b7a5b79d86172e348f950e538260f77162e100 Author: PureSaber Date: Thu, 6 Aug 2026 23:10:57 +0800 Add zero-BPS and expired fair value tests for CPI and YoY swaps Follow the BOOST_CHECK_EXCEPTION pattern from #2678/#2690: testZeroBpsFairRateAndSpread and testExpiredSwapFairRateAndSpread for CPISwap, and matching YoY inflation swap tests in inflation.cpp. Co-authored-by: Cursor test-suite/inflation.cpp | 132 ++++++++++++++++++++++++++++++++++++++++ test-suite/inflationcpiswap.cpp | 126 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+) commit 6cbe5bb0cfb2e415626e38ad99366b18d8fe30cb Author: PureSaber Date: Tue, 28 Jul 2026 09:48:23 +0800 Guard zero leg BPS in CPI and YoY inflation swap fair values. Co-authored-by: Cursor ql/instruments/cpiswap.cpp | 4 ++-- ql/instruments/yearonyearinflationswap.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 9461a059f19c9e7b33bc28482596712f10089f62 Author: PureSaber Date: Thu, 6 Aug 2026 19:49:11 +0800 Align vanilla swap fair rate/spread tests with #2678 Add testZeroBpsFairRateAndSpread and use BOOST_CHECK_EXCEPTION with ExpectedErrorMessage in the expired-swap test, following the pattern from floatfloatswap.cpp in PR #2678. Co-authored-by: Cursor test-suite/swap.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) commit 6155c3ac47760ab60ad88b2ae27e193e6f52c947 Author: PureSaber Date: Tue, 28 Jul 2026 09:46:52 +0800 Guard zero leg BPS in FixedVsFloatingSwap fair rate and spread. Co-authored-by: Cursor ql/instruments/fixedvsfloatingswap.cpp | 4 ++-- test-suite/swap.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) commit 5608e3543690a97cc30047d8d1a4683791ac32c2 Merge: 660142d98 c64b8cee9 Author: Luigi Ballabio Date: Thu, 6 Aug 2026 13:13:01 +0200 Update Saudi Arabia calendar: Founding Day and Eid Al-Adha through 2029 (#2688) commit 660142d9832be5c6172d29dec73e5860ead7d850 Merge: 67c4b848a e11ab4f72 Author: Luigi Ballabio Date: Thu, 6 Aug 2026 10:51:53 +0200 Allow defining globalGuess() in bootstrap traits (#2714) commit c64b8cee9529c8e0b1cda11aad0f2e4cf7be6ad6 Author: PureSaber Date: Thu, 6 Aug 2026 16:50:15 +0800 Refactor Eid al-Fitr to explicit windows per review Apply the same std::pair representation to isEidAlFitr. Use the exchange-documented holiday ranges from the in-file table for both Eids in 2012-2015 instead of the default Eid-1..Eid+4 offsets. Extend Saudi calendar tests to cover Eid al-Fitr and the documented 2015 windows. Co-authored-by: Cursor ql/time/calendars/saudiarabia.cpp | 103 ++++++++++++++++++-------------------- ql/time/calendars/saudiarabia.hpp | 7 +-- test-suite/calendars.cpp | 19 ++++++- 3 files changed, 69 insertions(+), 60 deletions(-) commit 3456a09718df24af462ddf793d9d2099e12b9a67 Author: PureSaber Date: Thu, 6 Aug 2026 10:36:19 +0800 Address review: explicit Eid Al-Adha windows and Founding Day rule Refactor isEidAlAdha to use explicit date pairs instead of approximate Eid centers with offsets. Historical windows through 2022 keep the Eid-1..Eid+4 convention; 2023-2029 windows follow the Saudi Exchange holiday calendar. Replace the 2025 Founding Day exception with a generic February 22 rule that rolls to the following Sunday when the 22nd falls on Friday or Saturday. Add calendar tests for Founding Day and Eid Al-Adha. Co-authored-by: Cursor ql/time/calendars/saudiarabia.cpp | 85 ++++++++++++++++++++------------------- ql/time/calendars/saudiarabia.hpp | 5 ++- test-suite/calendars.cpp | 25 ++++++++++++ 3 files changed, 72 insertions(+), 43 deletions(-) commit 008c5e3eba6a5a0ededa8db0158e797a4eb2b563 Author: PureSaber Date: Tue, 28 Jul 2026 08:47:18 +0800 Update Saudi Arabia calendar: Founding Day and Eid Al-Adha through 2029. Co-authored-by: Cursor ql/time/calendars/saudiarabia.cpp | 15 ++++++++++++++- ql/time/calendars/saudiarabia.hpp | 10 ++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) commit 74282fcbcff5b79792116abd2eb35de11979a53b Author: kp9991 Date: Thu, 6 Aug 2026 08:11:05 +1000 Avoid future merge conflicts test-suite/basisswapratehelpers.cpp | 68 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) commit 67c4b848a2ec549e1e2ed14d3bf22e5f03ff7a2e Merge: 4a993152d 7a7898a94 Author: Luigi Ballabio Date: Wed, 5 Aug 2026 15:48:44 +0200 Add November 4, 2026 election day to South Africa calendar and group all election days together (#2697) commit 4a993152d8d3229e417e4b1fe1ea26874b2f8666 Merge: 5af7618f2 24ee7516a Author: Luigi Ballabio Date: Wed, 5 Aug 2026 11:45:07 +0200 RFR swaption support in Gsr (#2655) commit 24ee7516a2975ba6622df7efa8d43920ab269c85 Author: Luigi Ballabio Date: Wed, 5 Aug 2026 10:32:02 +0200 Expanded comment to spell out calculation .../gaussian1djamshidianswaptionengine.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) commit e11ab4f72310a0195e9fc274e98bbe3668cd4993 Author: Eugene Toder Date: Wed, 25 Mar 2026 19:53:15 -0400 Allow defining globalGuess() in bootstrap traits Currently, GlobalBootstrap uses the regular Traits::guess() method. This method was designed for IterativeBootstrap and usually uses previous points to make the guess for the next point. In some traits (ZeroYield, ForwardRate, SimpleZeroYield) it also uses methods that rely on curve's interpolation (zeroRate(), forwardRate()). However, GlobalBootstrap does NOT update interpolation while computing initial guess, so the result is not well defined. We could update interpolation before calling guess() but: 1. This would add significant overhead. 2. Since GlobalBootstrap doesn't run optimizations until it got initial guesses for all points, the guesses are basically constant, so this seems excessive. Instead, add a new method, globalGuess(), which returns the whole array of guesses in one call without using interpolation or data in the curve. It also returns a flag: whether the guesses need to be transformed. This allows skipping exp() in guesses for Discount, because transformInverse is log(). So we avoid one pair of exp()/log calls per pillar. For traits that don't define globalGuess(), we keep using the old logic. Also, allow passing a custom function to generate the initial guess. This is mostly useful in SWIG bindings where you cannot define new traits. Also, make Traits::transformDirect()/transformInverse() methods optional so we don't have to define them for traits that don't need them. ql/termstructures/globalbootstrap.hpp | 114 ++++++++++++++++++------ ql/termstructures/inflation/inflationtraits.hpp | 40 +++++---- ql/termstructures/yield/bootstraptraits.hpp | 71 ++++++++++----- test-suite/piecewiseyieldcurve.cpp | 71 +++++++++++++++ 4 files changed, 229 insertions(+), 67 deletions(-) commit 5af7618f2169c746a09d2e8da869cb757676a389 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 18:29:14 +0200 Modernize calendar test fixtures test-suite/calendars.cpp | 5967 +++++++++++++++++++++++----------------------- 1 file changed, 2918 insertions(+), 3049 deletions(-) commit 0b885a5dcefb31c89641fd16e2ea3b8500610958 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Tue, 4 Aug 2026 17:17:48 +0000 Update copyright list in license LICENSE.TXT | 1 + 1 file changed, 1 insertion(+) commit f4e97a9c041c6ef65322813c9efa7548dbea2930 Merge: 93d2f2201 ce7509ec0 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 19:00:37 +0200 MTM Cross Currency Basis Swap instruments (#2642) commit 93d2f2201c189c7c8dd4d19df3ac70cb5f801fc8 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Tue, 4 Aug 2026 16:12:51 +0000 Update copyright list in license LICENSE.TXT | 1 + 1 file changed, 1 insertion(+) commit 408a896c07e446c2946330dbb8c0adda8ad5f20a Merge: 32a14f043 7d05dcf75 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 17:51:15 +0200 Add Malaysia calendar (#2704) commit 7d05dcf75ab6ce32fa1c1ae150f8cc5b840db257 Author: Lawrenz Law Date: Tue, 4 Aug 2026 20:06:04 +0800 Fix Malaysia holiday table and update tests ql/time/calendars/malaysia.cpp | 2 +- test-suite/calendars.cpp | 145 +++++++++++++++++++++++++---------------- 2 files changed, 90 insertions(+), 57 deletions(-) commit ce7509ec0ba441a6438a313870bccc0c6a48adb8 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 12:45:38 +0200 Use basic input parameters in public interfaces, avoid struct .../fx/discountingmtmcrosscurrencybasisswapengine.cpp | 5 +++-- ql/experimental/fx/mtmcrosscurrencybasisswap.cpp | 11 ++++++----- ql/experimental/fx/mtmcrosscurrencybasisswap.hpp | 19 ++++++++++++------- .../termstructures/crosscurrencyratehelpers.cpp | 7 +++---- .../termstructures/crosscurrencyratehelpers.hpp | 9 ++++----- test-suite/crosscurrencyratehelpers.cpp | 4 ++-- test-suite/mtmcrosscurrencybasisswap.cpp | 15 +++++++-------- 7 files changed, 37 insertions(+), 33 deletions(-) commit 32a14f0438b36b4b2bc8a077af80f734b320c288 Merge: a5b1dbaae 21f9f4e9a Author: Luigi Ballabio Date: Tue, 4 Aug 2026 10:13:57 +0200 Optimize Jamshidian root finding (#2664) commit a5b1dbaae38c9d9e3901e081b8113e0b54f08621 Merge: f11850971 cb88846d3 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 09:42:45 +0200 Fix convertible dividend indexing after settlement (#2702) commit f118509716a2b2fed8e0b51e090617fcb1288074 Merge: dcf4beadc f42913470 Author: Luigi Ballabio Date: Tue, 4 Aug 2026 09:41:48 +0200 Return handles by reference from accessors (#2703) commit 21f9f4e9a3b6359138f0537ff8099b49077014ee Author: Luigi Ballabio Date: Tue, 4 Aug 2026 09:24:31 +0200 Add explanatory comment to optimized code .../swaption/jamshidianswaptionengine.cpp | 27 ++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) commit 9814992d32e7f049a789f20ef800045ebc260871 Author: Your Name Date: Tue, 4 Aug 2026 09:08:07 +0800 Revised Malaysia holiday list to match with Bursa Malaysia ql/time/calendars/malaysia.cpp | 44 +++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 20 deletions(-) commit f2611cf775f7e95afeb92fa458daa8f26967f068 Author: Colin Alberts Date: Mon, 3 Aug 2026 15:34:59 -0500 Make shared on model test-suite/roughhestonmodel.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) commit e0d056c719197c601bd7c38cc86856a1a41d7a4b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 15:01:02 -0500 Comment update. ql/math/ode/fractionalkernelapproximation.hpp | 42 +++++++++++---------------- 1 file changed, 17 insertions(+), 25 deletions(-) commit fa2b9a91f58e14a1094082bdb15a9474690b3366 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:55:02 -0500 Update test comments. test-suite/roughhestonmodel.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit f957c5a6679e4023d756298ad23de44181cd008c Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:49:17 -0500 Comment update. ql/math/ode/fractionalkernelapproximation.hpp | 12 ++++++------ ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 12 ++++++------ ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) commit 4a606bb797c710f56b1ddc3b3727314c0ee2b825 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:43:35 -0500 Minor comment. ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 64a3c4a848b0fc1bce219f07631c9a4346120fa7 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:42:16 -0500 Minor explanation + cleanup. ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 2 ++ 1 file changed, 2 insertions(+) commit fc959f540d6822e0df90d57baff6ab0af2590028 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:34:11 -0500 Comment on safety cap. ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit dcf4beadc92f9308ca202d051f2a7344f04fdd9e Merge: c9ec91e8d 05a7d1307 Author: Luigi Ballabio Date: Mon, 3 Aug 2026 17:19:17 +0200 Use a consistent interface for Heston and rough Heston models (#2708) commit c9ec91e8d74f3c0a6727d0389ea223167c380a03 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 11:23:44 +0000 Bump actions/stale from 10 to 11 Bumps [actions/stale](https://github.com/actions/stale) from 10 to 11. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v10...v11) --- updated-dependencies: - dependency-name: actions/stale dependency-version: '11' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 05a7d1307d58b84aef00596d7930d0672ce58ea7 Author: Luigi Ballabio Date: Mon, 3 Aug 2026 12:28:35 +0200 Uniform interface for Heston and rought Heston models ql/models/equity/roughhestonmodel.cpp | 38 +++++++------- ql/models/equity/roughhestonmodel.hpp | 26 +++------- .../vanilla/analyticroughhestonengine.cpp | 18 +++---- test-suite/roughhestonmodel.cpp | 59 ++++++++++++++-------- 4 files changed, 73 insertions(+), 68 deletions(-) commit c745015f2ce94d8f72c1ad3baf9c08d55634f5b9 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 2 Aug 2026 02:10:05 +0000 Automated fixes by clang-tidy ql/math/randomnumbers/inversecumulativersg.hpp | 2 +- .../operators/triplebandlinearop.cpp | 22 +++++++++++----------- .../finitedifferences/schemes/craigsneydscheme.cpp | 4 ++-- .../finitedifferences/schemes/douglasscheme.cpp | 2 +- .../schemes/hundsdorferscheme.cpp | 4 ++-- .../schemes/modifiedcraigsneydscheme.cpp | 4 ++-- ql/methods/montecarlo/multipathgenerator.hpp | 6 +++--- ql/methods/montecarlo/pathgenerator.hpp | 2 +- .../vanilla/analyticroughhestonengine.cpp | 5 +++-- .../vanilla/analyticroughhestonengine.hpp | 2 +- ql/termstructures/inflation/inflationhelpers.cpp | 4 ++-- ql/termstructures/inflation/inflationhelpers.hpp | 2 +- test-suite/dates.cpp | 2 +- test-suite/roughhestonmodel.cpp | 6 ++++-- 14 files changed, 35 insertions(+), 32 deletions(-) commit 10275255b9b776c5a377c6f225316b2e5bc85ce3 Author: kp9991 Date: Mon, 3 Aug 2026 14:05:38 +1000 copyright ql/termstructures/volatility/optionlet/optionletstripper.cpp | 1 + ql/termstructures/volatility/optionlet/optionletstripper.hpp | 1 + ql/termstructures/volatility/optionlet/optionletstripper1.cpp | 1 + ql/termstructures/volatility/optionlet/optionletstripper1.hpp | 1 + ql/termstructures/volatility/optionlet/optionletstripper2.cpp | 1 + ql/termstructures/volatility/optionlet/optionletstripper2.hpp | 1 + test-suite/optionletstripper.cpp | 1 + 7 files changed, 7 insertions(+) commit 8448724c060807f67e703a658f5b1dcae84df3c0 Author: kp9991 Date: Mon, 3 Aug 2026 14:03:00 +1000 Restoring some of the old checks .../volatility/optionlet/optionletstripper2.cpp | 39 ++++++++++------------ test-suite/optionletstripper.cpp | 17 ++++++---- 2 files changed, 29 insertions(+), 27 deletions(-) commit 9f6677090d1760844e309cb0c7e9dfd8a2a4c21c Author: Your Name Date: Sun, 2 Aug 2026 10:48:50 +0800 Add Malaysia calendar QuantLib.vcxproj | 2 + QuantLib.vcxproj.filters | 6 + ql/CMakeLists.txt | 2 + ql/time/calendars/Makefile.am | 2 + ql/time/calendars/all.hpp | 1 + ql/time/calendars/malaysia.cpp | 282 +++++++++++++++++++++++++++++++++++++++++ ql/time/calendars/malaysia.hpp | 99 +++++++++++++++ test-suite/calendars.cpp | 67 ++++++++++ 8 files changed, 461 insertions(+) commit 0774dd37d15fed3a4f12e76a1f9876c3bda6d207 Author: Colin Alberts Date: Sat, 1 Aug 2026 13:08:14 -0500 Test update. test-suite/roughhestonmodel.cpp | 46 ++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) commit 0dbdd8dacbb8fbc57da0a116d9dff1436cbd4b1b Author: Colin Alberts Date: Sat, 1 Aug 2026 12:59:39 -0500 Init Lifted Heston implementation. .../vanilla/analyticroughhestonengine.cpp | 200 +++++++++++++++++++-- 1 file changed, 190 insertions(+), 10 deletions(-) commit ae430cacf7af5992b5ba4cd94a4ce5d4e3dd494f Author: Colin Alberts Date: Sat, 1 Aug 2026 12:59:10 -0500 Fractional kernel approximation init commit. ql/math/ode/fractionalkernelapproximation.hpp | 195 ++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) commit c7e38fd1ded1c42f4130f6153bccaf9217a689d1 Author: Colin Alberts Date: Sat, 1 Aug 2026 12:58:21 -0500 Minor comment update. ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 75f2b7bbaed2d22c12965c511775e9d99313cc2b Author: Colin Alberts Date: Sat, 1 Aug 2026 12:56:54 -0500 Trimming comments. test-suite/roughhestonmodel.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) commit c82d9e1921b7e06ace53d6d111865b3f3755cd85 Author: Colin Alberts Date: Sat, 1 Aug 2026 12:55:55 -0500 Adding Lifted Grid and support for Lifted Ricatti equation. .../vanilla/analyticroughhestonengine.hpp | 71 ++++++++++++++++++---- 1 file changed, 59 insertions(+), 12 deletions(-) commit e6873ccb8fd3a2fc63222f1bc724d94ea547bf4d Author: Colin Alberts Date: Sat, 1 Aug 2026 12:53:51 -0500 Minor test removal. test-suite/roughhestonmodel.cpp | 141 ++++++++++++---------------------------- 1 file changed, 41 insertions(+), 100 deletions(-) commit 93d517953e1b8760f2ab6f354abea62c7b36d58f Author: Colin Alberts Date: Sat, 1 Aug 2026 12:51:45 -0500 Tests for Lifted Heston model. test-suite/roughhestonmodel.cpp | 481 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 481 insertions(+) commit 08597271437cadd233198796a23b22ca8c14d54a Author: Colin Alberts Date: Sat, 1 Aug 2026 12:47:01 -0500 Add fractional kernel approximation. QuantLib.vcxproj | 1 + QuantLib.vcxproj.filters | 3 +++ ql/CMakeLists.txt | 1 + ql/math/ode/Makefile.am | 3 ++- ql/math/ode/all.hpp | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) commit f91a337b1870649c4e9f747e73c3f62fcd305c38 Author: kp9991 Date: Sat, 1 Aug 2026 12:15:39 +1000 Post-review changes QuantLib.vcxproj | 28 +++++----- QuantLib.vcxproj.filters | 60 +++++++++++----------- ql/CMakeLists.txt | 12 ++--- ql/cashflows/Makefile.am | 2 - ql/cashflows/all.hpp | 1 - ql/experimental/Makefile.am | 1 + ql/experimental/fx/Makefile.am | 32 +++++++++++- ql/experimental/fx/all.hpp | 3 ++ .../discountingmtmcrosscurrencybasisswapengine.cpp | 4 +- .../discountingmtmcrosscurrencybasisswapengine.hpp | 2 +- .../fx}/fxresetcashflows.cpp | 2 +- .../fx}/fxresetcashflows.hpp | 0 .../fx}/mtmcrosscurrencybasisswap.cpp | 4 +- .../fx}/mtmcrosscurrencybasisswap.hpp | 13 ++--- .../termstructures/crosscurrencyratehelpers.cpp | 2 +- .../termstructures/crosscurrencyratehelpers.hpp | 16 ++++-- ql/instruments/Makefile.am | 2 - ql/instruments/all.hpp | 1 - .../constnotionalcrosscurrencybasisswap.hpp | 3 ++ ...nstnotionalcrosscurrencyfixedvsfloatingswap.hpp | 4 ++ ql/pricingengines/swap/Makefile.am | 2 - ql/pricingengines/swap/all.hpp | 1 - test-suite/crosscurrencyratehelpers.cpp | 4 +- test-suite/mtmcrosscurrencybasisswap.cpp | 10 ++-- 24 files changed, 125 insertions(+), 84 deletions(-) commit f429134709f78dd69e6d710fb54fdbad93ef3e45 Author: Eugene Toder Date: Fri, 31 Jul 2026 17:11:48 -0400 Return handles by reference from accessors ql/cashflows/couponpricer.hpp | 4 ++-- ql/cashflows/overnightindexedcouponpricer.hpp | 2 +- ql/experimental/catbonds/montecarlocatbondengine.hpp | 2 +- ql/experimental/coupons/cmsspreadcoupon.hpp | 2 +- ql/indexes/bmaindex.cpp | 2 +- ql/indexes/bmaindex.hpp | 2 +- ql/indexes/equityindex.hpp | 6 +++--- ql/indexes/iborindex.hpp | 4 ++-- ql/indexes/inflationindex.hpp | 8 ++++---- ql/indexes/swapindex.cpp | 4 ++-- ql/indexes/swapindex.hpp | 4 ++-- ql/instruments/forward.hpp | 8 ++++---- ql/instruments/forwardrateagreement.hpp | 4 ++-- ql/models/calibrationhelper.hpp | 2 +- ql/pricingengines/bond/discountingbondengine.hpp | 2 +- ql/pricingengines/bond/riskybondengine.hpp | 8 ++++---- ql/pricingengines/credit/isdacdsengine.hpp | 4 ++-- ql/pricingengines/futures/discountingperpetualfuturesengine.hpp | 6 +++--- ql/pricingengines/inflation/inflationcapfloorengines.hpp | 4 ++-- ql/pricingengines/swap/discountingswapengine.hpp | 2 +- ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp | 2 +- ql/termstructures/volatility/swaption/swaptionvolcube.hpp | 2 +- 22 files changed, 42 insertions(+), 42 deletions(-) commit cb88846d3f579410020c98a99bba5c08298b4012 Author: Alwan Juliawan Date: Fri, 31 Jul 2026 23:39:20 +0700 Fix convertible dividend indexing after settlement ql/pricingengines/bond/discretizedconvertible.cpp | 12 +++----- test-suite/convertiblebonds.cpp | 36 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) commit 60be62969d6585ce223fd37d61c7a74a1acf6917 Merge: 7547e67f6 8d19886a7 Author: Luigi Ballabio Date: Fri, 31 Jul 2026 09:12:20 +0200 Padé Approximation Route for the Rough Heston Riccati Equation (#2682) commit 0642642d03bc843905abfae91a68c2b9981b2513 Author: kp9991 Date: Fri, 31 Jul 2026 10:28:38 +1000 Using the same relinking logic as in oisratehelper.cpp .../termstructures/basisswapratehelpers.cpp | 24 +++++-- .../termstructures/basisswapratehelpers.hpp | 6 +- test-suite/basisswapratehelpers.cpp | 73 ++++++++++++++++++++-- 3 files changed, 92 insertions(+), 11 deletions(-) commit 7547e67f6a1e9dec738b5ee9212606518065f6ee Merge: c8017878c a7e763032 Author: Luigi Ballabio Date: Thu, 30 Jul 2026 22:12:21 +0200 Fix calendar and day-count documentation typos (#2689) commit c8017878cacb43bdd4c5d2cf82a26dcbd7527f18 Merge: 32ab91f0b 77b4683a1 Author: Luigi Ballabio Date: Thu, 30 Jul 2026 22:11:59 +0200 Add Singapore exchange holidays for 2027 (#2687) commit 8d19886a7dfeb2f0231a0ed2bccd9e9ba98aae74 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 30 Jul 2026 13:05:40 -0500 Changing approximation scheme name. .../vanilla/analyticroughhestonengine.cpp | 8 ++++---- .../vanilla/analyticroughhestonengine.hpp | 12 ++++++------ test-suite/roughhestonmodel.cpp | 20 ++++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) commit e1876723371e79d06c487cbd23837e4fede9fff4 Author: kp9991 Date: Thu, 30 Jul 2026 21:02:09 +1000 OvernightOvernightBasisSwapRateHelper .../termstructures/basisswapratehelpers.cpp | 128 +++++++++++++++++++++ .../termstructures/basisswapratehelpers.hpp | 64 ++++++++++- test-suite/basisswapratehelpers.cpp | 120 +++++++++++++++++++ 3 files changed, 311 insertions(+), 1 deletion(-) commit 5eb9a6b02e4c46b66ba855feb6e89e60a393c029 Author: kp9991 Date: Thu, 30 Jul 2026 19:07:26 +1000 copyright string (apparently good to have) ql/instruments/fixedvsfloatingswap.cpp | 1 + ql/instruments/fixedvsfloatingswap.hpp | 1 + ql/instruments/nonstandardswap.cpp | 1 + ql/instruments/nonstandardswap.hpp | 1 + ql/models/shortrate/onefactormodels/gaussian1dmodel.cpp | 1 + ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp | 1 + ql/pricingengines/swaption/gaussian1djamshidianswaptionengine.cpp | 1 + ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.cpp | 1 + ql/pricingengines/swaption/gaussian1dswaptionengine.cpp | 1 + ql/pricingengines/swaption/gaussian1dswaptionengine.hpp | 1 + test-suite/gsr.cpp | 1 + test-suite/multipleresetsswap.cpp | 1 + test-suite/overnightindexedswap.cpp | 1 + 13 files changed, 13 insertions(+) commit 0b1d609b47b14e18bfbceede748b30b9e78c8d64 Author: kp9991 Date: Thu, 30 Jul 2026 19:04:27 +1000 Remove old Jamshidian from scope .../swaption/gaussian1dswaptionengine.hpp | 6 +-- .../swaption/jamshidianswaptionengine.cpp | 50 ++++------------------ test-suite/gsr.cpp | 7 +-- 3 files changed, 12 insertions(+), 51 deletions(-) commit dec2eae21d2afeb167c80b2cc555cc7412dc43f5 Author: kp9991 Date: Thu, 30 Jul 2026 19:00:20 +1000 Simplification ql/cashflows/overnightindexedcoupon.cpp | 10 - ql/cashflows/overnightindexedcoupon.hpp | 10 - ql/instruments/floatfloatswap.cpp | 45 +--- .../shortrate/onefactormodels/gaussian1dmodel.cpp | 13 +- .../shortrate/onefactormodels/gaussian1dmodel.hpp | 6 +- .../gaussian1dfloatfloatswaptionengine.cpp | 36 +-- .../gaussian1dnonstandardswaptionengine.cpp | 10 +- .../swaption/gaussian1dswaptionengine.cpp | 13 +- .../swaption/gaussian1dswaptionengine.hpp | 11 +- .../swaption/jamshidianswaptionengine.cpp | 42 ++-- test-suite/gsr.cpp | 250 +-------------------- 11 files changed, 58 insertions(+), 388 deletions(-) commit 954b4988b748c5ce49f21ac894456dc87e1f62d3 Author: kp9991 Date: Thu, 30 Jul 2026 16:44:56 +1000 MC unit tests test-suite/gsr.cpp | 338 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) commit 8c99e350fa333441c9b73a171e4b6545ebb7d879 Author: kp9991 Date: Thu, 30 Jul 2026 15:26:46 +1000 Fixing NonstandardSwap(const FixedVsFloatingSwap&) ql/instruments/nonstandardswap.cpp | 15 ++++++++- ql/instruments/nonstandardswap.hpp | 7 +++++ test-suite/overnightindexedswap.cpp | 63 +++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) commit 5f93a94eefbe1582c640465972b345e1f907e12a Author: kp9991 Date: Thu, 30 Jul 2026 15:06:29 +1000 post-review ql/cashflows/overnightindexedcoupon.cpp | 10 + ql/cashflows/overnightindexedcoupon.hpp | 10 + ql/instruments/floatfloatswap.cpp | 18 +- .../shortrate/onefactormodels/gaussian1dmodel.cpp | 21 ++ .../shortrate/onefactormodels/gaussian1dmodel.hpp | 8 + .../gaussian1dfloatfloatswaptionengine.cpp | 67 +++---- .../gaussian1dnonstandardswaptionengine.cpp | 87 ++++----- .../swaption/gaussian1dswaptionengine.cpp | 88 +++------ .../swaption/gaussian1dswaptionengine.hpp | 15 ++ test-suite/gsr.cpp | 215 +++++++++++++++++---- 10 files changed, 346 insertions(+), 193 deletions(-) commit 32ab91f0b8c66971513ee9d2e0ae55b492cf1ca3 Merge: d81c51119 1ddacb85a Author: Luigi Ballabio Date: Wed, 29 Jul 2026 15:55:33 +0200 fix: check for non-zero leg BPS in FloatFloatSwap fairSpread calculations (#2678) commit d81c51119f6ba4cf2d32d813d91756cbeee36a33 Merge: 415a073ff d27edd42d Author: Luigi Ballabio Date: Wed, 29 Jul 2026 15:54:44 +0200 Use the default calculation of the trade date in CDS helpers (#2698) commit 415a073ffe02be1e136077d1c995ed9995b9acf1 Merge: 373b7c071 c18a5005f Author: Luigi Ballabio Date: Wed, 29 Jul 2026 13:12:06 +0200 Reduce temporary allocations in numerical methods (#2677) commit 7def65cd798b2ca99fc87a21772d33a145247f9e Author: kp9991 Date: Wed, 29 Jul 2026 21:12:04 +1000 Broken Period stubs ql/cashflows/iborcoupon.cpp | 131 ++++++++++++++++++++++++++ ql/cashflows/iborcoupon.hpp | 60 ++++++++++++ test-suite/cashflows.cpp | 223 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 414 insertions(+) commit d27edd42df5848fce39accf2c980210a3c4033b2 Author: Luigi Ballabio Date: Wed, 29 Jul 2026 12:15:04 +0200 Allow overriding trade date in CDS helpers .../credit/defaultprobabilityhelpers.cpp | 19 +++++++++++-------- .../credit/defaultprobabilityhelpers.hpp | 10 +++++++--- 2 files changed, 18 insertions(+), 11 deletions(-) commit 7a7898a940e40d577eda0f8412ac6f778994c127 Author: Francois Botha Date: Wed, 29 Jul 2026 11:19:42 +0200 Add November 4, 2026 election day to South Africa calendar and group all election days together ql/time/calendars/southafrica.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit e44079a6ce9fa98a15e19b10293d0e655c88bab9 Author: Luigi Ballabio Date: Wed, 29 Jul 2026 11:24:02 +0200 Use the default calculation of the trade date in CDS helpers. They were setting it explicitly, but this caused CDS using the defaults to be off-par when repriced on the resulting curve. ql/termstructures/credit/defaultprobabilityhelpers.cpp | 5 ++--- test-suite/defaultprobabilitycurves.cpp | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) commit 1be08984f023cdca5eb79ac4699caac60e4be2ff Author: kp9991 Date: Tue, 28 Jul 2026 21:35:00 +1000 Copyright ql/experimental/termstructures/basisswapratehelpers.cpp | 1 + ql/experimental/termstructures/basisswapratehelpers.hpp | 1 + test-suite/basisswapratehelpers.cpp | 1 + 3 files changed, 3 insertions(+) commit 572006298459db23907561e15dfec884f2768105 Author: kp9991 Date: Tue, 28 Jul 2026 21:25:04 +1000 Removing ql_require ql/experimental/termstructures/basisswapratehelpers.cpp | 6 ------ ql/experimental/termstructures/basisswapratehelpers.hpp | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) commit 490f0fb771ab3f6f4f24ed60d15653d65d874c36 Author: kp9991 Date: Tue, 28 Jul 2026 20:52:21 +1000 Using DateGeneration::Rule rather than everything backwards .../termstructures/basisswapratehelpers.cpp | 32 ++++++++++----- .../termstructures/basisswapratehelpers.hpp | 25 ++++++------ test-suite/basisswapratehelpers.cpp | 47 ++++++++++++++++++++++ 3 files changed, 81 insertions(+), 23 deletions(-) commit 1ddacb85a16a70d5ee9243c1c0e77f377bb1148e Author: Amit Jha Date: Tue, 28 Jul 2026 16:14:25 +0530 Restore expired FloatFloatSwap fair-spread test test-suite/floatfloatswap.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit b8fd1610020b7db7e72f58d7943bb26db4afe8a5 Author: kp9991 Date: Tue, 28 Jul 2026 20:16:27 +1000 Comment ql/experimental/termstructures/basisswapratehelpers.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ae7a92aefd27bceb7cd368434ef6ff63af90c132 Author: Amit Jha Date: Tue, 28 Jul 2026 14:53:19 +0530 Test zero-BPS FloatFloatSwap fair spreads test-suite/floatfloatswap.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) commit 373b7c071d00f87ca9b5dd15763427d24cb39222 Merge: 9395f8316 244b66b00 Author: Luigi Ballabio Date: Tue, 28 Jul 2026 10:33:19 +0200 fix: add September 28 2026 Chuseok substitute holiday to SouthKorea calendar (#2680) commit c18a5005f8799d94d9acbe34fabef25aa1f20d37 Author: JewonJeon Date: Tue, 28 Jul 2026 16:04:57 +0900 Fix signedness of auto loop indices ql/math/randomnumbers/inversecumulativersg.hpp | 4 ++-- .../operators/triplebandlinearop.cpp | 22 +++++++++++----------- .../finitedifferences/schemes/craigsneydscheme.cpp | 4 ++-- .../finitedifferences/schemes/douglasscheme.cpp | 2 +- .../schemes/hundsdorferscheme.cpp | 4 ++-- .../schemes/modifiedcraigsneydscheme.cpp | 4 ++-- ql/methods/montecarlo/multipathgenerator.hpp | 6 +++--- ql/methods/montecarlo/pathgenerator.hpp | 2 +- 8 files changed, 24 insertions(+), 24 deletions(-) commit 5dbcdffd49003b548bdf61f7204cc7e6b5148912 Author: kp9991 Date: Tue, 28 Jul 2026 13:43:20 +1000 Schedule generation backwards .../termstructures/basisswapratehelpers.cpp | 22 ++++++++++++---------- test-suite/basisswapratehelpers.cpp | 10 +++++----- 2 files changed, 17 insertions(+), 15 deletions(-) commit a7e7630323df8e8c6094d144ae048fa68343a192 Author: PureSaber Date: Tue, 28 Jul 2026 08:47:55 +0800 Fix calendar and day-count documentation typos (31st, Pandemic). Co-authored-by: Cursor ql/time/calendars/argentina.hpp | 2 +- ql/time/calendars/sweden.hpp | 2 +- ql/time/calendars/thailand.cpp | 4 ++-- ql/time/calendars/thailand.hpp | 4 ++-- ql/time/daycounters/thirty360.hpp | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) commit 77b4683a12e12eb7efd063c50038f55b7cabdda5 Author: PureSaber Date: Tue, 28 Jul 2026 08:46:13 +0800 Add Singapore exchange holidays for 2027. Co-authored-by: Cursor ql/time/calendars/singapore.cpp | 16 ++++++++++++++++ ql/time/calendars/singapore.hpp | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) commit 82ef7f9dd1d231a4c6aba4bd575648ac94cdb1ce Author: kp9991 Date: Mon, 27 Jul 2026 22:15:48 +1000 Fix intermediate notional exchange date and expose MtM FX resets ql/instruments/mtmcrosscurrencybasisswap.cpp | 21 ++++++++---- ql/instruments/mtmcrosscurrencybasisswap.hpp | 22 ++++++++++++ .../discountingmtmcrosscurrencybasisswapengine.cpp | 13 +++++++ test-suite/mtmcrosscurrencybasisswap.cpp | 40 +++++++++++++++++++--- 4 files changed, 84 insertions(+), 12 deletions(-) commit 9395f831636db756f256e99a134e71a3f316b9f1 Author: Luigi Ballabio Date: Mon, 27 Jul 2026 09:48:31 +0200 Upgrade to clang-tidy 20 .github/workflows/tidy.yml | 2 +- CMakePresets.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 28a3a8577287335d6dcd96767237c67aaa31e865 Author: Luigi Ballabio Date: Mon, 27 Jul 2026 10:08:52 +0200 Avoid deprecated Ubuntu runner .github/workflows/coveralls.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 244b66b00d7d10e54562f9d5492921bac9e4fd6b Author: AIM-IT4 <77675138+AIM-IT4@users.noreply.github.com> Date: Mon, 27 Jul 2026 09:20:25 +0000 Update KRX holiday test for 2026 Chuseok test-suite/calendars.cpp | 1 + 1 file changed, 1 insertion(+) commit 5cd442f189eae94e8f070c9719b44898cf22225e Author: Amit Kumar Jha <77675138+AIM-IT4@users.noreply.github.com> Date: Mon, 27 Jul 2026 13:43:45 +0530 Fix South Korea Chuseok substitute holiday for 2026 ql/time/calendars/southkorea.cpp | 2 +- test-suite/calendars.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) commit 13df54812f460bf8e5362471ceb961bee40e5f65 Author: Luigi Ballabio Date: Mon, 27 Jul 2026 08:43:11 +0200 Prevent a clang-tidy fix from causing a compilation error ql/math/optimization/cmaes.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0c4a719cfee74b2305d7bae0ab245f202c97befb Author: kp9991 Date: Mon, 27 Jul 2026 07:24:42 +1000 Proper FX fixing convention ql/cashflows/fxresetcashflows.cpp | 8 ++++++ ql/cashflows/fxresetcashflows.hpp | 3 ++ .../termstructures/crosscurrencyratehelpers.cpp | 4 +-- .../termstructures/crosscurrencyratehelpers.hpp | 3 +- ql/instruments/mtmcrosscurrencybasisswap.cpp | 3 +- ql/instruments/mtmcrosscurrencybasisswap.hpp | 8 ++++-- .../discountingmtmcrosscurrencybasisswapengine.cpp | 9 ++++-- .../discountingmtmcrosscurrencybasisswapengine.hpp | 11 ++++++-- test-suite/mtmcrosscurrencybasisswap.cpp | 32 ++++++++++++++++++---- 9 files changed, 63 insertions(+), 18 deletions(-) commit 2b2868dc22c42130565382a4954f10d562254d3e Author: kp9991 Date: Mon, 27 Jul 2026 05:51:10 +1000 Simplifying ql/instruments/crosscurrencyswap.cpp | 9 +++++---- ql/instruments/crosscurrencyswap.hpp | 1 + ql/instruments/mtmcrosscurrencybasisswap.cpp | 7 +------ 3 files changed, 7 insertions(+), 10 deletions(-) commit ddc14f457972e7f5f186716064eb3c9d51f84c61 Author: kp9991 Date: Mon, 27 Jul 2026 05:32:43 +1000 Copyright ql/cashflows/fxresetcashflows.cpp | 2 ++ ql/cashflows/fxresetcashflows.hpp | 2 ++ ql/experimental/termstructures/crosscurrencyratehelpers.cpp | 1 + ql/experimental/termstructures/crosscurrencyratehelpers.hpp | 1 + ql/instruments/constnotionalcrosscurrencyswap.hpp | 1 + ql/instruments/crosscurrencyswap.cpp | 1 + ql/instruments/crosscurrencyswap.hpp | 1 + ql/instruments/mtmcrosscurrencybasisswap.cpp | 2 ++ ql/instruments/mtmcrosscurrencybasisswap.hpp | 2 ++ ql/pricingengines/swap/discountingmtmcrosscurrencybasisswapengine.cpp | 2 ++ ql/pricingengines/swap/discountingmtmcrosscurrencybasisswapengine.hpp | 2 ++ test-suite/crosscurrencyratehelpers.cpp | 1 + test-suite/mtmcrosscurrencybasisswap.cpp | 2 ++ 13 files changed, 20 insertions(+) commit fbd5c55e62be3f7fb3905c559974a9f747a88f72 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sun, 26 Jul 2026 09:37:12 -0500 Update enum class in test suite. test-suite/roughhestonmodel.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) commit 35d8318fbda1ca196a0dd236b2c6ce59a72b3ed8 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sun, 26 Jul 2026 09:35:30 -0500 Change enum to enum class for approximation methods. ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 5 +++-- ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) commit ed69be01ce599a6f2ca36305774498cca6d6057a Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sun, 26 Jul 2026 08:53:14 -0500 Code cleanup. .../vanilla/analyticroughhestonengine.cpp | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) commit f472647a5bcd88a1ae22da520994ae02de4017be Author: kp9991 Date: Sun, 26 Jul 2026 19:52:01 +1000 useIndexedCoupons for xccy swaps .../termstructures/crosscurrencyratehelpers.cpp | 50 +++++++++---- .../termstructures/crosscurrencyratehelpers.hpp | 21 ++++-- .../constnotionalcrosscurrencybasisswap.cpp | 10 ++- .../constnotionalcrosscurrencybasisswap.hpp | 6 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.cpp | 9 ++- ...nstnotionalcrosscurrencyfixedvsfloatingswap.hpp | 6 +- ql/instruments/mtmcrosscurrencybasisswap.cpp | 10 ++- ql/instruments/mtmcrosscurrencybasisswap.hpp | 7 +- test-suite/crosscurrencyratehelpers.cpp | 83 ++++++++++++++++++++++ 9 files changed, 171 insertions(+), 31 deletions(-) commit 7a701be3febb90087948d5d9e5141e5eb9e0eac6 Author: kp9991 Date: Sun, 26 Jul 2026 09:54:00 +1000 Reset cash flows object ql/cashflows/fxresetcashflows.cpp | 167 ++++++++++--- ql/cashflows/fxresetcashflows.hpp | 126 +++++++--- .../termstructures/crosscurrencyratehelpers.cpp | 122 +--------- .../termstructures/crosscurrencyratehelpers.hpp | 13 +- ql/instruments/mtmcrosscurrencybasisswap.cpp | 53 ++++- ql/instruments/mtmcrosscurrencybasisswap.hpp | 55 ++++- .../discountingmtmcrosscurrencybasisswapengine.cpp | 50 +++- .../discountingmtmcrosscurrencybasisswapengine.hpp | 14 +- test-suite/crosscurrencyratehelpers.cpp | 134 +++++++++++ test-suite/mtmcrosscurrencybasisswap.cpp | 261 ++++++++++++++++++++- 10 files changed, 754 insertions(+), 241 deletions(-) commit 85540e6e34f3aca010929984c30b43fef27f6757 Author: kp9991 Date: Sun, 26 Jul 2026 05:04:50 +1000 Added useIndexedCoupons to IborIborBasisSwapRateHelper .../termstructures/basisswapratehelpers.cpp | 14 +++++--- .../termstructures/basisswapratehelpers.hpp | 7 +++- test-suite/basisswapratehelpers.cpp | 39 ++++++++++++++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) commit d92f1fa71e5ba88fd88bf92cd0960d3af49f1f0f Author: kp9991 Date: Sat, 25 Jul 2026 15:58:26 +1000 Separating freqs on the two legs .../termstructures/basisswapratehelpers.cpp | 32 ++++++++++--- .../termstructures/basisswapratehelpers.hpp | 18 +++++-- test-suite/basisswapratehelpers.cpp | 56 ++++++++++++++++++++++ 3 files changed, 96 insertions(+), 10 deletions(-) commit 51b56a7edc63f2ad24e3d394d61374160443c3fb Author: Amit Jha Date: Sat, 25 Jul 2026 07:34:23 +0530 fix: check for non-zero leg BPS in FloatFloatSwap fairSpread calculations ql/instruments/floatfloatswap.cpp | 4 ++-- test-suite/floatfloatswap.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) commit c356fbd1cdaf005afb50eb065ce84fb090f1838d Author: JewonJeon Date: Sat, 25 Jul 2026 10:23:16 +0900 Reduce temporary allocations in numerical methods ql/math/randomnumbers/inversecumulativersg.hpp | 4 +- .../operators/triplebandlinearop.cpp | 146 +++++++++++---------- .../operators/triplebandlinearop.hpp | 1 + .../finitedifferences/schemes/craigsneydscheme.cpp | 14 +- .../finitedifferences/schemes/douglasscheme.cpp | 6 +- .../schemes/hundsdorferscheme.cpp | 16 +-- .../schemes/methodoflinesscheme.cpp | 8 +- .../schemes/modifiedcraigsneydscheme.cpp | 16 +-- ql/methods/montecarlo/multipathgenerator.hpp | 21 ++- ql/methods/montecarlo/pathgenerator.hpp | 19 ++- 10 files changed, 130 insertions(+), 121 deletions(-) commit c6c1d2097c510cf114fae69037271550ea96ff11 Author: Colin Alberts Date: Fri, 24 Jul 2026 14:15:26 -0500 Transfer Pade approximation code to new branch. .../vanilla/analyticroughhestonengine.cpp | 215 +++++++++++++++++++-- 1 file changed, 200 insertions(+), 15 deletions(-) commit b8b55faa300c6e06ef729067c6bbe4df8f6997dc Author: Colin Alberts Date: Fri, 24 Jul 2026 14:07:09 -0500 Adding tests for Rough Heston Pade approximation. test-suite/roughhestonmodel.cpp | 449 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 449 insertions(+) commit 26c576cb26496e84a09cfa0e6172fe04602f4e2d Author: Colin Alberts Date: Fri, 24 Jul 2026 14:04:51 -0500 Update description. ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 05b0efd84685c939a9854d8a10362798368c246c Author: Colin Alberts Date: Fri, 24 Jul 2026 13:58:26 -0500 Adding Ricatti coefficients. ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 9f96ac4ae2aaf69c4e590e757ec8d5cf9ff9b2ec Author: Colin Alberts Date: Fri, 24 Jul 2026 13:55:17 -0500 Adding support for rational Pade approximations. .../vanilla/analyticroughhestonengine.hpp | 54 ++++++++++++++++++---- 1 file changed, 44 insertions(+), 10 deletions(-) commit d8fa390c62ee13b4642395b2cfd0ad0f624e41cc Author: kp9991 Date: Sat, 25 Jul 2026 04:45:43 +1000 Restore the usage of the old ref date for Ibor .../volatility/optionlet/optionletstripper.cpp | 16 +++++++ .../volatility/optionlet/optionletstripper.hpp | 3 ++ .../volatility/optionlet/optionletstripper1.cpp | 2 +- .../volatility/optionlet/optionletstripper2.cpp | 3 +- test-suite/optionletstripper.cpp | 55 ++++++++++++++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) commit ecf01b5989f69a8381e656d95c35a1454540085b Merge: d51150bbf b4b29f31e Author: Luigi Ballabio Date: Fri, 24 Jul 2026 18:44:45 +0200 Rough Heston Model with Semi-Analytic Fourier Pricing Engine and Fractional ODE Solver (#2648) commit d51150bbf115fafc97aabb83074471dfabe07c71 Merge: b56b4b2af 3da3c5526 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 17:47:23 +0200 fix: use dirty price in CallableBond effective duration and convexity (#2671) commit b56b4b2af0ba994d676bcfcf852711e537f985cc Merge: 3a4fb5ea6 936ceaf01 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 17:46:51 +0200 Add Indonesia holidays for 2015-2026 (#2676) commit b4b29f31ee136bb423fa3201dd5f6b83c5e43751 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 17:11:38 +0200 Turn some comments into Doxygen docs ql/math/integrals/fourierintegration.hpp | 27 ++++++++++++++++------ ql/models/equity/roughhestonmodel.hpp | 12 +++++----- .../vanilla/analyticroughhestonengine.hpp | 14 ++++++----- 3 files changed, 34 insertions(+), 19 deletions(-) commit 3a4fb5ea6ba0059f962d69704cd3146b98c5561e Merge: 7d7c1ded0 b2cd65148 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 16:39:21 +0200 Add CMA-ES Optimizer (#2654) commit 7d7c1ded010623a46870219a10eb0a9f2f64b9ab Merge: c4a2d93f3 d34ea2648 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 16:27:34 +0200 Agent/clarify expected tranche loss units (#2672) commit c4a2d93f339bcf199e9066cb9f9caa10fad1b2ba Merge: 9d551ef02 712017322 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 14:55:58 +0200 OIS-Ibor basis bootstrap (#2674) commit d34ea2648e395f55554f27c69a9253bcf19c6e74 Author: Amit Jha Date: Fri, 24 Jul 2026 17:45:43 +0530 docs: update Doxygen comments for expectedTrancheLoss ql/experimental/credit/defaultlossmodel.hpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 3da3c5526d4be8cd65f0f8fe40bb267df2050706 Author: Amit Jha Date: Fri, 24 Jul 2026 17:41:11 +0530 test: update callable bond effective duration test with issue #1882 case test-suite/callablebonds.cpp | 91 +++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 30 deletions(-) commit 5c76256c784af77b8fd5362f49a27d2e4aa43581 Author: kp9991 Date: Fri, 24 Jul 2026 20:57:46 +1000 Payment lag should only apply to coupons .../termstructures/crosscurrencyratehelpers.cpp | 81 +++++++++++----------- .../termstructures/crosscurrencyratehelpers.hpp | 6 +- .../constnotionalcrosscurrencybasisswap.cpp | 8 +-- .../constnotionalcrosscurrencybasisswap.hpp | 4 +- ...nstnotionalcrosscurrencyfixedvsfloatingswap.cpp | 10 +-- ...nstnotionalcrosscurrencyfixedvsfloatingswap.hpp | 4 +- ql/instruments/crosscurrencyswap.cpp | 19 +++-- ql/instruments/crosscurrencyswap.hpp | 2 - ql/instruments/mtmcrosscurrencybasisswap.cpp | 28 ++++---- ql/instruments/mtmcrosscurrencybasisswap.hpp | 5 ++ test-suite/crosscurrencyratehelpers.cpp | 67 +++++++++++++++++- test-suite/mtmcrosscurrencybasisswap.cpp | 43 ++++++++---- 12 files changed, 186 insertions(+), 91 deletions(-) commit 71201732257876c077f880cda852d31e5c6816a6 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 12:39:25 +0200 Improve commit. For the ON-IBOR helper, we can refer to "overnight" and "ibor" instead of "base" and "other", which makes it more clear. Also, the default case is described first. .../termstructures/basisswapratehelpers.hpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 936ceaf01dba3ce86e401b4e342bae22d2c3b394 Author: DMZ22 Date: Fri, 24 Jul 2026 14:09:28 +0530 Move Labour Day and Pancasila Day to the rule-based section Both are fixed-date holidays, but neither applies to the whole range the calendar covers: 1 May became a national holiday in 2014 and 1 June in 2017, so each rule carries a year guard. Verified behaviour-preserving over 2005-2026 (every day compared against the previous revision, no differences) and still an exact match against the IDX session list for 2015-2026. ql/time/calendars/indonesia.cpp | 38 ++++---------------------------------- 1 file changed, 4 insertions(+), 34 deletions(-) commit 9d551ef02761c9fcd1051a2e64ce70b18a17957c Merge: 2570781f1 3c3dddf64 Author: Luigi Ballabio Date: Fri, 24 Jul 2026 10:16:00 +0200 Add Hong Kong holidays for 2026 (#2673) commit f5976470483f6e6bbefa9a8b79f48455c7fd71d3 Author: kp9991 Date: Fri, 24 Jul 2026 14:29:54 +1000 Exposing swap() for helpers .../termstructures/crosscurrencyratehelpers.cpp | 92 +++++++++++++++++----- .../termstructures/crosscurrencyratehelpers.hpp | 28 +++++++ test-suite/mtmcrosscurrencybasisswap.cpp | 25 ++++++ 3 files changed, 125 insertions(+), 20 deletions(-) commit 99cc8ca48316a7957fbd6dfa0f6910f588f2b935 Author: kp9991 Date: Fri, 24 Jul 2026 14:05:06 +1000 comment ql/instruments/constnotionalcrosscurrencyswap.hpp | 2 ++ 1 file changed, 2 insertions(+) commit 6e5dcb4412ba87d95c63a19ecd0a0aec010313d2 Author: kp9991 Date: Fri, 24 Jul 2026 14:02:23 +1000 FX Reset notional exchange cashflows QuantLib.vcxproj | 3 +- QuantLib.vcxproj.filters | 9 +- ql/CMakeLists.txt | 3 +- ql/cashflows/Makefile.am | 2 + ql/cashflows/all.hpp | 1 + ql/cashflows/fxresetcashflows.cpp | 149 +++++++++++++++++ ql/cashflows/fxresetcashflows.hpp | 131 +++++++++++++++ ql/instruments/Makefile.am | 1 - ql/instruments/constnotionalcrosscurrencyswap.hpp | 43 +---- ql/instruments/mtmcrosscurrencybasisswap.cpp | 106 ++++++------ ql/instruments/mtmcrosscurrencybasisswap.hpp | 58 +++---- .../discountingmtmcrosscurrencybasisswapengine.cpp | 180 +++------------------ .../discountingmtmcrosscurrencybasisswapengine.hpp | 14 +- test-suite/mtmcrosscurrencybasisswap.cpp | 180 +++++++++++++++++++++ 14 files changed, 578 insertions(+), 302 deletions(-) commit 7b439edfa5bac89f5bdb1dbad49c37dae9f02f04 Author: kp9991 Date: Fri, 24 Jul 2026 14:02:04 +1000 FX Reset notional exchange cashflows ql/instruments/constnotionalcrosscurrencyswap.cpp | 36 ----------------------- 1 file changed, 36 deletions(-) commit f47635819a9e86c0e98a83dbab15b50e6bf6ede5 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:34:57 -0500 Extracting integration as its own class. ql/math/integrals/fourierintegration.cpp | 278 +++++++++++++++++++++++++++++++ ql/math/integrals/fourierintegration.hpp | 101 +++++++++++ 2 files changed, 379 insertions(+) commit 26c55f0719e79a5b334e64d1d936613c0e053edb Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:32:09 -0500 Using Integration typedef instead of class. ql/pricingengines/vanilla/analyticptdhestonengine.hpp | 2 +- ql/pricingengines/vanilla/analyticroughhestonengine.hpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) commit 09f88711b4eb3292fcfbf1157e9c477adeaa8c17 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:31:11 -0500 Removing integration methods from Analytic Heston Engines. ql/pricingengines/vanilla/analytichestonengine.cpp | 260 --------------------- ql/pricingengines/vanilla/analytichestonengine.hpp | 63 +---- 2 files changed, 3 insertions(+), 320 deletions(-) commit e7e467fafe76c14467863594d7f519d025cf1d9b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:29:35 -0500 Adding Fourier Integration standalone engine. QuantLib.vcxproj | 2 ++ QuantLib.vcxproj.filters | 6 ++++++ ql/CMakeLists.txt | 2 ++ ql/math/integrals/Makefile.am | 2 ++ ql/math/integrals/all.hpp | 1 + 5 files changed, 13 insertions(+) commit cd8a3b4cb77fd3c6e78aeb49d41ffc1c4fcf0bfc Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:26:40 -0500 Change from shared pointer to copy as shared pointer is overengineering in this scenario. ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit e412db880d4177b563cc5a461ae1c9ef0a34b62b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:25:30 -0500 Changing to BOOST_CHECK_EXCEPTION for tighter fails. test-suite/roughhestonmodel.cpp | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) commit d310c8191f61e8eda7954ec47ad3b484ba0aeccc Author: DMZ22 Date: Fri, 24 Jul 2026 00:25:22 +0530 Add Indonesia holidays for 2015-2026 ql/time/calendars/indonesia.cpp | 337 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) commit 44861bb2a2af06e231e8b0d6770ce5b855d51216 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:24:44 -0500 Add CMAES. ql/math/optimization/all.hpp | 1 + 1 file changed, 1 insertion(+) commit 7be9364773454ba764b78a1b0b3da6812c043458 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:24:27 -0500 Put CMAES in optimization Makefile. ql/math/optimization/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 87430c5338349cfa35566fbc7a9e7f0f911b572b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:24:07 -0500 Change import from experimental to optimization. ql/math/optimization/cmaes.cpp | 2 +- ql/math/optimization/cmaes.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 8770dcedbebadc25cda3c4e632791418f8558a1c Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:23:18 -0500 Change CMAES import path to new optimization path. test-suite/optimizers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 468937a4acec402d0d4414e383633bf7d4627a29 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:22:44 -0500 Moving CMAES function from experimental to optimization folder. QuantLib.vcxproj | 4 ++-- QuantLib.vcxproj.filters | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) commit 26122f8bfb8af4f12b3b0abfe9bb89e9ed0a7d66 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Thu, 23 Jul 2026 10:22:03 -0500 Removing CMAES method from experimental. ql/CMakeLists.txt | 4 ++-- ql/experimental/math/Makefile.am | 2 -- ql/experimental/math/all.hpp | 1 - ql/{experimental/math => math/optimization}/cmaes.cpp | 0 ql/{experimental/math => math/optimization}/cmaes.hpp | 0 5 files changed, 2 insertions(+), 5 deletions(-) commit 2570781f1c69552a40ebcce4f4013cc21ed32e0a Author: Luigi Ballabio Date: Thu, 23 Jul 2026 15:11:25 +0200 Remove workflow replacing maybe-not-AAD-compatible macros The ratio of true positives to false was not worth the additional PRs and CI builds .github/workflows/test-macros.yml | 24 ------------------------ 1 file changed, 24 deletions(-) commit 65d42bb994b4c484c20de9cbe2c0d97ba6eccbdc Merge: 6fd9bbad7 c2d1f44c7 Author: Luigi Ballabio Date: Thu, 23 Jul 2026 15:03:44 +0200 Preserve ATM vols in SABR swaption-cube calibration (#2656) commit 3c2076ec132d905127943a29af2eb3dbe18e3d10 Author: kp9991 Date: Thu, 23 Jul 2026 11:48:11 +1000 Reverting unintended change ql/userconfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c2d1f44c73fffe36b9d48e8a272131bbde4f5833 Author: kp9991 Date: Thu, 23 Jul 2026 08:47:15 +1000 Refact .../swaption/sabrswaptionvolatilitycube.hpp | 201 +++++++++++++-------- 1 file changed, 130 insertions(+), 71 deletions(-) commit 802cc1f3ab043e8864bacb1589c1d2818bbe38f3 Author: kp9991 Date: Thu, 23 Jul 2026 08:36:54 +1000 Using a single spreadVolInterpolationMethod .../swaption/sabrswaptionvolatilitycube.hpp | 206 +++++---------------- 1 file changed, 44 insertions(+), 162 deletions(-) commit 3c3dddf646d49966c7a4bfe19504060cd6c4f109 Author: DMZ22 Date: Wed, 22 Jul 2026 22:37:48 +0530 Add Hong Kong holidays for 2026 ql/time/calendars/hongkong.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 26e93ba94c3197d998e1c400715bbb27097b9978 Merge: 603882111 e5c21db13 Author: Amit Kumar Jha <77675138+AIM-IT4@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:09:08 +0530 Merge pull request #1 from AIM-IT4/agent/clarify-expected-tranche-loss-units Clarify expected tranche loss units commit e5c21db135341b069718618fc397cb6487f8e8f2 Author: Amit Kumar Jha <77675138+AIM-IT4@users.noreply.github.com> Date: Wed, 22 Jul 2026 22:07:44 +0530 Clarify expected tranche loss units ql/experimental/credit/defaultlossmodel.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 6fd9bbad77e1e9d58af44450aed2b833d649a85b Merge: 603882111 30f43c4ec Author: Luigi Ballabio Date: Wed, 22 Jul 2026 11:58:38 +0200 docs: add explanatory comment to defaultProbability overloads (#2670) commit 828c0333803a978cc3e63f315e85264f3a68cb4b Author: Amit Jha Date: Tue, 21 Jul 2026 19:04:06 +0530 fix: use dirty price in CallableBond effective duration and convexity ql/experimental/callablebonds/callablebond.cpp | 14 +++++--- test-suite/callablebonds.cpp | 48 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) commit 30f43c4ecaa403c9cf6f353a35b63b8c183661d8 Author: Amit Jha Date: Tue, 21 Jul 2026 18:45:28 +0530 docs: add explanatory comment to defaultProbability overloads ql/termstructures/defaulttermstructure.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 60388211166928e4367c800a972508bdc71d6cd7 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Tue, 21 Jul 2026 09:58:12 +0000 Update copyright list in license LICENSE.TXT | 1 + 1 file changed, 1 insertion(+) commit f7d606cf067e27c4eb0d1010b3fa50b348797f3d Merge: 7b7c5775b 415d35a94 Author: Luigi Ballabio Date: Tue, 21 Jul 2026 11:57:07 +0200 Add optional rounding precision to OvernightIndexedSwap and MakeOIS (#2666) commit 7b7c5775bfc9b543f02b92505d8d7c8aadc83fcf Merge: 57a35f9c7 19a9848e4 Author: Luigi Ballabio Date: Tue, 21 Jul 2026 09:24:14 +0200 QL_REQUIRE_EXPLICIT_EVALUATION_DATE (#2644) commit 57a35f9c79a807d9e5990c3335d73ce145c9947b Merge: 07f8fd052 f5aba9a74 Author: Luigi Ballabio Date: Tue, 21 Jul 2026 09:22:56 +0200 Vanilla swaps should calculate the spot date from the actual evaluation date, even if it's a holiday (#2653) commit d2f2002ebf3845946c19dc1ac0de4f85bc2cb2a0 Author: kp9991 Date: Tue, 21 Jul 2026 07:56:05 +1000 Fixing build failure ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.cpp | 6 +++--- ql/pricingengines/swaption/gaussian1dnonstandardswaptionengine.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) commit 8638590b068aa3e19afa72c1ac8a4cf24345e179 Author: kp9991 Date: Tue, 21 Jul 2026 07:38:05 +1000 Replacing ext:: with std:: and adding comments ql/instruments/nonstandardswap.cpp | 4 ++-- ql/instruments/nonstandardswap.hpp | 4 ++-- .../swaption/gaussian1djamshidianswaptionengine.cpp | 9 ++++++--- ql/pricingengines/swaption/gaussian1dswaptionengine.cpp | 9 +-------- ql/pricingengines/swaption/jamshidianswaptionengine.cpp | 9 ++++++--- test-suite/gsr.cpp | 4 ++-- test-suite/multipleresetsswap.cpp | 2 +- 7 files changed, 20 insertions(+), 21 deletions(-) commit ec0919bcaa8521bdaa28b113364accfdc09e55db Author: kp9991 Date: Tue, 21 Jul 2026 07:12:13 +1000 Following code review .../gaussian1dfloatfloatswaptionengine.cpp | 60 ++++++---- .../gaussian1dnonstandardswaptionengine.cpp | 32 ++++-- .../swaption/gaussian1dswaptionengine.cpp | 71 +++++++++--- test-suite/gsr.cpp | 121 +++++++++++++++++++++ 4 files changed, 237 insertions(+), 47 deletions(-) commit 07f8fd052dc1835b7151e76b8fd8853df26dabe4 Merge: 7493db907 499585069 Author: Luigi Ballabio Date: Mon, 20 Jul 2026 15:58:33 +0200 Observe term structure in extended CIR model (#2663) commit 7493db907f00b3ed855c88518b2fbf70e7a1bfe0 Merge: a0c3847a3 7862be6b8 Author: Luigi Ballabio Date: Mon, 20 Jul 2026 15:57:15 +0200 Use make_shared in pricing engines (#2636) commit 3272ceaf159784cdc7680af029ad13afe3f4bb09 Author: kp9991 Date: Mon, 20 Jul 2026 23:14:03 +1000 Adding paymentLag .../termstructures/basisswapratehelpers.cpp | 21 ++++++++++++++++----- .../termstructures/basisswapratehelpers.hpp | 6 +++++- test-suite/basisswapratehelpers.cpp | 21 +++++++++++++++++---- 3 files changed, 38 insertions(+), 10 deletions(-) commit 8eaf8dd981a4b0fe4b8ce28a0652822836188c03 Author: kp9991 Date: Mon, 20 Jul 2026 21:41:13 +1000 Initial commit .../termstructures/basisswapratehelpers.cpp | 20 +++++++++--- .../termstructures/basisswapratehelpers.hpp | 18 ++++++++--- ql/userconfig.hpp | 2 +- test-suite/basisswapratehelpers.cpp | 37 +++++++++++++++++++--- 4 files changed, 61 insertions(+), 16 deletions(-) commit a0c3847a36f245a83c723618769bc6a56ecbf579 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Sun, 19 Jul 2026 02:25:46 +0000 Automated fixes by clang-tidy ql/termstructures/inflation/inflationhelpers.cpp | 2 +- test-suite/distributions.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) commit 19a9848e42fcdd45924b1f5322c16f0b5ae8117e Author: kp9991 Date: Mon, 20 Jul 2026 14:38:04 +1000 Retrigger GitHub workflow test-suite/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 547b045e6e9aa4f5f44a3a1541fad764d465e1b9 Author: kp9991 Date: Mon, 20 Jul 2026 13:41:30 +1000 unit test test-suite/settings.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 1935ff637328bd7beea62ba34e425c3c1ef195e7 Author: kp9991 Date: Mon, 20 Jul 2026 13:35:01 +1000 Moving QL_REQUIRE_EXPLICIT_EVALUATION_DATE to settings CMakeLists.txt | 1 - ql/config.hpp.cfg | 1 - ql/settings.cpp | 15 +++++++++++++++ ql/settings.hpp | 21 ++++----------------- ql/userconfig.hpp | 9 --------- 5 files changed, 19 insertions(+), 28 deletions(-) commit 726977889416d0fd26258a53a3edcf6f188765a2 Author: Peter Caspers Date: Sun, 19 Jul 2026 18:05:53 +0200 gh-2172 fix criterion ql/cashflows/cashflows.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 309a8d49b504c11175901728a879e724d3d988f1 Author: Peter Caspers Date: Sat, 18 Jul 2026 18:59:30 +0200 gh-2172 remove unit tests that do no apply anymroe test-suite/interestrates.cpp | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) commit cb2ce14fe46a1ccc2962e45540b592decf8ab95f Author: Peter Caspers Date: Sat, 18 Jul 2026 18:18:55 +0200 gh-2172 fix ql/cashflows/cashflows.cpp | 1 - 1 file changed, 1 deletion(-) commit 7b18419305e66482cfa941201281dc39ec42b785 Author: Peter Caspers Date: Sat, 18 Jul 2026 18:12:00 +0200 gh-2172 fix compounding ql/cashflows/cashflows.cpp | 28 +++++++++++++++++++++------- ql/compounding.hpp | 10 +++++----- ql/interestrate.cpp | 12 ++---------- 3 files changed, 28 insertions(+), 22 deletions(-) commit 96f331e7e43c8847054997ea758a4bbdef7aa626 Author: Sergio Araujo Date: Fri, 17 Jul 2026 11:35:26 +0100 Add optional rounding precision to OvernightIndexedSwap and MakeOIS Follow-up to #2624, which introduced an optional rounding precision for the compounded rate on OvernightIndexedCoupon and OvernightLeg (per the ISDA Compounding/Averaging Matrix, e.g. SONIA rounds to 4 decimal places in percent). This exposes the same parameter on the OvernightIndexedSwap constructors and as MakeOIS::withRoundingPrecision, so a rounded OIS can be priced without assembling a generic Swap from hand-built legs. ql/instruments/makeois.cpp | 16 ++++-- ql/instruments/makeois.hpp | 4 ++ ql/instruments/overnightindexedswap.cpp | 42 ++++++++++----- ql/instruments/overnightindexedswap.hpp | 16 ++++-- test-suite/overnightindexedswap.cpp | 96 ++++++++++++++++++++++++++++++++- 5 files changed, 152 insertions(+), 22 deletions(-) commit 3baff1f70186d427d18fc1d9781c5ec38427be2a Author: Luigi Ballabio Date: Fri, 17 Jul 2026 09:02:21 +0200 Don't document a couple of obsolete files ql/any.hpp | 4 ---- ql/optional.hpp | 4 ---- 2 files changed, 8 deletions(-) commit 24d3030030f604e3ce2e0ef4a66519f2fe2837f4 Author: kp9991 Date: Fri, 17 Jul 2026 12:50:13 +1000 Some refact + addressing Mac OS compile problem ql/instruments/constnotionalcrosscurrencyswap.cpp | 29 ---- ql/instruments/constnotionalcrosscurrencyswap.hpp | 35 +---- .../discountingmtmcrosscurrencybasisswapengine.cpp | 172 ++++++++------------- .../discountingmtmcrosscurrencybasisswapengine.hpp | 17 +- test-suite/mtmcrosscurrencybasisswap.cpp | 92 +++++++++++ 5 files changed, 171 insertions(+), 174 deletions(-) commit 7862be6b8a1d3ece071f3a7aefa91c6f79ba051e Author: JewonJeon Date: Fri, 17 Jul 2026 11:35:52 +0900 Use make_shared for boundary conditions ql/pricingengines/barrier/fdblackscholesrebateengine.cpp | 10 ++++------ ql/pricingengines/barrier/fdhestondoublebarrierengine.cpp | 10 ++++------ ql/pricingengines/barrier/fdhestonrebateengine.cpp | 10 ++++------ 3 files changed, 12 insertions(+), 18 deletions(-) commit b83913d1d94796bc631ffa218a42ec79b68de9af Author: kp9991 Date: Fri, 17 Jul 2026 11:46:01 +1000 Using ExchangeRateManager QuantLib.vcxproj | 2 - QuantLib.vcxproj.filters | 6 -- ql/CMakeLists.txt | 2 - ql/indexes/Makefile.am | 2 - ql/indexes/all.hpp | 1 - ql/indexes/fxindex.cpp | 64 ---------------- ql/indexes/fxindex.hpp | 85 ---------------------- ql/instruments/mtmcrosscurrencybasisswap.cpp | 32 ++------ ql/instruments/mtmcrosscurrencybasisswap.hpp | 13 ++-- .../discountingmtmcrosscurrencybasisswapengine.cpp | 75 +++++++------------ test-suite/mtmcrosscurrencybasisswap.cpp | 69 ++++++++++-------- 11 files changed, 80 insertions(+), 271 deletions(-) commit c401179e0530be2cec1e1adaf489ecc2cc8a59da Author: Luigi Ballabio Date: Thu, 16 Jul 2026 17:57:03 +0200 Update workflow to check for deprecated ext:: classes .github/workflows/namespaces.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) commit 4350e524644349a7b63e2e78202d7ce2e773136b Merge: c7169ee26 887fd8bb7 Author: Luigi Ballabio Date: Thu, 16 Jul 2026 17:55:58 +0200 Deprecate `ext::any`, `ext::optional` and friends (#2660) commit c4967ec2a6864482a14c8fb4799217bce1b71754 Author: JewonJeon Date: Fri, 17 Jul 2026 00:49:36 +0900 Optimize Jamshidian root finding .../swaption/jamshidianswaptionengine.cpp | 45 +++++++++++++--------- 1 file changed, 26 insertions(+), 19 deletions(-) commit 499585069e50be683a0b4060b57165783041210d Author: JewonJeon Date: Fri, 17 Jul 2026 00:25:35 +0900 Observe term structure in extended CIR model .../onefactormodels/extendedcoxingersollross.cpp | 4 +++- test-suite/shortratemodels.cpp | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) commit c7169ee26804f3dc1fdc80b1e2288738420094df Merge: 775c143eb 141fd0048 Author: Luigi Ballabio Date: Thu, 16 Jul 2026 12:26:45 +0200 Add `vector` header to `time/calendars/islamicholidays.cpp` (#2662) commit be8970b11268cef48839afc4084d54ca602771b0 Author: JewonJeon Date: Thu, 16 Jul 2026 19:04:43 +0900 comment applied for auto declaration .../asian/fdblackscholesasianengine.cpp | 12 +++++------ .../barrier/analyticbinarybarrierengine.cpp | 7 +++--- .../barrier/binomialbarrierengine.hpp | 4 ++-- .../barrier/fdblackscholesbarrierengine.cpp | 23 ++++++++------------ .../barrier/fdblackscholesrebateengine.cpp | 10 ++++----- .../barrier/fdhestonbarrierengine.cpp | 25 +++++++++------------- .../barrier/fdhestondoublebarrierengine.cpp | 11 +++++----- ql/pricingengines/barrier/fdhestonrebateengine.cpp | 13 ++++++----- .../basket/fd2dblackscholesvanillaengine.cpp | 12 +++++------ ql/pricingengines/basket/stulzengine.cpp | 3 +-- .../bond/binomialconvertibleengine.hpp | 4 ++-- .../cliquet/analyticcliquetengine.cpp | 3 +-- .../cliquet/analyticperformanceengine.cpp | 3 +-- .../exotic/analyticamericanmargrabeengine.cpp | 10 ++++----- ql/pricingengines/forward/forwardengine.hpp | 4 ++-- .../forward/mcforwardvanillaengine.hpp | 2 +- .../forward/replicatingvarianceswapengine.hpp | 6 +++--- ql/pricingengines/mclongstaffschwartzengine.hpp | 4 +--- ql/pricingengines/swaption/fdg2swaptionengine.cpp | 10 ++++----- ql/pricingengines/vanilla/binomialengine.hpp | 4 ++-- ql/pricingengines/vanilla/fdcirvanillaengine.cpp | 10 ++++----- .../vanilla/fdhestonhullwhitevanillaengine.cpp | 12 +++++------ .../vanilla/fdhestonvanillaengine.cpp | 7 +++--- .../vanilla/fdsimplebsswingengine.cpp | 14 ++++++------ ql/pricingengines/vanilla/qdfpamericanengine.cpp | 4 +--- 25 files changed, 98 insertions(+), 119 deletions(-) commit 141fd0048c2295f213f3631665e89c291edbb713 Author: Dirk Eddelbuettel Date: Wed, 15 Jul 2026 10:32:35 -0500 Add vector header ql/time/calendars/islamicholidays.cpp | 1 + 1 file changed, 1 insertion(+) commit 775c143eb45fe7a45edfffc188eb80a26c02df32 Merge: 353fef70e 70e5bdac1 Author: Luigi Ballabio Date: Wed, 15 Jul 2026 17:20:32 +0200 Use Boost for inverse cumulative Student t distribution (#2650) commit 353fef70ebcbe83fbd4ca243b32a3a8dffbd0a71 Author: Luigi Ballabio Date: Tue, 14 Apr 2026 10:30:58 +0200 Increase version number automatically after release .github/workflows/increase-version-number.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit d1e0e670eb9f9c6fa1e81c15ee7a11ac2d4b7e75 Merge: d9287199b 02be39c74 Author: Luigi Ballabio Date: Wed, 15 Jul 2026 16:53:22 +0200 Deprecated unused data member in zero-coupon inflation helper (#2661) commit 70e5bdac1966a2750923797a8560ca1e8d3f8b44 Author: Luigi Ballabio Date: Wed, 15 Jul 2026 16:28:47 +0200 Deprecate unused arguments ql/math/distributions/studenttdistribution.hpp | 12 +++++++++--- test-suite/distributions.cpp | 8 ++++---- 2 files changed, 13 insertions(+), 7 deletions(-) commit d9287199b7baa6c7ac4d886451b33117eade9268 Merge: b8ecea369 3b4d5c3ba Author: Luigi Ballabio Date: Wed, 15 Jul 2026 15:15:19 +0200 use paymentAdjustment in the fixed leg (#2649) commit b8ecea3694202c7d5d0ae4e72a8e508d61790b35 Merge: d2b57b56b 1d1718774 Author: Luigi Ballabio Date: Tue, 14 Jul 2026 15:01:33 +0200 Remove features deprecated in version 1.39 (#2659) commit d2b57b56b939ad5d5ba0448268cb22c7f0774555 Author: lballabio[bot] <224797326+lballabio-bot@users.noreply.github.com> Date: Tue, 14 Jul 2026 09:36:49 +0000 Set version to 1.44-dev CMakeLists.txt | 6 +++--- configure.ac | 2 +- ql/version.hpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit e10d38e2ebf0ec339352b3dc50c62279bfa60c35 Author: Luigi Ballabio Date: Tue, 14 Jul 2026 11:28:28 +0200 Revert "Increase version number automatically after release" This reverts commit fce61e4b3753c01240b387f7c9f4a44d5035bdb1. .github/workflows/increase-version-number.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit d922e3c309b7e2f404f566edbb0323a10139db80 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sun, 12 Jul 2026 07:26:30 -0700 Adding CMAES to vsxproj. QuantLib.vcxproj | 2 ++ QuantLib.vcxproj.filters | 6 ++++++ 2 files changed, 8 insertions(+) commit 17d6eff3b89085c1d0f58f40ba2cca9fdeb85c60 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sun, 12 Jul 2026 07:25:54 -0700 Formatting. ql/experimental/math/cmaes.hpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) commit 981666a95afdb14fcf097d038bf5fd70f6d7177f Author: kp9991 Date: Sun, 12 Jul 2026 12:31:00 +1000 Initial commit .../swaption/sabrswaptionvolatilitycube.hpp | 274 +++++++++++++++--- test-suite/swaptionvolatilitycube.cpp | 310 +++++++++++++++++++++ 2 files changed, 553 insertions(+), 31 deletions(-) commit dfb8e8baaf2787d1b9bd105ddbc12655109cb917 Author: kp9991 Date: Sun, 12 Jul 2026 07:05:10 +1000 Handling paymentLag ql/instruments/fixedvsfloatingswap.cpp | 3 +- ql/instruments/fixedvsfloatingswap.hpp | 12 ++++ ql/instruments/nonstandardswap.cpp | 25 +++++++-- ql/instruments/nonstandardswap.hpp | 18 +++++- .../gaussian1djamshidianswaptionengine.cpp | 10 ++-- .../swaption/jamshidianswaptionengine.cpp | 5 +- test-suite/gsr.cpp | 64 ++++++++++++++++++++++ test-suite/multipleresetsswap.cpp | 28 ++++++++++ 8 files changed, 151 insertions(+), 14 deletions(-) commit 8d7933173a4d62a98b502c31cf19458b1bab6921 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:26:16 -0700 Bool var. ql/experimental/math/cmaes.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 55c14ba165a5e65686a05a226865ad8be3ee8dcf Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:24:40 -0700 Diagonal D. ql/experimental/math/cmaes.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit d4c0484660b2809ccafc233fbd464f41a617817c Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:22:29 -0700 Removing unnecessary comments. ql/experimental/math/cmaes.cpp | 51 +++++++++++++----------------------------- 1 file changed, 15 insertions(+), 36 deletions(-) commit f93d7f41b8ae99b794a5075f8d4e7369c46fc1ba Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:17:21 -0700 Comment and const cleanup. ql/experimental/math/cmaes.cpp | 105 ++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 58 deletions(-) commit 515dee7da64e5e5ca86aaabf6a3820c535a26f55 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 09:31:41 -0700 Inlining and using built-in functions. ql/experimental/math/cmaes.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) commit 116f5a42289d87d9c2e5650e1fdcd9cffad98f81 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Sat, 11 Jul 2026 09:20:15 -0700 Init CMAES algorithm. Need to clean up comments and performance-optimize at low level. ql/experimental/math/cmaes.cpp | 261 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) commit 480364a5fa04dccd626c055d2996a8729e9d1407 Author: kp9991 Date: Sat, 11 Jul 2026 17:12:20 +1000 More unit tests test-suite/gsr.cpp | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) commit f537259348d3c81c56bfdfaa034ea82cc2f1a75a Author: kp9991 Date: Sat, 11 Jul 2026 09:29:24 +1000 Jamshidian .../gaussian1djamshidianswaptionengine.cpp | 49 +++++++++++++++++----- .../swaption/jamshidianswaptionengine.cpp | 42 +++++++++++++++---- test-suite/gsr.cpp | 41 ++++++++++++++++++ 3 files changed, 114 insertions(+), 18 deletions(-) commit f058c87325ba9da0572e7bb88e12fee964ab5e00 Author: kp9991 Date: Sat, 11 Jul 2026 07:34:59 +1000 Handling compounded SOFR periods in GSR ql/instruments/floatfloatswap.cpp | 51 ++++++- ql/instruments/nonstandardswap.cpp | 30 ++-- .../gaussian1dfloatfloatswaptionengine.cpp | 33 ++++- .../gaussian1dnonstandardswaptionengine.cpp | 40 +++++- .../swaption/gaussian1dswaptionengine.cpp | 34 ++++- test-suite/gsr.cpp | 152 +++++++++++++++++++++ 6 files changed, 313 insertions(+), 27 deletions(-) commit 59558d94c6a92ef990dc28eba30b0162063a8925 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:37:39 -0700 Removing redundant check. test-suite/optimizers.cpp | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) commit eb88e49c7d7fbe049bfade941f47443ce1863518 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:37:24 -0700 Adding CMAES header. ql/experimental/math/cmaes.hpp | 99 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) commit 0da4e4900dbe47aaae4963fe2efa7775dd03929a Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:32:41 -0700 CMAES optimizer tests: convex convergence on ill-conditioned separable quadratics, non-convex convergence, multimodal global search, rotational invariant, determinism check. test-suite/optimizers.cpp | 212 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 211 insertions(+), 1 deletion(-) commit 5df1dac4ac163541e8733499e74bbcd3acbe985a Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:21:07 -0700 Adding CMAES to all.hpp experimental math file. ql/experimental/math/all.hpp | 1 + 1 file changed, 1 insertion(+) commit 139d240df96b69f66886f62b3857d49f03ab2e54 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:13:38 -0700 Adding CMAES to experimental math makefile. ql/experimental/math/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit d017e2586bf7feb383d729b943fe3feec8d7101c Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Fri, 10 Jul 2026 09:13:11 -0700 Adding CMAES to cmake build. ql/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) commit b02a9fe2ce633766cf3b3343a7338f238ead0a0f Author: kp9991 Date: Fri, 10 Jul 2026 17:13:06 +1000 Reworking OptionletStripper1 .../volatility/optionlet/optionletstripper.cpp | 85 ++++++- .../volatility/optionlet/optionletstripper.hpp | 19 +- .../volatility/optionlet/optionletstripper1.cpp | 94 ++------ .../volatility/optionlet/optionletstripper1.hpp | 1 - .../volatility/optionlet/optionletstripper2.cpp | 183 +++++++++------ .../volatility/optionlet/optionletstripper2.hpp | 5 +- test-suite/optionletstripper.cpp | 251 +++++++++++++++++++++ 7 files changed, 486 insertions(+), 152 deletions(-) commit f5aba9a74fe7ac61c3c1ecdce7e3ed70743b417c Author: excal.rs Date: Thu, 9 Jul 2026 23:21:35 +0100 Calculate spot dates from the actual evaluation date Settlement and fixing days are counted from the actual evaluation date, without first rolling it to a business day: Calendar::advance already skips non-business days, so the pre-adjustment added an extra business day whenever the evaluation date was a holiday or weekend. The adjustment is removed from MakeVanillaSwap and MakeOIS (when explicit settlement days are given) and from DepositRateHelper, FraRateHelper and BMASwapRateHelper. MakeVanillaSwap and MakeOIS also gain an optional settlement calendar, defaulting to the float and overnight calendar respectively, since the calendar used for the settlement-day advance is not always the index calendar (e.g. USD SOFR swaps). ql/instruments/makeois.cpp | 14 +++++-- ql/instruments/makeois.hpp | 2 + ql/instruments/makevanillaswap.cpp | 14 +++++-- ql/instruments/makevanillaswap.hpp | 2 + ql/termstructures/yield/ratehelpers.cpp | 26 +++++-------- test-suite/overnightindexedswap.cpp | 65 ++++++++++++++++++++++++++++++++- test-suite/piecewiseyieldcurve.cpp | 51 ++++++++++++++++++++++++++ test-suite/swap.cpp | 61 +++++++++++++++++++++++++++++++ 8 files changed, 209 insertions(+), 26 deletions(-) commit f82294bcdc76832ec6d527137b611de4412a5a24 Author: kp9991 Date: Thu, 9 Jul 2026 07:21:24 +1000 Excluding first caplet + unit tests .../volatility/optionlet/optionletstripper1.cpp | 3 + test-suite/optionletstripper.cpp | 265 ++++++++++++++++----- 2 files changed, 207 insertions(+), 61 deletions(-) commit c09e3f38f3e9843f5dbd1a80e7cb95c8a6505914 Author: mpwaser <47316116+mpwaser@users.noreply.github.com> Date: Wed, 8 Jul 2026 19:24:39 +0200 Use Boost for inverse cumulative Student t distribution ql/math/distributions/studenttdistribution.cpp | 33 ++++---- ql/math/distributions/studenttdistribution.hpp | 19 ++--- test-suite/distributions.cpp | 113 +++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 28 deletions(-) commit 3b4d5c3ba3b68028b53773eaee9fc7f6fb887da4 Author: Evgeny Mishin Date: Wed, 8 Jul 2026 00:18:35 +0300 use paymentAdjustment in the fixed leg ql/instruments/overnightindexedswap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit deea883c55b4c525466d48d5ff6c55eb2c60db6a Author: kp9991 Date: Wed, 8 Jul 2026 07:21:06 +1000 paymentLag for caplet vol bootstrapping .../volatility/optionlet/optionletstripper1.cpp | 27 +++++++++++++++++----- .../volatility/optionlet/optionletstripper1.hpp | 4 +++- 2 files changed, 24 insertions(+), 7 deletions(-) commit 344b3d65e90686529e1a22bf395ffbf687f1997b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:33:53 -0500 Formatting. test-suite/roughhestonmodel.cpp | 345 +++++++++++++++++++++------------------- 1 file changed, 177 insertions(+), 168 deletions(-) commit 448c8cd88ffe0ee029e3a59ce71010b66b37ae8b Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:27:40 -0500 Formatting changes. ql/math/ode/fractionaladams.hpp | 12 ++-- .../vanilla/analyticroughhestonengine.cpp | 75 +++++++++++----------- .../vanilla/analyticroughhestonengine.hpp | 2 +- 3 files changed, 46 insertions(+), 43 deletions(-) commit e1c853b34ea21f732df2203bec2a17294d6dcd95 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:18:53 -0500 Style formatting and math correctness check. ql/pricingengines/vanilla/analyticroughhestonengine.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 3a0c09e607fe8aa9237cf33efc86887ffb0cb528 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:17:09 -0500 Style formatting and math correctness check. .../vanilla/analyticroughhestonengine.cpp | 77 +++++++++++----------- 1 file changed, 38 insertions(+), 39 deletions(-) commit 12174455d07c3ba4614bbb89b6fc53e9c090e85e Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 17:52:33 -0500 Cleanup. .../vanilla/analyticroughhestonengine.hpp | 26 +++++++--------------- 1 file changed, 8 insertions(+), 18 deletions(-) commit 4558c56c5003679c9b9c22e3454a7e07a48cbe9e Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 17:47:03 -0500 Code cleanup. ql/math/ode/fractionaladams.hpp | 105 +++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 56 deletions(-) commit 94dee78611c0313124ff351ec6b8d12e4791acdd Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:38:38 -0500 Removing redundant tests test-suite/roughhestonmodel.cpp | 107 ---------------------------------------- 1 file changed, 107 deletions(-) commit f1776663c8c8c66dde2ae23876ffbfda3a58061f Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:36:34 -0500 Adding tests for gaps. test-suite/roughhestonmodel.cpp | 525 ++++++++++++++++++++++++++++++++++------ 1 file changed, 445 insertions(+), 80 deletions(-) commit e52a47d9277f8d92ee67683c326ecc6970895002 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:20:56 -0500 Comment tightening. ql/math/ode/fractionaladams.hpp | 34 ++++-------------- .../vanilla/analyticroughhestonengine.cpp | 24 ++++++------- .../vanilla/analyticroughhestonengine.hpp | 32 +++++------------ test-suite/roughhestonmodel.cpp | 41 +++++++--------------- 4 files changed, 39 insertions(+), 92 deletions(-) commit 2ce53bd29e8a9223f0dca2b64e455d493be6d6f6 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:14:26 -0500 Compress mathematical explanation. ql/models/equity/roughhestonmodel.hpp | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) commit 8b937116cd3393afc6369fa903bb893b4d6ce022 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:00:56 -0500 Restore filters. QuantLib.vcxproj | 5874 ++++++------- QuantLib.vcxproj.filters | 14956 ++++++++++++++++----------------- test-suite/testsuite.vcxproj | 1708 ++-- test-suite/testsuite.vcxproj.filters | 1182 +-- 4 files changed, 11860 insertions(+), 11860 deletions(-) commit f353126f8b8d5184267d3fd0b8fda002fd00b791 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:54:51 -0500 Add tests for the rough Heston model and engine test-suite/CMakeLists.txt | 1 + test-suite/Makefile.am | 1 + test-suite/roughhestonmodel.cpp | 464 +++++++++ test-suite/testsuite.vcxproj | 1707 +++++++++++++++++----------------- test-suite/testsuite.vcxproj.filters | 1179 +++++++++++------------ 5 files changed, 1911 insertions(+), 1441 deletions(-) commit 27d2085131c6af1a74793d6d123800e1de5d51c0 Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:54:31 -0500 Add rough Heston model and semi-analytic pricing engine ql/models/equity/Makefile.am | 6 +- ql/models/equity/all.hpp | 1 + ql/models/equity/roughhestonmodel.cpp | 47 ++++ ql/models/equity/roughhestonmodel.hpp | 108 ++++++++ ql/pricingengines/vanilla/Makefile.am | 2 + ql/pricingengines/vanilla/all.hpp | 1 + .../vanilla/analyticroughhestonengine.cpp | 273 +++++++++++++++++++++ .../vanilla/analyticroughhestonengine.hpp | 148 +++++++++++ 8 files changed, 584 insertions(+), 2 deletions(-) commit a25503805aca3d0f356dd93abcf4b54f969e4c4a Author: Colin <34983726+colalb1@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:53:57 -0500 Add fractional Adams solver for Caputo fractional ODEs. Implement the Diethelm-Ford-Freed predictor-corrector scheme for initial value schemes. QuantLib.vcxproj | 5869 +++++++-------- QuantLib.vcxproj.filters | 14941 +++++++++++++++++++------------------- ql/CMakeLists.txt | 5 + ql/math/ode/Makefile.am | 3 +- ql/math/ode/all.hpp | 1 + ql/math/ode/fractionaladams.hpp | 188 + 6 files changed, 10611 insertions(+), 10396 deletions(-) commit a64753402f293e75a250f55b47a270a59d7b2fbc Author: kp9991 Date: Sun, 5 Jul 2026 19:33:36 +1000 Keep old ref date logic for Ibor .../volatility/optionlet/optionletstripper1.cpp | 33 ++++++++++++++++------ ql/userconfig.hpp | 2 +- 2 files changed, 26 insertions(+), 9 deletions(-) commit 879a3a428fddfcc2de85171a8c934250b5de8cf7 Author: kp9991 Date: Sun, 5 Jul 2026 18:35:11 +1000 RFR caplet vol bootstrapping .../volatility/optionlet/optionletstripper.cpp | 35 +++++++---- .../volatility/optionlet/optionletstripper1.cpp | 62 ++++++++++++++------ test-suite/optionletstripper.cpp | 67 +++++++++------------- 3 files changed, 96 insertions(+), 68 deletions(-) commit 76dcd8db01b22ee642e65ca6df983c0766d61aa4 Author: kp9991 Date: Tue, 30 Jun 2026 08:59:52 +1000 Initial commit CMakeLists.txt | 1 + ql/config.hpp.cfg | 1 + ql/settings.cpp | 4 ++-- ql/settings.hpp | 12 ++++++++++-- ql/userconfig.hpp | 9 +++++++++ 5 files changed, 23 insertions(+), 4 deletions(-) commit 785c517f87f0fb81ff8b4a849027997e64b2528d Author: Luigi Ballabio Date: Mon, 29 Jun 2026 17:08:43 +0200 Deprecate ext::any, ext::optional and friends ql/any.hpp | 14 +++- ql/cashflow.cpp | 4 +- ql/cashflow.hpp | 2 +- ql/cashflows/cashflows.cpp | 88 +++++++++++----------- ql/cashflows/cashflows.hpp | 86 ++++++++++----------- ql/cashflows/couponpricer.cpp | 2 +- ql/cashflows/couponpricer.hpp | 4 +- ql/cashflows/iborcoupon.cpp | 2 +- ql/cashflows/iborcoupon.hpp | 4 +- ql/cashflows/overnightindexedcoupon.cpp | 4 +- ql/cashflows/overnightindexedcoupon.hpp | 10 +-- ql/event.cpp | 2 +- ql/event.hpp | 2 +- .../catbonds/montecarlocatbondengine.cpp | 2 +- .../catbonds/montecarlocatbondengine.hpp | 4 +- ql/experimental/commodities/commodity.hpp | 2 +- ql/experimental/commodities/energycommodity.cpp | 8 +- .../coupons/lognormalcmsspreadpricer.cpp | 2 +- .../coupons/lognormalcmsspreadpricer.hpp | 2 +- ql/experimental/credit/syntheticcdo.cpp | 2 +- ql/experimental/credit/syntheticcdo.hpp | 2 +- ql/experimental/swaptions/irregularswaption.cpp | 2 +- .../termstructures/crosscurrencyratehelpers.cpp | 22 +++--- .../termstructures/crosscurrencyratehelpers.hpp | 16 ++-- ql/instrument.hpp | 10 +-- ql/instruments/bond.cpp | 2 +- ql/instruments/callabilityschedule.hpp | 2 +- ql/instruments/capfloor.cpp | 2 +- ql/instruments/creditdefaultswap.cpp | 8 +- ql/instruments/creditdefaultswap.hpp | 6 +- ql/instruments/fixedvsfloatingswap.cpp | 2 +- ql/instruments/fixedvsfloatingswap.hpp | 2 +- ql/instruments/floatfloatswap.cpp | 12 +-- ql/instruments/floatfloatswap.hpp | 12 +-- ql/instruments/makecds.hpp | 6 +- ql/instruments/makeois.hpp | 2 +- ql/instruments/makeswaption.cpp | 2 +- ql/instruments/makeswaption.hpp | 4 +- ql/instruments/makevanillaswap.cpp | 2 +- ql/instruments/makevanillaswap.hpp | 8 +- ql/instruments/multipleresetsswap.cpp | 2 +- ql/instruments/multipleresetsswap.hpp | 2 +- ql/instruments/nonstandardswap.cpp | 4 +- ql/instruments/nonstandardswap.hpp | 4 +- ql/instruments/overnightindexedswap.cpp | 2 +- ql/instruments/swaption.cpp | 2 +- ql/instruments/vanillaswap.cpp | 4 +- ql/instruments/vanillaswap.hpp | 4 +- ql/optional.hpp | 16 +++- ql/pricingengines/basket/choibasketengine.cpp | 2 +- ql/pricingengines/bond/discountingbondengine.cpp | 2 +- ql/pricingengines/bond/discountingbondengine.hpp | 4 +- .../capfloor/analyticcapfloorengine.cpp | 2 +- ql/pricingengines/credit/integralcdsengine.cpp | 2 +- ql/pricingengines/credit/integralcdsengine.hpp | 4 +- ql/pricingengines/credit/isdacdsengine.cpp | 2 +- ql/pricingengines/credit/isdacdsengine.hpp | 4 +- ql/pricingengines/credit/midpointcdsengine.cpp | 2 +- ql/pricingengines/credit/midpointcdsengine.hpp | 4 +- ql/pricingengines/mclongstaffschwartzengine.hpp | 8 +- ...ountingconstnotionalcrosscurrencyswapengine.cpp | 2 +- ...ountingconstnotionalcrosscurrencyswapengine.hpp | 4 +- ql/pricingengines/swap/discountingswapengine.cpp | 2 +- ql/pricingengines/swap/discountingswapengine.hpp | 4 +- .../vanilla/bjerksundstenslandengine.cpp | 2 +- ql/pricingengines/vanilla/mcamericanengine.hpp | 8 +- ql/settings.hpp | 12 +-- .../volatility/equityfx/blackvolsurfacedelta.cpp | 4 +- .../volatility/equityfx/blackvolsurfacedelta.hpp | 4 +- .../volatility/optionlet/optionletstripper.cpp | 4 +- .../volatility/optionlet/optionletstripper.hpp | 6 +- .../volatility/optionlet/optionletstripper1.cpp | 2 +- .../volatility/optionlet/optionletstripper1.hpp | 2 +- ql/termstructures/yield/oisratehelper.cpp | 8 +- ql/termstructures/yield/oisratehelper.hpp | 12 +-- ql/termstructures/yield/ratehelpers.cpp | 12 +-- ql/termstructures/yield/ratehelpers.hpp | 18 ++--- .../yield/ultimateforwardtermstructure.hpp | 6 +- ql/time/schedule.cpp | 8 +- ql/time/schedule.hpp | 22 +++--- test-suite/americanoption.cpp | 4 +- test-suite/basketoption.cpp | 2 +- test-suite/blackvolsurfacedelta.cpp | 14 ++-- test-suite/cashflows.cpp | 8 +- test-suite/creditdefaultswap.cpp | 6 +- test-suite/crosscurrencyratehelpers.cpp | 22 +++--- test-suite/defaultprobabilitycurves.cpp | 2 +- test-suite/fxforward.cpp | 6 +- test-suite/overnightindexedswap.cpp | 10 +-- test-suite/period.cpp | 2 +- test-suite/piecewiseyieldcurve.cpp | 2 +- test-suite/quantlibglobalfixture.cpp | 2 +- test-suite/ultimateforwardtermstructure.cpp | 2 +- 93 files changed, 342 insertions(+), 328 deletions(-) commit 02be39c74e0a96ca81646386b833d430c3b05a17 Author: Luigi Ballabio Date: Mon, 29 Jun 2026 16:16:18 +0200 Deprecated unused data member in zero-inflation helper ql/termstructures/inflation/inflationhelpers.cpp | 38 +++++++----------------- ql/termstructures/inflation/inflationhelpers.hpp | 24 +++++++-------- 2 files changed, 21 insertions(+), 41 deletions(-) commit 1d17187745a6670ae214b9ef8f03bb9c688a9252 Author: Luigi Ballabio Date: Mon, 29 Jun 2026 11:30:26 +0200 Remove deprecated members in InflationTermStructure ql/termstructures/inflationtermstructure.cpp | 4 ---- ql/termstructures/inflationtermstructure.hpp | 36 ---------------------------- 2 files changed, 40 deletions(-) commit 5c43195b625da31f4b1e2e53006e2f1077b52fc7 Author: Luigi Ballabio Date: Mon, 29 Jun 2026 11:17:48 +0200 Remove deprecated ZeroCouponInflationSwapHelper constructor ql/termstructures/inflation/inflationhelpers.cpp | 15 -- ql/termstructures/inflation/inflationhelpers.hpp | 15 -- test-suite/inflation.cpp | 172 ----------------------- 3 files changed, 202 deletions(-) commit 4c2936453683892ec65d441c9839df92a7832efa Author: Luigi Ballabio Date: Mon, 29 Jun 2026 10:55:34 +0200 Remove switch between std::optional and boost::optional .ci/userconfig2019.alt.hpp | 5 ----- .ci/userconfig2022.alt.hpp | 5 ----- .ci/userconfig2026.alt.hpp | 5 ----- CMakeLists.txt | 2 -- CMakePresets.json | 2 -- Docs/pages/config.docs | 9 --------- configure.ac | 21 --------------------- ql/config.hpp.cfg | 1 - ql/optional.hpp | 16 +--------------- ql/userconfig.hpp | 10 ---------- 10 files changed, 1 insertion(+), 75 deletions(-) commit a06d8a7cd88125e5818daf140be1871df550aa61 Author: Luigi Ballabio Date: Mon, 29 Jun 2026 10:31:52 +0200 Remove switch between std::any and boost::any. .ci/userconfig2019.alt.hpp | 5 ----- .ci/userconfig2022.alt.hpp | 5 ----- .ci/userconfig2026.alt.hpp | 5 ----- CMakeLists.txt | 2 -- CMakePresets.json | 2 -- Docs/pages/config.docs | 7 ------- configure.ac | 20 +------------------- ql/any.hpp | 13 +------------ ql/config.hpp.cfg | 1 - ql/userconfig.hpp | 8 -------- 10 files changed, 2 insertions(+), 66 deletions(-) commit ce8dcaab2c564f72adef9ff0f8358139e30a5344 Author: kp9991 Date: Sun, 28 Jun 2026 21:44:42 +1000 Drop invalid Doxygen \ingroup from FxIndex The `make docs` CI step failed because fxindex.hpp referenced a Doxygen group `indexes` that does not exist, and the configuration treats doc warnings as errors (WARN_AS_ERROR=YES): error: Found non-existing group 'indexes' for the command '@ingroup' No other header under ql/indexes uses \ingroup (the base Index class has none), so remove the tag to match the existing convention and unblock the documentation build. ql/indexes/fxindex.hpp | 2 -- 1 file changed, 2 deletions(-) commit 22f6413a70074676bc082a2a4b992dd2c1fd852c Author: kp9991 Date: Sun, 28 Jun 2026 21:32:15 +1000 Initial commit QuantLib.vcxproj | 20 +- QuantLib.vcxproj.filters | 36 +- ql/CMakeLists.txt | 8 + ql/indexes/Makefile.am | 2 + ql/indexes/all.hpp | 1 + ql/indexes/fxindex.cpp | 64 +++ ql/indexes/fxindex.hpp | 87 ++++ ql/instruments/Makefile.am | 4 + ql/instruments/all.hpp | 2 + ql/instruments/constnotionalcrosscurrencyswap.cpp | 73 +--- ql/instruments/constnotionalcrosscurrencyswap.hpp | 45 +- ql/instruments/crosscurrencyswap.cpp | 132 ++++++ ql/instruments/crosscurrencyswap.hpp | 165 ++++++++ ql/instruments/mtmcrosscurrencybasisswap.cpp | 254 +++++++++++ ql/instruments/mtmcrosscurrencybasisswap.hpp | 276 ++++++++++++ ql/pricingengines/swap/Makefile.am | 2 + ql/pricingengines/swap/all.hpp | 1 + .../discountingmtmcrosscurrencybasisswapengine.cpp | 364 ++++++++++++++++ .../discountingmtmcrosscurrencybasisswapengine.hpp | 103 +++++ test-suite/CMakeLists.txt | 1 + test-suite/Makefile.am | 1 + test-suite/mtmcrosscurrencybasisswap.cpp | 462 +++++++++++++++++++++ test-suite/testsuite.vcxproj | 1 + test-suite/testsuite.vcxproj.filters | 3 + 24 files changed, 1996 insertions(+), 111 deletions(-) commit 9f56361227f223a2d421bf2347be7fbf1d601eb7 Author: JewonJeon Date: Sun, 21 Jun 2026 18:20:58 +0900 Use make_shared in pricing engines .../asian/fdblackscholesasianengine.cpp | 25 ++++------- .../asian/mc_discr_arith_av_price.hpp | 20 ++++----- .../asian/mc_discr_arith_av_price_heston.hpp | 20 ++++----- .../asian/mc_discr_arith_av_strike.hpp | 11 ++--- ql/pricingengines/asian/mc_discr_geom_av_price.hpp | 11 ++--- .../asian/mc_discr_geom_av_price_heston.hpp | 11 ++--- .../asian/mcdiscreteasianenginebase.hpp | 5 +-- ql/pricingengines/bacheliercalculator.cpp | 2 +- .../barrier/analyticbinarybarrierengine.cpp | 5 +-- .../barrier/binomialbarrierengine.hpp | 19 ++++----- .../barrier/fdblackscholesbarrierengine.cpp | 3 +- .../barrier/fdblackscholesrebateengine.cpp | 17 +++----- .../barrier/fdhestonbarrierengine.cpp | 3 +- .../barrier/fdhestondoublebarrierengine.cpp | 16 +++----- ql/pricingengines/barrier/fdhestonrebateengine.cpp | 16 +++----- ql/pricingengines/barrier/mcbarrierengine.hpp | 22 ++++------ .../basket/fd2dblackscholesvanillaengine.cpp | 17 +++----- .../basket/mcamericanbasketengine.hpp | 10 ++--- .../basket/mceuropeanbasketengine.hpp | 16 +++----- ql/pricingengines/basket/stulzengine.cpp | 3 +- ql/pricingengines/blackcalculator.cpp | 3 +- .../bond/binomialconvertibleengine.hpp | 17 ++++---- .../capfloor/bacheliercapfloorengine.cpp | 6 +-- ql/pricingengines/capfloor/blackcapfloorengine.cpp | 6 +-- ql/pricingengines/capfloor/mchullwhiteengine.hpp | 18 ++++---- .../cliquet/analyticcliquetengine.cpp | 3 +- .../cliquet/analyticperformanceengine.cpp | 3 +- ql/pricingengines/cliquet/mcperformanceengine.hpp | 16 +++----- .../exotic/analyticamericanmargrabeengine.cpp | 22 ++++------ .../exotic/analyticcompoundoptionengine.cpp | 5 +-- ql/pricingengines/forward/forwardengine.hpp | 25 +++++------ .../forward/mcforwardeuropeanbsengine.hpp | 11 ++--- .../forward/mcforwardeuropeanhestonengine.hpp | 22 ++++------ .../forward/mcforwardvanillaengine.hpp | 8 ++-- ql/pricingengines/forward/mcvarianceswapengine.hpp | 14 +++---- .../forward/replicatingvarianceswapengine.hpp | 9 ++-- ql/pricingengines/lookback/mclookbackengine.cpp | 20 ++++----- ql/pricingengines/lookback/mclookbackengine.hpp | 10 ++--- ql/pricingengines/mclongstaffschwartzengine.hpp | 10 ++--- ql/pricingengines/mcsimulation.hpp | 10 ++--- ql/pricingengines/quanto/quantoengine.hpp | 12 +++--- ql/pricingengines/swaption/blackswaptionengine.hpp | 8 ++-- ql/pricingengines/swaption/fdg2swaptionengine.cpp | 23 ++++------- .../vanilla/analyticbsmhullwhiteengine.cpp | 13 +++--- ql/pricingengines/vanilla/analytichestonengine.cpp | 41 +++++++----------- ql/pricingengines/vanilla/binomialengine.hpp | 19 ++++----- ql/pricingengines/vanilla/fdbatesvanillaengine.cpp | 5 +-- ql/pricingengines/vanilla/fdcirvanillaengine.cpp | 16 +++----- .../vanilla/fdhestonhullwhitevanillaengine.cpp | 48 ++++++++-------------- .../vanilla/fdhestonvanillaengine.cpp | 20 ++++----- .../vanilla/fdsimplebsswingengine.cpp | 28 +++++-------- ql/pricingengines/vanilla/jumpdiffusionengine.cpp | 11 ++--- ql/pricingengines/vanilla/mcamericanengine.hpp | 22 ++++------ ql/pricingengines/vanilla/mcdigitalengine.hpp | 11 ++--- ql/pricingengines/vanilla/mceuropeanengine.hpp | 11 ++--- .../vanilla/mceuropeangjrgarchengine.hpp | 11 ++--- .../vanilla/mceuropeanhestonengine.hpp | 11 ++--- .../vanilla/mchestonhullwhiteengine.hpp | 34 ++++++--------- ql/pricingengines/vanilla/mcvanillaengine.hpp | 5 +-- ql/pricingengines/vanilla/qdfpamericanengine.cpp | 15 +++---- 60 files changed, 321 insertions(+), 533 deletions(-) commit 12fb4657b81bee286bbfaa89594b64a95110e099 Author: RalfKonrad Date: Mon, 11 May 2026 10:30:02 +0200 Link CLAUDE.md to AGENTS.md CLAUDE.md | 1 + 1 file changed, 1 insertion(+) commit c27e92b27d3c7277130dc8757156fcce495c1347 Author: RalfKonrad Date: Thu, 2 Apr 2026 13:12:40 +0200 Fix broken test call AGENTS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 2d74a20272cf4b356c18de1f45e767ed59087f41 Author: RalfKonrad Date: Thu, 2 Apr 2026 13:07:02 +0200 Update .gitignore to help agents to use the clangd language server .gitignore | 5 +++++ 1 file changed, 5 insertions(+) commit b6e2b45b51c97a0a999bf80b285d0f3c2c222a46 Author: RalfKonrad Date: Tue, 24 Mar 2026 16:00:04 +0100 Add section about 'Deprecation and Backward Compatibility' AGENTS.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) commit cb6228c3f992153ae4017986d439c1dc64169322 Author: RalfKonrad Date: Fri, 20 Mar 2026 20:47:06 +0100 Add section 'Registering New Files in the Build Systems' AGENTS.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 6 deletions(-) commit 667dc56423aed27856e5b98883b147c0a43c9674 Author: RalfKonrad Date: Fri, 20 Mar 2026 19:14:17 +0100 Add AGENTS.md AGENTS.md | 393 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 393 insertions(+) QuantLib-1.44/Contributors.txt000066400000000000000000000137701526335424600164410ustar00rootroot00000000000000We gratefully acknowledge contributions from (in alphabetical order): Nathan Abbott, Samad Abdessadki, Kakhkhor Abdijalilov, Chanitha Abeygunawardena, Xavier Abulker, Toyin Akin, Marius Akre, Colin Alberts, Mario Aleppo, Richard Amaya, Ferdinando Ametrano, Imrane Amri, Jongbong An, Tom Anderson, Grzegorz Andruszkiewicz, Ignacio Anguita, Fanis Antoniou, Krishna Anubhav, Driss Aouad, Jose Aparicio, Sergio Araujo, Leonardo Arcari, Advit Arora, Sercan Atalik, F. Eugene Aumson, Ahmed Ayadi, Arnaud Baguet, Lluis Pujol Bajador, Gerardo Ballabio, Luigi Ballabio, Jonathan Barber, Nabila Barkati, Riccardo Barone, Clément Barret, Toprak BaÅŸlılar, Christopher Baus, Thomas Becker, Michaël Benguigui, Adolfo Benin, Hachemi Benyahia, Luca Berardi, Nicholas Bertocchi, Sylvain Bertrand, Manas Bhatt, Marco Bianchetti, David Binderman, Theo Boafo, Marcin Bogusz, Francois Botha, Delphine Bouthier, Sébastien Bouvard, Fakher Braham, Nathaniel Brough, Ole Bueker, Joe Byers, Xavier Caron, Marine Casanova, Peter Caspers, Antoine Cellerier, Yee Man Chan, Aurelien Chanudet, Abhay Chaudhary, Yiping Chen, Yanice Cherrak, Gualtiero Chiaia, Meryem Chibo, Warren Chou, Scott Condit, Marco Craveiro, Benjamin Croud, Yeshuai Cui, Paolo D'Elia, Stephen Dacek, Lawson Darrow, Jon Davidson, William Day, Daniele De Francesco, Frédéric Degraeve, Piero Del Boca, Mike DelMedico, Chirag Desai, Barry Devlin, Nicolas Di Césaré, Lucas Dias, Piter Dias, Binrui Dong, Jacques du Toit, François du Vignaud, Francis Duffy, Disha Dugad, Cristina Duminuco, Jan Ladislav Dussek, Ralf Konrad Eckel, Dirk Eddelbuettel, Faycal El Karaa, Joshua Engelman, Bernd Engelmann, Giorgio Facchinetti, Matt Fair, Kareem Fareed, Paul Farrington, Lorella Fatone, Isuru Fernando, Luca Ferraro, Marco Bruno Ferreira Vasconcellos, Davide Ferretti, Neil Firth, Stefano Fondi, Chiara Fornarola, Silvia Frasson, Rémy Frèrebeau, Andreas Gaida, Matteo Gallivanoni, Jose Garcia, Lakshay Garg, Shubham Gaur, Fredrik Gerdin Börjesson, Riccardo Ghetta, Hoang Giap Vu, Ryan Gibson, Jack Gillett, Paul Giltinan, Roman Gitlin, Nick Glass, Marek Glowacki, Dmitri Goloubentsev, Richard Gomes, Max Gorbuk, Johannes Göttker-Schnetmann, Henri Gough, Richard Gould, Brett Graves, Eleanor Green, Florent Grenier, Matthias Groncki, Sebastien Gurrieri, Tawanda Gwena, Cavit Hafizoglu, Lew Wei Hao, Joshua Hayes, Michael Heckl, Jake Heke, Andres Hernandez, Chris Higgs, Laurent Hoffmann, Xiangyu Hong, Guillaume Horel, Benoît Houzelle, Frank Hövermann, Daniel Hrabovcak, Shen Hui, Charles Chongseok Hyun, Simon Ibbotson, Yassine Idyiahia, Alexey Indiryakov, Norbert Irmer, Mike Jake, Nicola Jean, Joseph Jeisman, Jewon Jeon, Amit Kumar Jha, Yi Jiang, Alwan Juliawan, Tomas Kalibera, Rahul Kanchi, Roland Kapl, Andrey Karpov, Michal Kaut, Tomoya Kawanishi, Gary Kennedy, Chris Kenyon, Babar Khan, Oleksandr Khomenko, Sergei Khorev, Gangsan Kim, Joel King, Kevin Kirchhoff, Matt Knox, Matthew Kolbe, Andrew Kolesnikov, David Korczynski, Nijaz Kovacevic, Philip Kovacs, Zak Kraehling, Silakhdar Krikeb, Pradeep Krishnamurthy, Nathan Kruck, Yan Kuang, Werner Kuerzinger, Oleg Kulkov, Allen Kuo, Christian Köhnenkamp, Mickael Anas Laaouini, Paul Laderoute, Yasmine Lahlou, Alix Lassauzet, Lawrenz Law, Fabien Le Floc'h, Fabrice Lecuyer, James Lee, Jonghee Lee, Ka Wai Lee, Jacob Lee-Howes, Samuel Lerouge, Bernd Lewerenz, Patrick Lewis, Cheng Li, Gang Liang, Roland Lichters, Kai Lin, Hank Liu, Robert Lopez, André Louw, Benson Luk, Matthias Lungwitz, Jasen Mackie, Trent Maetzold, Andrea Maffezzoli, Joao Paulo Magalhaes, Jose Magana, Andrea Maggiulli, John Maiden, Katiuscia Manzoni, Marco Marchioro, Francesca Mariani, Daniel Martinez Davies, Slava Mazur, Paolo Mazzocchi, Siddharth Mehrotra, Magnus Mencke, Enrico Michelotti, Andre Miemiec, Raso Mirko, Evgeny Mishin, Devashish Moghe, Radu Mondescu, Bryte Morio, Bart Mosley, Jose Moya, Zain Mughal, Tiziano Müller, Joan Carlos Naftanaila, Prince Nanda, Dmitri Nesteruk, Billy Ng, Bojan Nikolic, Jean Nkeng, Robin Northcott, Konstantin Novitsky, Nikolai Nowaczyk, Adrian O'Neill, Andrea Odetti, Cay Oest, Hiroto Ogawa, LW Osterbrink, Anubhav Pandey, Aaditya Panikath, Sotirios Papathanasopoulos, Krishn Parasar, Mike Parker, Guillermo F. Parra, Pratyush Patel, Giorgio Pazmandi, Guillaume Pealat, Gilbert Peffer, Andrea Pellegatta, Ignacio Peña, Walter Penschke, Francesco Perissin, Robert Philipp, Marcello Pietrobon, Adrien Pinatton, Gianni Piolanti, Arsen Podoba, Vladimir Polin, Sebastian Poloczek, Berat Postalcioglu, Nolan Potier, Mario Pucci, Ian Qsong, Paul Rädle, Alexandre Radicchi, J. Erik Radmall, Ilyas Rahbaoui, Sandeep Rai, Fabio Ramponi, Hristo Raykov, Maria Cristina Recchioni, Simon Rees, Dimitri Reiswich, Sadruddin Rejeb, Martin Ross, Alessandro Roveda, Ryan Russell, Marcin Rybacki, Mohamed Amine Sadaoui, Amine Samani, Prathmesh Sananse, David Sansom, Alpha Sanou Toure, Tamas Sashalmi, Sebastian Schlenkrich, Peter Schmitteckert, Ralph Schreyer, Leander Schulten, David Schwartz, Benjamin Schwendinger, Henning Segger, Carlos Fidel Selva Ochoa, Giacomo Sergio, Simon Shakeshaft, Hetal Sharma, Michael Sharpe, Kirill Shemyakin, Eugene Shevkoplyas, Mohammad Shojatalab, Anastasiia Shumyk, Piotr Siejda, Matthias Siemering, Adityakumar Sinha, Gyan Sinha, Enrico Sirola, Leon Sit, Wojciech Slusarski, Andrew Smith, Dale Smith, Tim Smith, Maxim Sokolov, Prasad Somwanshi, Niels Elken Sønderby, Klaus Spanderen, Andreas Spengler, Roland Stamm, Weston Steimel, Philip Stephens, Kai Striega, Jonathan Sweemer, Edouard Tallent, Eisuke Tani, Marco Tarenghi, Ryan Taylor, Yue Tian, Eugene Toder, Steven Van Haren, Jayanth R. Varma, Krishnan Vignesh, Michael von den Driesch, Joseph Wang, Qingxiao Wang, Tony Wang, Martin Waser, Charles Whitmore, Tomass Wilson, Stephen Wong, Krzysztof Wos, Bernd Johannes Wuebben, Sun Xiuxin, Frank Xue, Jeff Yu, Maddalena Zanzi, Li Zhong, Viktor Zhou, Francesco Zirilli, and Roy Zywina. QuantLib includes code taken from Peter Jäckel's book "Monte Carlo Methods in Finance". QuantLib includes software developed by the University of Chicago, as Operator of Argonne National Laboratory. QuantLib-1.44/Docs/000077500000000000000000000000001526335424600140635ustar00rootroot00000000000000QuantLib-1.44/Docs/Makefile.am000066400000000000000000000020631526335424600161200ustar00rootroot00000000000000 EXTRA_DIST = \ quantlib.doxy \ quantlibextra.css \ quantlibfooter.html \ quantlibheader.html DOXYGEN_CONFIG := quantlib.doxy DOXYGEN_CUSTOM := quantlibextra.css quantlibheader.html quantlibfooter.html DOXYGEN_INPUT := $(shell find ${top_srcdir} -name *.hpp) \ $(wildcard pages/*.docs) BASEPATH = $(shell cd @abs_top_srcdir@ && pwd) .PHONY: docs docs-clean dist-hook: mkdir -p $(distdir)/pages $(distdir)/images cp -p $(srcdir)/pages/*.docs $(distdir)/pages cp -p $(srcdir)/images/*.jpg \ $(srcdir)/images/*.ico \ $(distdir)/images docs: .time-stamp clean-local: rm -Rf html rm -f .time-stamp .time-stamp: $(DOXYGEN_CONFIG) $(DOXYGEN_CUSTOM) $(DOXYGEN_INPUT) ../LICENSE.TXT cp -p ${top_srcdir}/LICENSE.TXT ${top_srcdir}/Contributors.txt . $(SED) -e "s|ql_basepath|${BASEPATH}/|" \ -e "s|ql_version|$(VERSION)|" \ ${srcdir}/quantlib.doxy > .quantlib.doxy $(DOXYGEN) .quantlib.doxy rm -f .quantlib.doxy rm -f html/*.md5 rm -f html/*.map touch .time-stamp QuantLib-1.44/Docs/images/000077500000000000000000000000001526335424600153305ustar00rootroot00000000000000QuantLib-1.44/Docs/images/QL-title.jpg000066400000000000000000000277711526335424600175030ustar00rootroot00000000000000ÿØÿàJFIFHHÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õ�XYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeas�sig CRT curv #(-27;@EJOTY^chmrw|�†‹�•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ�¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y � ¤ º Ï å û  ' = T j � ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il�²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k)�)Ð**5*h*›*Ï++6+i+�+Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBT�TÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!|�|á}A}¡~~b~Â#„å€G€¨� �k�Í‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ�1�˜�ÿŽfŽÎ�6�ž��n�Ö‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™�™üšhšÕ›B›¯œœ‰œ÷�d�Òž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª�««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½�¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿÛCÿÛCÿÀ2¹"ÿÄ ÿÄ=  !#89x·"Qv12ATWw¸”–¶ÔÖÿÄÿÄ3!"#21$36ABt%QSq±´µÿÚ ?�3Ï”½±õ½Â²Ecü˜æ='[L¶ÃÃî²Mæ–€æû%ºÈîê­¯šJì4¶rš{å’[F~W»kìi¢ûçåoýT]äÙÜÊcr{U+ý³ãôµ)¬úw`„ãüìÒܰ¤°3‘YÑi\åÓgebBYKÚù©óÉŸ3%lά‚Ü‚é¾w„qckNºtŠŸ¸Ñ*¶s—4æ;÷ó²M¨{ Ë¦ÂCþóÕ´åhF¢�«J¥'ý8¼ÖÞýY�ìYj=ÆdNæ?1æèè¿“£¨í•€òÞ/í¥ê�éRª—…»åª“’`Ýîĉ*¶§¶gѸÓMÎDÍÂÃwˆIÚgë� Å�¾þôô{¶é©®�ÑÂÚºóìYRbø‘Éxm�1 ÙÓÒõ¡VR*öÓf5Ž£òüÒ͈/-3`¡QÍ^K#‹Å[¿v�å êÿÞÛVIêÏk*ÌÕšj\,€Ô•©A4ý€K|ŽáÈ™ B–�½¹=ùëó'à'îì×`õ£^qŸ2û áw_0ñSnaò I‹‘}ÿåA&Õ(rs4À•Ŷ1¼"·ˆ��جp.§ÝÆ£DÚGô,=ÁµÇ¶vŠÛü³ˆÝ¹uÙÎ:òݵ8ëÉØ\‚A·H…Î^jÆMPfµáƒÂMer¶vØHKÁ°ÇLÇÝŽÈíÙqE˜ìWG∶l°Ê¬¬¥`¬ö`À‰"wæÔ=ôŠ�ź -ÐÕÊ8öûVó‰Çñ?«BT*Oãóv, *öI`$�Z?áâùõHô‘œ¼ƒ¸åÃòYaÈGÒà}ìv “¶nÕdåÃ9Ú鯧Cêº[lØüu©€dÚl‘$Y{êeáϾ ñßŠÙæÍŸxÄÚñyaQ“-¸ž¥,`vs7�GDóF¾&%'Üû÷­›2ÀVO4OÜ«—»´fÑë–òì%œj¡ðÌh²ÆF®T$ƒž”Ò…ÐMò¡uÈv*³Øf@^ä_š_ÜÁGÉTÿY¤ÿQ»ÃÉ×ý\7½ËÚ%|/*÷ŒÝhœ¹ã k`Ö�¤Óѵüê�IÞR )0Ò9ÓÄwYÚqôVh]‹J:j´Ð“�ñ߸~¸¹oxG8ëÆNMEîë^I•ÌP2rÀ\j‹ ;!%^~Bl[0©Š’Ym÷fÁV­¹lÈÍïž:|Øèë1kœóBZik@Ò‘•ƒ1 >ßO¸©ì±ô«:ÃE³Ð�ì{®¬­–�¢ÔÎ’Ž…&vvaO¶Y[Þ�›8²Ï×G¨»¦jÈ“T¶_5ã­gpÒÄʆÄj›îÌ Ø‚.Ä–òOZÕrؾå‘bí¡íL¸xÉds«”Sù÷ëåmcBn ökV²rÚòÇŠ‚›Áå#Ót˜ùRN5±€èõ»WxfP[¶ÏZåÃdUÙÓÛdõÎ~žG�ÔKŠÖ}ÒsÚ/ 05¬ØœÃ#�l-ާ,z’¼±eoufÓ]ÕÉiT¨Ñgî5× = õÓÕñó¸S>Uë­Xîñ»8Qâd7þ5ŠÙò(îÝ'ygNÑû„ÑWm”KE}¾ítßlï®3ôÛ韮1n6_wôñå¬|t‹pÒ3˜êr8¹=6 1woŠk?Ô?‹¿—‘è¬k¢Ã•f|¤Óä(¬ýšÇ£Pö§Lº‰aâ >>=Ýýòý» ñv’Q“ˆñv"QÕ˜¸FFRZP*eœMÜ·m˜.ü+l®ÃeQY¿O5éö®yojÉúÜå½ÉÉJæ¯$8`^@Š�CŸDªççX-+{Z†1GRme/Ý9ig)/ºrC@äÑ6�#Ì œPº10§#®t"ñŸ̹äCV„vÐZ©0,‰ÐÍ^èÆ>Ìnå@VffÅiâÏD"6¦ÙrÊRvÊtg“$�û“³¸�J=÷‚#Ä.TwQÞï|çìÿ�nìš^†ˆEk1«DÔôüqµi91gNkÉŠGuÇg“�ì0[ȼÓ×FˆLK[Š›áŸjð�ZrÖWξ¾¸±Ë ౩ÍÇY·34IÓxârЦ Dä�#Ìß¾(üx"¦@=* câ„Þ õ»D_¬Ûwk!­a,ç±Î6çMs²ŠðÞ7¦5×Ms¶Ûb渵×öëòo¶ÙÛéŒm¶ßðƘÇ×?]Èë/½¾¥úöë�tÉÊ{Úb(fåðzî'6¸ à ÊNŸ�—.1^ÆÌÆ"çÚ"óW£›KÂ5Ù¦¥ƒ£ªÈ8pq“ý?¥´�û'Î9lßÞÚmÎgÐY‰ò­]2a­üGµ:y4§ P'«ò¹ëo2D9ÍN[´*)“ëÍÃjŠø‚Ê‚o¶ñ“±÷* {Œî=8‡‡œ7Â.ɸKؼDÄ¿‡×äRÚF3³}eñ„�1°áŸx»¶ÌK+™€Ð3PC ¸`ý ‡ƒÐ 혼ÈBd4j¾É÷'Œdt :•$‚<•‡jÊ“+•aØaò ”¬¯ÙV Ñ*z ôÃù©ÿ“óSÑù�Q=î~Û7wv½ØöAº›¾×”¶´¶Æ0¢ ªIšš.Ó>Õ—×8e„ i¦Ú©ôßD5Û £ŒáìÇÇÈT~¶¡i:ò&Á ¨¼¥®bѬZ7`͈Hä@8��[2k®�š ƒ6ˆ¦›t5Õu×'ŒkŒyžø8ô{�]·óžd{¦lå—¤²ê‹9]I Z+y¼ÚÕù‚î•_g­Û+*xˤ–ÝI®º¡»e#T˜9ƒçZO¼òD�]­môM¶@[hæ°©È×tÛ;‹Ñé!:ÈÃ4W]>hÑàd[ãvOšª¢¸éI UŠÉx?s;–k� {óR—É‘±Ý×&Ÿp†ž�)'ê�׫s=§Ômîý_ë`–’”ÏC]´Hg ©ÜôçGÓ™B‚ù¤ÔUðV#Þûe¤@r'­qÔ²!­Š {�¹pèºÙÓk1„ÅHN ¥´Yt\&Ý`³8à"È/”·ÊJ³×|cë�%ÐİÄ3¸ž½Lu†�]ò&1Yl§•q°‰Û°‰ lë…Qú}è 6~ÿ~p—Ïòå5±¦QR«}Ær&9Å®°9»oÈÉ¢3v||°!Q\©²>÷ö ¢Åk_ A7 ž¤ª�¦2 É)®ìÝ$“_¸rá› ¶ÚÍËÒµÅIŸ"{u¥ì!C³½ÅaÛÆÈ4á³½˜´öƋ !›»E Új|ÌêN€ö/6ÙÈHô�ûoŸa ¡¼ý<­ü^÷iNÙ3fáuhAáÛ'£˜ßÉ-Kþ,SŽHÑd|¨êÁUÒJ÷æº?K¬•Êh¾ŽgØdì)X�XZï¥ëËð¬>2Á ˆÐYœ Üâ+Tf Z2ÞBN¼­ûFºl†Çv–RÑη£WQ±ÐÎ�xœ1ŠËx1GÆeQ©Hæ‡ÀÉc†j€ÂK€< ª.Ç— PZë� 0ƒw ž0YVŽQº›'”*õ�×ù$¨¿«|€ò‚}Hì3n­ºìÈ´ÀÿЫ�KìuOVß6*–|z¥Œ'�¾ó>\ë�Ö·ÉœýsœçËqYgü9¹AAžı.F¡Îiõå4™í}ŒÐÎ3¬ü|'7I¨TM7Z‡™Ç_"¶^P¼¬‘Çpöî—(!HÒDOª¨Ä‹FË;¿XÝìŒPFEñ�ží×›>ERí+LY 4o xlšé½,Ø…reh4›SNœ¤|c¬M9$ÑûÅœ³ÇZ¹õ wa1Ë•7á_IÊå`�!u\=Ûƒd�”Ã2bëÚÎ<20ôÄ.÷#Ž%VEª´�bâTžÒ…Ñ,Q‚Â_ÕÝ—P÷´ö¹º.—ü†´!Ý�Õâçw‘˜ÓHCû(âv¤5ù[Ø£2çÆvyªÚc"|Èrijƒgnž˜×Vºýeô±Ðë®U§Ø+8­sÃ�àJšGÎrûié¯ãJ —äšùÖ«M5ˆ }Cìrš}÷]¬êrs)¢JÔ3« ùtðŽÚm—-Ù’]fží¾,9Ñ,­ª‰ct÷U¿Cÿï ÏOû3OóyW˜¸0[Ÿå¦É:e�÷‘�TQS�^;–­Û~Ô¨ÁPŒ¦oQCEpô ³•óŸÆÝ[ÂÖåÛ*Ÿ‹Ó(ÕÁi�_È}Ö€Œ?RaÁFB’eø'©Ã¢Î%õ�Pq»‘|=k0‡EfVÊ:È‚Jååçh’º‹œÄ§AÌH]¸2)ò㢲‘aIªà½t�ºÆ>å©lÈ6�Ò00(ºƒä_9nÒày=`ÀÇ×ÓÁm$q¤¡³ Þ³›�è,’N¤Ï3 ŠN×t4IÃ3†žhª/s¢úùŸ[ðáã7ó·þ„_xoE²ìõ­Ëê8_êÛ—²·ûlãVÍÚÑêº(ÝT—UW[(–ÎÚaº¥ºx×O›ß®Ø®w'Õ©v[æH0xßÚ(38áµV ]|šmzRž$ѦŽÓO²IM:Aûž¤=»}ÇâòòW5HrqJ§â¢jŠ]�»WQÒFË��ñ+�+›M�Mœ nÕ"e)š€p=ÞUMô:ׂ£¡�’IÆìrJ7(³c¡Åi_¯Ó?Žÿõ?þ­§ÿcÉEzŽQZgÞ�8D’RFLµ‹PÅŰ ÝWNÈHÒ¢jê�´G ,䦇�XFÈ#®Ê.E=ÓKOvúéåÿ³rÍÿœ-ÿ·Gú¿:GôqÆý?õ�õ_"ØeŠøvÌ$}öå›r24ð¤^yŒrZpˆQßF>K¡:æßÒ-Íp<¢ `:Nšmž¼Ì­¤äŽKªá,?Qm2j¸îÃ("=|ÇÔ)У^Ø¡q;šŠ5‚s.œæ7y(ÆXÄnZëg®K§ZÌN3fì€À ¾(b¼“e˜½5!}‚c¤hÉ¢IgÁ®Tvÿéµlul~$Ûì¨cäÇ0¹ê[z'/IHäIü#ãóZòê8ì<ÓÚ¢`Ìâ¥QÉPÕ4xD�ÀhÒÑÚÔyÅý‡pÂØG oÎ N )qð0L¡&š¿R#5Xl¶-ü?ePüEäÔ"ïêå¦äصt;G�6u‡)sr/Ç&­©ä)wÀµýÝ?™TZêîŒÓ±9鬥˜ÅŸEkÑ;ŽÓ—>¿ t�Øœû 6·‡åEÍßáDñºÃÊ>tšgœ�s�“îêýU»V!éÎ0‰ã§bÇO̦ؑŸ d@)IÌÒÎ6l’à%SrÑ�ªjÔΰåÌ?fL.ä(qWê©j'¨î7kOÖns8´&îÈï»À˜Ä†´f,Z,Ý’MXaÃí£pšO±‚à õ íß*ýéY4‚Dl¤ðj §»_LMÁ=†›«Š4¦d’T÷‘ÆçñÉ-…Ä;qãW2À­ìó°�@KfÝ-?›l31ñVœ1W EÇ…7÷S]ýsCµ z ŠõLj¶¤WüD�©Ër·Œ¥í? % Ò0™>0œ—3ö €A„O^˜Ñç%Šá´p €Èß_�ŽzÂÒá<î^”å*jæídœ­¥6諈$ r‡Œ¨âòŒ#�‡†|Ñ—›ª—Z#ò~@fP¸UfD™éìŒùççW»û¯æÓOnÖ­/0ij»fß«§©^VòBШ9ÝÆZ¾OzˆÔc©v½¬£$eV|e“i<–):“ùÎ0û3‚¤€ xò tKxëòD£üÖwbþ¥¨…YõÕÅ>;46.4œ½»nþ2ÛBOÓÑÒ �$;c–ŒæY¢ƒƒ"ém"x±áæ´ËF¢ã)2’møPG¿ðó4g£3=«�NŠé|â­/Õ¥+ï-{™ºx^rµa+"?ƽ4m4†�&œñ”'ofnFS‚w&Û÷(ÄU(¯+RIkN”™öûÓi\eä¸ËÝnóŽc„ gÌyUVsYð'’Úu]½ØC3„âM4C6 >M LJñxx#_Æcì=ÙÕ/Øg~½ZÓVÈÞ½ï.4ò[ˆó„ʼ¥í%Fä,V`äfÄ�Q¡f;Ä'‰<‹¸ŠDeèG'ñ(ž¦‚œ(º9f?&ûÃÈdZq–ã(“h ÑßÇ(Wœ¸»fÙ-Y“,gESŒc‚ªì_NHÄÚ‡D’ë)FžÙnBÂÃ&ŒzX»3j–Ì­›SQ�À­Y›@YYè²E�F`}OvMß]ÔÉ. Ó}kÚw[=å&�Ô�m¾4rYjzY3+£³Í * ´9»¸Ò�$¤ØÊÈG·L¡bn¦ƒAm³&¹õÙ·YýËV\µO“˜ãœªÃ¹9XW!žÊxá_µ+èÌøÛ¶æ]Uå³�’c^=A¨qì¸44’L“" W:ãy#ÛøxÂÔøþFL'È`y„Ùâ£4ÑzÍœž†pÚ#‹CÓõhÇYí«RªjÈËç�W›Ó1'Ûk»+TÅ?Nšf'âˆ>êïÑvïÒ¢ó^øæh¾ž®X¸?×W*(~E�SGYQEëÃÇ&vyp×%nJK&©+¶L1n»‰ ØQ©§*€# ÔÖt3yVy‘9ÊïGÿyŸÅž[ò¨w#8ƒÉÚbñà+‘S;«�vµ]'…ØÁ4i(œÇã•4ôT´Á$B7MóçÌýzží¾P/ÃÇf¤ór{¹Ï?íÙ+™ó‚ÂSzñÚpLöXÚN•ŸÄÕÔMBÏ +UkqX¸ªQÙpîm© ôkNô`ºEÇ@Eãç#CÛº»3“Nت«ÓŽœƒä·8õ ã•r_òðœÀŽIŒÅi:ÂmjÉÆÐ¥î‘KÈ ƒ‚ƒ' fØ�¨…›’º”vOÊø�%�_žæ¿äO¨ïß]jv�Ôç?LéÞäq<ãÕíWT’Ë»–F‡ÈŸ:…’ÐÜ@ ˆªØ7Ñ3JèÂ�ßµfüŒvF 61£¦÷êÔޢÎÊ9]HX§¬Qá§©©‰u¬Ù…=%¡ßD™Dž3‰B ´ËÊmi˜‡²cËuXWøx£É™*öP.6W)ðñ¸Y²fÇšçúÂ|{ eË2�i8$÷Y•m¥.]'ËÆÓš-hȸժԄ~?BÚ.“*²�XN‹@(%Qê믰+›¸®gZïy�mV²ã•#¸µ…Wñ®å°a&㨠 BÊâ0ÃIa�‘D…=Õ£õwhA‹¦nuI '®ÂUÝäwãNqê´¤¡]rSUC «ã“)/¹ T[§PxxȨé xˆè'Ž[:ÜZ$ƒi1b®tQFH›O>ט}?)”Ó/¼jTœÃí ¯@>(ÞèXvêÉ-7+&„�J§‰e�µ}ᘠeRIoÐñ­Ð Ué 0 ¥”"¯‘ü‹&—QRÞå9WîFîìb²ä�}µ¯Çfª*б*ÛV«ˆ6–i]Ûl�ãÕ1;Â/F³Ñ‚ñqfÉT¤ØñQª’‘4wº˜é´à×`œoî�-ÃÁŽ]TµŽán¨Ü¾ÃµxÃxAáq¶¦éyÚb–%,’CƒGÂ*BD€`ìÜ{«wèÁ÷zí¯¶¤>_‡Ê?%žjð’áv$ƒ%Nmm¡ìO¹KݹÝ,Kù’–~˜˜Ô_f#’î[¾B¼€¯À)FŸ(Îsý“–uâ³”DCñT_T�õgtùÊþeÊh¾eq*¹�ÞDë:Ô­AmU߈ŒùŒhqóÓ˜”âÎS#4Ogò$~H3’rÝ\­p4U‚’áy[­þï»à�_ñŽIº„æmÁÈZTi]!Z¦¶ãñ²Q²G ‘ >ÊŒ§W¯.n½rÜ–F‹Mâ“QÇxNóW2h3áâ3ÌæÍ· QþÏuŸE$–³µom¤t«{²sM}º'TŠi´äê¾Ø›´Ðj¶MuPuã”á;~%Ï,Ñ•"SÅÑe-‰�Œ!J!ª3ºtuéû嵳̽{Uír8^u9÷ àt¼Ù¸ä,›6ë‘“VhÆÉ´b¨ámë´*HKS€kÒÈ…›¯2Á±˜ôb'Ñ„Éýü<<Ô΂QÍžC><ËáŸ:³2ÌxÎe˜žƒUÒRZ:¬Ð‰¢¤ç4D\ý;Þú¬æÚµ?�ìÀ)säîûf¯Zº©,CQÉff$ž+Õý~m®»c:íŒm®Vq¶1œgáœgõgÃƸƺãÆ1ôÆ1ŒcÆ?ÙŒc«ÇøcÃÃÃÔ˜ÿ±ÿÊúýððððõ>�G£ÃÃÃÃÑèððððôz<<<<=�G£ÃÃÃÃÑèððððôz<<<<=�G¯ÿÙQuantLib-1.44/Docs/images/favicon.ico000066400000000000000000000020661526335424600174550ustar00rootroot00000000000000BM66(   þþþÿÿÿÿÿþþþÿÿÿÿÿþþþÿÿÿÿÿýýýÿÿÿÿÿîîîÿ¶¶¶ÿ°°°ÿéééÿÿÿÿÿþþþÿþþþÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿÎÎÎÿÿÿÿFFFÿóóóÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿþþþÿþþþÿýýýÿÿÿÿÿÿÿÿÿÿÿÄÄÄÿÿÿÿÿýýýÿýýýÿÿÿÿÿþþþÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÉÉÉÿTTTÿÿ———ÿÿÿÿÿÿÿÿÿüüüÿþþþÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿLLLÿÿ ÿqqqÿ)))ÿÿÏÏÏÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfffÿÿÿìììÿÿÿÿÿÿÿÿÿ!!!ÿÿÙÙÙÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÕÕÕÿÿÿ¥¥¥ÿÿÿÿÿýýýÿÿÿÿÿ²²²ÿÿ;;;ÿÿÿÿÿýýýÿþþþÿÿÿÿÿþþþÿÿÿÿÿ¦¦¦ÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿÿÿçççÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿ~~~ÿÿ111ÿýýýÿÿÿÿÿÿÿÿÿüüüÿÿÿÿÿÿÿ­­­ÿÿÿÿÿþþþÿÿÿÿÿþþþÿÿÿÿÿŒŒŒÿÿ444ÿÿÿÿÿÿÿÿÿþþþÿýýýÿÿÿÿÿÿÿ   ÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿ¸¸¸ÿÿ(((ÿõõõÿÿÿÿÿþþþÿÿÿÿÿÌÌÌÿÿÿÆÆÆÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿÿÿÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿmmmÿÿÿÿÿÿÿýýýÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿ´´´ÿÿBBBÿÿÿÿÿÿÿÿÿ»»»ÿÿÿ���ÿÿÿÿÿþþþÿþþþÿÿÿÿÿþþþÿÿÿÿÿüüüÿÿÿÿÿ­­­ÿÿ ÿAAAÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤¤ÿÿ”””ÿáááÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿþþþÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿþþþÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿQuantLib-1.44/Docs/pages/000077500000000000000000000000001526335424600151625ustar00rootroot00000000000000QuantLib-1.44/Docs/pages/authors.docs000066400000000000000000000015131526335424600175210ustar00rootroot00000000000000 /* Copyright (C) 2003 Ferdinando Ametrano Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \page group Contributors \htmlinclude Contributors.txt */ QuantLib-1.44/Docs/pages/config.docs000066400000000000000000000124331526335424600173040ustar00rootroot00000000000000 /* Copyright (C) 2004, 2005 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \page config User configuration A number of macros is provided for user configuration. Defining or undefining such macros triggers variations in some library functionality. When using CMake, they can be set to `ON` or `OFF` as properties. Under a Linux/Unix system, they are (un)set by `configure`; run \code ./configure --help \endcode for a list of corresponding command-line options. Under a Windows system, they must be (un)defined by editing the file `` and commenting or uncommenting the relevant lines. Such macros include: \code #define QL_ERROR_FUNCTIONS \endcode If defined, function information is added to the error messages thrown by the library. Undefined by default. \code #define QL_ERROR_LINES \endcode If defined, file and line information is added to the error messages thrown by the library. Undefined by default. \code #define QL_ENABLE_TRACING \endcode If defined, tracing messages might be emitted by the library depending on run-time settings. Enabling this option can degrade performance. Undefined by default. \code #define QL_EXTRA_SAFETY_CHECKS \endcode If defined, extra run-time checks are added to a few functions. This can prevent their inlining and degrade performance. Undefined by default. \code #define QL_USE_INDEXED_COUPON \endcode If defined, indexed coupons (see the documentation) are used in floating legs. If undefined (the default), par coupons are used. \code #define QL_ENABLE_SESSIONS \endcode If defined, singletons will return different instances for different threads; in particular, this means that the evaluation date, the stored index fixings and any other settings will be per-thread. Undefined by default. \code #define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN \endcode If defined, a thread-safe (but less performant) version of the observer pattern is used. You should define it if you want to use %QuantLib via the SWIG layer within the JVM or .NET ecosystem or any other environment with an async garbage collector. Undefined by default. \code #define QL_HIGH_RESOLUTION_DATE \endcode If defined, date objects willsupport an intraday datetime resolution down to microseconds. Strictly monotone daycounters (`Actual360`, `Actual365Fixed` and `ActualActual`) will take the additional information into account and allow for accurate intraday pricing. If undefined (the default) the smallest resolution of date objects is a single day. Intraday datetime resolution is experimental. \code #define QL_THROW_IN_CYCLES \endcode If defined, lazy objects will raise an exception when they detect a notification cycle which would result in an infinite recursion loop. If undefined (the default), they will break the recursion without throwing. Enabling this option is recommended but might cause existing code to throw. \code #define QL_FASTER_LAZY_OBJECTS \endcode If defined (the default), lazy objects will forward the first notification received, and discard the others until recalculated; the rationale is that observers were already notified, and don't need further notifications until they recalculate, at which point this object would be recalculated too. After recalculation, this object would again forward the first notification received. Although not always correct, this behavior is a lot faster and thus is the current default. \code #define QL_USE_STD_SHARED_PTR \endcode If defined, `std::shared_ptr` and related classes and functions will used instead of `boost::shared_ptr`. If undefined (the default) the Boost facilities will be used. Note that `std::shared_ptr` does not check access and will cause a segmentation fault if you access a null pointer. \code #define QL_NULL_AS_FUNCTIONS \endcode If defined, `Null` will be implemented as a template function. This allows the code to work with user-defined `Real` types but was reported to cause internal compiler errors with Visual C++ 2022 in some cases. If undefined (the default) `Null` will be implemented as a class template, as in previous releases. \code #define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER \endcode If defined, a parallel unit test runner will be used to execute the C++ test suite. This will reduce the runtime on multi core CPUs. Undefined by default. */ QuantLib-1.44/Docs/pages/coreclasses.docs000066400000000000000000000015621526335424600203460ustar00rootroot00000000000000 /* Copyright (C) 2000-2004 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup types Numeric types A number of numeric types are defined in order to add clarity to function and method declarations. */ QuantLib-1.44/Docs/pages/currencies.docs000066400000000000000000000014241526335424600201770ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup currencies Currencies and FX rates */ QuantLib-1.44/Docs/pages/datetime.docs000066400000000000000000000040641526335424600176340ustar00rootroot00000000000000 /* Copyright (C) 2004 Ferdinando Ametrano Copyright (C) 2000-2004 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup datetime Date and time calculations The concrete class QuantLib::Date implements the concept of date. Its functionalities include: - providing basic information such as weekday, day of the month, day of the year, month, and year; - comparing two dates to determine whether they are equal, or which one is the earlier or later, or the difference between them expressed in days; - incrementing or decrementing a date of a given number of days, or of a given period expressed in weeks, months, or years. @{ */ /*! \defgroup calendars Calendars The class QuantLib::Calendar provides the interface for determining whether a date is a business day or a holiday for a given exchange or a given country, and for incrementing/decrementing a date of a given number of business days. A number of calendars is contained in the ql/time/calendars directory. */ /*! \defgroup daycounters Day counters The class QuantLib::DayCounter provides more advanced means of measuring the distance between two dates according to a given market convention, both as number of days of fraction of year. A number of such conventions is contained in the ql/time/daycounters directory. */ /*! @} */ QuantLib-1.44/Docs/pages/engines.docs000066400000000000000000000026631526335424600174730ustar00rootroot00000000000000 /* Copyright (C) 2004 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup engines Pricing engines @{ */ /*! \defgroup asianengines Asian option engines */ /*! \defgroup barrierengines Barrier option engines */ /*! \defgroup basketengines Basket option engines */ /*! \defgroup bondengines Basket option engines */ /*! \defgroup capfloorengines Cap/floor engines */ /*! \defgroup cliquetengines Cliquet option engines */ /*! \defgroup forwardengines Forward option engines */ /*! \defgroup inflationcapfloorengines Inflation cap/floor engines */ /*! \defgroup lookbackengines Lookback option engines */ /*! \defgroup quantoengines Quanto option engines */ /*! \defgroup swaptionengines Swaption engines */ /*! \defgroup vanillaengines Vanilla option engines */ /*! @} */ QuantLib-1.44/Docs/pages/examples.docs000066400000000000000000000123101526335424600176470ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \example BasketLosses.cpp This example shows how to model losses across correlated assets. \example BermudanSwaption.cpp This example prices a bermudan swaption using different models calibrated to market swaptions. The calibration examples include Hull and White's using both an analytic formula as well as numerically, and Black and Karasinski's model. Using these three calibrations, Bermudan swaptions are priced for at-the-money, out-of-the-money and in-the-money volatilities. \example Bonds.cpp This example shows how to set up a term structure and then price some simple bonds. The last part is dedicated to peripherical computations such as yield-to-price or price-to-yield. \example CallableBonds.cpp This example prices a number of callable bonds and compares the results to known good data. \example CDS.cpp This example bootstraps a default-probability curve over a number of CDS and reprices them. \example ConvertibleBonds.cpp For a given set of option parameters, this example computes the value of a convertible bond with an embedded put option for two different equity options types (with european and american exercise features) using the Tsiveriotis-Fernandes method with different implied tree algorithms. The tree types are Jarrow-Rudd, Cox-Ross-Rubinstein, Additive equiprobabilities, Trigeorgis, Tian and Leisen-Reimer. \example CVAIRS.cpp This example shows how to calculate credit value adjustment for an interest rate swap. \example DiscreteHedging.cpp This example computes profit and loss of a discrete interval hedging strategy and compares with the outcome with the results of Derman and Kamal's Goldman Sachs Equity Derivatives Research Note "When You Cannot Hedge Continuously: The Corrections to Black-Scholes". It shows the use of the Monte Carlo framework. \example EquityOption.cpp For a given set of option parameters, this example computes the value of three different equity options types (with european, bermudan and american exercise features) using different valuation algorithms. The calculation methods are Black-Scholes (for european options only), Barone-Adesi/Whaley (american-only), Bjerksund/Stensland (american), Integral (european), finite differences, binomial trees, crude Monte Carlo (european-only) and Sobol-sequence Monte Carlo (european-only). \example FittedBondCurve.cpp For a given set of coupons and terms to maturity, this example computes the value of a bond by fitting the yields to a curve using different methods. The fitting methods are exponential splines, simple polynomials, Nelson-Siegel, and cubic B-splines. It then shifts the evaluation date into the future to compute implied forward par rates. It also computes yields after small price shifts. \example FRA.cpp This example values a forward-rate agreement (FRA) at different forward dates under two yield curve assumptions. It thereby illustrates how set up a term structure, and to use it to price a simple forward-rate agreement. \example Gaussian1dModels.cpp This example shows the use of Gaussian short rate model for interest rate derivatives. \example GlobalOptimizer.cpp This example shows the use of several different optimizers: firefly algorithm, hybrid simulated annealing, particle swarm optimization, simulated annealing, and differential evolution. \example LatentModel.cpp This example shows the calculation of correlated defaults. \example MarketModels.cpp This example shows the use of interest-rate market models. \example MulticurveBootstrapping.cpp This example prices an interest rate swap over a term structure and calculates its fair fixed rate and floating spread. \example MultidimIntegral.cpp This example shows multi-dimensional numerical integration. \example Replication.cpp This example uses the CompositeInstrument class to statically replicate a down-and-out barrier options. \example Repo.cpp This example values a fixed-coupon bond repurchase (repo). The repurchase agreement example is set up to use the repo rate to do all discounting (including the underlying bond income). Forward delivery price is also obtained using this repo rate. All this is done by supplying the FixedCouponBondForward constructor with a flat repo YieldTermStructure. */ QuantLib-1.44/Docs/pages/findiff.docs000066400000000000000000000017631526335424600174500ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup findiff Finite-differences framework This framework (corresponding to the ql/methods/finitedifferences directory) contains basic building blocks for the numerical solution of partial differential equations by means of finite-difference methods. */ QuantLib-1.44/Docs/pages/fixedincome.docs000066400000000000000000000077221526335424600203360ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 Sadruddin Rejeb This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup shortrate Short-rate modelling framework This framework (corresponding to the ql/models/shortrate directory) implements some single-factor and two-factor short rate models. The models implemented in this library are widely used by practitioners. For the moment, the ShortRateModel class defines the short-rate dynamics with stochastic equations of the type \f[ dx_i = \mu(t,x_i) dt + \sigma(t,x_i) dW_t \f] where \f$ r = f(t,x) \f$. If the model is affine (i.e. derived from the QuantLib::AffineModel class), analytical formulas for discount bonds and discount bond options are given (useful for calibration). \section singlefactormodels Single-factor models \par The Hull & White model \f[ dr_t = (\theta(t) - \alpha(t) r_t)dt + \sigma(t) dW_t \f] When \f$ \alpha \f$ and \f$ \sigma \f$ are constants, this model has analytical formulas for discount bonds and discount bond options. \par The Black-Karasinski model \f[ d\ln{r_t} = (\theta(t) - \alpha \ln{r_t})dt + \sigma dW_t \f] No analytical tractability here. \par The extended Cox-Ingersoll-Ross model \f[ dr_t = (\theta(t) - k r_t)dt + \sigma \sqrt{r_t} dW_t \f] There are analytical formulas for discount bonds (and soon for discount bond options). \section calibration Calibration The class CalibrationHelper is a base class that facilitates the instantiation of market instruments used for calibration. It has a method marketValue() that gives the market price using a Black formula, and a modelValue() method that gives the price according to a model Derived classed are QuantLib::CapHelper and QuantLib::SwaptionHelper. For the calibration itself, you must choose an optimization method that will find constant parameters such that the value: \f[ V = \sqrt{\sum_{i=1}^{n} \frac{(T_i - M_i)^2}{M_i}}, \f] where \f$ T_i \f$ is the price given by the model and \f$ M_i \f$ is the market price, is minimized. A few optimization methods are available in the ql/Optimization directory. \section twofactormodels Two-factor models \section pricers Pricers \par Analytical pricers If the model is affine, i.e. discount bond options formulas exist, caps are easily priced since they are a portfolio of discount bond options. Such a pricer is implemented in QuantLib::AnalyticalCapFloor. In the case of single-factor affine models, swaptions can be priced using the Jamshidian decomposition, implemented in QuantLib::JamshidianSwaption. \par Using Trees Each model derived from the single-factor model class has the ability to return a trinomial tree. For yield-curve consistent models, the fitting parameter can be determined either analytically (when possible) or numerically. When a tree is built, it is then pretty straightforward to implement a pricer for any path-independent derivative. Just implement a class derived from NumericalDerivative (see QuantLib::NumericalSwaption for example) and roll it back until the present time... Just look at QuantLib::TreeCapFloor and QuantLib::TreeSwaption for working pricers. */ QuantLib-1.44/Docs/pages/history.docs000066400000000000000000000015601526335424600175370ustar00rootroot00000000000000/* Copyright (C) 2000-2018 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \page history Version history The list of releases is available from GitHub at . */ QuantLib-1.44/Docs/pages/index.docs000066400000000000000000000032531526335424600171460ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \mainpage Introduction %QuantLib (https://www.quantlib.org/) is a C++ library for financial quantitative analysts and developers. %QuantLib is Non-Copylefted Free Software released under the modified BSD License. It is also OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative. %QuantLib is free software and you are allowed to use, copy, modify, merge, publish, distribute, and/or sell copies of it under the conditions stated in the \ref license. %QuantLib and its documentation are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \ref license for more details. \section disclaimer Disclaimer At this time, this documentation is widely incomplete and must be regarded as a work in progress. Contributions are welcome. */ QuantLib-1.44/Docs/pages/instruments.docs000066400000000000000000000014231526335424600204270ustar00rootroot00000000000000 /* Copyright (C) 2000-2004 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup instruments Financial instruments */ QuantLib-1.44/Docs/pages/lattices.docs000066400000000000000000000106521526335424600176500ustar00rootroot00000000000000 /* Copyright (C) 2002, 2003 Sadruddin Rejeb This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup lattices Lattice methods The framework (corresponding to the ql/methods/lattices directory) contains basic building blocks for pricing instruments using lattice methods (trees). A lattice, i.e. an instance of the abstract class QuantLib::Lattice, relies on one or several trees (each one approximating a diffusion process) to price an instance of the DiscretizedAsset class. Trees are instances of classes derived from QuantLib::Tree, classes which define the branching between nodes and transition probabilities. \section binomial Binomial trees The binomial method is the simplest numerical method that can be used to price path-independent derivatives. It is usually the preferred lattice method under the Black-Scholes-Merton model. As an example, let's see the framework implemented in the bsmlattice.hpp file. It is a method based on a binomial tree, with constant short-rate (discounting). There are several approaches to build the underlying binomial tree, like Jarrow-Rudd or Cox-Ross-Rubinstein. \section trinomial Trinomial trees When the underlying stochastic process has a mean-reverting pattern, it is usually better to use a trinomial tree instead of a binomial tree. An example is implemented in the QuantLib::TrinomialTree class, which is constructed using a diffusion process and a time-grid. The goal is to build a recombining trinomial tree that will discretize, at a finite set of times, the possible evolutions of a random variable \f$ y \f$ satisfying \f[ dy_t = \mu(t, y_t) dt + \sigma(t, y_t) dW_t. \f] At each node, there is a probability \f$ p_u, p_m \f$ and \f$ p_d \f$ to go through respectively the upper, the middle and the lower branch. These probabilities must satisfy \f[ p_{u}y_{i+1,k+1}+p_{m}y_{i+1,k}+p_{d}y_{i+1,k-1}=E_{i,j} \f] and \f[ p_u y_{i+1,k+1}^2 + p_m y_{i+1,k}^2 + p_d y_{i+1,k-1}^2 = V^2_{i,j}+E_{i,j}^2, \f] where k (the index of the node at the end of the middle branch) is the index of the node which is the nearest to the expected future value, \f$ E_{i,j}=\mathbf{E}\left( y(t_{i+1})|y(t_{i})=y_{i,j}\right) \f$ and \f$ V_{i,j}^{2}=\mathbf{Var}\{y(t_{i+1})|y(t_{i})=y_{i,j}\} \f$. If we suppose that the variance is only dependent on time \f$ V_{i,j}=V_{i} \f$ and set \f$ y_{i+1} \f$ to \f$ V_{i}\sqrt{3} \f$, we find that \f[ p_{u} = \frac{1}{6}+\frac{(E_{i,j}-y_{i+1,k})^{2}}{6V_{i}^{2}} + \frac{E_{i,j}-y_{i+1,k}}{2\sqrt{3}V_{i}}, \f] \f[ p_{m} = \frac{2}{3}-\frac{(E_{i,j}-y_{i+1,k})^{2}}{3V_{i}^{2}}, \f] \f[ p_{d} = \frac{1}{6}+\frac{(E_{i,j}-y_{i+1,k})^{2}}{6V_{i}^{2}} - \frac{E_{i,j}-y_{i+1,k}}{2\sqrt{3}V_{i}}. \f] \section bidimensional Bidimensional lattices To come... \section discretizedasset The QuantLib::DiscretizedAsset class This class is a representation of the price of a derivative at a specific time. It is roughly an array of values, each value being associated to a state of the underlying stochastic variables. For the moment, it is only used when working with trees, but it should be quite easy to make a use of it in finite-differences methods. The two main points, when deriving classes from QuantLib::DiscretizedAsset, are: -# Define the initialisation procedure (e.g. terminal payoff for european stock options). -# Define the method adjusting values, when necessary, at each time steps (e.g. apply the step condition for american or bermudan options). Some examples are found in QuantLib::DiscretizedSwap and QuantLib::DiscretizedSwaption. */ QuantLib-1.44/Docs/pages/license.docs000066400000000000000000000020471526335424600174610ustar00rootroot00000000000000 /*! \page license QuantLib License \verbinclude LICENSE.TXT
\section licensecomments Comments on Copyright and License %QuantLib is Non-Copylefted Free Software [1] released under the modified BSD License [2] (also know as XFree86-style license). %QuantLib is Open Source [3] because of its license: it is OSI Certified Open Source Software [4]. OSI Certified is a certification mark of the Open Source Initiative [5]. The modified BSD License is GPL compatible as confirmed by the Free Software Foundation [6]. This license has been adopted to allow free use of %QuantLib and its source, to make %QuantLib flourish as a free-software/open-source project. It allows proprietary extensions to be commercialized. [1] http://www.gnu.org/philosophy/categories.html#Non-CopyleftedFreeSoftware
[2] http://www.opensource.org/licenses/bsd-license.html
[3] http://www.opensource.org/docs/definition.html
[4] http://www.opensource.org/docs/certification_mark.html
[5] http://www.opensource.org
[6] http://www.gnu.org/philosophy/bsd.html */ QuantLib-1.44/Docs/pages/math.docs000066400000000000000000000034471526335424600167750ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup math Math tools @{ */ /*! \defgroup interpolations 1-D Interpolations and corresponding traits */ /*! \defgroup solvers One-dimensional solvers The abstract class QuantLib::Solver1D provides the interface for one-dimensional solvers which can find the zeroes of a given function. A number of such solvers is contained in the ql/Solvers1D directory. The implementation of the algorithms was inspired by "Numerical Recipes in C", 2nd edition, Press, Teukolsky, Vetterling, Flannery - Chapter 9 Some work is needed to resolve the ambiguity of the root finding accuracy definition: for some algorithms it is the x-accuracy, for others it is f(x)-accuracy. */ /*! \defgroup optimizers Optimizers The optimization framework (corresponding to the ql/Optimization directory) implements some multi-dimensional minimizing methods. The function to be minimized is to be derived from the QuantLib::CostFunction base class (if the gradient is not analytically implemented, it will be computed numerically). */ /*! @} */ QuantLib-1.44/Docs/pages/mcarlo.docs000066400000000000000000000016321526335424600173130ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup mcarlo Monte Carlo framework This framework (corresponding to the ql/methods/montecarlo directory) contains basic building blocks for Monte Carlo simulations. */ QuantLib-1.44/Docs/pages/patterns.docs000066400000000000000000000014121526335424600176720ustar00rootroot00000000000000 /* Copyright (C) 2000-2004 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup patterns Design patterns */ QuantLib-1.44/Docs/pages/processes.docs000066400000000000000000000020041526335424600200360ustar00rootroot00000000000000 /* Copyright (C) 2006 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup processes Stochastic processes The classes QuantLib::StochasticProcess and QuantLib::StochasticProcess1D provide the interface for a generic stochastic process. A number of specific processes is contained in the ql/processes directory. */ QuantLib-1.44/Docs/pages/resources.docs000066400000000000000000000027301526335424600200500ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \page resources Additional resources The main %QuantLib resource is the %QuantLib web site (https://www.quantlib.org). Additional resources available from the above site include: - available documentation (https://www.quantlib.org/docs.shtml); - the %QuantLib mailing lists and forums (https://www.quantlib.org/mailinglists.shtml); - the %QuantLib programming style guidelines (https://www.quantlib.org/style.shtml); - links to pages for reporting issues (https://github.com/lballabio/QuantLib/issues) and submitting changes (https://github.com/lballabio/QuantLib/pulls); - a page (https://www.quantlib.org/extensions.shtml) about how to use %QuantLib in other languages/platforms. */ QuantLib-1.44/Docs/pages/termstructures.docs000066400000000000000000000026611526335424600211540ustar00rootroot00000000000000 /* Copyright (C) 2000-2003 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /*! \defgroup termstructuressss Term structures @{ */ /*! \defgroup yieldtermstructures Interest-rate term structures The abstract class QuantLib::YieldTermStructure provides the common interface to concrete yield-rate term structure models. Among others, methods are declared which return instantaneous forward rate, discount factor, and zero rate at a given date. Adapter classes are provided which already implement part of the required methods, thus allowing the programmer to define only the non-redundant part. */ /*! \defgroup defaultprobabilitytermstructures Default-probability term structures */ /*! \defgroup inflationtermstructures Inflation term structures */ /*! @} */ QuantLib-1.44/Docs/quantlib.doxy000066400000000000000000000323631526335424600166160ustar00rootroot00000000000000# Doxyfile 1.17.0 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = QuantLib PROJECT_NUMBER = ql_version PROJECT_BRIEF = "A free/open-source library for quantitative finance" PROJECT_LOGO = PROJECT_ICON = OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO CREATE_SUBDIRS_LEVEL = 8 ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = ql_basepath STRIP_FROM_INC_PATH = ql_basepath SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO JAVADOC_BANNER = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO PYTHON_DOCSTRING = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 4 ALIASES = "warning=\xrefitem caveats \"Warning\" \"Caveats\"" \ "test=\xrefitem test \"Tests\" \"Test Suite\"" \ "bug=\xrefitem bug \"Bug\" \"Known Bugs\"" \ "deprecated=\xrefitem deprecated \"Deprecated\" \"Deprecated Features\"" OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO OPTIMIZE_OUTPUT_SLICE = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES MARKDOWN_STRICT = YES TOC_INCLUDE_HEADINGS = 0 MARKDOWN_ID_STYLE = DOXYGEN AUTOLINK_SUPPORT = YES AUTOLINK_IGNORE_WORDS = BUILTIN_STL_SUPPORT = YES CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 NUM_PROC_THREADS = 1 TIMESTAMP = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_PRIV_VIRTUAL = NO EXTRACT_PACKAGE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = NO EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO RESOLVE_UNNAMED_PARAMS = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = YES HIDE_UNDOC_NAMESPACES = YES HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = YES INTERNAL_DOCS = NO CASE_SENSE_NAMES = NO HIDE_SCOPE_NAMES = YES HIDE_COMPOUND_REFERENCE= NO SHOW_HEADERFILE = YES SHOW_INCLUDE_FILES = YES SHOW_GROUPED_MEMB_INC = NO FORCE_LOCAL_INCLUDES = NO INLINE_INFO = NO SORT_MEMBER_DOCS = NO SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = YES SORT_GROUP_NAMES = YES SORT_BY_SCOPE_NAME = YES STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = NO GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES GENERATE_REQUIREMENTS = YES REQ_TRACEABILITY_INFO = YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO SHOW_FILES = NO SHOW_NAMESPACES = NO FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = EXTERNAL_TOOL_PATH = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = YES WARNINGS = YES WARN_IF_UNDOCUMENTED = NO WARN_IF_DOC_ERROR = YES WARN_IF_INCOMPLETE_DOC = NO WARN_NO_PARAMDOC = NO WARN_IF_UNDOC_ENUM_VAL = NO WARN_LAYOUT_FILE = YES WARN_AS_ERROR = YES WARN_FORMAT = "$file:$line: $text" WARN_LINE_FORMAT = "at line $line of file $file" WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = ql_basepath/Docs//pages \ ql_basepath/ql INPUT_ENCODING = UTF-8 INPUT_FILE_ENCODING = FILE_PATTERNS = *.docs \ *.hpp \ *.h RECURSIVE = YES EXCLUDE = ql_basepath//ql/config.hpp \ ql_basepath//ql/config.msvc.hpp EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */all.hpp EXCLUDE_SYMBOLS = EXAMPLE_PATH = ql_basepath/Examples \ . EXAMPLE_PATTERNS = *.cpp EXAMPLE_RECURSIVE = YES IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = IMPLICIT_DIR_DOCS = YES FORTRAN_COMMENT_AFTER = 72 #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = NO SOURCE_TOOLTIPS = NO USE_HTAGS = NO VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = ql_basepath/Docs/quantlibheader.html HTML_FOOTER = ql_basepath/Docs/quantlibfooter.html HTML_STYLESHEET = HTML_EXTRA_STYLESHEET = ql_basepath/Docs/quantlibextra.css HTML_EXTRA_FILES = ql_basepath/Docs/images/favicon.ico HTML_COLORSTYLE = AUTO_LIGHT HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = YES HTML_CODE_FOLDING = YES HTML_COPY_CLIPBOARD = YES HTML_PROJECT_COOKIE = HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_FEEDURL = DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = hhc.exe GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO SITEMAP_URL = GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = NO PAGE_OUTLINE_PANEL = YES FULL_SIDEBAR = NO ENUM_VALUES_PER_LINE = 4 SHOW_ENUM_VALUES = NO TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO OBFUSCATE_EMAILS = YES HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 12 FORMULA_MACROFILE = USE_MATHJAX = YES MATHJAX_VERSION = MathJax_2 MATHJAX_FORMAT = HTML-CSS MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ MATHJAX_EXTENSIONS = MATHJAX_CODEFILE = SEARCHENGINE = YES SERVER_BASED_SEARCH = NO EXTERNAL_SEARCH = NO SEARCHENGINE_URL = SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex LATEX_MAKEINDEX_CMD = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = LATEX_EXTRA_STYLESHEET = LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = RTF_EXTRA_FILES = #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_SUBDIR = MAN_LINKS = YES #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_PROGRAMLISTING = NO XML_NS_MEMB_FILE_SCOPE = NO #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to Sqlite3 output #--------------------------------------------------------------------------- GENERATE_SQLITE3 = NO SQLITE3_OUTPUT = sqlite3 SQLITE3_RECREATE_DB = YES #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = __DOXYGEN__ EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to diagram generator tools #--------------------------------------------------------------------------- HIDE_UNDOC_RELATIONS = NO HAVE_DOT = YES DOT_NUM_THREADS = 0 DOT_BATCH_SIZE = 50 DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = NO GROUP_GRAPHS = NO UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 UML_MAX_EDGE_LABELS = 10 DOT_UML_DETAILS = NO DOT_WRAP_THRESHOLD = 17 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = NO INCLUDED_BY_GRAPH = NO CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = NO DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = DIA_PATH = DIAFILE_DIRS = PLANTUML_JAR_PATH = PLANTUML_CFG_FILE = PLANTUML_INCLUDE_PATH = PLANTUMLFILE_DIRS = MERMAID_PATH = MERMAID_CONFIG_FILE = MERMAID_RENDER_MODE = AUTO MERMAID_JS_URL = https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs MERMAIDFILE_DIRS = DOT_GRAPH_MAX_NODES = 150 MAX_DOT_GRAPH_DEPTH = 2 GENERATE_LEGEND = YES DOT_CLEANUP = YES MSCGEN_TOOL = MSCFILE_DIRS = QuantLib-1.44/Docs/quantlibextra.css000066400000000000000000000014541526335424600174640ustar00rootroot00000000000000#projectname, #projectname a, #projectname a:visited { font-family: "Lato", sans-serif; font-weight: 700; font-style: italic; color: black; } #projectname { padding: 1em; } #projectnumber { font-family: "Lato", sans-serif; font-weight: 400; font-style: italic; font-size: 60%; margin-top: 1em; margin-bottom: 0; } body, table, div, p, dl { font: 300 16px/22px Lato,sans-serif; } p.reference, p.definition { font: 300 16px/22px Lato,sans-serif; } .title { font-family: "Lato", sans-serif; font-style: italic; } table.directory { font: 400 16px "Lato",sans-serif; } h1 { font-style: italic; } .sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active { font-family: "Lato", sans-serif; font-weight: 400; font-style: italic; } QuantLib-1.44/Docs/quantlibfooter.html000066400000000000000000000011571526335424600200130ustar00rootroot00000000000000 QuantLib-1.44/Docs/quantlibheader.html000066400000000000000000000055541526335424600177520ustar00rootroot00000000000000 $projectname: $title $title $treeview $search $mathjax $darkmode $mermaidjs $extrastylesheet
QuantLib: a free/open-source library for quantitative finance
Reference manual - version $projectnumber
$projectbrief
$searchbox
$searchbox
QuantLib-1.44/Examples/000077500000000000000000000000001526335424600147515ustar00rootroot00000000000000QuantLib-1.44/Examples/AsianOption/000077500000000000000000000000001526335424600171755ustar00rootroot00000000000000QuantLib-1.44/Examples/AsianOption/AsianOption.cpp000066400000000000000000000330631526335424600221320ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! Copyright (C) 2025 Kareem Fareed This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ /* This example demonstrates Asian option pricing using various methods available in QuantLib, including: - Discrete vs. Continuous averaging - Arithmetic vs. Geometric averaging - Multiple pricing engines (Analytic, Monte Carlo, PDE, Approximations) */ #include #if !defined(BOOST_ALL_NO_LIB) && defined(BOOST_MSVC) # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace QuantLib; int main(int, char* []) { try { std::cout << std::endl; // set up dates Calendar calendar = TARGET(); Date todaysDate(15, November, 2025); Date settlementDate(17, November, 2025); Settings::instance().evaluationDate() = todaysDate; // our options Option::Type type(Option::Put); Real underlying = 100; Real strike = 100; Spread dividendYield = 0.03; Rate riskFreeRate = 0.06; Volatility volatility = 0.20; Date maturity(17, November, 2026); DayCounter dayCounter = Actual365Fixed(); std::cout << "Asian Option Pricing Example" << std::endl; std::cout << "=============================" << std::endl << std::endl; std::cout << "Option type = " << type << std::endl; std::cout << "Maturity = "<< maturity << std::endl; std::cout << "Underlying price = " << underlying << std::endl; std::cout << "Strike = " << strike << std::endl; std::cout << "Risk-free interest rate = " << io::rate(riskFreeRate) << std::endl; std::cout << "Dividend yield = " << io::rate(dividendYield) << std::endl; std::cout << "Volatility = " << io::volatility(volatility) << std::endl; std::cout << std::endl; // Set up fixing dates for discrete averaging (monthly fixings) std::vector fixingDates; Date d = settlementDate; while (d <= maturity) { fixingDates.push_back(d); d = calendar.advance(d, 1, Months); } std::cout << "Number of fixings: " << fixingDates.size() << std::endl; std::cout << std::endl; // Set up flat yield/dividend/vol curves auto underlyingH = makeQuoteHandle(underlying); Handle flatTermStructure( ext::make_shared(settlementDate, riskFreeRate, dayCounter)); Handle flatDividendTS( ext::make_shared(settlementDate, dividendYield, dayCounter)); Handle flatVolTS( ext::make_shared(settlementDate, calendar, volatility, dayCounter)); auto payoff = ext::make_shared(type, strike); auto bsmProcess = ext::make_shared( underlyingH, flatDividendTS, flatTermStructure, flatVolTS); auto europeanExercise = ext::make_shared(maturity); // Create Asian options DiscreteAveragingAsianOption discreteArithmeticOption( Average::Arithmetic, 0.0, // running sum 0, // past fixings fixingDates, payoff, europeanExercise); DiscreteAveragingAsianOption discreteGeometricOption( Average::Geometric, 0.0, // running product (should be 1.0 for geometric, but 0 means no past fixings) 0, // past fixings fixingDates, payoff, europeanExercise); ContinuousAveragingAsianOption continuousArithmeticOption( Average::Arithmetic, settlementDate, payoff, europeanExercise); ContinuousAveragingAsianOption continuousGeometricOption( Average::Geometric, payoff, europeanExercise); // ********************************************** // DISCRETE AVERAGING - GEOMETRIC AVERAGE // ********************************************** std::cout << std::endl; std::cout << "DISCRETE AVERAGING - GEOMETRIC AVERAGE" << std::endl; std::cout << "======================================" << std::endl; Size widths[] = { 40, 16 }; // Analytic geometric discrete std::cout << std::setw(widths[0]) << std::left << "Analytic (Discrete Geometric)" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteGeometricOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << discreteGeometricOption.NPV() << std::endl; // Monte Carlo geometric discrete Size mcSeed = 42; std::cout << std::setw(widths[0]) << std::left << "Monte Carlo (Discrete Geometric)" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteGeometricOption.setPricingEngine( MakeMCDiscreteGeometricAPEngine(bsmProcess) .withSamples(10000) .withSeed(mcSeed)); std::cout << discreteGeometricOption.NPV() << std::endl; // ********************************************** // DISCRETE AVERAGING - ARITHMETIC AVERAGE // ********************************************** std::cout << std::endl; std::cout << "DISCRETE AVERAGING - ARITHMETIC AVERAGE" << std::endl; std::cout << "=======================================" << std::endl; // Monte Carlo arithmetic discrete std::cout << std::setw(widths[0]) << std::left << "Monte Carlo (Discrete Arithmetic)" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteArithmeticOption.setPricingEngine( MakeMCDiscreteArithmeticAPEngine(bsmProcess) .withSamples(10000) .withSeed(mcSeed)); std::cout << discreteArithmeticOption.NPV() << std::endl; // Monte Carlo arithmetic discrete with control variate std::cout << std::setw(widths[0]) << std::left << "MC with Control Variate" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteArithmeticOption.setPricingEngine( MakeMCDiscreteArithmeticAPEngine(bsmProcess) .withSamples(10000) .withControlVariate() .withSeed(mcSeed)); std::cout << discreteArithmeticOption.NPV() << std::endl; // Turnbull-Wakeman approximation std::cout << std::setw(widths[0]) << std::left << "Turnbull-Wakeman Approximation" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteArithmeticOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << discreteArithmeticOption.NPV() << std::endl; // Finite Differences (PDE method) std::cout << std::setw(widths[0]) << std::left << "Finite Differences (PDE)" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; discreteArithmeticOption.setPricingEngine( ext::make_shared(bsmProcess, 100, 100, 50)); std::cout << discreteArithmeticOption.NPV() << std::endl; // ********************************************** // CONTINUOUS AVERAGING - GEOMETRIC AVERAGE // ********************************************** std::cout << std::endl; std::cout << "CONTINUOUS AVERAGING - GEOMETRIC AVERAGE" << std::endl; std::cout << "========================================" << std::endl; // Analytic geometric continuous std::cout << std::setw(widths[0]) << std::left << "Analytic (Continuous Geometric)" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; continuousGeometricOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << continuousGeometricOption.NPV() << std::endl; // ********************************************** // CONTINUOUS AVERAGING - ARITHMETIC AVERAGE // ********************************************** std::cout << std::endl; std::cout << "CONTINUOUS AVERAGING - ARITHMETIC AVERAGE" << std::endl; std::cout << "=========================================" << std::endl; // Continuous Arithmetic Levy Engine std::cout << std::setw(widths[0]) << std::left << "Continuous Arithmetic Levy Engine" << std::fixed << std::setprecision(6) << std::setw(widths[1]) << std::left; auto currentAverage = makeQuoteHandle(0.0); // No averaging yet for fresh option continuousArithmeticOption.setPricingEngine( ext::make_shared(bsmProcess, currentAverage)); std::cout << continuousArithmeticOption.NPV() << std::endl; // ********************************************** // COMPARISON SUMMARY // ********************************************** std::cout << std::endl; std::cout << "SUMMARY COMPARISON" << std::endl; std::cout << "==================" << std::endl; std::cout << std::endl; std::cout << "Averaging Type Method NPV" << std::endl; std::cout << "--------------------------------------------------------------------------------" << std::endl; // Re-price all for summary discreteGeometricOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << std::setw(24) << std::left << "Discrete Geometric" << std::setw(36) << std::left << "Analytic" << std::fixed << std::setprecision(6) << discreteGeometricOption.NPV() << std::endl; discreteArithmeticOption.setPricingEngine( MakeMCDiscreteArithmeticAPEngine(bsmProcess) .withSamples(10000) .withControlVariate() .withSeed(mcSeed)); std::cout << std::setw(24) << std::left << "Discrete Arithmetic" << std::setw(36) << std::left << "Monte Carlo (Control Variate)" << std::fixed << std::setprecision(6) << discreteArithmeticOption.NPV() << std::endl; discreteArithmeticOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << std::setw(24) << std::left << "Discrete Arithmetic" << std::setw(36) << std::left << "Turnbull-Wakeman" << std::fixed << std::setprecision(6) << discreteArithmeticOption.NPV() << std::endl; continuousGeometricOption.setPricingEngine( ext::make_shared(bsmProcess)); std::cout << std::setw(24) << std::left << "Continuous Geometric" << std::setw(36) << std::left << "Analytic" << std::fixed << std::setprecision(6) << continuousGeometricOption.NPV() << std::endl; continuousArithmeticOption.setPricingEngine( ext::make_shared(bsmProcess, currentAverage)); std::cout << std::setw(24) << std::left << "Continuous Arithmetic" << std::setw(36) << std::left << "Levy Engine" << std::fixed << std::setprecision(6) << continuousArithmeticOption.NPV() << std::endl; std::cout << std::endl; return 0; } catch (std::exception& e) { std::cerr << e.what() << std::endl; return 1; } catch (...) { std::cerr << "unknown error" << std::endl; return 1; } } QuantLib-1.44/Examples/AsianOption/AsianOption.vcxproj000066400000000000000000001063541526335424600230470ustar00rootroot00000000000000 Debug (static runtime) Win32 Debug (static runtime) x64 Debug Win32 Debug x64 Release (static runtime) Win32 Release (static runtime) x64 Release Win32 Release x64 AsianOption {A17D4799-97BF-410A-97C2-683F489A9DA8} $(VCTargetsPath11) Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte <_ProjectFileVersion>10.0.30319.1 .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ false false false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ false false false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true true false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true true false false AsianOption-mt-sgd AsianOption-x64-mt-sgd AsianOption-mt-gd AsianOption-x64-mt-gd AsianOption-mt-s AsianOption-x64-mt-s AsianOption-mt AsianOption-x64-mt .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreadedDLL true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false MachineX86 .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreadedDLL true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreaded true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false MachineX86 .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreaded true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true EditAndContinue Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false MachineX86 false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true ProgramDatabase Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true EditAndContinue Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false MachineX86 false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true ProgramDatabase Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\AsianOption.pdb Console false {ad0a27da-91da-46a2-acbd-296c419ed3aa} false QuantLib-1.44/Examples/AsianOption/AsianOption.vcxproj.filters000066400000000000000000000016131526335424600245060ustar00rootroot00000000000000 {e1cf0425-cf98-4329-a9cc-02cc9512d9e4} cpp;c;cxx;rc;def;r;odl;idl;hpj;bat {3fba9b70-6bea-43e7-b0e8-5a037bc32d53} h;hpp;hxx;hm;inl {6a339176-8fa2-4b45-ac4a-0af262ec79fe} ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe Source Files QuantLib-1.44/Examples/AsianOption/CMakeLists.txt000066400000000000000000000003411526335424600217330ustar00rootroot00000000000000add_executable(AsianOption AsianOption.cpp) target_link_libraries(AsianOption ql_library ${QL_THREAD_LIBRARIES}) if (QL_INSTALL_EXAMPLES) install(TARGETS AsianOption RUNTIME DESTINATION ${QL_INSTALL_EXAMPLESDIR}) endif() QuantLib-1.44/Examples/BasketLosses/000077500000000000000000000000001526335424600173535ustar00rootroot00000000000000QuantLib-1.44/Examples/BasketLosses/BasketLosses.cpp000066400000000000000000000265711526335424600224740ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2014 Jose Aparicio This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ #include #if !defined(BOOST_ALL_NO_LIB) && defined(BOOST_MSVC) # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace QuantLib; int main(int, char* []) { try { std::cout << std::endl; Calendar calendar = TARGET(); Date todaysDate(19, March, 2014); // must be a business day todaysDate = calendar.adjust(todaysDate); Settings::instance().evaluationDate() = todaysDate; /* -------------------------------------------------------------- SET UP BASKET PORTFOLIO -------------------------------------------------------------- */ // build curves and issuers into a basket of ten names std::vector hazardRates = { 0.001, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09 }; std::vector names; names.reserve(hazardRates.size()); for(Size i=0; i> defTS; for (Real& hazardRate : hazardRates) { defTS.emplace_back( ext::make_shared(0, TARGET(), hazardRate, Actual365Fixed())); defTS.back()->enableExtrapolation(); } std::vector issuers; for(Size i=0; i curves(1, std::make_pair(NorthAmericaCorpDefaultKey( EURCurrency(), QuantLib::SeniorSec, Period(), 1. // amount threshold ), defTS[i])); issuers.emplace_back(curves); } auto thePool = ext::make_shared(); for(Size i=0; iadd(names[i], issuers[i], NorthAmericaCorpDefaultKey( EURCurrency(), QuantLib::SeniorSec, Period(), 1.)); std::vector defaultKeys(hazardRates.size(), NorthAmericaCorpDefaultKey(EURCurrency(), SeniorSec, Period(), 1.)); auto theBskt = ext::make_shared( todaysDate, names, std::vector(hazardRates.size(), 100.), thePool, // 0.0, 0.78); 0.03, .06); /* -------------------------------------------------------------- SET UP DEFAULT LOSS MODELS -------------------------------------------------------------- */ std::vector recoveries(hazardRates.size(), 0.4); Date calcDate(TARGET().advance(Settings::instance().evaluationDate(), Period(60, Months))); Real factorValue = 0.05; std::vector> fctrsWeights(hazardRates.size(), std::vector(1, std::sqrt(factorValue))); // --- LHP model -------------------------- #ifndef QL_PATCH_SOLARIS auto lmGLHP = ext::make_shared( fctrsWeights[0][0] * fctrsWeights[0][0], recoveries); theBskt->setLossModel(lmGLHP); std::cout << "GLHP Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // --- G Binomial model -------------------- auto ktLossLM = ext::make_shared(fctrsWeights, recoveries, LatentModelIntegrationType::GaussianQuadrature, GaussianCopulaPolicy::initTraits()); auto lmBinomial = ext::make_shared(ktLossLM); theBskt->setLossModel(lmBinomial); std::cout << "Gaussian Binomial Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; #endif // --- T Binomial model -------------------- TCopulaPolicy::initTraits initT; initT.tOrders = std::vector(2, 3); auto ktTLossLM = ext::make_shared(fctrsWeights, recoveries, //LatentModelIntegrationType::GaussianQuadrature, LatentModelIntegrationType::Trapezoid, initT); auto lmTBinomial = ext::make_shared(ktTLossLM); theBskt->setLossModel(lmTBinomial); std::cout << "T Binomial Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // --- G Inhomogeneous model --------------- Size numSimulations = 100000; #ifndef QL_PATCH_SOLARIS auto gLM = ext::make_shared(fctrsWeights, recoveries, LatentModelIntegrationType::GaussianQuadrature, // g++ requires this when using make_shared GaussianCopulaPolicy::initTraits()); Size numBuckets = 100; auto inhomogeneousLM = ext::make_shared(gLM, numBuckets); theBskt->setLossModel(inhomogeneousLM); std::cout << "G Inhomogeneous Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // --- G Random model --------------------- // Gaussian random joint default model: // Size numCoresUsed = 4; // Sobol, many cores auto rdlmG = ext::make_shared>>>(gLM, recoveries, numSimulations, 1.e-6, 2863311530UL); //auto rdlmG = ext::make_shared>(gLM, // recoveries, numSimulations, 1.e-6, 2863311530); theBskt->setLossModel(rdlmG); std::cout << "Random G Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; #endif // --- StudentT Random model --------------------- // Sobol, many cores auto rdlmT = ext::make_shared>>>(ktTLossLM, recoveries, numSimulations, 1.e-6, 2863311530UL); //auto rdlmT = ext::make_shared>(ktTLossLM, // recoveries, numSimulations, 1.e-6, 2863311530); theBskt->setLossModel(rdlmT); std::cout << "Random T Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // Spot Loss latent model: #ifndef QL_PATCH_SOLARIS std::vector> fctrsWeightsRR(2 * hazardRates.size(), std::vector(1, std::sqrt(factorValue))); Real modelA = 2.2; auto sptLG = ext::make_shared( fctrsWeightsRR, recoveries, modelA, LatentModelIntegrationType::GaussianQuadrature, GaussianCopulaPolicy::initTraits()); auto sptLT = ext::make_shared(fctrsWeightsRR, recoveries, modelA, LatentModelIntegrationType::GaussianQuadrature, initT); // --- G Random Loss model --------------------- // Gaussian random joint default model: // Sobol, many cores auto rdLlmG = ext::make_shared>(sptLG, numSimulations, 1.e-6, 2863311530UL); theBskt->setLossModel(rdLlmG); std::cout << "Random Loss G Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // --- T Random Loss model --------------------- // Gaussian random joint default model: // Sobol, many cores auto rdLlmT = ext::make_shared>(sptLT, numSimulations, 1.e-6, 2863311530UL); theBskt->setLossModel(rdLlmT); std::cout << "Random Loss T Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; // Base Correlation model set up to test coherence with base LHP model std::vector bcTenors = {{1, Years}, {5, Years}}; std::vector bcLossPercentages = {0.03, 0.12}; std::vector>> correls; // std::vector> corr1Y; // 3% corr1Y.emplace_back( ext::make_shared(fctrsWeights[0][0] * fctrsWeights[0][0])); // 12% corr1Y.emplace_back( ext::make_shared(fctrsWeights[0][0] * fctrsWeights[0][0])); correls.push_back(corr1Y); std::vector> corr2Y; // 3% corr2Y.emplace_back( ext::make_shared(fctrsWeights[0][0] * fctrsWeights[0][0])); // 12% corr2Y.emplace_back( ext::make_shared(fctrsWeights[0][0] * fctrsWeights[0][0])); correls.push_back(corr2Y); auto correlSurface = ext::make_shared>( // first one would do, all should be the same. defTS[0]->settlementDays(), defTS[0]->calendar(), Unadjusted, bcTenors, bcLossPercentages, correls, Actual365Fixed()); Handle> correlHandle(correlSurface); auto bcLMG_LHP_Bilin = ext::make_shared(correlHandle, recoveries, GaussianCopulaPolicy::initTraits()); theBskt->setLossModel(bcLMG_LHP_Bilin); std::cout << "Base Correlation GLHP Expected 5-Yr Losses: " << std::endl; std::cout << theBskt->expectedTrancheLoss(calcDate) << std::endl; #endif return 0; } catch (exception& e) { cerr << e.what() << endl; return 1; } catch (...) { cerr << "unknown error" << endl; return 1; } } QuantLib-1.44/Examples/BasketLosses/BasketLosses.vcxproj000066400000000000000000001061601526335424600233760ustar00rootroot00000000000000 Debug (static runtime) Win32 Debug (static runtime) x64 Debug Win32 Debug x64 Release (static runtime) Win32 Release (static runtime) x64 Release Win32 Release x64 BasketLosses {43A17E5B-EC94-4EB5-9D68-788BF234AE1F} Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte <_ProjectFileVersion>11.0.1 .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ false false false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ false false false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true true false false .\bin\ .\bin\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true true false false BasketLosses-mt-sgd BasketLosses-x64-mt-sgd BasketLosses-mt-gd BasketLosses-x64-mt-gd BasketLosses-mt-s BasketLosses-x64-mt-s BasketLosses-mt BasketLosses-x64-mt .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreadedDLL true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false MachineX86 .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreadedDLL true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreaded true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false MachineX86 .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb MaxSpeed stdcpp17 AnySuitable false Speed ..\..;%(AdditionalIncludeDirectories) NDEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) true MultiThreaded true false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true Default false NDEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true EditAndContinue Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false MachineX86 false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true ProgramDatabase Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true EditAndContinue Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false MachineX86 false .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.tlb Disabled stdcpp17 false ..\..;%(AdditionalIncludeDirectories) _DEBUG;WIN32;_CONSOLE;_SCL_SECURE_NO_DEPRECATE;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug false true true quantlib.hpp .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pch .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\ Level3 true ProgramDatabase Default false _DEBUG;%(PreprocessorDefinitions) 0x0409 $(OutDir)$(TargetName)$(TargetExt) true ..\..\lib;%(AdditionalLibraryDirectories) true .\build\$(PlatformToolset)\$(Platform)\$(Configuration)\BasketLosses.pdb Console false {ad0a27da-91da-46a2-acbd-296c419ed3aa} false QuantLib-1.44/Examples/BasketLosses/BasketLosses.vcxproj.filters000066400000000000000000000016131526335424600250420ustar00rootroot00000000000000 {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cxx;rc;def;r;odl;idl;hpj;bat {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe Source Files QuantLib-1.44/Examples/BasketLosses/CMakeLists.txt000066400000000000000000000003451526335424600221150ustar00rootroot00000000000000add_executable(BasketLosses BasketLosses.cpp) target_link_libraries(BasketLosses ql_library ${QL_THREAD_LIBRARIES}) if (QL_INSTALL_EXAMPLES) install(TARGETS BasketLosses RUNTIME DESTINATION ${QL_INSTALL_EXAMPLESDIR}) endif() QuantLib-1.44/Examples/BermudanSwaption/000077500000000000000000000000001526335424600202335ustar00rootroot00000000000000QuantLib-1.44/Examples/BermudanSwaption/BermudanSwaption.cpp000066400000000000000000000372561526335424600242360ustar00rootroot00000000000000/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! Copyright (C) 2002, 2003 Sadruddin Rejeb Copyright (C) 2004 Ferdinando Ametrano Copyright (C) 2005, 2006, 2007 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . 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 license for more details. */ #include #if !defined(BOOST_ALL_NO_LIB) && defined(BOOST_MSVC) # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace QuantLib; //Number of swaptions to be calibrated to... Size numRows = 5; Size numCols = 5; Integer swapLengths[] = { 1, 2, 3, 4, 5}; Volatility swaptionVols[] = { 0.1490, 0.1340, 0.1228, 0.1189, 0.1148, 0.1290, 0.1201, 0.1146, 0.1108, 0.1040, 0.1149, 0.1112, 0.1070, 0.1010, 0.0957, 0.1047, 0.1021, 0.0980, 0.0951, 0.1270, 0.1000, 0.0950, 0.0900, 0.1230, 0.1160}; void calibrateModel( const ext::shared_ptr& model, const std::vector>& swaptions) { std::vector> helpers(swaptions.begin(), swaptions.end()); LevenbergMarquardt om; model->calibrate(helpers, om, EndCriteria(400, 100, 1.0e-8, 1.0e-8, 1.0e-8)); // Output the implied Black volatilities for (Size i=0; imodelValue(); Volatility implied = swaptions[i]->impliedVolatility(npv, 1e-4, 1000, 0.05, 0.50); Volatility diff = implied - swaptionVols[k]; std::cout << i+1 << "x" << swapLengths[j] << std::setprecision(5) << std::noshowpos << ": model " << std::setw(7) << io::volatility(implied) << ", market " << std::setw(7) << io::volatility(swaptionVols[k]) << " (" << std::setw(7) << std::showpos << io::volatility(diff) << std::noshowpos << ")\n"; } } int main(int, char* []) { try { std::cout << std::endl; Date todaysDate(15, February, 2002); Calendar calendar = TARGET(); Date settlementDate(19, February, 2002); Settings::instance().evaluationDate() = todaysDate; // flat yield term structure impling 1x5 swap at 5% auto flatRate = ext::make_shared(0.04875825); Handle rhTermStructure( ext::make_shared( settlementDate, Handle(flatRate), Actual365Fixed())); // Define the ATM/OTM/ITM swaps Frequency fixedLegFrequency = Annual; BusinessDayConvention fixedLegConvention = Unadjusted; BusinessDayConvention floatingLegConvention = ModifiedFollowing; DayCounter fixedLegDayCounter = Thirty360(Thirty360::European); Frequency floatingLegFrequency = Semiannual; Swap::Type type = Swap::Payer; Rate dummyFixedRate = 0.03; auto indexSixMonths = ext::make_shared(rhTermStructure); Date startDate = calendar.advance(settlementDate,1,Years, floatingLegConvention); Date maturity = calendar.advance(startDate,5,Years, floatingLegConvention); Schedule fixedSchedule(startDate,maturity,Period(fixedLegFrequency), calendar,fixedLegConvention,fixedLegConvention, DateGeneration::Forward,false); Schedule floatSchedule(startDate,maturity,Period(floatingLegFrequency), calendar,floatingLegConvention,floatingLegConvention, DateGeneration::Forward,false); auto swap = ext::make_shared( type, 1000.0, fixedSchedule, dummyFixedRate, fixedLegDayCounter, floatSchedule, indexSixMonths, 0.0, indexSixMonths->dayCounter()); swap->setPricingEngine(ext::make_shared(rhTermStructure)); Rate fixedATMRate = swap->fairRate(); Rate fixedOTMRate = fixedATMRate * 1.2; Rate fixedITMRate = fixedATMRate * 0.8; auto atmSwap = ext::make_shared( type, 1000.0, fixedSchedule, fixedATMRate, fixedLegDayCounter, floatSchedule, indexSixMonths, 0.0, indexSixMonths->dayCounter()); auto otmSwap = ext::make_shared( type, 1000.0, fixedSchedule, fixedOTMRate, fixedLegDayCounter, floatSchedule, indexSixMonths, 0.0, indexSixMonths->dayCounter()); auto itmSwap = ext::make_shared( type, 1000.0, fixedSchedule, fixedITMRate, fixedLegDayCounter, floatSchedule, indexSixMonths, 0.0, indexSixMonths->dayCounter()); // defining the swaptions to be used in model calibration std::vector swaptionMaturities; swaptionMaturities.emplace_back(1, Years); swaptionMaturities.emplace_back(2, Years); swaptionMaturities.emplace_back(3, Years); swaptionMaturities.emplace_back(4, Years); swaptionMaturities.emplace_back(5, Years); std::vector> swaptions; // List of times that have to be included in the timegrid std::list