Skip to content

feat(number-theory): add verified finite abelian factorizations - #1301

Merged
morluto merged 19 commits into
mainfrom
agent/port-finite-abelian-factorization-v2
Aug 13, 2026
Merged

feat(number-theory): add verified finite abelian factorizations#1301
morluto merged 19 commits into
mainfrom
agent/port-finite-abelian-factorization-v2

Conversation

@morluto

@morluto morluto commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

Supersedes #910 with a current-ownership port of bounded finite abelian group factorization.

  • add provider-independent values and exhaustive exact semantics under jacobian.math.finite_abelian_groups;
  • publish one thin OperationSpec for finite_abelian_group.exact_factorization.compute;
  • normalize bounded integer-vector factors in a declared product of cyclic groups;
  • return the complete representation-count histogram, exact-factorization decision, and deterministic first missing/duplicate witnesses;
  • represent a coset transversal compositionally by using the identity singleton as the second factor;
  • add a separate standard-library checker that independently normalizes and replays every sum.

Ownership and validation

The result model validates structural invariants only; exhaustive mathematical replay lives in the semantic function and the separate checker, not in a Pydantic validator or capability adapter. The operation returns an inline typed value and creates no artifacts. The checker alone may produce a verification record after operator authorization.

This PR is stacked on #1299 so the number-theory declaration owns its clean-process runtime instead of adding another central checker-runtime mapping.

Bounds

  • rank at most 6;
  • group order at most 4,096;
  • each factor at most 256 elements;
  • factor Cartesian product at most 4,096;
  • coordinate magnitude at most 1,000,000 before canonical reduction.

Validation

Focused coverage uses a noncanonical eight-element transversal of Z/2 x Z/4, verifies the complete factorization independently, checks deterministic duplicate witnesses on a negative case, and rejects a forged decision. Hosted CI is authoritative for the full matrix.

Credit

This is a current-ownership port of the original implementation in #910 by @yuelgrace1810-ops. Their original investigation, reproduction, and implementation work are the basis for this replacement.

morluto added a commit that referenced this pull request Aug 13, 2026
Advance #1301 onto the current #1299 stack base without changing its mathematical scope.
morluto added a commit that referenced this pull request Aug 13, 2026
Advance #1301 after #1316 without changing its exhaustive finite-group semantics.
@morluto
morluto force-pushed the agent/domain-owned-checker-runtimes branch from 6a97690 to 2b4f61d Compare August 13, 2026 08:59

morluto commented Aug 13, 2026

Copy link
Copy Markdown
Owner Author

Attribution

The bounded exact finite-abelian-group factorization producer and verifier originated in #910, authored by @yuelgrace1810-ops. This PR ports that work into the provider-independent math layer and declaration-owned checker model while preserving the original credit.

morluto added a commit that referenced this pull request Aug 13, 2026
Advance #1301 onto the #1357-compatible declaration-runtime seam without changing its mathematical scope.
morluto added a commit that referenced this pull request Aug 13, 2026
Synchronize #1301 with the final lazy, migration-compatible declaration runtime boundary.
Compose declaration-owned clean-process runtimes with the latest batched checker-identity path. Existing checker families retain the legacy registry; new declarations may carry one unassigned provider runtime, and the composition root batches identity material across the full declaration set before authorization.
Store passive provider-runtime factories on exact replay declarations and realize each runtime once, at installation. Importing domain declarations no longer identifies or hashes checker source, while the existing installer and authorization boundary keep the same resolved runtime contract.
Retain the existing direct provider_runtime constructor as a temporary compatibility seam while making provider_runtime_factory lazy and cached. Reject dual ownership and preserve pre-authorization invariants for both forms.
@morluto
morluto force-pushed the agent/domain-owned-checker-runtimes branch from b33a9ff to 3d9e943 Compare August 13, 2026 10:40
Declare the compatibility accessor's dynamic return as Any so mypy accepts the dataclass field interception while the public provider_runtime field retains its precise declared type.
Rebuild the finite-abelian-group port as one domain-owned commit on the corrected declaration-runtime base. Keep exhaustive native semantics, one thin operation binding, a lazy dedicated checker runtime, independent stdlib replay, and focused positive and negative factorization coverage.
@morluto
morluto force-pushed the agent/port-finite-abelian-factorization-v2 branch from 89fe8b7 to 1a77dce Compare August 13, 2026 11:10
Base automatically changed from agent/domain-owned-checker-runtimes to main August 13, 2026 19:10
@morluto
morluto marked this pull request as ready for review August 13, 2026 19:27
@cursor

cursor Bot commented Aug 13, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

object.__setattr__(self, "provider_runtime", realized)

P1 Badge Remeasure provider identity for every authorization

Do not cache the realized runtime on the module-global declaration: after any earlier access or runtime construction, subsequent authorizations reuse this stale probe instead of remeasuring the current checker source. If the checker package changes or becomes available within the same process, the registry can authorize using the old provider digest, and the worker then rejects the newly authorized checker as changed; the test suite already needs manual cache clearing around monkeypatched factories. Keep caching bounded to one installation batch rather than the declaration lifetime.

AGENTS.md reference: AGENTS.md:L137-L140


class FiniteAbelianGroupFactorizationRequest(ContractModel):

P1 Badge Put the new domain values in a values module

Move these request/result/value models into jacobian.math.finite_abelian_groups.values and keep the public operation beside them in the domain package. The current flat module combines all domain values and computation in a 320-line module, so the new domain does not provide the repository-required provider-independent values namespace for interoperability and future conversions.

AGENTS.md reference: AGENTS.md:L76-L83


"finite_abelian_groups",

P1 Badge Add the new module's exported symbols to the API manifest

Register jacobian.math.finite_abelian_groups itself in PUBLIC_API, with its exact supported symbols. Adding only its name under jacobian.math means test_public_manifest_is_exact never imports the new module or checks its __all__, so accidental exports and namespace drift in this newly supported native API will pass the required public-API tests.

AGENTS.md reference: AGENTS.md:L65-L68

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@morluto

morluto commented Aug 13, 2026

Copy link
Copy Markdown
Owner Author

Reconciled this branch with current main and pushed merge commit 2d0ba83. The resolution keeps main's checker/runtime installer semantics, then reapplies the finite-Abelian-group declaration and preserves the required optional-provider installation expectation. Focused validation: 61 tests passed.

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Name                                                               Stmts   Miss Branch BrPart  Cover   Missing
--------------------------------------------------------------------------------------------------------------
src/jacobian/adapters/mcp/cli.py                                      15     15      2      0     0%   3-38
src/jacobian/adapters/mcp/context.py                                  96     14     32     12    80%   71, 98, 114-115, 129, 140, 150, 156, 162, 168, 174, 186, 223-225
src/jacobian/adapters/mcp/core.py                                     83      2     10      2    96%   163, 180
src/jacobian/adapters/mcp/deployment_identity.py                      48      8     10      2    83%   44, 49-50, 63-64, 73-74, 79
src/jacobian/adapters/mcp/projections.py                              53     14     14      1    63%   136-149
src/jacobian/adapters/mcp/remote.py                                  303     18     88     12    92%   75, 78, 82, 107, 115, 117, 119, 155, 157, 217-221, 290, 324, 396->398, 413, 416
src/jacobian/adapters/mcp/remote_cli.py                               53     53     18      0     0%   3-159
src/jacobian/adapters/mcp/server.py                                   34      2      2      1    92%   110-112
src/jacobian/adapters/mcp/tooling.py                                 220     49     48     15    75%   65, 77, 98-99, 104, 113-114, 122, 135, 212->228, 215, 222-227, 234-241, 265-267, 299-300, 314, 319-320, 323-324, 326, 335, 338-339, 341, 349-358, 381-384, 439-474
src/jacobian/artifacts.py                                             43     14     10      4    66%   48, 64, 70-71, 81, 99-112
src/jacobian/bounded_process.py                                      530    153    190     43    68%   85-86, 90-91, 103-114, 128-129, 151, 154, 168, 171, 218, 220, 222, 261-283, 300, 325, 359-362, 379-384, 404->406, 462, 508-516, 623, 625, 629, 634, 636, 644, 646, 648, 685, 691, 697-698, 704-705, 712, 714, 734-735, 756-763, 785, 787, 807, 812-814, 821-822, 827-829, 836-847, 850-873, 880-881, 887-888, 904-907, 911-922, 924, 928-929, 934, 945, 949, 951->940, 954-955, 962-963, 972, 974->976, 985, 988-994, 998->997, 1014->1016
src/jacobian/builtin_capabilities.py                                  28     15      2      0    43%   29-30, 85, 88-132
src/jacobian/canonical.py                                            130      9     52      6    92%   35, 72, 100, 139, 159, 181, 184, 211-212
src/jacobian/capability_discovery.py                                  70      1     20      1    98%   144
src/jacobian/capability_dispatch.py                                  106     10     20      5    88%   49-50, 91-92, 163-186, 282, 347, 391-392
src/jacobian/capability_errors.py                                     27      1      2      1    93%   56
src/jacobian/capability_registry.py                                   33      3      8      3    85%   33, 37, 44
src/jacobian/capability_service.py                                    71     10     26     10    79%   46, 56, 69, 95, 110, 112, 116, 118, 123, 125
src/jacobian/capability_validation.py                                 82     11     38      8    84%   27-28, 42-43, 50, 70, 72, 78, 80, 83, 97, 126->152
src/jacobian/capability_verification.py                               67     13     36     11    77%   40-41, 49, 56, 71, 75, 79, 95, 103, 115, 127, 132, 140
src/jacobian/checker_authorization.py                                 63      1      8      1    97%   225
src/jacobian/checker_identity.py                                     391     38    152     32    87%   102, 130-138, 145, 252, 258, 359, 387, 391, 401, 418-419, 428->423, 468, 537-538, 543, 585, 588, 595, 601-602, 617->619, 623, 638, 660-661, 687, 690, 702, 705, 707->709, 718, 736, 739, 742->744, 750, 755, 775, 780, 792
src/jacobian/checker_operations.py                                   119      9     42      9    89%   44, 52, 136, 157, 179, 185, 190, 246, 250
src/jacobian/checker_worker.py                                       135     63     42      9    46%   56, 60, 73-97, 101-115, 127-139, 151-152, 154, 157, 165, 168, 177-178, 189-193, 201-202, 205->exit
src/jacobian/cli.py                                                  102     11     20      4    86%   32, 57, 122, 149, 166-179, 232
src/jacobian/composition.py                                           35      7      6      2    73%   33->38, 36-37, 40-41, 43, 51-52
src/jacobian/contracts/_verification_rules.py                         22      2     16      2    89%   25, 34
src/jacobian/contracts/capabilities.py                               240     19     74     19    88%   38, 40, 42, 90, 92, 141, 143, 184, 188, 196, 207, 225, 242, 248, 260, 351, 358, 362, 400
src/jacobian/contracts/certified_snf.py                               76      5     16      5    89%   42, 48, 76, 132, 144
src/jacobian/contracts/checkers.py                                   167     14     50     14    87%   99, 130, 134, 143, 168, 170, 183, 193, 195, 269, 277, 294, 319, 326
src/jacobian/contracts/combinatorics.py                              494     64    192     56    82%   93, 119-120, 170, 266, 349, 438, 458, 471, 473, 505, 546, 548, 550, 552, 555, 566, 571, 584, 587, 591, 593, 610, 612, 614, 617, 632, 634, 636, 640, 642, 672, 713, 723, 735, 780, 782, 784, 786, 788, 793, 840, 843, 850, 904, 915, 917, 919, 923, 959, 965, 977, 980-991, 1028, 1035, 1054, 1124, 1138
src/jacobian/contracts/evidence.py                                    47      1      4      1    96%   52
src/jacobian/contracts/exact_domain_verification.py                   65      2     10      2    95%   100, 147
src/jacobian/contracts/finite_coverage.py                            152     14     30     14    85%   53, 57, 76, 84, 104, 106, 108, 125, 132, 165, 169, 185, 233, 235
src/jacobian/contracts/finite_sets.py                                 31      3      6      3    84%   24, 46, 48
src/jacobian/contracts/formal_datasets.py                            226     13     74     13    91%   44, 183, 268, 270, 272, 278, 280, 284, 294, 296, 300, 307, 314
src/jacobian/contracts/geometry.py                                   243     33     80     26    80%   42, 55, 61, 78-86, 109, 195, 203, 212, 214, 226, 228, 241, 244, 247, 256, 281, 286, 312-314, 324, 327, 330, 339, 356, 358, 373, 382, 391, 394
src/jacobian/contracts/graph_coloring.py                              59     10     24     10    76%   28, 31, 36, 81, 83, 85, 87, 91, 100, 102
src/jacobian/contracts/graph_composition.py                           92      2     18      2    96%   182, 184
src/jacobian/contracts/graph_degree_sequence.py                       76      8     18      8    83%   19, 56, 62, 69, 76, 102, 104, 106
src/jacobian/contracts/graph_invariant_operations.py                 136     17     38     16    80%   40, 60, 69, 104, 116, 118, 125, 144, 146, 166, 175, 196, 198, 200, 207-209
src/jacobian/contracts/graph_invariants.py                           192     23     52     23    81%   91, 93, 95, 106, 122, 124, 127, 131, 135, 155, 172, 174, 178, 189, 213, 215, 217, 219, 237, 239, 244, 275, 280
src/jacobian/contracts/graph_isomorphism.py                          109      8     32      8    89%   25, 27, 107, 109, 111, 113, 118, 124
src/jacobian/contracts/graph_optimization.py                         266     38     82     28    79%   34, 54, 82, 110, 118, 159, 190, 192, 199, 205, 210, 219, 225, 244, 302, 305, 307, 333, 341, 343, 353, 355, 357, 369, 384, 386, 392, 400, 433-441, 520-528
src/jacobian/contracts/graph_symmetry.py                             123     14     38     14    83%   44, 56, 60, 67, 70, 74, 101, 109, 181, 201, 242, 248, 254, 284
src/jacobian/contracts/jacobian_syzygy.py                            161     32     72     31    72%   26, 29, 32, 43, 72, 76, 83, 86, 89, 93, 100, 113, 125, 130, 132, 153, 155, 157, 163, 165, 167-168, 177, 183, 202, 233, 238, 244, 248, 252, 266, 272
src/jacobian/contracts/lean.py                                       258     19     60     20    88%   160, 219->221, 226, 242, 244, 257, 260, 314, 318, 353, 380, 382, 384, 389, 399, 401, 409, 411, 415, 424
src/jacobian/contracts/lean_exploration.py                           146     22     32      6    75%   22, 94, 137-139, 152, 182, 185-201
src/jacobian/contracts/lean_metavariable_fields.py                    62      3      2      0    92%   93-97
src/jacobian/contracts/lean_proof_axioms.py                           58      4     18      4    89%   34, 66, 68, 72
src/jacobian/contracts/lean_proof_edit.py                             53      5     14      5    85%   23, 26, 53, 58, 67
src/jacobian/contracts/lean_proof_state_inspect.py                    37      5      6      1    77%   51-55
src/jacobian/contracts/lean_statement.py                             116      8     40      9    89%   42, 88, 96, 98, 99->103, 104, 106, 108, 152
src/jacobian/contracts/lean_term_apply.py                             31      9      8      0    56%   35-49
src/jacobian/contracts/linear.py                                      61      2     12      2    95%   53, 124
src/jacobian/contracts/matrices.py                                    39      4     14      4    85%   51, 53, 76, 78
src/jacobian/contracts/matrix_lattice.py                              34      3      6      3    85%   30, 32, 37
src/jacobian/contracts/matrix_operations.py                          189     12     38     12    89%   94, 98, 151, 169, 237, 239, 241, 258, 260, 294, 327, 329
src/jacobian/contracts/nullstellensatz.py                            165     19     40     19    81%   33, 41, 47, 63, 65, 91, 97, 101, 121, 128, 130, 189, 199, 202, 205, 207, 232, 241, 279
src/jacobian/contracts/number_theory.py                              315     30     94     30    85%   175, 225, 227, 246, 269, 275, 287, 349, 388, 390, 392, 419, 441, 448, 566, 568, 574, 584, 587, 592, 613, 617, 630, 637, 649, 669, 685, 688, 690, 692
src/jacobian/contracts/polynomial_expressions.py                     238     18     66     15    89%   160, 204, 216, 265-266, 268-269, 306-307, 344, 352, 361, 426, 437, 463, 469, 497, 501
src/jacobian/contracts/polynomial_intervals.py                       123     11     26     11    85%   58, 68, 73, 79, 105, 110, 114, 157, 162, 166, 209
src/jacobian/contracts/polynomial_operations.py                      292     27     68     27    85%   58, 85, 97, 108, 116, 176, 178, 183, 195, 224, 249, 275, 277, 287, 304, 306, 322, 327, 335, 340, 401, 435, 448, 450, 491, 493, 495
src/jacobian/contracts/polynomial_positivity.py                       92      4      8      4    92%   57, 66, 70, 143
src/jacobian/contracts/polynomial_systems.py                          87      6     16      6    88%   35, 42, 95, 97, 139, 143
src/jacobian/contracts/polynomials.py                                752     72    238     72    85%   81, 127, 145, 163, 167, 186, 192, 261, 288, 295, 320, 333, 389, 391, 393, 395, 397, 399, 401, 423, 495, 497, 499, 501, 510, 512, 515, 517, 519, 545, 548, 550, 560, 613, 615, 617, 619, 622, 624, 699, 701, 733, 735, 771, 778, 883, 982, 986, 996, 1014, 1018, 1043, 1047, 1054, 1083, 1087, 1119, 1121, 1156, 1158, 1160, 1164, 1168, 1171-1175, 1199, 1206, 1231, 1235, 1267, 1271, 1280
src/jacobian/contracts/polytope.py                                    74      8     22      8    83%   34, 67, 69, 71, 92, 95, 97, 106
src/jacobian/contracts/posets.py                                     307     31    104     32    85%   51, 67, 132, 143, 147, 149, 163, 165, 170, 171->173, 185, 266, 270, 287, 314, 329, 332, 335, 337, 340, 381, 415, 480, 539, 541, 543, 545, 566, 569, 578, 627, 630
src/jacobian/contracts/probability.py                                413     41    138     41    85%   46, 56, 104, 108, 134, 200, 206, 211, 218, 241, 244, 248, 256, 267, 274, 289, 294, 307, 393, 395, 399, 413, 415, 436, 459, 470, 472, 522, 556, 581, 597, 609, 613, 619, 694, 722, 736, 787, 808, 814, 823
src/jacobian/contracts/projective_geometry.py                        140     22     48     20    78%   36, 39, 72, 92-93, 98, 103, 105, 126, 128, 130, 155, 159, 165, 172, 174, 207, 210, 213, 219, 224, 233
src/jacobian/contracts/provider_measurements.py                       48      1     12      1    97%   82
src/jacobian/contracts/results.py                                     80      3     16      3    94%   74, 76, 121
src/jacobian/contracts/sat.py                                        353     25     92     23    89%   65, 76, 78, 80, 161, 296, 300, 328, 332, 351, 373, 433, 437, 468, 470, 472, 507, 509, 511, 560, 564, 566, 585, 679-680
src/jacobian/contracts/sequences.py                                   24      1      0      0    96%   52
src/jacobian/contracts/smt.py                                        259     24     90     19    88%   60-61, 74-75, 80, 91, 96, 108, 111, 150, 160, 164, 183, 188, 195-196, 200, 203, 211, 270, 323, 398, 400, 402
src/jacobian/contracts/topology.py                                   372     41    124     41    83%   66, 95, 100, 102, 119, 142, 164, 166, 249, 273, 279, 286, 293, 319, 369, 374, 392, 395, 405, 407, 436, 440, 443, 449, 504, 506, 513, 520, 541, 544, 546, 557, 585, 603, 624, 676, 684, 697, 718, 747, 751
src/jacobian/contracts/universal_algebra.py                          230     35     74     23    76%   32, 34, 36, 43, 50, 56, 59, 76, 89, 92, 105, 110, 136, 162, 187, 207, 209, 232, 237, 302-330, 332, 348-349, 353
src/jacobian/contracts/urls.py                                        12      2      4      2    75%   14, 16
src/jacobian/contracts/validated_analysis.py                         160     21     52     16    80%   62, 64, 89, 91, 96, 98, 138, 141, 144, 162, 170, 173, 175, 218, 222-230, 274-286
src/jacobian/domains/_certified_snf.py                               110     21     38     10    76%   39, 43-46, 50, 64, 76, 84, 100-111, 146, 159, 193, 225, 230, 234
src/jacobian/domains/analysis/operations.py                           42      6      8      3    82%   64, 69, 113, 123-128
src/jacobian/domains/analysis/protocol.py                             35      2      4      2    90%   43, 45
src/jacobian/domains/analysis/worker.py                               30     30      4      0     0%   3-74
src/jacobian/domains/arithmetic/operations.py                         96      8     14      2    89%   60-63, 115, 139-140, 179-180
src/jacobian/domains/combinatorics/difference_sets.py                 77      2     28      2    96%   130, 157
src/jacobian/domains/combinatorics/operations.py                      98      3     10      3    94%   72, 192, 195
src/jacobian/domains/finite_fields/bundle.py                         103      3     12      3    95%   142, 157, 240
src/jacobian/domains/geometry/operations.py                          176     39     44      5    75%   81, 115-117, 144-147, 162, 197, 212-215, 225-228, 242-243, 251-263, 267-273, 323-327, 407
src/jacobian/domains/graph_optimization/chromatic_number.py           19      2      4      0    91%   30-31
src/jacobian/domains/graph_optimization/distance_matrix.py            22      2      0      0    91%   63-64
src/jacobian/domains/graph_optimization/exact_search.py              143      1     38      1    99%   85
src/jacobian/domains/graph_optimization/finite_optimization.py        55      1     20      1    97%   74
src/jacobian/domains/graph_optimization/graph6.py                     22      2      0      0    91%   40-41
src/jacobian/domains/graph_optimization/hamiltonian_path.py           49      3     12      1    93%   30, 87-94
src/jacobian/domains/graph_optimization/independence.py               14      2      0      0    86%   28-29
src/jacobian/domains/graph_optimization/invariants.py                164     24     34      7    84%   84-85, 163, 173, 245-246, 292-293, 318, 339-340, 345-346, 362-370, 381-399, 430
src/jacobian/domains/graph_optimization/minimum_spanning_tree.py      53      3      8      1    93%   128, 164-171
src/jacobian/domains/graph_optimization/operations.py                 69      3     26      3    94%   99, 138, 208
src/jacobian/domains/matrix_lattice/conversions.py                    39      4     10      4    84%   29, 71, 89, 97
src/jacobian/domains/matrix_lattice/hnf.py                            45      8     10      5    76%   42, 71, 98, 104, 114, 120, 130-131
src/jacobian/domains/matrix_lattice/hnf_protocol.py                   32      2      4      1    92%   38, 60
src/jacobian/domains/matrix_lattice/hnf_worker.py                     33     33      6      0     0%   3-94
src/jacobian/domains/matrix_lattice/lattice.py                        42      7     12      5    78%   66, 97, 109, 115, 123-124, 130
src/jacobian/domains/matrix_lattice/lll_protocol.py                   41      3      6      2    89%   45, 67, 69
src/jacobian/domains/matrix_lattice/lll_worker.py                     59     59     12      0     0%   3-123
src/jacobian/domains/matrix_lattice/operations.py                     60      1      6      1    97%   152
src/jacobian/domains/number_theory/discrete_logarithm.py              36      5      8      3    82%   78, 90, 96, 105-106
src/jacobian/domains/number_theory/discrete_logarithm_worker.py       23     23      4      0     0%   3-61
src/jacobian/domains/number_theory/divisibility_operations.py         49      2      4      2    92%   49, 78
src/jacobian/domains/number_theory/factorization.py                   73      6     14      5    87%   76, 92, 100->102, 103, 111, 188-189
src/jacobian/domains/number_theory/factorization_kernels.py           33     33      8      0     0%   3-83
src/jacobian/domains/number_theory/factorization_worker.py            30     30     14      0     0%   3-91
src/jacobian/domains/number_theory/modular_operations.py              52      1     12      1    97%   46
src/jacobian/domains/optimization/operations.py                       36      8      4      2    75%   59, 64, 74-92
src/jacobian/domains/optimization/worker.py                           57     57      8      0     0%   3-165
src/jacobian/domains/polynomial/_support.py                           30      6      2      0    75%   40-42, 143-148
src/jacobian/domains/polynomial/checkers.py                           76     12     34     12    78%   22, 31, 68, 72, 75, 113, 117, 125, 135, 143, 151, 153
src/jacobian/domains/polynomial/conversions.py                        26      1      8      1    94%   37
src/jacobian/domains/polynomial/elementary_operations.py              95      1      8      1    98%   201
src/jacobian/domains/polynomial/groebner.py                           40      4     10      3    86%   79, 91, 97, 112
src/jacobian/domains/polynomial/groebner_protocol.py                  37      6     10      2    74%   44-49
src/jacobian/domains/polynomial/groebner_worker.py                    20     20      2      0     0%   3-56
src/jacobian/domains/polynomial/jacobian_syzygy.py                   101      4     24      3    94%   79-80, 157, 224->236, 230
src/jacobian/domains/polynomial/operations.py                         60      9      8      2    78%   53, 63, 190-213
src/jacobian/domains/polynomial_nullstellensatz/core.py              128      9     20      4    90%   100-102, 137-138, 222-223, 238, 252
src/jacobian/domains/polynomial_nullstellensatz/singular.py          200     43     72     14    73%   122, 147, 151, 159, 162, 170, 176, 186, 194, 246-265, 287, 292, 305-319, 398, 403, 405-411, 449, 464, 479-492
src/jacobian/domains/posets/operations.py                            127      2     28      2    97%   65-66, 162->157
src/jacobian/domains/probability/gaussian_inputs.py                   50      4     14      4    88%   39, 43, 68, 85
src/jacobian/domains/probability/operations.py                       162      1     48      1    99%   70, 328->325
src/jacobian/domains/projective_geometry/arrangements.py              47      5      6      1    89%   40-41, 112, 153-154
src/jacobian/domains/rational_linear/operations.py                    67     23     22     10    63%   52, 75, 94, 99, 101, 125, 131, 133, 135-148, 166, 172, 174, 179-192
src/jacobian/domains/rational_linear/protocol.py                      56      4      4      1    92%   95, 122-123, 128
src/jacobian/domains/rational_linear/worker.py                        57     57     16      0     0%   3-145
src/jacobian/domains/sequences/operations.py                         124      3     20      3    96%   85, 201, 209
src/jacobian/domains/topology/operations.py                          159      8     52      8    92%   113, 168, 180, 217, 220, 294, 417, 456
src/jacobian/eval/graph_oracle.py                                    111    111     76      0     0%   3-192
src/jacobian/eval/telemetry.py                                       355     21    134     10    93%   74-75, 76->69, 115->113, 117->113, 119-120, 159-161, 188, 208-209, 256-257, 487-497, 521, 646, 680, 753-754, 756
src/jacobian/exact_domain_checkers.py                                267     18     78     14    90%   107, 116, 181, 186, 331, 377, 390, 397-403, 417, 482, 579, 802, 857, 863, 869-870
src/jacobian/finite_coverage.py                                      135      5     20      3    95%   205, 261-262, 447, 463
src/jacobian/graphs/artifacts.py                                      53      1      2      1    96%   114
src/jacobian/graphs/atlas.py                                          20      1      4      1    92%   49
src/jacobian/graphs/atlas_search.py                                   88      4     26      4    93%   211, 239, 255, 260
src/jacobian/graphs/composition.py                                   138     21     26      2    80%   235, 339-340, 431, 438-447, 455-467, 477
src/jacobian/graphs/construction.py                                   44      1      2      1    96%   129
src/jacobian/graphs/degree_sequence.py                                83      5     16      3    92%   99-100, 243, 251, 267
src/jacobian/graphs/invariants.py                                    163     11     64      7    91%   110-111, 213-215, 228, 259, 298, 323, 332, 336
src/jacobian/graphs/isomorphism.py                                   134      8     26      5    92%   163, 203, 378-379, 414-415, 454, 474->470, 482
src/jacobian/graphs/neighborhood_independence.py                      66      4      6      2    92%   96-97, 109, 120
src/jacobian/implementation.py                                       187     68     80     11    59%   29, 32, 35-37, 52-65, 97-98, 117, 123, 126, 129-138, 145, 154, 158, 171, 208-234, 240-245, 254-255, 266, 274-277
src/jacobian/lean_frontend/_state_validation.py                       26     11      4      0    50%   50-90
src/jacobian/lean_frontend/artifacts.py                               30      8      0      0    73%   45, 71, 95-111, 118
src/jacobian/lean_frontend/declaration_operations.py                  27      4      0      0    85%   55-56, 71-72
src/jacobian/lean_frontend/declaration_protocol.py                    98      3     14      3    95%   38, 44, 50
src/jacobian/lean_frontend/declarations.py                           716    245    224     55    62%   141, 145, 152-153, 207->209, 218, 255-256, 258, 266, 268, 270, 272-278, 289, 298-299, 301, 317-318, 323, 356-359, 365, 382-384, 412-437, 445-499, 502-509, 512-530, 533-537, 540-578, 581-585, 619, 631, 653, 656, 661, 675-676, 694-696, 698-699, 724-731, 734, 759-760, 805, 812, 816->818, 833-863, 880, 898, 916-926, 942-957, 968, 983, 997, 1017-1022, 1026-1032, 1055-1057, 1081, 1094-1095, 1112, 1123-1124, 1143, 1155-1156, 1166-1169, 1186-1187, 1192, 1212, 1215-1216, 1218, 1233-1238, 1245, 1259-1264, 1271, 1275-1276, 1278, 1284, 1298, 1305, 1312, 1319, 1354, 1355->1379, 1360, 1367, 1368->1355, 1376-1378, 1413, 1429, 1448, 1458, 1464, 1467-1468, 1476, 1482
src/jacobian/lean_frontend/diagnostics.py                            127     36     52     10    69%   142-154, 188, 218-232, 266, 301, 339, 342, 362, 376, 400-436, 446
src/jacobian/lean_frontend/exploration.py                            179     90     36      7    47%   85-86, 154-217, 240, 242, 245, 267->269, 277, 298, 302-303, 314, 331, 349, 355, 404-437, 446-479, 496-538, 546-548, 552
src/jacobian/lean_frontend/metavariable_fields.py                     65     42      8      0    32%   58-60, 84, 87-255, 271
src/jacobian/lean_frontend/premise_retrieval.py                       52     13      4      0    70%   129-201
src/jacobian/lean_frontend/proof_axioms.py                           222     48     64     14    75%   169-170, 182, 192-195, 210, 278, 280, 284, 298-299, 301-302, 320, 326-327, 331-342, 361, 417-418, 447, 456-457, 488, 492-500, 507-514, 538, 548-550
src/jacobian/lean_frontend/proof_edit.py                              58     29      2      0    48%   53-75, 94-97, 126, 129-246, 261
src/jacobian/lean_frontend/proof_state.py                            127     58     28      6    48%   132, 138-139, 161, 163-197, 220, 239, 247, 273, 277, 308-310, 337-470
src/jacobian/lean_frontend/proof_state_inspect.py                     54     11      0      0    80%   89-133, 152
src/jacobian/lean_frontend/repl.py                                   271    207     96      5    19%   49-54, 67-72, 86-94, 105-132, 143-178, 183-184, 187-224, 227-233, 239, 245, 251, 254-270, 273-277, 284, 293-294, 307-314, 326-333, 349-365, 383-390, 399-427, 430-457, 477-478, 484-492, 496-504, 508-516, 521, 530
src/jacobian/lean_frontend/service.py                                123     93     28      1    21%   48-59, 75-179, 191-202, 207-224, 227-234, 242-274
src/jacobian/lean_frontend/statement.py                              268    170     46      1    32%   94-95, 150-178, 193-196, 213-248, 270-274, 289-300, 315-351, 359-368, 374-391, 397-407, 411-426, 432-440, 444-452, 465-474, 478-481, 489-490, 499-504, 508-511, 552, 653, 656-745, 796, 799-873, 890
src/jacobian/lean_frontend/term_apply.py                              36     16      2      0    53%   47-48, 102, 105-166, 185
src/jacobian/math/combinatorics/recurrence_tables.py                  68      6     22      6    87%   45, 53, 55, 93, 98, 100
src/jacobian/math/finite_abelian_groups.py                           142     22     60     22    78%   44, 46, 48, 54, 61, 71, 136, 142, 144, 150, 152, 159, 164, 172, 179, 201, 203, 207, 217, 229, 233, 242
src/jacobian/math/finite_fields/_flint.py                             41      7     12      6    75%   23, 26, 37, 50, 53, 77, 84
src/jacobian/math/finite_fields/_sympy.py                             30      1      4      1    94%   89
src/jacobian/math/finite_fields/operations.py                         94      9     30      5    87%   58, 60, 84, 219, 244, 276-280
src/jacobian/math/finite_fields/values.py                            366     56    128     43    80%   38, 48, 55, 57, 81, 134, 139, 170, 172, 176, 201, 203, 214, 238, 240, 248, 285, 305, 310, 316, 346, 348, 353, 355, 360, 380, 387, 414, 419, 438, 441, 450, 452, 454, 456, 461, 479, 488, 507, 509, 511, 516, 518, 525, 554, 575, 578, 580, 586, 591, 621, 632, 655, 666, 701, 720
src/jacobian/math/graphs/_independence_z3.py                          41      5     12      4    83%   31, 49, 101-108
src/jacobian/math/graphs/_networkx.py                                 52      5     22      5    86%   18, 20, 47, 51, 57
src/jacobian/math/graphs/graph6.py                                    62      9     22      9    79%   22, 38, 41, 43, 49, 56, 59, 63, 66
src/jacobian/math/graphs/independence.py                              54      8     18      7    76%   51, 77, 79, 81, 83, 92-94
src/jacobian/math/graphs/values.py                                    34      6     14      6    75%   32, 34, 39, 41, 56, 58
src/jacobian/math/matrices/_sympy.py                                  57      5     20      4    88%   20, 32, 54, 61, 94
src/jacobian/math/matrices/values.py                                  41      6     18      6    80%   38, 40, 45, 47, 52, 65
src/jacobian/math/modular_polynomials.py                              79      8     22      8    84%   36, 42, 57, 62, 93, 97, 103, 108
src/jacobian/math/polynomials/_sympy.py                               44      1      6      1    96%   46
src/jacobian/math/polynomials/operations.py                           44      1      4      1    96%   29
src/jacobian/math/prime_field_linear_algebra.py                       99      3     44      3    96%   31, 33, 118
src/jacobian/math/real_quadratic.py                                   84      9     20      9    83%   34, 36, 38, 42, 63, 74, 107, 127, 137
src/jacobian/operation_bindings.py                                    65      5      8      3    89%   47, 65, 67, 226-227
src/jacobian/operation_installation.py                               134      4     18      2    96%   163, 266, 321-322
src/jacobian/operation_ports.py                                       50      5     24      5    86%   23, 53, 57, 79, 99
src/jacobian/operation_projection.py                                  41      2     12      2    92%   28, 76
src/jacobian/operation_publication.py                                 51      4     10      2    90%   69, 82-83, 104
src/jacobian/operations.py                                            88      4     10      4    92%   27, 81, 85, 152
src/jacobian/persistence/database.py                                 217     24     58     12    86%   91-94, 109-111, 135, 168, 226, 262, 282, 298, 312, 323->327, 329, 341-345, 347->353, 350-352, 361-362, 366
src/jacobian/persistence/decoding.py                                  35      2      2      0    95%   80-81
src/jacobian/persistence/migrations.py                                65      3     22      3    93%   358, 472, 488
src/jacobian/persistence/state_health.py                              74     13     20      7    79%   35, 66, 101, 112-113, 123, 136, 171, 184, 219, 237, 254-255
src/jacobian/polynomial_expression_capabilities.py                    84      8     20      4    87%   123, 178-179, 199, 259-262, 267
src/jacobian/polynomial_expressions.py                                81     12      8      4    82%   91-92, 99, 112-113, 163-164, 171, 182-183, 190, 194
src/jacobian/polynomial_interval_capabilities.py                     155      4     14      3    96%   319-325, 431, 547->549, 595
src/jacobian/polynomial_positivity_capabilities.py                   174     11     20      3    93%   335-341, 456, 472-478, 595->597, 637-641, 705
src/jacobian/polynomial_system_capabilities.py                        99      2     12      2    96%   157, 208
src/jacobian/polynomial_system_search.py                              45      2      4      0    96%   88-89
src/jacobian/polynomials/_support.py                                 243     26     56      7    89%   117, 243-244, 259, 271-272, 283, 302-303, 318, 330-331, 351-371, 381, 551->554, 557-558, 560, 730-736
src/jacobian/polynomials/collision.py                                185      8     40      8    93%   65, 67, 84, 86, 483, 573, 620, 654
src/jacobian/polynomials/evaluation.py                               106      4      6      3    94%   226-231, 322, 384, 476->478
src/jacobian/polynomials/identity.py                                  54      2      6      3    92%   120, 240->237, 249
src/jacobian/polynomials/inverse.py                                  165     12     38      9    90%   198-199, 273, 301, 315, 330, 376-377, 386-387, 412, 683
src/jacobian/polynomials/rational_identity.py                         42      1      2      1    95%   136
src/jacobian/polytope.py                                             188     20     38     13    85%   67->69, 85, 90-96, 168, 171, 199, 211-216, 247, 253-254, 272, 274, 280, 282, 377, 421, 434->439, 678
src/jacobian/polytope_capabilities.py                                 29      1      4      1    94%   92
src/jacobian/portfolio/assembler.py                                   30      3      2      1    88%   32, 58-59
src/jacobian/portfolio/checker_installation.py                        64     25     14      1    54%   114-160, 167-174
src/jacobian/portfolio/core_installation.py                           79      3     22      1    94%   96-98
src/jacobian/portfolio/foundation_installation.py                     50      6     14      1    86%   122-131
src/jacobian/portfolio/model.py                                       29      1     14      1    95%   66
src/jacobian/portfolio/resource_installation.py                       32      2     14      1    89%   76-77
src/jacobian/portfolio/result.py                                      45      4      8      4    85%   35, 51, 53, 71
src/jacobian/process_policy.py                                        93      2     32      3    96%   70->76, 130, 148
src/jacobian/provider_measurements.py                                115     50     30      5    54%   173, 188-189, 205-227, 236, 240, 261-274, 291-294, 307-356, 371-372
src/jacobian/provider_runtime.py                                     225     34     70     14    84%   98, 123-124, 152, 158-164, 212, 215, 270-271, 309-310, 359-360, 394-395, 404, 416, 425, 431-432, 437, 447, 457-458, 474, 483-484, 506, 549, 567, 585
src/jacobian/providers/external_solver_runtime.py                     82      3     24      3    94%   71, 214, 344
src/jacobian/providers/flint_runtime.py                              122     31     22      6    74%   127-128, 171, 211, 228-229, 271-272, 314-315, 357-364, 419-420, 463-464, 504-505, 546-547, 590-591, 663, 675-676, 683, 722, 734-735, 744
src/jacobian/providers/lean_runtime.py                               139     21     40     15    80%   55, 60, 68, 71, 74, 96, 116, 121-123, 157, 160-161, 178-180, 188, 190-191, 223, 229, 234->exit, 249->253
src/jacobian/providers/loader.py                                      99      2     24      3    96%   139, 148, 196->exit
src/jacobian/providers/metadata.py                                    37      1      6      1    95%   39
src/jacobian/registry.py                                             197     17     56     12    89%   107-113, 202, 300, 305, 343, 354-355, 375, 457, 467, 482, 502, 566, 571, 627
src/jacobian/runtime/bootstrap.py                                     35      6      0      0    83%   58-63
src/jacobian/runtime/model.py                                         38     10     12      4    68%   26, 36, 42, 51-52, 54-61, 66
src/jacobian/runtime/portfolio.py                                     29      1     10      1    95%   41
src/jacobian/sat_smt/cadical.py                                      302     36    104     25    85%   92, 96, 102, 170, 191, 201, 279, 284, 331-332, 387, 391, 514, 518, 522, 565-566, 609, 629, 682, 725, 732-733, 735, 745-746, 754, 759, 761, 771, 773, 778, 790, 797, 799, 816
src/jacobian/sat_smt/cvc5.py                                         153     18     44     14    84%   83, 132-133, 145-146, 173, 284, 299, 304, 313, 370, 390, 397, 409, 451, 458, 460, 464
src/jacobian/sat_smt/cvc5_worker.py                                  124    102     32      1    15%   43-44, 48-54, 58-62, 72-89, 98-108, 118-140, 150-188, 197-227, 231
src/jacobian/sat_smt/sat.py                                          107     15     14      5    83%   104-105, 119-120, 182, 189-190, 199, 235-236, 243, 250-251, 254, 258
src/jacobian/sat_smt/sat_capabilities.py                             186     11     44      9    91%   176, 360, 431, 471, 478, 531, 579-580, 602, 655, 662
src/jacobian/sat_smt/sat_lrat.py                                     130     10     30      7    89%   127, 169-170, 195, 277, 377, 389, 392-393, 395, 400->407
src/jacobian/sat_smt/smt.py                                           77      8      8      2    88%   85-86, 100-101, 169-170, 173, 177
src/jacobian/sat_smt/smt_capabilities.py                              93      4     22      4    93%   129, 196, 249, 256
src/jacobian/schema_registry.py                                      187      4     54      5    96%   276->278, 287, 291->293, 301-302, 357
src/jacobian/storage/blobs.py                                        164     18     58     15    84%   52, 60, 63->62, 83, 87, 155, 157, 179, 191, 221, 247-248, 278-279, 293-294, 297->299, 323, 340, 342
src/jacobian/storage/errors.py                                        19      2      0      0    89%   16-17
src/jacobian/storage/identity.py                                      48      2      6      2    93%   45, 51
src/jacobian/storage/metadata.py                                     123     10     38      8    89%   133, 170, 173, 238, 242, 247, 390-391, 396, 429
src/jacobian/storage/repository.py                                   138     17     28      6    85%   60, 97-99, 218, 246-247, 270-271, 284, 292-293, 295-297, 305, 313
src/jacobian/storage/transactions.py                                 180     28     38      6    84%   68-69, 123-124, 139-141, 154-155, 164-166, 175, 177-183, 185-191, 205, 209, 218-220, 250->exit
src/jacobian/sympy_polynomial_normalization.py                       115      8     34      9    89%   84, 104, 130, 397, 415, 421, 445, 446->452, 463
src/jacobian/sympy_polynomial_protocol.py                             27      2      2      1    90%   39, 52
src/jacobian/sympy_polynomial_worker.py                               48     48     16      0     0%   3-122
src/jacobian/universal_algebra_capabilities.py                       198     10     40      3    95%   192->196, 509-510, 581-582, 690, 705-715
src/jacobian/value_references.py                                      64      3      8      2    93%   55, 101-102, 112->110
src/jacobian/verification/_helpers.py                                 47      2     14      3    92%   81, 84->exit, 114
src/jacobian/verification/checker_protocol.py                         36     10     12      2    62%   39-44, 71-74
src/jacobian/verification/executor.py                                 60      9     16      3    84%   134-137, 151, 153-157, 162-166
src/jacobian/verification/plan_builder.py                            133      6     38      6    93%   136, 208, 251, 261, 299, 450
src/jacobian/verification/service.py                                 109      1     16      1    98%   523
src/jacobian/verification_capabilities.py                             82      2      8      0    98%   181-182
src/jacobian_checkers/additive_combinatorics.py                      156     50     66     19    63%   59, 62, 74, 77, 100, 108, 138, 141, 162, 175, 202, 208, 211, 215, 218, 239, 250-263, 269, 274, 294-295, 299-308, 312-334, 369-370
src/jacobian_checkers/bound_artifacts.py                              77      7     38      7    88%   58, 69, 109, 114, 140, 163, 175
src/jacobian_checkers/certified_snf.py                               129     37     54     17    65%   39, 50, 62, 72, 78, 92, 94, 103, 116, 135, 151, 153-154, 163, 184, 191, 203, 211, 236, 248, 260-299
src/jacobian_checkers/erdos_straus.py                                 84     15     44     13    78%   29, 47, 58, 69, 71, 73, 85, 88, 90, 104, 109, 114, 121, 141-142
src/jacobian_checkers/exact_domain_operations.py                     498     86    234     86    77%   81, 88, 92, 95, 106, 112, 129, 132, 135, 138, 142, 151, 154, 164, 172, 189, 191, 202, 212, 214, 225, 236, 247, 250, 256, 289, 297, 309, 316, 340, 364, 392, 405, 421, 427, 441, 446, 448, 458, 462, 475, 478, 482, 509, 542, 548, 554, 563, 567, 575, 584, 600, 660, 688, 690, 696, 728, 730, 735, 738, 741, 743, 760, 762, 771, 773, 793, 795, 800, 804, 846, 851, 856, 860, 890, 906, 944, 986, 988, 998, 1028, 1030, 1037, 1058, 1095, 1127
src/jacobian_checkers/exact_geometry.py                              389    166    204     38    53%   48-69, 76-104, 114-143, 150-166, 170-175, 191-239, 254, 258, 268-271, 301, 307, 311, 314, 320, 326, 332, 342, 345, 348, 359, 370, 419-430, 444, 471-493, 506, 532, 576, 579, 603, 624, 629, 661, 669, 672, 689, 694, 712, 718, 739, 741, 743, 746, 756, 762, 779, 784-796, 806-812, 822-835, 841-844, 851, 877-884, 892-900, 908, 921
src/jacobian_checkers/exact_probability_operations.py                378     59    192     57    80%   66, 69, 75, 79, 82, 88, 113, 116, 122, 126, 128, 130, 136, 148, 152, 157, 177-178, 189, 192, 201, 211, 236, 239, 242, 251, 257, 275, 279, 285, 293, 304, 327, 353, 358, 377, 387, 392, 402, 405, 409, 478, 508, 531, 546, 548, 559, 567, 574, 577, 605, 631, 640, 644, 646, 649, 705, 729, 732
src/jacobian_checkers/finite_abelian_groups.py                        79     79     32      0     0%   3-192
src/jacobian_checkers/finite_coverage.py                             153    153     70      0     0%   3-440
src/jacobian_checkers/finite_field_polynomial.py                     120     19     50     20    77%   35, 48, 53, 67, 79, 87, 109, 112, 119, 129, 140, 188, 190, 196, 207, 237, 253->264, 265, 281, 288
src/jacobian_checkers/finite_field_rank.py                           132     24     60     24    75%   29, 40, 51, 65, 70, 81, 93, 101, 109, 117, 123, 126, 146, 154, 164, 222, 230, 279, 324, 331, 348, 354, 356, 371
src/jacobian_checkers/finite_posets.py                               333     54    146     49    78%   56, 67, 98, 133, 137, 141, 148, 151, 161, 165, 168, 181, 184, 186, 197, 199, 264, 269, 274, 276, 280, 301, 305, 314, 320, 342, 344, 377, 379, 381, 411, 414, 417, 421, 451, 455, 458, 469, 498, 508, 554, 590, 644, 649, 651, 654-656, 658, 662, 671-679
src/jacobian_checkers/graph6.py                                       42     42     14      0     0%   3-88
src/jacobian_checkers/graph_degree_sequence.py                       152     28     74     28    75%   41, 51, 62, 74, 77, 90, 101, 113, 134, 137, 150, 158, 171, 183, 197, 209, 211, 216, 232, 247, 263, 281, 286, 294, 305, 310, 314, 318
src/jacobian_checkers/graph_exact_operations.py                      512     95    256     49    78%   85, 111, 114, 124, 138, 147, 157, 171, 178, 192, 196, 233, 271, 279, 287, 292, 298, 335, 420, 424, 440, 569, 571-580, 592, 594-603, 624, 638, 642, 649, 668, 681, 685, 689, 693, 709, 714, 799, 927, 950, 952, 980, 1037-1038, 1040, 1043->1050, 1067-1127, 1131-1152, 1161, 1178, 1193, 1228-1231, 1249, 1277
src/jacobian_checkers/graph_invariants.py                            130     23     62     23    76%   33, 44, 56, 59, 68, 77, 80, 90, 97, 124, 135, 144, 151, 159, 167, 207, 221, 239, 245, 268, 281, 287, 290
src/jacobian_checkers/graph_isomorphism.py                            52      9     20      7    78%   27, 38, 49, 52, 61, 73, 85, 172-173
src/jacobian_checkers/graph_paths.py                                 354    187    194     45    43%   24-82, 93, 96, 100, 103, 109, 112, 130, 133, 143-144, 152, 157, 175, 186, 197-209, 217, 222, 248-266, 274-317, 321, 335-337, 347-368, 375-393, 418, 421, 427, 429, 432, 434, 438, 447, 472->471, 496, 509, 511, 513, 521, 523, 530-566, 577-590, 598, 600, 602, 608, 611, 614, 627, 637, 640, 648-654, 662, 671, 685, 695
src/jacobian_checkers/graph_shrinking.py                              64     64     36      0     0%   3-102
src/jacobian_checkers/integer_lcm.py                                  40     40     10      0     0%   3-81
src/jacobian_checkers/jacobian_syzygy.py                             263    219    116      3    12%   20, 31, 43, 47, 54, 68-111, 118, 142-149, 156-204, 208, 228-242, 248-283, 287-307, 311-329, 337-347, 353, 395-413, 419-438, 446-460, 475-492, 500-586, 592-608, 612, 621
src/jacobian_checkers/lean4.py                                       358     91    136     40    69%   95, 106, 108, 116, 118, 161, 164, 178, 210, 234-235, 246, 259, 269->271, 298-299, 318, 348, 353, 355-356, 358, 362, 386, 389, 414, 417, 421-477, 492->494, 511-512, 519, 524, 529, 533->544, 541, 551-561, 576, 581-582, 609, 651, 710-713, 721-723, 731, 750, 755, 770, 772, 779, 787, 809, 812, 830, 836-837
src/jacobian_checkers/linear.py                                       83     20     40     20    67%   34, 45, 48, 63, 69, 80, 87, 89, 101, 120, 122, 124, 127, 139, 167, 169, 171, 175, 184, 192
src/jacobian_checkers/matrices.py                                    308    114    166     50    58%   39, 41, 43, 45, 55, 70, 72, 83, 92, 99, 103, 116-117, 124-132, 140-195, 209, 211, 225, 235, 271, 278, 290, 301, 309, 312, 333-334, 345, 347, 349, 360, 363, 365, 375, 384, 391, 399, 405, 409, 415, 423, 425, 437-438, 447-495, 505-507, 516, 521, 526, 535, 538, 544, 558, 562, 569, 583, 586, 595, 597
src/jacobian_checkers/matrix_normal_forms.py                         101     13     52     12    84%   37, 47, 49, 60, 83, 85, 95, 97-98, 108, 151, 175, 184
src/jacobian_checkers/modular_polynomial_identity.py                  50     50     16      0     0%   3-126
src/jacobian_checkers/nullstellensatz.py                             194     32     96     32    78%   61, 72, 75, 81, 84, 89, 104, 107, 132, 140, 184, 188, 191, 194, 209, 214, 216, 222, 227, 233, 246, 269, 274, 291, 320, 327, 329, 343, 345, 363, 375, 420
src/jacobian_checkers/polynomial_expressions.py                      329     76    160     48    73%   121, 134, 152, 155, 161, 165, 181, 194, 206, 208-218, 227, 230, 247, 266-297, 308, 311, 330-331, 355, 366, 376, 378, 380, 382, 390, 399, 410, 412, 418, 431, 440, 445-448, 453, 456, 461, 473, 476, 501, 507, 510, 549, 573, 575, 588, 593, 621, 633, 641, 659, 671, 683, 707
src/jacobian_checkers/polynomial_intervals.py                        185     29     84     29    78%   42, 51, 64, 66, 81, 83, 86, 95, 106, 109, 119, 123, 126, 133, 175, 204, 219, 234, 244, 254, 269, 283, 288, 302, 324, 333, 339, 344, 352
src/jacobian_checkers/polynomial_maps.py                             363     58    164     50    80%   36, 45, 54, 62, 78, 99, 102, 111, 125, 128, 166, 189, 199, 212, 235, 248, 259, 261, 269, 274, 282, 294-295, 303, 331, 345, 399-400, 408, 424, 431, 440, 452, 542, 590, 601, 610, 617, 624, 632, 648, 662-663, 671, 682, 698, 710, 719, 735, 765-766, 785, 798, 842, 857, 859, 872, 874
src/jacobian_checkers/polynomial_positivity.py                       250     41    114     41    77%   43, 52, 55, 65, 67, 71, 82, 84, 87, 95, 106, 109, 117, 121, 124, 131, 150, 165->162, 168, 176, 179, 183->189, 190, 263, 278, 293, 303, 313, 328, 339, 341, 346, 369, 386, 426, 435, 444, 450, 455, 463, 468, 515-516
src/jacobian_checkers/polynomial_systems.py                           87     12     34     12    80%   30, 39, 50, 53, 58, 72, 75, 109, 132, 152, 160, 176
src/jacobian_checkers/polytope.py                                    176    176     96      0     0%   3-326
src/jacobian_checkers/projective_arrangements.py                      77     77     32      0     0%   3-212
src/jacobian_checkers/rational_determinants.py                       219     91    110     25    53%   59, 72, 89, 95, 102, 112, 114, 123, 166, 168-169, 200, 202, 213, 215, 220, 235, 257, 265, 278, 283, 295, 305, 312, 315, 328, 349-353, 362-382, 388-404, 412-433, 442-455, 459-477, 483-519
src/jacobian_checkers/rational_functions.py                           87      4     38      4    94%   35, 60, 63, 68
src/jacobian_checkers/rational_lp.py                                  72     72     26      0     0%   3-182
src/jacobian_checkers/real_quadratic.py                               65     65     26      0     0%   3-136
src/jacobian_checkers/recurrence_series.py                           229     69    106     32    63%   58, 60, 65, 71, 78, 82, 85, 97, 123-124, 134, 136-144, 164, 198, 204, 218, 221, 224, 248, 285, 326, 338, 342, 358, 377, 385, 388, 391, 403, 406, 410, 422-496, 528, 540, 544, 611
src/jacobian_checkers/reject.py                                        4      4      0      0     0%   3-9
src/jacobian_checkers/sat.py                                         300     46    148     42    80%   91, 104, 119, 131, 134, 143, 153, 159, 165, 169, 183, 189, 200, 207, 235, 249, 320, 334, 340-341, 346, 361, 381, 394, 406, 431, 446, 489, 491, 501-502, 535, 537, 542, 545, 630, 632, 643, 645, 650, 665, 674, 696, 701, 723, 748
src/jacobian_checkers/sat_lrat.py                                    189     38     82     26    76%   42-43, 75, 78, 82, 85, 87, 95-96, 105-108, 119->138, 122, 130, 132, 151, 153, 156, 161, 165, 167, 171, 180-181, 189, 192, 224, 226, 255, 269, 313, 322, 352, 359, 364, 366, 368
src/jacobian_checkers/simplicial_topology.py                         430     71    202     62    78%   76, 87, 93, 96, 128, 137, 140, 144, 146, 148, 153, 158, 184, 198, 206, 220, 226, 229-231, 303, 307, 318, 321, 324, 340, 348->350, 351, 363, 366, 368, 384, 399, 472, 508, 512, 515, 518, 529, 535, 538, 546, 552, 564, 621, 659, 691, 736, 742, 786, 827, 840, 860-890, 904, 907-908, 924, 951, 959, 984, 994, 1013, 1028, 1031, 1074
src/jacobian_checkers/smt.py                                         236     60    106     28    71%   80, 93, 106-117, 121-130, 137, 140, 153-155, 161-163, 165-167, 181, 191, 194, 213, 218, 232, 248-249, 256, 259, 268, 274, 344, 363, 366-367, 391, 411, 424, 435, 438, 500, 502, 507, 510
src/jacobian_checkers/universal_algebra.py                           147     22     62     22    79%   32, 46, 57, 64, 71, 80, 117, 132, 145, 150, 152, 163, 177, 182, 192, 202, 206, 214, 216, 307, 331, 341
--------------------------------------------------------------------------------------------------------------
TOTAL                                                              39158   7169  11746   2804    77%

179 files skipped due to complete coverage.

Total coverage: 77% (threshold: 50%)

@morluto
morluto merged commit 7a2074e into main Aug 13, 2026
29 checks passed
@morluto
morluto deleted the agent/port-finite-abelian-factorization-v2 branch August 13, 2026 19:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant