Skip to content

Commit 332f0a5

Browse files
yuelgrace1810-opsGrace Lee Rui Yue
andauthored
Handle zero Jacobian partial derivatives (#924)
Co-authored-by: Grace Lee Rui Yue <graceleeruiyue@mac.lan>
1 parent 938cc5a commit 332f0a5

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

src/jacobian/domains/polynomial/jacobian_syzygy.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ def _coefficient_matrix(
127127
for basis_index, multiplier_exponents in enumerate(source_basis):
128128
column = component * len(source_basis) + basis_index
129129
for partial_exponents, coefficient in partial.terms():
130+
if coefficient == 0:
131+
continue
130132
target_exponents = cast(
131133
tuple[int, int, int],
132134
tuple(

tests/composition/runtime/test_frontier_capabilities.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,44 @@ def test_graded_jacobian_syzygy_finds_and_verifies_the_first_kernel(
289289
assert verified.output["status"] == "VERIFIED"
290290

291291

292+
def test_graded_jacobian_syzygy_handles_a_zero_partial_derivative(
293+
frontier_services: DomainTestServices,
294+
) -> None:
295+
input_payload = {
296+
"polynomial": _polynomial([(1, (2, 0, 1))]),
297+
"max_degree": 0,
298+
}
299+
computed = frontier_services.core.capabilities.invoke(
300+
CapabilityRequest(
301+
capability_id="polynomial.jacobian_syzygy.minimum_degree.compute",
302+
input=input_payload,
303+
)
304+
)
305+
306+
assert computed.execution.status is ExecutionStatus.COMPLETED
307+
result = computed.output["result"]
308+
assert result["first_syzygy_degree"] == 0
309+
assert [(item["rank"], item["nullity"]) for item in result["degree_maps"]] == [
310+
(2, 1)
311+
]
312+
assert result["partial_derivatives"][1]["polynomial"]["terms"] == []
313+
assert [item["num"] for item in result["kernel_witness"]["coefficient_vector"]] == [
314+
"0",
315+
"1",
316+
"0",
317+
]
318+
319+
verified = frontier_services.core.capabilities.invoke(
320+
CapabilityRequest(
321+
capability_id="polynomial.jacobian_syzygy.minimum_degree.verify",
322+
mode=CapabilityMode.VERIFY,
323+
input={"input": input_payload, "candidate": result},
324+
)
325+
)
326+
assert verified.execution.status is ExecutionStatus.COMPLETED
327+
assert verified.output["status"] == "VERIFIED"
328+
329+
292330
@pytest.mark.parametrize(
293331
"forgery",
294332
("map_digest", "rank_minor", "kernel_vector", "partial_derivative"),

0 commit comments

Comments
 (0)