Skip to content

nanoql 2.3.1

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Nov 13:44
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, nqlOvernightIndexedCoupon and
    nqlSabrSwaptionVolatilityCube, and in the experimental add-in nqlConstNotionalCrossCurrencyBasisSwapRateHelper
    and nqlMtMCrossCurrencyBasisSwapRateHelper too. 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-arm64 carries .NET 10's unwind fault
    (dotnet/runtime#135616) until .NET ships its fix;
    nanoql-bind fix-unwind corrects 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, which xattr -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.ACurveOnAChangedQuoteIsBootstrappedAfresh and 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.TheMtMSwapsCompoundingLegsFairSpreadIsSolved and 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.TheFixedVsFloatingSwapsCompoundingLegsFairSpreadIsSolved and 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.TheBasisSwapsCompoundingLegsFairSpreadIsSolved and 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.