Skip to content

Commit acabca5

Browse files
Merge pull request #899 from AayushSabharwal/as/hc
fix: several `HomotopyNonlinearFunction` fixes
2 parents 966351b + 88c4b56 commit acabca5

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

src/scimlfunctions.jl

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1786,7 +1786,7 @@ The fields of the `HomotopyNonlinearFunction` type directly match the names of t
17861786
$(FIELDS)
17871787
"""
17881788
struct HomotopyNonlinearFunction{iip, specialize, F, P, Q, D} <:
1789-
SciMLBase.AbstractSciMLFunction{iip}
1789+
SciMLBase.AbstractNonlinearFunction{iip}
17901790
"""
17911791
The polynomial function `f`. Stored as a `NonlinearFunction{iip, specialize}`. If not
17921792
provided to the constructor as a `NonlinearFunction`, it will be appropriately wrapped.
@@ -2467,6 +2467,7 @@ end
24672467

24682468
(f::ODEFunction)(args...) = f.f(args...)
24692469
(f::NonlinearFunction)(args...) = f.f(args...)
2470+
(f::HomotopyNonlinearFunction)(args...) = f.f(args...)
24702471
(f::IntervalNonlinearFunction)(args...) = f.f(args...)
24712472
(f::IntegralFunction)(args...) = f.f(args...)
24722473
(f::BatchIntegralFunction)(args...) = f.f(args...)
@@ -4013,9 +4014,10 @@ function HomotopyNonlinearFunction{iip, specialize}(f;
40134014
polynomialize = __has_polynomialize(f) ? f.polynomialize : DEFAULT_POLYNOMIALIZE,
40144015
unpolynomialize = __has_unpolynomialize(f) ? f.unpolynomialize :
40154016
DEFAULT_UNPOLYNOMIALIZE,
4016-
denominator = __has_denominator(f) ? f.denominator : Returns(())
4017+
denominator = __has_denominator(f) ? f.denominator : Returns(()),
4018+
kwargs...
40174019
) where {iip, specialize}
4018-
f = f isa NonlinearFunction ? f : NonlinearFunction{iip, specialize}(f)
4020+
f = f isa NonlinearFunction ? f : NonlinearFunction{iip, specialize}(f; kwargs...)
40194021

40204022
if specialize === NoSpecialize
40214023
HomotopyNonlinearFunction{iip, specialize, Any, Any, Any, Any}(
@@ -4853,6 +4855,22 @@ function SymbolicIndexingInterface.observed(fn::HomotopyNonlinearFunction, sym::
48534855
SymbolicIndexingInterface.observed(symbolic_container(fn), sym)
48544856
end
48554857

4858+
function Base.getproperty(x::HomotopyNonlinearFunction, sym::Symbol)
4859+
if hasfield(HomotopyNonlinearFunction, sym)
4860+
return getfield(x, sym)
4861+
elseif hasfield(NonlinearFunction, sym)
4862+
return getfield(getfield(x, :f), sym)
4863+
elseif (sym == :initializeprob || sym == :update_initializeprob! ||
4864+
sym == :initializeprobmap || sym == :initializeprobpmap)
4865+
f = getfield(x, :f)
4866+
if f.initialization_data === nothing
4867+
return nothing
4868+
else
4869+
return getproperty(f.initialization_data, sym)
4870+
end
4871+
end
4872+
end
4873+
48564874
function Base.getproperty(x::AbstractSciMLFunction, sym::Symbol)
48574875
if __has_initialization_data(x) &&
48584876
(sym == :initializeprob || sym == :update_initializeprob! ||

0 commit comments

Comments
 (0)