File: test_str.py

package info (click to toggle)
fenics-ufl 2025.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,176 kB
  • sloc: python: 25,267; makefile: 170
file content (136 lines) | stat: -rwxr-xr-x 3,627 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
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
from utils import FiniteElement, LagrangeElement

from ufl import (
    CellDiameter,
    CellVolume,
    Circumradius,
    FacetArea,
    FacetNormal,
    FunctionSpace,
    Index,
    Mesh,
    SpatialCoordinate,
    TestFunction,
    TrialFunction,
    as_matrix,
    as_ufl,
    as_vector,
    quadrilateral,
    tetrahedron,
    triangle,
)
from ufl.pullback import identity_pullback
from ufl.sobolevspace import H1


def test_str_int_value(self):
    assert str(as_ufl(3)) == "3"


def test_str_float_value(self):
    assert str(as_ufl(3.14)) == "3.14"


def test_str_zero(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    x = SpatialCoordinate(domain)
    assert str(as_ufl(0)) == "0"
    assert str(0 * x) == "0 (shape (2,))"
    assert str(0 * x * x[Index(42)]) == "0 (shape (2,), index labels (42,))"


def test_str_index(self):
    assert str(Index(3)) == "i_3"
    assert str(Index(42)) == "i_{42}"


def test_str_coordinate(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(SpatialCoordinate(domain)) == "x"
    assert str(SpatialCoordinate(domain)[0]) == "x[0]"


def test_str_normal(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(FacetNormal(domain)) == "n"
    assert str(FacetNormal(domain)[0]) == "n[0]"


def test_str_circumradius(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(Circumradius(domain)) == "circumradius"


def test_str_diameter(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(CellDiameter(domain)) == "diameter"


def test_str_facetarea(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(FacetArea(domain)) == "facetarea"


def test_str_volume(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    assert str(CellVolume(domain)) == "volume"


def test_str_scalar_argument(self):
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    v = TestFunction(FunctionSpace(domain, LagrangeElement(triangle, 1)))
    u = TrialFunction(FunctionSpace(domain, LagrangeElement(triangle, 1)))
    assert str(v) == "v_0"
    assert str(u) == "v_1"


# def test_str_vector_argument(self): # FIXME

# def test_str_scalar_coefficient(self): # FIXME

# def test_str_vector_coefficient(self): # FIXME


def test_str_list_vector():
    domain = Mesh(LagrangeElement(tetrahedron, 1, (3,)))
    x, y, z = SpatialCoordinate(domain)
    v = as_vector((z, y, x))
    assert str(v) == (f"[{z}, {y}, {x}]")


def test_str_list_vector_with_zero():
    domain = Mesh(LagrangeElement(tetrahedron, 1, (3,)))
    x, _y, _z = SpatialCoordinate(domain)
    v = as_vector((x, 0, 0))
    assert str(v) == (f"[{x}, 0, 0]")


def test_str_list_matrix():
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    x, y = SpatialCoordinate(domain)
    v = as_matrix(((2 * x, 3 * y), (4 * x, 5 * y)))
    a = str(2 * x)
    b = str(3 * y)
    c = str(4 * x)
    d = str(5 * y)
    assert str(v) == (f"[\n  [{a}, {b}],\n  [{c}, {d}]\n]")


def test_str_list_matrix_with_zero():
    domain = Mesh(LagrangeElement(triangle, 1, (2,)))
    x, y = SpatialCoordinate(domain)
    v = as_matrix(((2 * x, 3 * y), (0, 0)))
    a = str(2 * x)
    b = str(3 * y)
    c = str(as_vector((0, 0)))
    assert str(v) == (f"[\n  [{a}, {b}],\n{c}\n]")


# FIXME: Add more tests for tensors collapsing
#        partly or completely into Zero!


def test_str_element():
    elem = FiniteElement("Q", quadrilateral, 1, (), identity_pullback, H1)
    assert repr(elem) == 'utils.FiniteElement("Q", quadrilateral, 1, (), IdentityPullback(), H1)'
    assert str(elem) == "<Q1 on a quadrilateral>"