Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F61983983
rational_interpolant_greedy_pivoted.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, May 10, 05:14
Size
22 KB
Mime Type
text/x-python
Expires
Sun, May 12, 05:14 (2 d)
Engine
blob
Format
Raw Data
Handle
17586926
Attached To
R6746 RationalROMPy
rational_interpolant_greedy_pivoted.py
View Options
# Copyright (C) 2018 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
from
copy
import
deepcopy
as
copy
import
numpy
as
np
from
.generic_pivoted_approximant
import
GenericPivotedApproximant
from
rrompy.reduction_methods.greedy.rational_interpolant_greedy
import
(
RationalInterpolantGreedy
)
from
rrompy.reduction_methods.greedy.generic_greedy_approximant
import
(
pruneSamples
)
from
rrompy.utilities.base.types
import
Np1D
,
HFEng
,
DictAny
,
ListAny
,
paramVal
from
rrompy.utilities.base
import
verbosityManager
as
vbMng
from
rrompy.utilities.numerical
import
totalDegreeN
,
dot
from
rrompy.utilities.poly_fitting.polynomial
import
polyvander
as
pv
from
rrompy.utilities.exception_manager
import
RROMPyAssert
from
rrompy.parameter
import
emptyParameterList
,
parameterList
__all__
=
[
'RationalInterpolantGreedyPivoted'
]
class
RationalInterpolantGreedyPivoted
(
GenericPivotedApproximant
,
RationalInterpolantGreedy
):
"""
ROM pivoted rational interpolant (with pole matching) computation for
parametric problems.
Args:
HFEngine: HF problem solver.
mu0(optional): Default parameter. Defaults to 0.
directionPivot(optional): Pivot components. Defaults to [0].
approxParameters(optional): Dictionary containing values for main
parameters of approximant. Recognized keys are:
- 'POD': whether to compute POD of snapshots; defaults to True;
- 'matchingWeight': weight for pole matching optimization; defaults
to 1;
- 'cutOffTolerance': tolerance for ignoring parasitic poles;
defaults to np.inf;
- 'cutOffType': rule for tolerance computation for parasitic poles;
defaults to 'MAGNITUDE';
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator;
- 'polybasis': type of polynomial basis for pivot
interpolation; defaults to 'MONOMIAL';
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation; allowed values include 'MONOMIAL', 'CHEBYSHEV'
and 'LEGENDRE'; defaults to 'MONOMIAL';
- 'greedyTol': uniform error tolerance for greedy algorithm;
defaults to 1e-2;
- 'collinearityTol': collinearity tolerance for greedy algorithm;
defaults to 0.;
- 'maxIter': maximum number of greedy steps; defaults to 1e2;
- 'refinementRatio': ratio of test points to be exhausted before
test set refinement; defaults to 0.2;
- 'nTestPoints': number of test points; defaults to 5e2;
- 'trainSetGenerator': training sample points generator; defaults
to sampler;
- 'errorEstimatorKind': kind of error estimator; available values
include 'AFFINE', 'DISCREPANCY', 'INTERPOLATORY',
'LOOK_AHEAD', and 'NONE'; defaults to 'NONE';
- 'MMarginal': degree of marginal interpolant; defaults to 0;
- 'polydegreetypeMarginal': type of polynomial degree for marginal;
defaults to 'TOTAL';
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant; defaults to 0, i.e. identity;
- 'nNearestNeighborMarginal': number of marginal nearest neighbors
considered if polybasisMarginal allows; defaults to -1;
- 'interpRcond': tolerance for pivot interpolation; defaults to
None;
- 'interpRcondMarginal': tolerance for marginal interpolation;
defaults to None;
- 'robustTol': tolerance for robust rational denominator
management; defaults to 0.
Defaults to empty dict.
approx_state(optional): Whether to approximate state. Defaults to
False.
verbosity(optional): Verbosity level. Defaults to 10.
Attributes:
HFEngine: HF problem solver.
mu0: Default parameter.
directionPivot: Pivot components.
mus: Array of snapshot parameters.
musPivot: Array of pivot snapshot parameters.
musMarginal: Array of marginal snapshot parameters.
approxParameters: Dictionary containing values for main parameters of
approximant. Recognized keys are in parameterList.
parameterListSoft: Recognized keys of soft approximant parameters:
- 'POD': whether to compute POD of snapshots;
- 'matchingWeight': weight for pole matching optimization;
- 'cutOffTolerance': tolerance for ignoring parasitic poles;
- 'cutOffType': rule for tolerance computation for parasitic poles;
- 'polybasis': type of polynomial basis for pivot
interpolation;
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation;
- 'greedyTol': uniform error tolerance for greedy algorithm;
- 'collinearityTol': collinearity tolerance for greedy algorithm;
- 'maxIter': maximum number of greedy steps;
- 'refinementRatio': ratio of test points to be exhausted before
test set refinement;
- 'nTestPoints': number of test points;
- 'trainSetGenerator': training sample points generator;
- 'errorEstimatorKind': kind of error estimator;
- 'MMarginal': degree of marginal interpolant;
- 'polydegreetypeMarginal': type of polynomial degree for marginal;
- 'radialDirectionalWeights': radial basis weights for pivot
numerator;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant;
- 'nNearestNeighbor': number of pivot nearest neighbors considered
if polybasis allows;
- 'nNearestNeighborMarginal': number of marginal nearest neighbors
considered if polybasisMarginal allows;
- 'interpRcond': tolerance for pivot interpolation;
- 'interpRcondMarginal': tolerance for marginal interpolation;
- 'robustTol': tolerance for robust rational denominator
management;
- 'correctorForce': whether corrector should forcefully delete bad
poles;
- 'correctorTol': tolerance for corrector step;
- 'correctorMaxIter': maximum number of corrector iterations.
parameterListCritical: Recognized keys of critical approximant
parameters:
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator.
approx_state: Whether to approximate state.
verbosity: Verbosity level.
POD: Whether to compute POD of snapshots.
matchingWeight: Weight for pole matching optimization.
cutOffTolerance: Tolerance for ignoring parasitic poles.
cutOffType: Rule for tolerance computation for parasitic poles.
S: Total number of pivot samples current approximant relies upon.
samplerPivot: Pivot sample point generator.
SMarginal: Total number of marginal samples current approximant relies
upon.
samplerMarginal: Marginal sample point generator.
polybasis: Type of polynomial basis for pivot interpolation.
polybasisMarginal: Type of polynomial basis for marginal interpolation.
greedyTol: uniform error tolerance for greedy algorithm.
collinearityTol: Collinearity tolerance for greedy algorithm.
maxIter: maximum number of greedy steps.
refinementRatio: ratio of training points to be exhausted before
training set refinement.
nTestPoints: number of starting training points.
trainSetGenerator: training sample points generator.
errorEstimatorKind: kind of error estimator.
MMarginal: Degree of marginal interpolant.
polydegreetypeMarginal: Type of polynomial degree for marginal.
radialDirectionalWeightsMarginal: Radial basis weights for marginal
interpolant.
nNearestNeighborMarginal: Number of marginal nearest neighbors
considered if polybasisMarginal allows.
interpRcond: Tolerance for pivot interpolation.
interpRcondMarginal: Tolerance for marginal interpolation.
robustTol: Tolerance for robust rational denominator management.
muBoundsPivot: list of bounds for pivot parameter values.
muBoundsMarginal: list of bounds for marginal parameter values.
samplingEngine: Sampling engine.
uHF: High fidelity solution(s) with parameter(s) lastSolvedHF as
sampleList.
lastSolvedHF: Parameter(s) corresponding to last computed high fidelity
solution(s) as parameterList.
uApproxReduced: Reduced approximate solution(s) with parameter(s)
lastSolvedApprox as sampleList.
lastSolvedApproxReduced: Parameter(s) corresponding to last computed
reduced approximate solution(s) as parameterList.
uApprox: Approximate solution(s) with parameter(s) lastSolvedApprox as
sampleList.
lastSolvedApprox: Parameter(s) corresponding to last computed
approximate solution(s) as parameterList.
Q: Numpy 1D vector containing complex coefficients of approximant
denominator.
P: Numpy 2D vector whose columns are FE dofs of coefficients of
approximant numerator.
"""
def
__init__
(
self
,
HFEngine
:
HFEng
,
mu0
:
paramVal
=
None
,
directionPivot
:
ListAny
=
[
0
],
approxParameters
:
DictAny
=
{},
approx_state
:
bool
=
False
,
verbosity
:
int
=
10
,
timestamp
:
bool
=
True
):
self
.
_preInit
()
self
.
_addParametersToList
(
toBeExcluded
=
[
"sampler"
])
super
()
.
__init__
(
HFEngine
=
HFEngine
,
mu0
=
mu0
,
directionPivot
=
directionPivot
,
approxParameters
=
approxParameters
,
approx_state
=
approx_state
,
verbosity
=
verbosity
,
timestamp
=
timestamp
)
self
.
_postInit
()
@property
def
tModelType
(
self
):
if
hasattr
(
self
,
"_temporaryPivot"
):
return
super
()
.
tModelType
from
rrompy.reduction_methods.trained_model
import
\
TrainedModelPivotedRational
return
TrainedModelPivotedRational
@property
def
polybasis0
(
self
):
if
"_"
in
self
.
polybasis
:
return
self
.
polybasis
.
split
(
"_"
)[
0
]
return
self
.
polybasis
def
_polyvanderAuxiliary
(
self
,
mus
,
deg
,
*
args
):
degEff
=
[
0
]
*
self
.
npar
degEff
[
self
.
directionPivot
[
0
]]
=
deg
return
pv
(
mus
,
degEff
,
*
args
)
def
_marginalizeMiscellanea
(
self
,
forward
:
bool
):
if
forward
:
self
.
_m_mu0
=
copy
(
self
.
mu0
)
self
.
_m_selfmus
=
copy
(
self
.
mus
)
self
.
_m_HFErescalingExp
=
copy
(
self
.
HFEngine
.
rescalingExp
)
self
.
_mu0
=
parameterList
(
self
.
mu0
(
self
.
directionPivot
))
self
.
_mus
=
parameterList
(
self
.
mus
(
self
.
directionPivot
))
self
.
HFEngine
.
rescalingExp
=
[
self
.
HFEngine
.
rescalingExp
[
self
.
directionPivot
[
0
]]]
else
:
self
.
_mu0
=
self
.
_m_mu0
self
.
_mus
=
self
.
_m_selfmus
self
.
HFEngine
.
rescalingExp
=
self
.
_m_HFErescalingExp
del
self
.
_m_mu0
,
self
.
_m_selfmus
,
self
.
_m_HFErescalingExp
def
_marginalizeTrainedModel
(
self
,
forward
:
bool
):
if
forward
:
del
self
.
_temporaryPivot
self
.
trainedModel
.
data
.
mu0
=
self
.
mu0
self
.
trainedModel
.
data
.
scaleFactor
=
[
1.
]
*
self
.
npar
self
.
trainedModel
.
data
.
scaleFactor
[
self
.
directionPivot
[
0
]]
=
(
self
.
scaleFactor
[
0
])
self
.
trainedModel
.
data
.
rescalingExp
=
self
.
HFEngine
.
rescalingExp
Qc
=
np
.
zeros
((
len
(
self
.
trainedModel
.
data
.
Q
.
coeffs
),)
*
self
.
npar
,
dtype
=
self
.
trainedModel
.
data
.
Q
.
coeffs
.
dtype
)
Pc
=
np
.
zeros
((
len
(
self
.
trainedModel
.
data
.
P
.
coeffs
),)
*
self
.
npar
+
(
self
.
trainedModel
.
data
.
P
.
coeffs
.
shape
[
1
],),
dtype
=
self
.
trainedModel
.
data
.
P
.
coeffs
.
dtype
)
for
j
in
range
(
len
(
self
.
trainedModel
.
data
.
Q
.
coeffs
)):
Qc
[(
0
,)
*
self
.
directionPivot
[
0
]
+
(
j
,)
+
(
0
,)
*
(
self
.
npar
-
self
.
directionPivot
[
0
]
-
1
)]
=
(
self
.
trainedModel
.
data
.
Q
.
coeffs
[
j
])
for
j
in
range
(
len
(
self
.
trainedModel
.
data
.
P
.
coeffs
)):
for
k
in
range
(
self
.
trainedModel
.
data
.
P
.
coeffs
.
shape
[
1
]):
Pc
[(
0
,)
*
self
.
directionPivot
[
0
]
+
(
j
,)
+
(
0
,)
*
(
self
.
npar
-
self
.
directionPivot
[
0
]
-
1
)
+
(
k
,)]
=
self
.
trainedModel
.
data
.
P
.
coeffs
[
j
,
k
]
self
.
trainedModel
.
data
.
Q
.
coeffs
=
Qc
self
.
trainedModel
.
data
.
P
.
coeffs
=
Pc
else
:
self
.
_temporaryPivot
=
1
self
.
trainedModel
.
data
.
mu0
=
parameterList
(
self
.
mu0
(
self
.
directionPivot
))
self
.
trainedModel
.
data
.
scaleFactor
=
self
.
scaleFactor
self
.
trainedModel
.
data
.
rescalingExp
=
self
.
HFEngine
.
rescalingExp
[
self
.
directionPivot
[
0
]]
self
.
trainedModel
.
data
.
Q
.
coeffs
=
self
.
trainedModel
.
data
.
Q
.
coeffs
[
(
0
,)
*
self
.
directionPivot
[
0
]
+
(
slice
(
None
),)
+
(
0
,)
*
(
self
.
HFEngine
.
npar
-
1
-
self
.
directionPivot
[
0
])]
self
.
trainedModel
.
data
.
P
.
coeffs
=
self
.
trainedModel
.
data
.
P
.
coeffs
[
(
0
,)
*
self
.
directionPivot
[
0
]
+
(
slice
(
None
),)
+
(
0
,)
*
(
self
.
HFEngine
.
npar
-
1
-
self
.
directionPivot
[
0
])]
self
.
trainedModel
.
data
.
npar
=
self
.
npar
self
.
trainedModel
.
data
.
Q
.
npar
=
self
.
npar
self
.
trainedModel
.
data
.
P
.
npar
=
self
.
npar
def
errorEstimator
(
self
,
mus
:
Np1D
,
return_max
:
bool
=
False
)
->
Np1D
:
"""Standard residual-based error estimator."""
self
.
_marginalizeMiscellanea
(
True
)
setupOK
=
self
.
setupApproxLocal
()
self
.
_marginalizeMiscellanea
(
False
)
if
not
setupOK
:
err
=
np
.
empty
(
len
(
mus
))
err
[:]
=
np
.
nan
if
not
return_max
:
return
err
return
err
,
0
,
np
.
nan
self
.
_marginalizeTrainedModel
(
True
)
errRes
=
super
()
.
errorEstimator
(
mus
,
return_max
)
self
.
_marginalizeTrainedModel
(
False
)
return
errRes
def
_preliminaryTraining
(
self
):
"""Initialize starting snapshots of solution map."""
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot start greedy algorithm."
)
S
=
self
.
S
self
.
sampleBatchIdx
,
self
.
sampleBatchSize
,
self
.
_S
=
-
1
,
0
,
0
nextBatchSize
=
1
while
self
.
_S
+
nextBatchSize
<=
S
:
self
.
sampleBatchIdx
+=
1
self
.
sampleBatchSize
=
nextBatchSize
self
.
_S
+=
self
.
sampleBatchSize
nextBatchSize
=
totalDegreeN
(
self
.
npar
-
1
,
self
.
sampleBatchIdx
+
1
)
self
.
resetSamples
()
musPivot
=
parameterList
(
self
.
trainSetGenerator
.
generatePoints
(
self
.
S
)[
list
(
range
(
self
.
S
))])
muTestPivot
=
self
.
samplerPivot
.
generatePoints
(
self
.
nTestPoints
)
idxPop
=
pruneSamples
(
muTestPivot
**
self
.
HFEngine
.
rescalingExp
[
self
.
directionPivot
[
0
]],
musPivot
**
self
.
HFEngine
.
rescalingExp
[
self
.
directionPivot
[
0
]],
1e-10
*
self
.
scaleFactor
[
0
])
self
.
mus
=
emptyParameterList
()
self
.
mus
.
reset
((
self
.
S
,
self
.
npar
+
len
(
self
.
musMargLoc
)))
muTestBase
=
emptyParameterList
()
muTestBase
.
reset
((
len
(
muTestPivot
),
self
.
npar
+
len
(
self
.
musMargLoc
)))
for
k
in
range
(
self
.
S
):
self
.
mus
.
data
[
k
,
self
.
directionPivot
]
=
musPivot
[
k
]
.
data
self
.
mus
.
data
[
k
,
self
.
directionMarginal
]
=
self
.
musMargLoc
.
data
for
k
in
range
(
len
(
muTestPivot
)):
muTestBase
.
data
[
k
,
self
.
directionPivot
]
=
muTestPivot
[
k
]
.
data
muTestBase
.
data
[
k
,
self
.
directionMarginal
]
=
self
.
musMargLoc
.
data
muTestBase
.
pop
(
idxPop
)
muTestBase
=
muTestBase
.
sort
()
muLast
=
copy
(
self
.
mus
[
-
1
])
self
.
mus
.
pop
()
if
len
(
self
.
mus
)
>
0
:
vbMng
(
self
,
"MAIN"
,
(
"Adding first {} sample point{} at {} to training "
"set."
)
.
format
(
self
.
S
-
1
,
""
+
"s"
*
(
self
.
S
>
2
),
self
.
mus
),
2
)
self
.
samplingEngine
.
iterSample
(
self
.
mus
)
self
.
_S
=
len
(
self
.
mus
)
self
.
_approxParameters
[
"S"
]
=
self
.
S
self
.
muTest
=
emptyParameterList
()
self
.
muTest
.
reset
((
len
(
muTestBase
)
+
1
,
self
.
mus
.
shape
[
1
]))
self
.
muTest
.
data
[:
-
1
]
=
muTestBase
.
data
self
.
muTest
.
data
[
-
1
]
=
muLast
.
data
def
setupApprox
(
self
,
plotEst
:
bool
=
False
):
"""Compute rational interpolant."""
if
self
.
checkComputedApprox
():
return
True
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot setup approximant."
)
vbMng
(
self
,
"INIT"
,
"Setting up {}."
.
format
(
self
.
name
()),
5
)
self
.
musMarginal
=
self
.
samplerMarginal
.
generatePoints
(
self
.
SMarginal
)
S0
=
copy
(
self
.
S
)
Qs
,
Ps
=
[],
[]
self
.
computeScaleFactor
()
self
.
_scaleFactorOldPivot
=
copy
(
self
.
scaleFactor
)
self
.
scaleFactor
=
self
.
scaleFactorPivot
nparEff
=
self
.
npar
self
.
_temporaryPivot
=
1
samplingEngs
=
[]
for
j
in
range
(
len
(
self
.
musMarginal
)):
self
.
_S
=
S0
self
.
musMargLoc
=
self
.
musMarginal
[
j
]
RationalInterpolantGreedy
.
setupSampling
(
self
)
self
.
trainedModel
=
None
self
.
verbosity
-=
5
super
()
.
setupApprox
(
plotEst
)
self
.
verbosity
+=
5
samplingEngs
+=
[
copy
(
self
.
samplingEngine
)]
Qs
=
Qs
+
[
copy
(
self
.
trainedModel
.
data
.
Q
)]
Ps
=
Ps
+
[
copy
(
self
.
trainedModel
.
data
.
P
)]
del
self
.
musMargLoc
# other finalization instructions
self
.
setupSampling
()
self
.
samplingEngine
.
resetHistory
(
len
(
self
.
musMarginal
))
for
j
in
range
(
len
(
self
.
musMarginal
)):
self
.
samplingEngine
.
setsample
(
samplingEngs
[
j
]
.
samples
,
j
,
False
)
self
.
samplingEngine
.
mus
[
j
]
=
copy
(
samplingEngs
[
j
]
.
mus
)
self
.
samplingEngine
.
nsamples
[
j
]
=
samplingEngs
[
j
]
.
nsamples
self
.
samplingEngine
.
postprocessuBulk
(
j
)
if
j
==
0
:
self
.
_mus
=
parameterList
(
samplingEngs
[
j
]
.
mus
,
nparEff
)
else
:
self
.
_mus
.
append
(
samplingEngs
[
j
]
.
mus
)
if
self
.
POD
:
self
.
samplingEngine
.
coalesceSamples
(
self
.
interpRcondMarginal
)
postR
=
self
.
samplingEngine
.
RPODCoalesced
else
:
self
.
samplingEngine
.
coalesceSamples
()
postR
=
np
.
eye
(
self
.
samplingEngine
.
samplesCoalesced
.
shape
[
1
])
# update Ps by post-multiplication with suitable matrix
idxCurr
=
0
for
j
in
range
(
len
(
self
.
musMarginal
)):
nsj
=
Ps
[
j
]
.
coeffs
.
shape
[
1
]
Ps
[
j
]
.
coeffs
=
dot
(
Ps
[
j
]
.
coeffs
,
postR
[:,
idxCurr
:
idxCurr
+
nsj
]
.
T
)
idxCurr
=
idxCurr
+
nsj
self
.
scaleFactor
=
self
.
_scaleFactorOldPivot
del
self
.
_scaleFactorOldPivot
,
self
.
_temporaryPivot
pMat
=
self
.
samplingEngine
.
samplesCoalesced
.
data
pMatEff
=
dot
(
self
.
HFEngine
.
C
,
pMat
)
self
.
trainedModel
=
self
.
tModelType
()
self
.
trainedModel
.
verbosity
=
self
.
verbosity
self
.
trainedModel
.
timestamp
=
self
.
timestamp
datadict
=
{
"mu0"
:
self
.
mu0
,
"projMat"
:
pMatEff
,
"scaleFactor"
:
self
.
scaleFactor
,
"rescalingExp"
:
self
.
HFEngine
.
rescalingExp
,
"directionPivot"
:
self
.
directionPivot
}
self
.
trainedModel
.
data
=
self
.
initializeModelData
(
datadict
)[
0
]
self
.
trainedModel
.
data
.
mus
=
copy
(
self
.
mus
)
self
.
trainedModel
.
data
.
musMarginal
=
copy
(
self
.
musMarginal
)
self
.
trainedModel
.
data
.
marginalInterp
=
self
.
_setupMarginalInterp
()
self
.
trainedModel
.
data
.
Qs
,
self
.
trainedModel
.
data
.
Ps
=
Qs
,
Ps
vbMng
(
self
,
"INIT"
,
"Matching poles."
,
10
)
self
.
trainedModel
.
initializeFromRational
(
self
.
HFEngine
,
self
.
matchingWeight
,
self
.
POD
,
self
.
approx_state
)
vbMng
(
self
,
"DEL"
,
"Done matching poles."
,
10
)
if
not
np
.
isinf
(
self
.
cutOffTolerance
):
vbMng
(
self
,
"INIT"
,
"Recompressing by cut-off."
,
10
)
msg
=
self
.
trainedModel
.
recompressByCutOff
([
-
1.
,
1.
],
self
.
cutOffTolerance
,
self
.
cutOffType
)
vbMng
(
self
,
"DEL"
,
"Done recompressing."
+
msg
,
10
)
self
.
trainedModel
.
data
.
approxParameters
=
copy
(
self
.
approxParameters
)
vbMng
(
self
,
"DEL"
,
"Done setting up approximant."
,
5
)
Event Timeline
Log In to Comment