File: t_FejerExperiment_std.py

package info (click to toggle)
openturns 1.26-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 67,708 kB
  • sloc: cpp: 261,605; python: 67,030; ansic: 4,378; javascript: 406; sh: 185; xml: 164; makefile: 101
file content (50 lines) | stat: -rwxr-xr-x 1,830 bytes parent folder | download
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
#! /usr/bin/env python

import openturns as ot
import openturns.experimental as otexp
import openturns.testing as ott

ot.TESTPREAMBLE()

all_rules = [
    otexp.FejerExperiment.FEJERTYPE1,
    otexp.FejerExperiment.FEJERTYPE2,
    otexp.FejerExperiment.CLENSHAWCURTIS,
]

for rule in all_rules:
    for N in [1, 2, 3, 4, 5]:
        experiment = otexp.FejerExperiment([N], rule)
        experiment.setBounds(ot.Interval(4.0, 5.0))
        nodes, weights = experiment.generateWithWeights()
        print(f"---------- rule={rule} N={N} ----------")
        print(rule, nodes, weights)
        assert len(nodes) == N
        assert len(weights) == N
        assert experiment.hasUniformWeights() == (N < 2)
        ott.assert_almost_equal(nodes.computeMean(), [4.5])
        ott.assert_almost_equal(sum(weights), 2.0)

# check nesting
mapN = {otexp.FejerExperiment.FEJERTYPE2: lambda n: 2**n - 1}
mapN[otexp.FejerExperiment.CLENSHAWCURTIS] = lambda n: 2**n + 1
for rule in [otexp.FejerExperiment.FEJERTYPE2, otexp.FejerExperiment.CLENSHAWCURTIS]:
    prev_nodes = None
    for N in [1, 2, 3, 4, 5]:
        experiment = otexp.FejerExperiment([1], rule)
        experiment.setUseNestedLevels(True)
        experiment.setLevels([N])
        nodes, weights = experiment.generateWithWeights()
        print(f"---------- rule={rule} N={N} nested ----------")
        print(rule, nodes, weights)
        Nref = mapN[rule](N)
        assert len(nodes) == Nref
        assert len(weights) == len(nodes)
        # check previous nodes are nested in current nodes
        if prev_nodes is not None:
            tree = ot.KDTree(nodes)
            for x in prev_nodes:
                k = tree.query(x)
                d = ot.Point(x - nodes[k]).norm()
                assert d < 1e-15, f"x={x} xk={nodes[k]} d={d}"
        prev_nodes = nodes