File: test_equality.py

package info (click to toggle)
fenics-basix 0.10.0.post0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,156 kB
  • sloc: cpp: 23,435; python: 10,829; makefile: 43; sh: 26
file content (195 lines) | stat: -rw-r--r-- 4,193 bytes parent folder | download | duplicates (2)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# Copyright (c) 2022 Matthew Scroggs
# FEniCS Project
# SPDX-License-Identifier: MIT

import numpy as np
import pytest

import basix


def create_custom_p1():
    wcoeffs = np.eye(3)
    z = np.zeros((0, 2))
    x = [
        [np.array([[0.0, 0.0]]), np.array([[1.0, 0.0]]), np.array([[0.0, 1.0]])],
        [z, z, z],
        [z],
        [],
    ]
    z = np.zeros((0, 1, 0, 1))
    M = [[np.array([[[[1.0]]]]), np.array([[[[1.0]]]]), np.array([[[[1.0]]]])], [z, z, z], [z], []]

    return basix.create_custom_element(
        basix.CellType.triangle,
        [],
        wcoeffs,
        x,
        M,
        0,
        basix.MapType.identity,
        basix.SobolevSpace.H1,
        False,
        1,
        1,
        basix.PolysetType.standard,
    )


@pytest.fixture
def p1_custom():
    return create_custom_p1()


@pytest.fixture
def p1_custom_again():
    return create_custom_p1()


@pytest.fixture
def cr_custom():
    wcoeffs = np.eye(3)
    z = np.zeros((0, 2))
    x = [
        [z, z, z],
        [np.array([[0.5, 0.5]]), np.array([[0.0, 0.5]]), np.array([[0.5, 0.0]])],
        [z],
        [],
    ]
    z = np.zeros((0, 1, 0, 1))
    M = [[z, z, z], [np.array([[[[1.0]]]]), np.array([[[[1.0]]]]), np.array([[[[1.0]]]])], [z], []]

    return basix.create_custom_element(
        basix.CellType.triangle,
        [],
        wcoeffs,
        x,
        M,
        0,
        basix.MapType.identity,
        basix.SobolevSpace.L2,
        False,
        1,
        1,
        basix.PolysetType.standard,
    )


@pytest.fixture
def cr():
    return basix.create_element(basix.ElementFamily.CR, basix.CellType.triangle, 1)


@pytest.fixture
def p1():
    return basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 1)


@pytest.fixture
def p1_again():
    return basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 1)


@pytest.fixture
def rt1():
    return basix.create_element(basix.ElementFamily.RT, basix.CellType.triangle, 1)


@pytest.fixture
def p1_quad():
    return basix.create_element(basix.ElementFamily.P, basix.CellType.quadrilateral, 1)


@pytest.fixture
def p4_gll():
    return basix.create_element(
        basix.ElementFamily.P, basix.CellType.triangle, 4, basix.LagrangeVariant.gll_warped
    )


@pytest.fixture
def p4_equi():
    return basix.create_element(
        basix.ElementFamily.P, basix.CellType.triangle, 4, basix.LagrangeVariant.equispaced
    )


@pytest.fixture
def p1_f32():
    return basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 1, dtype=np.float32)


@pytest.fixture
def p1_f64():
    return basix.create_element(basix.ElementFamily.P, basix.CellType.triangle, 1, dtype=np.float64)


@pytest.fixture
def p1_dofs():
    return basix.create_element(
        basix.ElementFamily.P, basix.CellType.triangle, 1, dof_ordering=[0, 1, 2]
    )


@pytest.fixture
def p1_dofs_again():
    return basix.create_element(
        basix.ElementFamily.P, basix.CellType.triangle, 1, dof_ordering=[0, 1, 2]
    )


@pytest.fixture
def p1_reverse_dofs():
    return basix.create_element(
        basix.ElementFamily.P, basix.CellType.triangle, 1, dof_ordering=[2, 1, 0]
    )


def test_equal_same_element(p1, p1_again):
    assert p1 == p1
    assert p1 == p1_again


def test_nonequal_degree(p1, p4_gll):
    assert p1 != p4_gll


def test_nonequal_degree_equi(p1, p4_equi):
    assert p1 != p4_equi


def test_nonequal_variants(p4_gll, p4_equi):
    assert p4_gll != p4_equi


def test_nonequal_celltype(p1, p1_quad):
    assert p1 != p1_quad


def test_nonequal_family(p1, rt1):
    assert p1 != rt1


def test_nonequal_dtype(p1_f64, p1_f32):
    assert p1_f64 != p1_f32


def test_equal_dof_ordering(p1, p1_dofs, p1_dofs_again):
    assert p1_dofs == p1_dofs_again


def test_nonequal_dof_ordering(p1, p1_reverse_dofs, p1_dofs):
    assert p1 != p1_dofs
    assert p1 != p1_reverse_dofs
    assert p1_dofs != p1_reverse_dofs


def test_equal_custom(p1_custom, p1_custom_again):
    assert p1_custom == p1_custom_again


def test_nonequal_custom(p1_custom, cr_custom, cr, p1):
    assert p1_custom != cr_custom
    assert p1_custom != cr
    assert p1_custom != p1
    assert cr_custom != cr