Repository navigation
Immutable
release. Only release title and notes can be modified.
Added
- Two guides: the FAQ, on the platforms, the .NET versions, how nanoql relates to QuantLib, the
licences and where to ask; and how nanoql is checked, from the references and the tolerance to the
checks on each change and release. Getting started's first swap runs in Python too.
Fixed
- The Excel add-in under multi-threaded calculation, Excel's default: every generated worksheet function was
registered thread-safe, so Excel's calculation threads showed handles too, through Excel's RTD function, which Excel
can refuse there. On some machines it did: Excel-DNA's log window opened with "The RTD server … could not be
registered" for each cell making a handle, and the cell's result rested on Excel recalculating it later on its main
thread. A function whose result is a handle, or holds handles, now runs on Excel's main thread; every other function
still runs on all of Excel's threads. A workbook building many costly objects at once, such as bootstrapped curves,
calibrations or engines' results, now builds them one at a time; the values computed from them still use all of
Excel's threads (#28). nqlxlVersion()named 2.0 in every 2.y add-in, and a repro export's vectors named their generator
nanoql-excel 2.0.0: both read the add-in's assembly version, which stays 2.0.0.0 within 2.y. Both now give the
release's version.
Known limits
- The Excel add-ins are unsigned. A firm whose Excel requires add-ins signed by a trusted publisher signs the
.xll
with its own certificate. - The add-ins run on the .NET 10 Desktop Runtime, Excel-DNA's just-in-time path, not compiled to native code.
- The Function Wizard shows some functions' argument names cut short, since Excel takes a function's argument names
as one text of 255 characters at most:nqlOISRateHelper,nqlOISRateHelper2,nqlOvernightIndexedCouponand
nqlSabrSwaptionVolatilityCube, and in the experimental add-innqlConstNotionalCrossCurrencyBasisSwapRateHelper
andnqlMtMCrossCurrencyBasisSwapRateHelpertoo. Each still takes every argument. - The bindings, the C++ layer among them, cover Windows x64 and Arm64, Linux x64 and Arm64 (glibc 2.28 or later) and
macOS on Apple silicon (14 or later); Intel Macs have none, though nanoql's .NET library runs there. - A .NET app of your own published with Native AOT for
osx-arm64carries .NET 10's unwind fault
(dotnet/runtime#135616) until .NET ships its fix;
nanoql-bind fix-unwindcorrects its object before the link (the bindings guide, "On macOS"). - macOS's C archive isn't notarized: a browser download opened in Finder carries the quarantine attribute into its
folder, whichxattr -dr com.apple.quarantine <folder>clears. - On macOS, a caller of the C library through its own libffi (ctypes, cffi's ABI mode, JNA) misreads a by-value period
that five functions take on the stack, until its libffi carries the fix of libffi issue #750; nanoql's Python package
and callers compiled by clang are unaffected (the bindings guide, "C and C++"). - Python 3.11 or later; NumPy 1.26 or later, 2.3 or later on Windows Arm64.
- The Java layer is built and tested in the repository and not released.
The platforms in this release's run
- Windows x64: 8,729 of 8,729 tests pass, the reference platform.
- Windows Arm64: 8,667 of 8,729 tests pass; 62 fail, reported and not blocking:
NanoQL.Tests.Conventions.BoostSignTests.TheSignOfANaNIsItsSignBit,NanoQL.Tests.Divergences.AbcdCalibrationGuardTests.TheFitsQuantLibCompletesKeepItsBits(set: 5, a: 0.45336334464724903, b: -1.4254877636528123, c: 1.5935876342523034, d: 0.26597942707915356),NanoQL.Tests.Divergences.AmericanBasketStrikeScalingTests.APositiveStrikeKeepsQuantLibsBits,NanoQL.Tests.Divergences.CalibrationBasketNominalTests.AFlippedSolutionKeepsItsNominal,NanoQL.Tests.Divergences.CirFellerConstraintTests.ACalibrationWithTheSpeedAndLevelFixedIsQuantLibs,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheSimplexFitsHaveAFiniteReversion,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheBasisSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheFixedVsFloatingSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheMtMSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CurveRecalculationTests.ACurveOnAChangedQuoteIsBootstrappedAfreshand 52 more. - Linux x64: 8,656 of 8,729 tests pass; 73 fail, reported and not blocking:
NanoQL.Tests.Conventions.HestonSlvMcQualityMaximumTests.TheCalibrationsLargestErrorIsWithinFifteenBasisPoints,NanoQL.Tests.Divergences.AbcdCalibrationGuardTests.TheFitsQuantLibCompletesKeepItsBits(set: 5, a: 0.45336334464724903, b: -1.4254877636528123, c: 1.5935876342523034, d: 0.26597942707915356),NanoQL.Tests.Divergences.CalibrationBasketNominalTests.AFlippedSolutionKeepsItsNominal,NanoQL.Tests.Divergences.CirFellerConstraintTests.ACalibrationWithTheSpeedAndLevelFixedIsQuantLibs,NanoQL.Tests.Divergences.CmsCalibrationGuessTests.TheFixedPathStartsAtTheGuess,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheLevenbergMarquardtFitsKeepQuantLibsValues,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheSimplexFitsHaveAFiniteReversion,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheBasisSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheFixedVsFloatingSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheMtMSwapsCompoundingLegsFairSpreadIsSolvedand 63 more. - Linux Arm64: 8,654 of 8,729 tests pass; 75 fail, reported and not blocking:
NanoQL.Tests.Conventions.BoostSignTests.TheSignOfANaNIsItsSignBit,NanoQL.Tests.Conventions.HestonSlvMcQualityMaximumTests.TheCalibrationsLargestErrorIsWithinFifteenBasisPoints,NanoQL.Tests.Divergences.AbcdCalibrationGuardTests.TheFitsQuantLibCompletesKeepItsBits(set: 5, a: 0.45336334464724903, b: -1.4254877636528123, c: 1.5935876342523034, d: 0.26597942707915356),NanoQL.Tests.Divergences.CalibrationBasketNominalTests.AFlippedSolutionKeepsItsNominal,NanoQL.Tests.Divergences.CirFellerConstraintTests.ACalibrationWithTheSpeedAndLevelFixedIsQuantLibs,NanoQL.Tests.Divergences.CmsCalibrationGuessTests.TheFixedPathStartsAtTheGuess,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheLevenbergMarquardtFitsKeepQuantLibsValues,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheSimplexFitsHaveAFiniteReversion,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheBasisSwapsCompoundingLegsFairSpreadIsSolved,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheFixedVsFloatingSwapsCompoundingLegsFairSpreadIsSolvedand 65 more. - macOS Arm64: 8,653 of 8,729 tests pass; 76 fail, reported and not blocking:
NanoQL.Tests.Conventions.BoostSignTests.TheSignOfANaNIsItsSignBit,NanoQL.Tests.Divergences.AbcdCalibrationGuardTests.TheFitsQuantLibCompletesKeepItsBits(set: 5, a: 0.45336334464724903, b: -1.4254877636528123, c: 1.5935876342523034, d: 0.26597942707915356),NanoQL.Tests.Divergences.BetaRiskTests.AMultiEventPathMovesItsLaterDatesOnly,NanoQL.Tests.Divergences.CTSMMCapletAlphaFormCalibrationTests.ACalibrationWhoseReturnedPassFitsKeepsQuantLibsNumbers,NanoQL.Tests.Divergences.CalibrationBasketNominalTests.AFlippedSolutionKeepsItsNominal,NanoQL.Tests.Divergences.CirFellerConstraintTests.ACalibrationWithTheSpeedAndLevelFixedIsQuantLibs,NanoQL.Tests.Divergences.CmsCalibrationGuessTests.TheFixedPathStartsAtTheGuess,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheLevenbergMarquardtFitsKeepQuantLibsValues,NanoQL.Tests.Divergences.CmsCalibrationReversionTransformTests.TheSimplexFitsHaveAFiniteReversion,NanoQL.Tests.Divergences.CrossCurrencySwapCompoundedSpreadFairSpreadTests.TheBasisSwapsCompoundingLegsFairSpreadIsSolvedand 66 more. - The linux-arm64 bindings: every check green.
- The linux-x64 bindings: every check green.
- The osx-arm64 bindings: every check green.
- The win-arm64 bindings: every check green.
- The win-x64 bindings: every check green.