Skip to content

Commit 2435127

Browse files
Breaking-changes entries owed since 2.5.0: fifteen PRs (#1834)
* Breaking-changes entries for #1828 to #1832 and #1374 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura * And for #1368, #1611 and #1517, each measured on 2.5.0 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura * And for #1289, #1312, #1315, #1377, #1380 and #1371, each measured on 2.5.0 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent d9b9f2d commit 2435127

1 file changed

Lines changed: 184 additions & 0 deletions

File tree

‎BREAKING-CHANGES.md‎

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,190 @@ after it
208208
|---|---|---|
209209
| `"(a*c + b*c*x)^(-3-2*p)*(f + g*x)*(a^2 + 2*a*b*x + b^2*x^2)^p".ToEntity().Integrate("x")` | `integral(...)`; an answer with no value on the unreleased master | the antiderivative |
210210

211+
### Half-odd powers of `a + a sec` and `c + d sec` together are integrated in the half angle's sine
212+
213+
**Answers where there were none.** `sec(e + f x) sqrt(a + a sec(e + f x))/sqrt(c + d sec(e + f x))` was declined,
214+
with eight more of Rubi's 4.5.2.1 and 4.5.2.3: the half-angle tangent reads a root of the first sum and leaves the
215+
second as another. Written in the cosine the two powers of `cos(y)` make a whole one, and in `w = sin(y/2)` what is
216+
left is rational beside one root ([#718](https://github.com/asc-community/AngouriMath/issues/718), PR
217+
[#1828](https://github.com/asc-community/AngouriMath/pull/1828)).
218+
219+
| Input | Was (2.5.0) | Now |
220+
|---|---|---|
221+
| `"sec(e + f*x)*sqrt(a + a*sec(e + f*x))/sqrt(c + d*sec(e + f*x))".ToEntity().Integrate("x")` | `integral(...)` | 1,294 characters |
222+
| `"sec(e + f*x)^2/(sqrt(a + a*sec(e + f*x))*sqrt(c + d*sec(e + f*x)))".ToEntity().Integrate("x")` | `integral(...)` | 13,563 characters, a case for each sign of the root's leading coefficient |
223+
224+
### The secant beside powers of `a + a sec` and `c - c sec` is integrated in the first sum
225+
226+
**Answers where there were none.** `sec(e + f x) (a + a sec(e + f x))^m sqrt(c - c sec(e + f x))` was declined, with
227+
two more of Rubi's 4.5.2.3. The two sums multiply to `-a c tan^2`, so in `u = a + a sec` what is left is
228+
`u^(m - 1/2) (2 - u/a)^(n - 1/2)`, for a symbolic `m` too
229+
([#718](https://github.com/asc-community/AngouriMath/issues/718), PR
230+
[#1829](https://github.com/asc-community/AngouriMath/pull/1829)).
231+
232+
| Input | Was (2.5.0) | Now |
233+
|---|---|---|
234+
| `"sec(e + f*x)*(a + a*sec(e + f*x))^m*(c - c*sec(e + f*x))^(5/2)".ToEntity().Integrate("x")` | `integral(...)` | 469 characters |
235+
| `"sec(e + f*x)*(a + a*sec(e + f*x))^m*sqrt(c - c*sec(e + f*x))".ToEntity().Integrate("x")` | `integral(...)` | 268 characters |
236+
237+
### An even rational function with symbols in it is not searched for a substitution
238+
239+
**Answers where there were none.** `(d + e x^2 + f x^4)/(x^4 (a + b x^2 + c x^4)^2)` ran past a minute: the
240+
substitution search spent the time declining an even rational function, for which no polynomial candidate can
241+
be the substitution, before the partial fractions answered it in a second. An even rational function with a
242+
symbol in it and a denominator past a sextic is now left to the partial fractions
243+
([#718](https://github.com/asc-community/AngouriMath/issues/718), PR
244+
[#1830](https://github.com/asc-community/AngouriMath/pull/1830)).
245+
246+
| Input | Was (2.5.0) | Now |
247+
|---|---|---|
248+
| `"(d + e*x^2 + f*x^4)/(x^4*(a + b*x^2 + c*x^4)^2)".ToEntity().Integrate("x")` | `integral(...)`; past a minute on the unreleased master | 3,715 characters |
249+
| `"cos(e + f*x)^5/(a + b*sec(e + f*x)^2)^3".ToEntity().Integrate("x")` | `integral(...)`; past a minute on the unreleased master | 27,944 characters |
250+
251+
### A symbolic quartic in `x^2` with a square discriminant is split into its two quadratics
252+
253+
**Answers where there were none.** `cot(c + d x)^3 sqrt(a + b sec(c + d x))` ran past a minute: the root of the
254+
linear makes it a rational function over `x^4 - 2a x^2 + a^2 - b^2`, which nothing below the partial fractions
255+
reads, and which is `(x^2 - a - b)(x^2 - a + b)`. A factor `A x^4 + B x^2 + C` whose discriminant is the square of a
256+
polynomial in the symbols is written as the two quadratics first
257+
([#718](https://github.com/asc-community/AngouriMath/issues/718), PR
258+
[#1831](https://github.com/asc-community/AngouriMath/pull/1831)).
259+
260+
| Input | Was (2.5.0) | Now |
261+
|---|---|---|
262+
| `"cot(e + f*x)^3*sqrt(a + b*sec(e + f*x))".ToEntity().Integrate("x")` | `integral(...)`; past a minute on the unreleased master | 36,760 characters, a case for each sign of the roots |
263+
| `"sec(e + f*x)^2/(a*sin(e + f*x) + b*tan(e + f*x))^2".ToEntity().Integrate("x")` | `integral(...)`; past a minute on the unreleased master | 68,854 characters |
264+
265+
### An odd power of the tangent beside a function of the secant is integrated in the secant
266+
267+
**Answers where there were none.** `cot(c + d x)^3/(a + b sec(c + d x))^(3/2)` ran past a minute. In `u = sec(y)`,
268+
`tan(y)^n f(sec(y)) dy` is exactly `(u^2 - 1)^((n - 1)/2) f(u)/u du` for an odd `n`, and the cotangent beside a
269+
function of the cosecant is the same in `u = csc(y)`
270+
([#718](https://github.com/asc-community/AngouriMath/issues/718), PR
271+
[#1832](https://github.com/asc-community/AngouriMath/pull/1832)).
272+
273+
| Input | Was (2.5.0) | Now |
274+
|---|---|---|
275+
| `"cot(e + f*x)^3/(a + b*sec(e + f*x))^(3/2)".ToEntity().Integrate("x")` | `integral(...)`; past a minute on the unreleased master | 39,235 characters |
276+
| `"cot(e + f*x)^3/(a + b*sec(e + f*x)^2)^3".ToEntity().Integrate("x")` | `integral(...)` | 680 characters; 1,218 characters in 18 seconds on the unreleased master |
277+
278+
### A complex division by a number far from unit magnitude
279+
280+
**Answers that were wrong.** With the downcasting off, `Complex.Create(1.98e119, 0) / Complex.Create(3.39e125, 0)`
281+
was zero: the division started from `1/|b|^2`, about `9e-252`, below the default precision's exponent floor, and
282+
the flush to zero took the quotient with it. Farther than `10^40` from unit magnitude the division is Smith's now,
283+
which never forms the squared modulus ([#1372](https://github.com/asc-community/AngouriMath/issues/1372), PR
284+
[#1374](https://github.com/asc-community/AngouriMath/pull/1374)).
285+
286+
| Input | Was (2.5.0) | Now |
287+
|---|---|---|
288+
| `Complex.Create(1.98e119, 0) / Complex.Create(3.39e125, 0)`, downcasting off | `0E-100 - -0E-100i` | `5.840707964601768976981721427785376490780345647542924132180928001509698858126373024373283501603E-7 - -0E-100i` |
289+
290+
### A constant and a cached evaluation follow the precision in force
291+
292+
**Answers that were wrong.** `pi` and `e` were worth the digits of whichever precision was set when the constants
293+
were first built, and an entity's cached evaluation survived a change of `MathS.Settings.DecimalPrecisionContext`:
294+
`pi` evaluated at 300 digits after an evaluation at 100 came back with 100. A constant is worth the current
295+
precision's digits now, and a cached evaluation is recomputed when the precision has changed
296+
([#1367](https://github.com/asc-community/AngouriMath/issues/1367), PR
297+
[#1368](https://github.com/asc-community/AngouriMath/pull/1368)).
298+
299+
| Input | Was (2.5.0) | Now |
300+
|---|---|---|
301+
| `MathS.pi.EvalNumerical()` at 300 digits, after an evaluation at 100 | 100 digits | 300 digits |
302+
303+
### A complex number prints the number it holds whatever the downcasting at printing
304+
305+
**Printed forms that were wrong.** Printing a complex number with a negative imaginary part negated that part, and
306+
the negation was downcast under the setting in force when printing: a number made with the downcasting off printed
307+
as a different number once it was back on, and read back as that number with its sign changed. `Latexize` had the
308+
same fault ([#1611](https://github.com/asc-community/AngouriMath/pull/1611)).
309+
310+
| Input | Was (2.5.0) | Now |
311+
|---|---|---|
312+
| `1 - 0.3333333333333333333333333333333333333333i`, made with the downcasting off, printed with it on | `1 - 1/3i`, which reads back as `1 + i/3` | `1 - 0.3333333333333333333333333333333333333333i` |
313+
314+
### The parse cache keeps a parse for each downcasting setting
315+
316+
**Answers that depended on what was parsed before.** `MathS.FromString` cached one parse per string whatever
317+
`MathS.Settings.DowncastingEnabled` was, and that setting changes the parse: with it off, the numbers in a string
318+
are decimals. A string parsed once with the downcasting on came back with integers and rationals when parsed again
319+
with it off ([#1513](https://github.com/asc-community/AngouriMath/issues/1513), PR
320+
[#1517](https://github.com/asc-community/AngouriMath/pull/1517)).
321+
322+
| Input | Was (2.5.0) | Now |
323+
|---|---|---|
324+
| `MathS.FromString("x^2 + 7/2")` with the downcasting off, after the same string with it on | `Integer` and `Rational` nodes, the first parse's | `Real` nodes |
325+
326+
### Euler's substitution answers a rational function of `x` and one square root of a quadratic
327+
328+
**Answers where there were none.** `sqrt(2 - x - x^2)/x^2` was declined: the trigonometric substitution answers
329+
`x^m sqrt(a + b x^2)^k` and nothing wider. Euler's substitution rationalises a rational function of `x` and one
330+
square root of a quadratic, and the rational integrator finishes it (PR
331+
[#1289](https://github.com/asc-community/AngouriMath/pull/1289)).
332+
333+
| Input | Was (2.5.0) | Now |
334+
|---|---|---|
335+
| `"sqrt(2 - x - x^2)/x^2".ToEntity().Integrate("x")` | `integral(...)` | 197 characters |
336+
| `"1/((4 + x^2)*sqrt(1 + 4*x^2))".ToEntity().Integrate("x")` | `integral(...)` | 140 characters |
337+
338+
### The other trigonometric functions are written as sine and cosine before a complement is substituted
339+
340+
**Answers where there were none.** `arctan(sqrt(sec(x) - 1)) sin(x)` was declined: by parts it leaves
341+
`sin(x)/sqrt(sec(x) - 1)`, and under `u = cos(x)` the secant left standing kept its `x`. The secant, cosecant,
342+
tangent and cotangent are written as sine and cosine first, except where that leaves an odd power of the complement
343+
under a root (PR [#1312](https://github.com/asc-community/AngouriMath/pull/1312)).
344+
345+
| Input | Was (2.5.0) | Now |
346+
|---|---|---|
347+
| `"arctan(sqrt(sec(x) - 1))*sin(x)".ToEntity().Integrate("x")` | `integral(...)` | an antiderivative with the condition where it holds |
348+
349+
### A constant over a linear beside the root of a quadratic is answered through the linear's reciprocal
350+
351+
**Answers where there were none.** `1/(r sqrt(-p^2 - q^2 + 2h r^2 - 2k r^4))`, Hearn's, was declined: under
352+
`u = r^2` it is a constant over a linear beside the root of a quadratic whose leading coefficient and constant are
353+
symbols the Euler substitution could not take a real root of. The reciprocal of the linear answers it, and the Euler
354+
substitution reaches a radical real only between its roots (PR
355+
[#1315](https://github.com/asc-community/AngouriMath/pull/1315)).
356+
357+
| Input | Was (2.5.0) | Now |
358+
|---|---|---|
359+
| `"1/(r*sqrt(-p^2 - q^2 + 2*h*r^2 - 2*k*r^4))".ToEntity().Integrate("r")` | `integral(...)` | 1,051 characters |
360+
361+
### A rational function of the hyperbolic tangent with a symbol in it is integrated in the tangent
362+
363+
**Answers where there were none.** `sqrt(a + b sech(x)) tanh(x)^5` ran past a minute, with more of Rubi's hyperbolic
364+
family that put a symbol among the coefficients. It is integrated by `u = tanh(y)` with the written factors kept, and
365+
an answer assembled from a decomposition with symbols is checked before it is given
366+
([#1369](https://github.com/asc-community/AngouriMath/issues/1369), PR
367+
[#1377](https://github.com/asc-community/AngouriMath/pull/1377)).
368+
369+
| Input | Was (2.5.0) | Now |
370+
|---|---|---|
371+
| `"sqrt(a + b*sech(x))*tanh(x)^5".ToEntity().Integrate("x")` | `integral(...)` after a minute | an answer, in 2.4 seconds |
372+
373+
### The inverse trigonometric substitution takes `a + b arcsin(c x)` and its powers
374+
375+
**Answers where there were none.** `x (d - c^2 d x^2)^3 (a + b arcsin(c x))` was declined: `x = sin(u)` took
376+
`arcsin(x)` alone. It takes a linear argument, a multiple of its quadratic and a power of `a + b arcsin(c x)` now
377+
(PR [#1380](https://github.com/asc-community/AngouriMath/pull/1380)).
378+
379+
| Input | Was (2.5.0) | Now |
380+
|---|---|---|
381+
| `"x*(d - c^2*d*x^2)^3*(a + b*arcsin(c*x))".ToEntity().Integrate("x")` | `integral(...)` | an answer |
382+
| `"x*arcsin(a*x)^2".ToEntity().Integrate("x")` | `integral(...)` | an answer |
383+
384+
### `e` and `pi` evaluate to a real number whatever the downcasting says
385+
386+
**A different type.** With the downcasting off, `MathS.e.EvalNumerical()` and `MathS.pi.EvalNumerical()` were
387+
`Complex` with a zero imaginary part, the documented contract of the setting, and the constant is one object whose
388+
cached value kept that. They are `Real` in either mode now, and a complex number with a zero imaginary part is
389+
real-valued ([#1371](https://github.com/asc-community/AngouriMath/pull/1371)).
390+
391+
| Input | Was (2.5.0) | Now |
392+
|---|---|---|
393+
| `MathS.e.EvalNumerical()` with the downcasting off | `Complex` | `Real` |
394+
211395
### A quadratic with rational roots counts as two linears before the substitution search
212396

213397
**Answers where there were none.** `sec(x)^2 sin(x)/(a + b sin(x))^3` ran past thirty seconds: under the

0 commit comments

Comments
 (0)