From 23f6dfec8e8f4be4fe3fcb30f6ca139ee25902b5 Mon Sep 17 00:00:00 2001 From: jClugstor Date: Tue, 2 Sep 2025 12:47:41 -0400 Subject: [PATCH 1/3] add copy methods for Jacobian Operators --- .../src/SciMLJacobianOperators.jl | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl index 8a697372c..61957e664 100644 --- a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl +++ b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl @@ -404,6 +404,35 @@ function get_dense_ad(ad::AutoSparse) return dense_ad end +function Base.copy(J::JacobianOperator) + return JacobianOperator( + J.mode, + J.jvp_op, + J.vjp_op, + copy(J.size), + copy(J.input_cache), + copy(J.output_cache) + ) +end + +function Base.copy(J::StatefulJacobianOperator) + return StatefulJacobianOperator( + copy(J.jac_op), + copy(u), + copy(p) + ) +end + +function Base.copy(J::StatefulJacobianNormalFormOperator) + return StatefulJacobianNormalFormOperator( + copy(J.vjp_operator), + copy(J.jvp_operator), + copy(J.cache) + ) + +end + + export JacobianOperator, VecJacOperator, JacVecOperator export StatefulJacobianOperator export StatefulJacobianNormalFormOperator From c084d5a80175a1f7c1e1216ce85bfc22192dcff3 Mon Sep 17 00:00:00 2001 From: jClugstor Date: Tue, 2 Sep 2025 13:07:14 -0400 Subject: [PATCH 2/3] account for possible nothings --- .../src/SciMLJacobianOperators.jl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl index 61957e664..9a8b8dc30 100644 --- a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl +++ b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl @@ -410,24 +410,24 @@ function Base.copy(J::JacobianOperator) J.jvp_op, J.vjp_op, copy(J.size), - copy(J.input_cache), - copy(J.output_cache) + isnothing(J.input_cache) ? nothing : copy(J.input_cache), + isnothing(J.output_cache) ? nohting : copy(J.output_cache) ) end function Base.copy(J::StatefulJacobianOperator) return StatefulJacobianOperator( copy(J.jac_op), - copy(u), - copy(p) + isnothing(J.u) ? nothing : copy(J.u), + isnothing(J.p) ? nothing : copy(J.p) ) end function Base.copy(J::StatefulJacobianNormalFormOperator) return StatefulJacobianNormalFormOperator( - copy(J.vjp_operator), - copy(J.jvp_operator), - copy(J.cache) + isnothing(J.vjp_operator) ? nothing : copy(J.vjp_operator), + isnothing(J.jvp_operator) ? nothing : copy(J.jvp_operator), + isnothing(J.cache) ? nothing : copy(J.cache) ) end From fd6d93e5cbbd55dc5a3a60a6936003c6482518f8 Mon Sep 17 00:00:00 2001 From: Christopher Rackauckas Date: Tue, 2 Sep 2025 13:10:18 -0400 Subject: [PATCH 3/3] Update lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl --- .../src/SciMLJacobianOperators.jl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl index 9a8b8dc30..833ce59e8 100644 --- a/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl +++ b/lib/SciMLJacobianOperators/src/SciMLJacobianOperators.jl @@ -410,24 +410,24 @@ function Base.copy(J::JacobianOperator) J.jvp_op, J.vjp_op, copy(J.size), - isnothing(J.input_cache) ? nothing : copy(J.input_cache), - isnothing(J.output_cache) ? nohting : copy(J.output_cache) + J.input_cache === nothing ? nothing : copy(J.input_cache), + J.output_cache === nothing ? nohting : copy(J.output_cache) ) end function Base.copy(J::StatefulJacobianOperator) return StatefulJacobianOperator( copy(J.jac_op), - isnothing(J.u) ? nothing : copy(J.u), - isnothing(J.p) ? nothing : copy(J.p) + J.u === nothing ? nothing : copy(J.u), + J.p === nothing ? nothing : copy(J.p) ) end function Base.copy(J::StatefulJacobianNormalFormOperator) return StatefulJacobianNormalFormOperator( - isnothing(J.vjp_operator) ? nothing : copy(J.vjp_operator), - isnothing(J.jvp_operator) ? nothing : copy(J.jvp_operator), - isnothing(J.cache) ? nothing : copy(J.cache) + J.vjp_operator === nothing ? nothing : copy(J.vjp_operator), + J.jvp_operator === nothing ? nothing : copy(J.jvp_operator), + J.cache === nothing ? nothing : copy(J.cache) ) end