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
0 commit comments