Remove every deprecated member for 2.0 (#821) - #832
Merged
Conversation
2.0 follows semantic versioning, so the twenty-eight members carrying [Obsolete]
are gone, along with the call sites and suppressions that kept them alive.
One of them could not simply be deleted. MathS.Compute.DefiniteIntegral was
deprecated in favour of "non-static methods at Entity" and there was no
Entity.DefiniteIntegral -- every other member of that group had a counterpart and
this one did not. Removing it as it stood would have taken numeric definite
integration out of the library with nothing to replace it, so the replacement is
added here in real and complex bound overloads, and the tests move onto it.
The library was using its own deprecated API in two places, both hidden behind
#pragma warning disable CS0618:
MatrixOperations.Concat indexed the obsolete Matrix.Shape; it now asks
RowCount and ColumnCount through a small local
helper, since the axis is computed rather than
literal.
CompilationProtocol carried six obsolete converter delegates and the
branches that consulted them, with a comment
saying to remove them when the converters went.
That is worth naming because I reported the opposite on the issue. I had checked
for CS0618 warnings, found none, and concluded the library did not call its own
deprecated API -- but the absence was manufactured by those pragmas. An absence of
warnings proves nothing where warnings are suppressed, and the pragma was the
thing to grep for.
The same mistake inflated the call-site count three times over. The obsolete
Matrices.Matrix is the Entity[,] overload, not the (rows, columns, params) one
that the tests actually use; the obsolete Interval overloads live in
MathS.Matrices rather than MathS.Sets; and MathS.Derivative, Integral and Limit
are node constructors, entirely distinct from the deprecated MathS.Compute
functions of the same names. Nineteen call sites was wrong: there were five, plus
the two suppressed regions inside the library.
DefaultConverters.cs is deleted outright, being a single obsolete class with no
other contents.
Tests: 5928 passing, 0 failed, 14 skipped; F# 130. The whole solution builds with
no CS0618 anywhere, and no pragma disabling it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #821 — the "remove deprecated functions" half. 2.0 follows semantic versioning, so all 28 members carrying
[Obsolete]are gone, along with the call sites and the suppressions that kept them alive. The whole solution now builds with noCS0618anywhere, and no pragma disabling it.One replacement did not exist
MathS.Compute.DefiniteIntegralwas deprecated in favour of "non-static methods atEntity" — and there was noEntity.DefiniteIntegral. Every other member of that group had a counterpart; this one did not. Removing it as it stood would have taken numeric definite integration out of the library with nothing to replace it.So
Entity.DefiniteIntegral(x, from, to, stepCount = 100)is added here, in real and complex bound overloads, and the three tests move onto it.The library was using its own deprecated API
Two places, both behind
#pragma warning disable CS0618:MatrixOperations.Concatindexed the obsoleteMatrix.Shape. It now asksRowCount/ColumnCountthrough a small local helper, since the axis is computed rather than literal.CompilationProtocolcarried six obsolete converter delegates plus the branches consulting them — with a comment saying to remove them when the converters went.Corrections to what I told this issue
I reported the opposite of that last point, and it is worth being explicit about why. I checked for
CS0618warnings, found none, and concluded the library did not call its own deprecated API. The absence was manufactured by those pragmas. An absence of warnings proves nothing where warnings are suppressed — the pragma was the thing to grep for, and I did not.The same mistake inflated my call-site count three times over:
Matrices.Matrixis theEntity[,]overload, not the(rows, columns, params)one the tests actually use.Intervaloverloads live inMathS.**Matrices**, notMathS.Sets.MathS.Derivative/Integral/Limitare node constructors and are not deprecated at all — entirely distinct fromMathS.Compute.*of the same names.Nineteen call sites was wrong: there were five, plus the two suppressed regions inside the library.
What moved
MathS.Matrices.Matrix(Entity[,])MathS.MatrixMathS.Matrices.Vector(params Entity[])MathS.VectorMathS.Matrices.MatrixMultiplication,DotProductoperator *MathS.Matrices.ScalarProduct(a, b)a.T * bMathS.Matrices.Interval(...)×2MathS.IntervalMathS.Compute.Derivative×2expr.Differentiate(x)MathS.Compute.Integral×2expr.Integrate(x)MathS.Compute.Limit×2expr.Limit(x, to)MathS.Compute.DefiniteIntegral×3expr.DefiniteIntegral(x, from, to)— newEntity.Derive,"...".DeriveDifferentiateEntity.Matrix.ShapeRowCount,ColumnCountSetting.Global,RollBackToDefaultSetting.Setin ausingCompilationProtocol's six converter delegatesCompilationProtocolBuiltinConstantConvertersCompilationProtocolDefaultConverters.csis deleted outright, being a single obsolete class with no other contents.Tests
5928 passing, 0 failed, 14 skipped. F# 130 passing. No behavioural change — the removed members were forwarders or duplicates, and everything they forwarded to is unchanged.
BREAKING-CHANGES.mdcarries the full table and the note about the missing replacement.Still open on #821
The other half — "redesign all APIs for consistency and correctness" — is untouched here. That wants your direction on what counts as inconsistent, and it is a much larger conversation than deleting what was already marked for deletion.
🤖 Generated with Claude Code