Skip to content

Commit 5c5cb3e

Browse files
Merge pull request #131 from SebastianM-C/smc/perf
Remove allocations in `setp`
2 parents 09b14ea + d212cb4 commit 5c5cb3e

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ SymbolicIndexingInterfacePrettyTablesExt = "PrettyTables"
1717

1818
[compat]
1919
Accessors = "0.1.36"
20+
AllocCheck = "0.2"
2021
Aqua = "0.8"
2122
ArrayInterface = "7.9"
2223
Pkg = "1"
@@ -30,6 +31,7 @@ Zygote = "0.6.67"
3031
julia = "1.10"
3132

3233
[extras]
34+
AllocCheck = "9b6a8646-10ed-4001-bbdc-1d2f46dfbb1a"
3335
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
3436
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
3537
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
@@ -38,4 +40,4 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3840
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
3941

4042
[targets]
41-
test = ["Aqua", "Pkg", "Test", "SafeTestsets", "StaticArrays", "Zygote"]
43+
test = ["AllocCheck", "Aqua", "Pkg", "Test", "SafeTestsets", "StaticArrays", "Zygote"]

src/parameter_indexing.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,9 @@ struct MultipleSetters{S} <: AbstractSetIndexer
713713
end
714714

715715
function (ms::MultipleSetters)(prob, val)
716-
map((s!, v) -> s!(prob, v), ms.setters, val)
716+
for (s!, v) in zip(ms.setters, val)
717+
s!(prob, v)
718+
end
717719
end
718720

719721
for (t1, t2) in [

test/parameter_indexing_test.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ using SymbolicIndexingInterface: IndexerOnlyTimeseries, IndexerNotTimeseries, In
55
ParameterTimeseriesValueIndexMismatchError,
66
MixedParameterTimeseriesIndexError
77
using Test
8+
using AllocCheck
89

910
arr = [1.0, 2.0, 3.0]
1011
@test parameter_values(arr) == arr
@@ -101,6 +102,12 @@ for sys in [
101102
else
102103
set!(p, newval)
103104
end
105+
if isconcretetype(eltype(newval))
106+
# test only with concrete eltypes, otherwise we have
107+
# dynamic dispatch due to the vals
108+
@check_allocs test_setp(set!, p, newval) = set!(p, newval)
109+
test_setp(set!, p, newval)
110+
end
104111
@test get(p) == newval
105112
set!(p, oldval)
106113
@test get(p) == oldval

0 commit comments

Comments
 (0)