1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#! /usr/bin/env python
import openturns as ot
ot.TESTPREAMBLE()
print(
"Default q :",
ot.ResourceMap.GetAsScalar("HyperbolicAnisotropicEnumerateFunction-DefaultQ"),
"\n",
)
# check weight constructor
f = ot.HyperbolicAnisotropicEnumerateFunction((1.0, 2.0, 3.0, 4.0, 5.0), 0.75)
# check inverse when the cache is empty
print("inverse([0,0,0,0,0])=", f.inverse([0, 0, 0, 0, 0]))
# fill the cache
for i in range(4):
res = f(i)
# check inverse when the cache is filled
print("inverse([2,0,0,0,0])=", f.inverse([2, 0, 0, 0, 0]))
# verify consistency with LinearEnumerateFunction
size = 10
stratas = 5
for dimension in range(1, 4):
f = ot.HyperbolicAnisotropicEnumerateFunction(dimension, 1.0)
g = ot.LinearEnumerateFunction(dimension)
print("First", size, "values for dimension", dimension)
for index in range(size):
if not f(index) == g(index):
raise Exception("spam", f(index), g(index))
print("index=", index, repr(f(index)))
strataCardinal = []
for index in range(stratas):
strataCardinal.append(int(f.getStrataCardinal(index)))
print("And first", stratas, "strata cardinals :", strataCardinal, "\n")
# now let q vary
size = 25
for dimension in range(2, 5):
for q in [0.75, 0.5, 0.25]:
print("First", size, "values dimension=", dimension, " q=", q)
f = ot.HyperbolicAnisotropicEnumerateFunction(dimension, q)
for index in range(size):
print("index=", index, repr(f(index)))
strataCardinal = []
for index in range(stratas):
strataCardinal.append(int(f.getStrataCardinal(index)))
print("And first", stratas, "strata cardinals :", strataCardinal)
cardinalsPerDegree = []
for deg in range(5):
cardinalsPerDegree.append(int(f.getMaximumDegreeCardinal(deg)))
print("Cardinals per degree=", cardinalsPerDegree, "\n")
for dimension in range(1, 4):
q = 0.8
f = ot.HyperbolicAnisotropicEnumerateFunction(dimension, q)
for d in range(10):
idx = f.getMaximumDegreeStrataIndex(d)
print("dim", dimension, "degree", d, "max_degree_strata_index", idx)
size = f.getBasisSizeFromTotalDegree(d)
print("degree", d, "size", size)
# with bounds
f = ot.HyperbolicAnisotropicEnumerateFunction(2, 1.0)
f.setUpperBound([int(1e8), 3])
for index in range(25):
m = f(index)
index_inv = f.inverse(m)
print("index=", index, repr(m))
assert m[1] <= 3, "wrong bound"
assert index == index_inv, "wrong inverse"
f.setUpperBound([3, int(1e8)])
for index in range(25):
m = f(index)
index_inv = f.inverse(m)
print("index=", index, repr(m))
assert m[0] <= 3, "wrong bound"
assert index == index_inv, "wrong inverse"
#
print("Test getMarginal() from indices")
f = ot.HyperbolicAnisotropicEnumerateFunction(5, 0.5)
marginalf = f.getMarginal([0, 3, 4])
for index in range(10):
m = marginalf(index)
index_inv = marginalf.inverse(m)
print("index=", index, repr(m), index_inv)
print("Test getMarginal() from a single integer")
f = ot.HyperbolicAnisotropicEnumerateFunction(5, 0.5)
marginalf = f.getMarginal(3)
for index in range(10):
m = marginalf(index)
index_inv = marginalf.inverse(m)
print("index=", index, repr(m), index_inv)
|