@@ -675,23 +675,63 @@ function remake(prob::NonlinearProblem;
675675 kwargs = missing ,
676676 interpret_symbolicmap = true ,
677677 use_defaults = false ,
678+ lazy_initialization = nothing ,
679+ build_initializeprob = true ,
678680 _kwargs... )
679- u0, p = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
680- if f === missing
681- f = prob. f
681+ newu0, newp = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
682+
683+ if build_initializeprob
684+ initialization_data = remake_initialization_data (
685+ prob. f. sys, prob. f, u0, nothing , p, newu0, newp)
686+ else
687+ initialization_data = nothing
682688 end
689+
690+ f = remake (prob. f; f, initialization_data)
691+
683692 if problem_type === missing
684693 problem_type = prob. problem_type
685694 end
686695
687- if kwargs === missing
688- NonlinearProblem {isinplace(prob)} (f = f, u0 = u0 , p = p ,
696+ prob = if kwargs === missing
697+ NonlinearProblem {isinplace(prob)} (f = f, u0 = newu0 , p = newp ,
689698 problem_type = problem_type; prob. kwargs... ,
690699 _kwargs... )
691700 else
692- NonlinearProblem {isinplace(prob)} (f = f, u0 = u0 , p = p ,
701+ NonlinearProblem {isinplace(prob)} (f = f, u0 = newu0 , p = newp ,
693702 problem_type = problem_type; kwargs... )
694703 end
704+
705+ if lazy_initialization === nothing
706+ lazy_initialization = ! is_trivial_initialization (initialization_data)
707+ end
708+ if ! lazy_initialization
709+ u0, p, _ = get_initial_values (
710+ prob, prob, prob. f, OverrideInit (), Val (isinplace (prob)))
711+ if u0 != = nothing && eltype (u0) == Any && isempty (u0)
712+ u0 = nothing
713+ end
714+ @reset prob. u0 = u0
715+ @reset prob. p = p
716+ end
717+
718+ return prob
719+ end
720+
721+ function remake (func:: NonlinearFunction ;
722+ f = missing ,
723+ kwargs... )
724+ props = getproperties (func)
725+ props = @delete props. f
726+
727+ if f === missing
728+ f = func. f
729+ end
730+ if f isa AbstractSciMLFunction
731+ f = f. f
732+ end
733+
734+ return NonlinearFunction {isinplace(func)} (f; props... , kwargs... )
695735end
696736
697737"""
@@ -701,19 +741,42 @@ end
701741Remake the given `NonlinearLeastSquaresProblem`.
702742"""
703743function remake (prob:: NonlinearLeastSquaresProblem ; f = missing , u0 = missing , p = missing ,
704- interpret_symbolicmap = true , use_defaults = false , kwargs = missing , _kwargs... )
705- u0, p = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
744+ interpret_symbolicmap = true , use_defaults = false , kwargs = missing ,
745+ lazy_initialization = nothing , build_initializeprob = true , _kwargs... )
746+ newu0, newp = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
706747
707- if f === missing
708- f = prob. f
748+ if build_initializeprob
749+ initialization_data = remake_initialization_data (
750+ prob. f. sys, prob. f, u0, nothing , p, newu0, newp)
751+ else
752+ initialization_data = nothing
709753 end
710754
711- if kwargs === missing
712- return NonlinearLeastSquaresProblem {isinplace(prob)} (; f, u0, p, prob. kwargs... ,
755+ f = remake (prob. f; f, initialization_data)
756+
757+ prob = if kwargs === missing
758+ return NonlinearLeastSquaresProblem {isinplace(prob)} (;
759+ f, u0 = newu0, p = newp, prob. kwargs... ,
713760 _kwargs... )
714761 else
715- return NonlinearLeastSquaresProblem {isinplace(prob)} (; f, u0, p, kwargs... )
762+ return NonlinearLeastSquaresProblem {isinplace(prob)} (;
763+ f, u0 = newu0, p = newp, kwargs... )
764+ end
765+
766+ if lazy_initialization === nothing
767+ lazy_initialization = ! is_trivial_initialization (initialization_data)
768+ end
769+ if ! lazy_initialization
770+ u0, p, _ = get_initial_values (
771+ prob, prob, prob. f, OverrideInit (), Val (isinplace (prob)))
772+ if u0 != = nothing && eltype (u0) == Any && isempty (u0)
773+ u0 = nothing
774+ end
775+ @reset prob. u0 = u0
776+ @reset prob. p = p
716777 end
778+
779+ return prob
717780end
718781
719782"""
0 commit comments