Skip to content

Commit 87116db

Browse files
authored
Add JLD2 extension (#354)
* Add JLD2 extension (move over from NEOs) * Add missing files * Bump patch version * Update Project.toml (order fields alphabetically) * Cleanup * Remove leftover comment
1 parent a79b022 commit 87116db

File tree

6 files changed

+117
-4
lines changed

6 files changed

+117
-4
lines changed

Project.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "TaylorSeries"
22
uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea"
33
repo = "https://github.com/JuliaDiff/TaylorSeries.jl.git"
4-
version = "0.17.3"
4+
version = "0.17.4"
55

66
[deps]
77
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
@@ -11,15 +11,18 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1111

1212
[weakdeps]
1313
IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
14+
JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
1415
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
1516

1617
[extensions]
1718
TaylorSeriesIAExt = "IntervalArithmetic"
19+
TaylorSeriesJLD2Ext = "JLD2"
1820
TaylorSeriesSAExt = "StaticArrays"
1921

2022
[compat]
2123
Aqua = "0.8"
2224
IntervalArithmetic = "0.15 - 0.20"
25+
JLD2 = "0.4"
2326
LinearAlgebra = "<0.0.1, 1"
2427
Markdown = "<0.0.1, 1"
2528
Requires = "0.5.2, 1"
@@ -31,10 +34,11 @@ julia = "1"
3134
[extras]
3235
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
3336
IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
37+
JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
3438
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
3539
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
3640
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
3741
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3842

3943
[targets]
40-
test = ["IntervalArithmetic", "LinearAlgebra", "SparseArrays", "StaticArrays", "Test", "Aqua"]
44+
test = ["IntervalArithmetic", "JLD2", "LinearAlgebra", "SparseArrays", "StaticArrays", "Test", "Aqua"]

ext/TaylorSeriesJLD2Ext.jl

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
module TaylorSeriesJLD2Ext
2+
3+
import Base: convert
4+
using TaylorSeries
5+
6+
if isdefined(Base, :get_extension)
7+
import JLD2: writeas
8+
else
9+
import ..JLD2: writeas
10+
end
11+
12+
@doc raw"""
13+
TaylorNSerialization{T}
14+
15+
Custom serialization struct to save a `TaylorN{T}` to a `.jld2` file.
16+
17+
# Fields
18+
- `vars::Vector{String}`: jet transport variables.
19+
- `varorder::Int`: order of jet transport perturbations.
20+
- `x::Vector{T}`: vector of coefficients.
21+
"""
22+
struct TaylorNSerialization{T}
23+
vars::Vector{String}
24+
varorder::Int
25+
x::Vector{T}
26+
end
27+
28+
# Tell JLD2 to save TaylorN{T} as TaylorNSerialization{T}
29+
writeas(::Type{TaylorN{T}}) where {T} = TaylorNSerialization{T}
30+
31+
# Convert method to write .jld2 files
32+
function convert(::Type{TaylorNSerialization{T}}, eph::TaylorN{T}) where {T}
33+
# Variables
34+
vars = TS.get_variable_names()
35+
# Number of variables
36+
n = length(vars)
37+
# TaylorN order
38+
varorder = eph.order
39+
# Number of coefficients in each TaylorN
40+
L = varorder + 1
41+
# Number of coefficients in each HomogeneousPolynomial
42+
M = binomial(n + varorder, varorder)
43+
44+
# Vector of coefficients
45+
x = Vector{T}(undef, M)
46+
47+
# Save coefficients
48+
i = 1
49+
for i_1 in 0:varorder
50+
# Iterate over i_1 order HomogeneousPolynomial
51+
for i_2 in 1:binomial(n + i_1 - 1, i_1)
52+
x[i] = eph.coeffs[i_1+1].coeffs[i_2]
53+
i += 1
54+
end
55+
end
56+
57+
return TaylorNSerialization{T}(vars, varorder, x)
58+
end
59+
60+
# Convert method to read .jld2 files
61+
function convert(::Type{TaylorN{T}}, eph::TaylorNSerialization{T}) where {T}
62+
# Variables
63+
vars = eph.vars
64+
# Number of variables
65+
n = length(vars)
66+
# TaylorN order
67+
varorder = eph.varorder
68+
# Number of coefficients in each TaylorN
69+
L = varorder + 1
70+
# Number of coefficients in each HomogeneousPolynomial
71+
M = binomial(n + varorder, varorder)
72+
73+
# Set variables
74+
if TS.get_variable_names() != vars
75+
TS.set_variables(T, vars, order = varorder)
76+
end
77+
78+
# Reconstruct TaylorN
79+
i = 1
80+
TaylorN_coeffs = Vector{HomogeneousPolynomial{T}}(undef, L)
81+
for i_1 in 0:varorder
82+
# Reconstruct HomogeneousPolynomials
83+
TaylorN_coeffs[i_1 + 1] = HomogeneousPolynomial(eph.x[i : i + binomial(n + i_1 - 1, i_1)-1], i_1)
84+
i += binomial(n + i_1 - 1, i_1)
85+
end
86+
x = TaylorN{T}(TaylorN_coeffs, varorder)
87+
88+
return x
89+
end
90+
91+
end

src/TaylorSeries.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ function __init__()
8989
@require StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" begin
9090
include("../ext/TaylorSeriesSAExt.jl")
9191
end
92+
@require JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" begin
93+
include("../ext/TaylorSeriesJLD2Ext.jl")
94+
end
9295
end
9396
end
9497

test/jld2.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# This file is part of TaylorSeries.jl, MIT licensed
2+
#
3+
4+
using TaylorSeries, JLD2
5+
6+
using Test
7+
8+
@testset "Test TaylorSeries JLD2 extension" begin
9+
dq = set_variables("q", order=4, numvars=6)
10+
random_TaylorN = [cos(sum(dq .* rand(6))), sin(sum(dq .* rand(6))), tan(sum(dq .* rand(6)))]
11+
jldsave("test.jld2"; random_TaylorN = random_TaylorN)
12+
recovered_taylorN = JLD2.load("test.jld2", "random_TaylorN")
13+
@test recovered_taylorN == random_TaylorN
14+
rm("test.jld2")
15+
end

test/runtests.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ testfiles = (
1111
"broadcasting.jl",
1212
"identities_Euler.jl",
1313
"fateman40.jl",
14-
"staticarrays.jl"
14+
"staticarrays.jl",
15+
"jld2.jl"
1516
)
1617

1718
for file in testfiles

test/staticarrays.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using TaylorSeries, StaticArrays
55

66
using Test
7-
# eeuler = Base.MathConstants.e
87

98
@testset "Tests TaylorSeries operations over StaticArrays types" begin
109
q = set_variables("q", order=2, numvars=2)

0 commit comments

Comments
 (0)