Loading the parity record
Fetching the measured run — the pinned upstream oracle, every symbol and every case.
Fetching the measured run — the pinned upstream oracle, every symbol and every case.
Parity / algebra
Every number on this page was produced by running both implementations over the same cases: the real sympy package pinned at 1.14.0 answers first, and its answer is the expectation the Go port is held to. Nothing is a hand-written expectation, so a new upstream release re-scores the port on its own. See algebra for the port's own documentation. Source: github.com/malcolmston/algebra.
Not a generic diagram: every node below names an artefact of this harness — the pinned package it installed, the runner files it started, the case files it streamed, and the counts it wrote out.
| Case group | Cases | Match | Mismatch | Group parity |
|---|---|---|---|---|
| numbertheory | 62 | 60 | 2 | 96.8% |
| matrix | 44 | 42 | 2 | 95.5% |
| rewriting | 40 | 36 | 4 | 90.0% |
| solving | 34 | 27 | 7 | 79.4% |
| integration | 28 | 19 | 9 | 67.9% |
| limits-series | 26 | 24 | 2 | 92.3% |
| polynomials | 21 | 21 | 0 | 100.0% |
| differentiation | 19 | 18 | 1 | 94.7% |
| combinatorics | 18 | 18 | 0 | 100.0% |
Every exported symbol of the upstream package, and what the port offers for it. The upstream list is derived mechanically, never from a README: python3 -c "import sympy; print(len([n for n in dir(sympy) if not n.startswith('_')]))" # 928
python3 -c "import sympy; print(len([n for n in dir(sympy.Matrix) if not n.startswith('_')]))" # 206. A symbol with no case is untested, never a match.
| Upstream symbol | Go symbol | Status | Cases | Note |
|---|---|---|---|---|
| sympy.factorial | ntheory.Factorial | match | factorial-0, factorial-20, factorial-50 | |
| sympy.binomial | ntheory.Binomial | match | binomial-5-2, binomial-50-25, binomial-k-greater-than-n, binomial-k-zero | |
| sympy.ff | ntheory.Permutations | match | permutations-10-3, permutations-n-equals-k, permutations-k-zero, permutations-k-greater-than-n | nPk is sympy's falling factorial ff(n,k) |
| sympy.factorial | ntheory.Multinomial | match | multinomial-2-3-4, multinomial-binomial-equivalent | sympy has no multinomial-coefficient function of this shape; oracle is composed from factorials |
| sympy.catalan | ntheory.CatalanNumber | match | catalan-0, catalan-15 | |
| sympy.functions.combinatorial.numbers.stirling | ntheory.StirlingSecond | match | stirling2-6-3, stirling2-n-equals-k, stirling2-k-zero | |
| sympy.diff | algebra.Diff | differs | diff-poly, diff-product-rule, diff-quotient-rule, diff-chain-exp, diff-chain-log, diff-sqrt, diff-tan, diff-sec, diff-atan, diff-asin, diff-hyperbolic, diff-tanh, diff-erf, diff-gamma, diff-power-tower, diff-partial-x, diff-second-sin, diff-third-poly | diff-gamma: d/dx gamma(x) is the right formula, gamma(x)*digamma(x), but the port's digamma is only accurate to ~3e-8 (-0.041601393438867 vs -0.041601392202979) |
| sympy.Expr.diff | algebra.Expr.Diff | match | diff-method-expr | |
| sympy.integrate | algebra.Integrate | differs | int-poly, int-negative-power, int-one-over-x, int-exp-linear, int-sin-linear, int-arctan-form, int-arctan-form-scaled, int-arcsin-form, int-byparts-x-exp, int-byparts-x2-exp, int-byparts-x-sin, int-byparts-x-cos2x, int-byparts-log, int-byparts-x-log, int-byparts-exp-cos, int-rational-distinct-linear, int-rational-x2-minus-1, int-rational-repeated-root, int-rational-irreducible-quadratic, int-rational-cubic-denominator, int-tan, int-sec, int-sinh, int-tanh, int-gaussian, int-sinc, int-log-log, int-nonsense-symbolic-var | 9 of 28 integrands are returned as an unevaluated Integral(...) node: log(x), x*log(x), exp(x)*cos(x), 1/((x-1)^2*(x+1)), (x^2+1)/(x^3+x), 1/(x^3+1), exp(-x^2), sin(x)/x, 1/(x*log(x)). No wrong antiderivative was produced |
| sympy.limit | algebra.Limit | differs | lim-sin-over-x, lim-tan-over-x, lim-one-minus-cos, lim-removable-hole, lim-lhopital-exp, lim-lhopital-sqrt, lim-rational-at-infinity, lim-exp-decay-at-infinity, lim-euler-definition, lim-x-log-x | lim-euler-definition: the port extrapolates numerically and returns 2.7182817863957975 for a limit that is exactly E (7 correct digits). lim-x-log-x: 0*(-oo) is left as an unevaluated Limit(...) |
| sympy.series | algebra.Series | match | series-exp, series-sin, series-cos, series-log1p, series-geometric, series-sqrt1p, series-tan, series-taylor-at-one | |
| sympy.summation | algebra.Summation | match | sum-k, sum-k-squared, sum-k-cubed, sum-constant, sum-geometric-numeric, sum-geometric-symbolic | |
| sympy.product | algebra.Product | match | product-factorial, product-k-squared | |
| sympy.Matrix.det | matrix.Matrix.Det | match | det-2x2, det-3x3, det-4x4-singular, det-rational-entries, det-nonsquare, det-symbolic, det-symbolic-3x3 | |
| sympy.Matrix.det(method='lu') | matrix.Matrix.DetLU | match | det-via-lu-3x3, det-via-lu-4x4 | agrees within tolerance but the port's DetLU pivots in float64 and returns an inexact Float (-305.99999999999994 for -306) where sympy stays exact |
| sympy.Matrix.inv | matrix.Matrix.Inverse | match | inverse-2x2, inverse-3x3-tridiagonal, inverse-singular, inverse-nonsquare | |
| sympy.Matrix.T | matrix.Matrix.Transpose | match | transpose-2x3, transpose-symmetric | |
| sympy.Matrix.rank | matrix.Matrix.Rank | match | rank-full-2x2, rank-deficient-3x3, rank-zero-matrix, rank-wide-2x4 | |
| sympy.Matrix.charpoly | matrix.Matrix.CharPoly | differs | charpoly-2x2, charpoly-3x3, charpoly-4x4 | sign convention: the port returns det(A-lambda*I), sympy returns det(lambda*I-A); the two differ by an overall factor of (-1)^n, so odd dimensions disagree |
| sympy.Matrix.eigenvals | matrix.Matrix.Eigenvalues | differs | eigenvalues-diagonal-2x2, eigenvalues-irrational-2x2, eigenvalues-complex-2x2, eigenvalues-symmetric-3x3, eigenvalues-4x4-diagonal | eigenvalues-4x4-diagonal: the port refuses 4x4 and larger (documented); sympy handles it |
| sympy.Matrix.cholesky | matrix.Matrix.Cholesky | match | cholesky-3x3, cholesky-2x2-irrational, cholesky-not-positive-definite | |
| sympy.Matrix.__mul__ | matrix.Matrix.Mul | match | matmul-2x2, matmul-rectangular, matmul-dimension-mismatch | |
| sympy.Matrix.__pow__ | matrix.Matrix.Pow | match | matpow-cube, matpow-zero | |
| sympy.physics.quantum.TensorProduct | matrix.Matrix.Kron | match | kron-2x2 | |
| sympy.Matrix.solve | matrix.Solve | match | mat-solve-2x2, mat-solve-3x3, mat-solve-singular | |
| sympy.Matrix.adjugate | matrix.Matrix.Adjugate | match | adjugate-3x3 | |
| sympy.Matrix.norm | matrix.Matrix.NormFro | match | norm-frobenius-2x2, norm-frobenius-3x3 | |
| sympy.Matrix.rref | matrix.Matrix.RREF | match | rref-3x3, rref-rank-deficient | |
| sympy.igcd | ntheory.GCD | match | gcd-basic, gcd-with-zero, gcd-negative | |
| sympy.ilcm | ntheory.LCM | match | lcm-basic, lcm-large | |
| sympy.core.intfunc.igcdex | ntheory.ExtendedGCD | match | extended-gcd-240-46, extended-gcd-99-78 | |
| sympy.totient | ntheory.EulerPhi | match | totient-360, totient-prime, totient-one | |
| sympy.mobius | ntheory.MobiusMu | match | mobius-squarefree, mobius-square-factor, mobius-one | |
| sympy.factorint | ntheory.FactorList | match | factorint-5040, factorint-prime, factorint-semiprime-large, factorint-prime-power | |
| sympy.isprime | ntheory.IsPrime | match | isprime-carmichael-561, isprime-large-prime, isprime-one, isprime-negative, isprime-strong-pseudoprime | |
| sympy.nextprime | ntheory.NextPrime | match | nextprime-100, nextprime-prime-input | |
| sympy.primepi | ntheory.PrimePi | match | primepi-1000, primepi-100000 | |
| sympy.divisors | ntheory.Divisors | match | divisors-60, divisors-prime | |
| sympy.divisor_sigma | ntheory.DivisorSigma | match | divisor-sigma-1-of-12, divisor-sigma-2-of-12 | |
| sympy.divisor_count | ntheory.CountDivisors | match | divisor-count-360 | |
| sympy.primefactors | ntheory.Radical | match | radical-360 | sympy has no radical(); oracle is the product of primefactors() |
| builtins.pow | ntheory.ModPow | match | modpow-fermat, modpow-large-exponent | sympy exposes no modular-exponentiation function; oracle is Python's 3-argument pow |
| sympy.mod_inverse | ntheory.ModInverse | match | modinverse-coprime, modinverse-noncoprime | |
| sympy.ntheory.modular.crt | ntheory.CRT | match | crt-classic, crt-noncoprime-moduli | |
| sympy.jacobi_symbol | ntheory.JacobiSymbol | match | jacobi-1001-9907, jacobi-composite-modulus | |
| sympy.legendre_symbol | ntheory.LegendreSymbol | differs | legendre-10-13, legendre-nonprime-modulus | legendre-nonprime-modulus: the port silently returns -1 for LegendreSymbol(3,4), where the symbol is undefined; sympy raises |
| sympy.discrete_log | ntheory.DiscreteLog | match | discrete-log-mod-17, discrete-log-mod-1009 | |
| sympy.ntheory.primetest.is_square | ntheory.IsSquare | match | is-square-144, is-square-145 | |
| sympy.sqrt_mod | ntheory.SqrtMod | match | sqrt-mod-13, sqrt-mod-nonresidue | |
| sympy.n_order | ntheory.Order | match | multiplicative-order-3-mod-7, multiplicative-order-noncoprime | |
| sympy.fibonacci | ntheory.Fibonacci | match | fibonacci-10, fibonacci-200, fibonacci-zero | |
| sympy.lucas | ntheory.Lucas | match | lucas-50 | |
| sympy.tribonacci | ntheory.Tribonacci | match | tribonacci-20 | |
| sympy.npartitions | ntheory.Partition | match | partition-5, partition-100, partition-zero | |
| sympy.bernoulli | ntheory.Bernoulli | differs | bernoulli-10, bernoulli-zero, bernoulli-one, bernoulli-odd | bernoulli-one: B1 = -1/2 in the port, +1/2 in sympy >= 1.12 (competing conventions) |
| sympy.factor_list | algebra.Poly.Factor | match | factor-degrees-quadratic, factor-degrees-irreducible-quadratic, factor-degrees-x3-minus-1, factor-degrees-x4-minus-1, factor-degrees-repeated-quadratic, factor-degrees-double-roots, factor-degrees-quintic, factor-degrees-non-monic | |
| sympy.factor | algebra.Factor | match | factor-numeric-cubic, factor-numeric-quartic | |
| sympy.gcd | algebra.PolyGCD | match | polygcd-x4-x2, polygcd-linear-factor, polygcd-coprime, polygcd-non-monic-inputs | |
| sympy.discriminant | algebra.Poly.Discriminant | match | discriminant-quadratic, discriminant-quadratic-negative, discriminant-cubic, discriminant-quartic | |
| sympy.resultant | algebra.Poly.Resultant | match | resultant-common-factor, resultant-coprime, resultant-linear-pair | |
| sympy.simplify | algebra.Simplify | match | simplify-pythagorean, simplify-double-angle, simplify-log-of-exp, simplify-exp-sum, simplify-cancel-factor, simplify-tan-quotient, simplify-sqrt-of-square, simplify-pi-multiple, simplify-euler-identity | |
| sympy.expand | algebra.Expand | match | expand-binomial-fourth, expand-triple-product, expand-two-variable-cube | |
| sympy.collect | algebra.Collect | match | collect-linear-in-x, collect-quadratic-in-x | |
| sympy.apart | algebra.ApartExpr | match | apart-distinct-linear, apart-repeated-linear, apart-improper-fraction | |
| sympy.Expr.subs | algebra.Subs | match | subs-integer, subs-expression | |
| sympy.N | algebra.Evalf | match | evalf-pi, evalf-mixed-constants | |
| sympy.gamma | algebra.Gamma | match | evalf-gamma-integer, evalf-gamma-half | |
| sympy.beta | algebra.Beta | match | evalf-beta | |
| sympy.erf | algebra.Erf | match | evalf-erf | |
| sympy.erfc | algebra.Erfc | match | evalf-erfc | |
| sympy.factorial | algebra.Factorial | match | evalf-factorial | |
| sympy.Abs | algebra.Abs | match | evalf-abs-negative, evalf-complex-modulus | |
| sympy.floor | algebra.Floor | match | evalf-floor | |
| sympy.ceiling | algebra.Ceil | differs | evalf-ceiling-sympy-name, evalf-ceil-port-name | naming: the port spells it ceil(); worse, its parser reads the unknown name ceiling as an implicit product with a symbol instead of rejecting it |
| sympy.sign | algebra.Sign | match | evalf-sign | |
| sympy.atan2 | algebra.Atan2 | match | evalf-atan2 | |
| sympy.conjugate | algebra.Conjugate | match | evalf-conjugate | |
| sympy.re | algebra.Re | match | evalf-re-im | |
| sympy.arg | algebra.Arg | match | evalf-arg | |
| sympy.sstr | algebra.Expr.String | differs | str-plain-sum, str-division, str-rational-quotient | known port issue: division is printed as a negative power - x^(-1) for 1/x, (x+2)^(-1)*(x+1) for (x+1)/(x+2) |
| sympy.solve | algebra.Solve | differs | solve-linear, solve-linear-rational, solve-quadratic-integer-roots, solve-quadratic-rational-roots, solve-quadratic-irrational-roots, solve-quadratic-double-root, solve-quadratic-pure-imaginary, solve-quadratic-complex-conjugates, solve-cubic-integer-roots, solve-cubic-one-real-root, solve-cubic-mixed-roots, solve-cubic-three-irrational, solve-quartic-biquadratic, solve-quartic-roots-of-unity, solve-quartic-mixed, solve-quartic-general, solve-quintic-roots-of-unity, solve-nonpolynomial-sin, solve-nonpolynomial-exp, solve-no-solution-constant | every polynomial case from linear to quintic agrees, including complex conjugate pairs and the casus irreducibilis. Transcendental equations (sin(x), exp(x)-2) are rejected; a constant non-zero equation errors where sympy returns the empty set |
| sympy.solve | algebra.SolveQuadraticSteps().Result | differs | solve-quadratic-stepper-result, solve-quadratic-stepper-result-irrational | known port issue: Solution.Result holds only ONE of the two roots although Steps narrates both |
| sympy.solve | algebra.SolveSystem | match | system-2x2, system-2x2-rational, system-3x3, system-underdetermined, system-inconsistent | includes the underdetermined and inconsistent systems, which fail on both sides |
| sympy.dsolve | algebra.SolveODE1 | differs | ode1-separable, ode1-exponential-growth, ode1-linear-nonhomogeneous | known port issue: the separable branch returns exp(x^2+C1) rather than C1*exp(x^2) - the same solution family, but the constant enters non-linearly, so for any fixed C1 the two answers are different functions. The linear branch (ode1-linear-nonhomogeneous) agrees |
| sympy.dsolve | algebra.SolveODE2Const | match | ode2-distinct-real-roots, ode2-repeated-root, ode2-complex-roots, ode2-forced-polynomial | |
| sympy.im | algebra.Im | match | evalf-re-im | exercised jointly with sympy.re in one expression |
| sympy.integrate(f, (x, a, b)) (definite integrals) | — | missing | — | the port's Integrate is indefinite only |
| sympy.solveset, sympy.linsolve, sympy.nonlinsolve, sympy.nsolve | — | missing | — | only Solve (univariate polynomial) and SolveSystem (linear) exist |
| sympy.roots (roots with multiplicities) | — | missing | — | Solve returns distinct roots without multiplicity |
| sympy.RootOf / sympy.CRootOf | — | missing | — | no indexed-root representation |
| sympy.trigsimp, powsimp, radsimp, logcombine, expand_trig, expand_log, cancel, together, nsimplify, Expr.rewrite | — | missing | — | the port has a single Simplify |
| sympy.dsolve for order > 2, non-constant coefficients, systems, ICs | — | missing | — | only SolveODE1 and SolveODE2Const |
| sympy.laplace_transform, fourier_transform, inverse_laplace_transform, mellin_transform | — | missing | — | no integral transforms |
| sympy.Matrix.eigenvects, diagonalize, jordan_form | — | missing | — | eigenvalues only |
| sympy.Matrix.LUdecomposition (exact, no pivoting) | matrix.Matrix.LU | differs | — | untested on purpose: the port pivots in float64, so L, U and P are not comparable entry-by-entry; only DetLU was compared |
| sympy.Matrix.nullspace, columnspace, rowspace, pinv, QRdecomposition, singular_values | matrix.Matrix.NullspaceExact, ColumnSpaceExact, RowSpaceExact, Pinv, QR, SingularValues | untested | — | present on both sides but not compared: basis vectors are only defined up to scaling and ordering, which needs a canonicalisation this harness does not implement |
| sympy.groebner, sympy.GF, sympy.minimal_polynomial, sympy.sqf, sympy.Poly domain machinery | — | missing | — | the port's Poly is univariate over the rationals only |
| sympy.lambdify, sympy.Sum/sympy.Product as objects, assumptions (Symbol(..., positive=True)), sympy.Interval/set algebra, sympy.plot, sympy.physics.*, sympy.stats, sympy.geometry, sympy.combinatorics.* | — | missing | — | out of scope for the port |
| sympy.primerange, sympy.prime, sympy.primorial, sympy.multiplicity, sympy.perfect_power, sympy.harmonic, sympy.euler, sympy.genocchi, sympy.bell, sympy.motzkin, sympy.partitions | ntheory.PrimesInRange, NthPrime, Radical, … (partial) | untested | — | close counterparts exist for some; not compared |
| — | algebra.SimplifySteps, ExpandSteps, FactorSteps, DifferentiateSteps, IntegrateSteps, LimitSteps, SeriesSteps, PartialFractionSteps, CompleteSquareSteps, SolveLinearSteps, SolveQuadraticSteps, SolveCubicSteps, SolveSystemSteps, Solution, Step | extra | solve-quadratic-stepper-result, solve-quadratic-stepper-result-irrational | worked-solution ("show your work") API with no sympy equivalent; only SolveQuadraticSteps().Result was compared, and it diverges |
Every case the harness streamed to both runners, with the exact upstream symbol and Go symbol it exercised. A deliberate, documented difference is a deviation and is counted apart from a mismatch.
| Case | Group | Upstream symbol | Go symbol | Status | Note |
|---|---|---|---|---|---|
| factorial-0 | combinatorics | sympy.factorial | ntheory.Factorial | match | |
| factorial-20 | combinatorics | sympy.factorial | ntheory.Factorial | match | |
| factorial-50 | combinatorics | sympy.factorial | ntheory.Factorial | match | arbitrary-precision result |
| binomial-5-2 | combinatorics | sympy.binomial | ntheory.Binomial | match | |
| binomial-50-25 | combinatorics | sympy.binomial | ntheory.Binomial | match | |
| binomial-k-greater-than-n | combinatorics | sympy.binomial | ntheory.Binomial | match | out-of-range convention check |
| binomial-k-zero | combinatorics | sympy.binomial | ntheory.Binomial | match | |
| permutations-10-3 | combinatorics | sympy.ff | ntheory.Permutations | match | nPk equals the falling factorial ff(n, k) |
| permutations-n-equals-k | combinatorics | sympy.ff | ntheory.Permutations | match | |
| permutations-k-zero | combinatorics | sympy.ff | ntheory.Permutations | match | |
| permutations-k-greater-than-n | combinatorics | sympy.ff | ntheory.Permutations | match | out-of-range convention check: ff(4,6) is 0 |
| multinomial-2-3-4 | combinatorics | sympy.factorial | ntheory.Multinomial | match | sympy has no direct nCk1,k2,... entry point; the upstream answer is composed from factorials |
| multinomial-binomial-equivalent | combinatorics | sympy.factorial | ntheory.Multinomial | match | |
| catalan-0 | combinatorics | sympy.catalan | ntheory.CatalanNumber | match | |
| catalan-15 | combinatorics | sympy.catalan | ntheory.CatalanNumber | match | |
| stirling2-6-3 | combinatorics | sympy.functions.combinatorial.numbers.stirling | ntheory.StirlingSecond | match | |
| stirling2-n-equals-k | combinatorics | sympy.functions.combinatorial.numbers.stirling | ntheory.StirlingSecond | match | |
| stirling2-k-zero | combinatorics | sympy.functions.combinatorial.numbers.stirling | ntheory.StirlingSecond | match | |
| diff-poly | differentiation | sympy.diff | algebra.Diff | match | |
| diff-product-rule | differentiation | sympy.diff | algebra.Diff | match | |
| diff-quotient-rule | differentiation | sympy.diff | algebra.Diff | match | |
| diff-chain-exp | differentiation | sympy.diff | algebra.Diff | match | |
| diff-chain-log | differentiation | sympy.diff | algebra.Diff | match | |
| diff-sqrt | differentiation | sympy.diff | algebra.Diff | match | |
| diff-tan | differentiation | sympy.diff | algebra.Diff | match | |
| diff-sec | differentiation | sympy.diff | algebra.Diff | match | |
| diff-atan | differentiation | sympy.diff | algebra.Diff | match | |
| diff-asin | differentiation | sympy.diff | algebra.Diff | match | |
| diff-hyperbolic | differentiation | sympy.diff | algebra.Diff | match | |
| diff-tanh | differentiation | sympy.diff | algebra.Diff | match | |
| diff-erf | differentiation | sympy.diff | algebra.Diff | match | |
| diff-gamma | differentiation | sympy.diff | algebra.Diff | mismatch | sympy answers with polygamma; probe for whether the port differentiates gamma at all |
| diff-power-tower | differentiation | sympy.diff | algebra.Diff | match | variable base and variable exponent simultaneously |
| diff-partial-x | differentiation | sympy.diff | algebra.Diff | match | |
| diff-second-sin | differentiation | sympy.diff | algebra.Diff | match | |
| diff-third-poly | differentiation | sympy.diff | algebra.Diff | match | |
| diff-method-expr | differentiation | sympy.Expr.diff | algebra.Expr.Diff | match | |
| int-poly | integration | sympy.integrate | algebra.Integrate | match | |
| int-negative-power | integration | sympy.integrate | algebra.Integrate | match | |
| int-one-over-x | integration | sympy.integrate | algebra.Integrate | match | |
| int-exp-linear | integration | sympy.integrate | algebra.Integrate | match | |
| int-sin-linear | integration | sympy.integrate | algebra.Integrate | match | |
| int-arctan-form | integration | sympy.integrate | algebra.Integrate | match | |
| int-arctan-form-scaled | integration | sympy.integrate | algebra.Integrate | match | |
| int-arcsin-form | integration | sympy.integrate | algebra.Integrate | match | |
| int-byparts-x-exp | integration | sympy.integrate | algebra.Integrate | match | |
| int-byparts-x2-exp | integration | sympy.integrate | algebra.Integrate | match | |
| int-byparts-x-sin | integration | sympy.integrate | algebra.Integrate | match | |
| int-byparts-x-cos2x | integration | sympy.integrate | algebra.Integrate | match | |
| int-byparts-log | integration | sympy.integrate | algebra.Integrate | mismatch | classic by-parts case: x*log(x) - x |
| int-byparts-x-log | integration | sympy.integrate | algebra.Integrate | mismatch | |
| int-byparts-exp-cos | integration | sympy.integrate | algebra.Integrate | mismatch | cyclic by-parts: exp(x)*(sin(x)+cos(x))/2 |
| int-rational-distinct-linear | integration | sympy.integrate | algebra.Integrate | match | |
| int-rational-x2-minus-1 | integration | sympy.integrate | algebra.Integrate | match | |
| int-rational-repeated-root | integration | sympy.integrate | algebra.Integrate | mismatch | partial fractions with a repeated linear factor |
| int-rational-irreducible-quadratic | integration | sympy.integrate | algebra.Integrate | mismatch | partial fractions with an irreducible quadratic factor |
| int-rational-cubic-denominator | integration | sympy.integrate | algebra.Integrate | mismatch | |
| int-tan | integration | sympy.integrate | algebra.Integrate | match | |
| int-sec | integration | sympy.integrate | algebra.Integrate | match | |
| int-sinh | integration | sympy.integrate | algebra.Integrate | match | |
| int-tanh | integration | sympy.integrate | algebra.Integrate | match | |
| int-gaussian | integration | sympy.integrate | algebra.Integrate | mismatch | sqrt(pi)/2*erf(x); the port has Erf but may not reach it from the integral |
| int-sinc | integration | sympy.integrate | algebra.Integrate | mismatch | sympy answers with Si(x); the port has no special-integral table |
| int-log-log | integration | sympy.integrate | algebra.Integrate | mismatch | |
| int-nonsense-symbolic-var | integration | sympy.integrate | algebra.Integrate | match | |
| lim-sin-over-x | limits-series | sympy.limit | algebra.Limit | match | |
| lim-tan-over-x | limits-series | sympy.limit | algebra.Limit | match | |
| lim-one-minus-cos | limits-series | sympy.limit | algebra.Limit | match | |
| lim-removable-hole | limits-series | sympy.limit | algebra.Limit | match | |
| lim-lhopital-exp | limits-series | sympy.limit | algebra.Limit | match | |
| lim-lhopital-sqrt | limits-series | sympy.limit | algebra.Limit | match | |
| lim-rational-at-infinity | limits-series | sympy.limit | algebra.Limit | match | |
| lim-exp-decay-at-infinity | limits-series | sympy.limit | algebra.Limit | match | |
| lim-euler-definition | limits-series | sympy.limit | algebra.Limit | mismatch | answer is exactly E; a numeric extrapolation will not reach 1e-9 |
| lim-x-log-x | limits-series | sympy.limit | algebra.Limit | mismatch | 0 * (-oo) indeterminate form |
| series-exp | limits-series | sympy.series | algebra.Series | match | |
| series-sin | limits-series | sympy.series | algebra.Series | match | |
| series-cos | limits-series | sympy.series | algebra.Series | match | |
| series-log1p | limits-series | sympy.series | algebra.Series | match | |
| series-geometric | limits-series | sympy.series | algebra.Series | match | |
| series-sqrt1p | limits-series | sympy.series | algebra.Series | match | |
| series-tan | limits-series | sympy.series | algebra.Series | match | |
| series-taylor-at-one | limits-series | sympy.series | algebra.Series | match | expansion point other than 0 |
| sum-k | limits-series | sympy.summation | algebra.Summation | match | |
| sum-k-squared | limits-series | sympy.summation | algebra.Summation | match | |
| sum-k-cubed | limits-series | sympy.summation | algebra.Summation | match | |
| sum-constant | limits-series | sympy.summation | algebra.Summation | match | |
| sum-geometric-numeric | limits-series | sympy.summation | algebra.Summation | match | |
| sum-geometric-symbolic | limits-series | sympy.summation | algebra.Summation | match | |
| product-factorial | limits-series | sympy.product | algebra.Product | match | |
| product-k-squared | limits-series | sympy.product | algebra.Product | match | |
| det-2x2 | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-3x3 | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-4x4-singular | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-rational-entries | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-nonsquare | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | must fail on both |
| det-symbolic | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-symbolic-3x3 | matrix | sympy.Matrix.det | matrix.Matrix.Det | match | |
| det-via-lu-3x3 | matrix | sympy.Matrix.det(method='lu') | matrix.Matrix.DetLU | match | |
| det-via-lu-4x4 | matrix | sympy.Matrix.det(method='lu') | matrix.Matrix.DetLU | match | compared in numeric mode: the port's DetLU pivots in float64 and returns an inexact Float where sympy's LU determinant stays exact |