• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rjfarmer / gfModParser / 15258826846

26 May 2025 04:55PM UTC coverage: 87.394% (+3.9%) from 83.515%
15258826846

push

github

rjfarmer
Properties tests

3 of 5 new or added lines in 1 file covered. (60.0%)

721 of 825 relevant lines covered (87.39%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.65
/gfModParser/modules/properties.py
1
# SPDX-License-Identifier: GPL-2.0+
2
import pyparsing
1✔
3

4
from . import attributes
1✔
5
from . import components
1✔
6
from . import expressions
1✔
7
from . import simds
1✔
8
from . import namespaces
1✔
9
from . import procedures
1✔
10
from . import arrays
1✔
11
from . import namelists
1✔
12

13

14
class Properties:
1✔
15
    """
16
    Stores properties of an object
17
    """
18

19
    def __init__(self, properties, *, version):
1✔
20
        self._raw = properties
1✔
21
        self.version = version
1✔
22
        self._properties = None
1✔
23
        self._components = None
1✔
24

25
        self._comp_access = None
1✔
26
        self._parameter = None
1✔
27

28
    def _load(self):
1✔
29
        p = pyparsing.OneOrMore(pyparsing.nestedExpr()).parseString(self._raw)
1✔
30
        self._properties = p[0]
1✔
31

32
        if isinstance(self._properties[2], str):
1✔
33
            self._comp_access = self._properties[2]
1✔
34
            _ = self._properties.pop(2)
1✔
35
        if self.attributes.is_parameter:
1✔
36
            self._parameter = self._properties[6]
1✔
37
            _ = self._properties.pop(6)
1✔
38

39
    @property
1✔
40
    def attributes(self):
1✔
41
        if self._properties is None:
1✔
42
            self._load()
1✔
43
        return attributes.Attributes(self._properties[0], version=self.version)
1✔
44

45
    @property
1✔
46
    def components(self):
1✔
47
        if self._properties is None:
1✔
48
            self._load()
1✔
49
        if self._components is None:
1✔
50
            self._components = components.Components(
1✔
51
                self._properties[1], version=self.version
52
            )
53

54
        return self._components
1✔
55

56
    @property
1✔
57
    def component_access(self):
1✔
58
        if self._properties is None:
1✔
59
            self._load()
1✔
60
        return self._comp_access
1✔
61

62
    @property
1✔
63
    def typespec(self):
1✔
64
        if self._properties is None:
1✔
65
            self._load()
1✔
66
        return expressions.typespec(self._properties[2], version=self.version)
1✔
67

68
    @property
1✔
69
    def namespace(self):
1✔
70
        if self._properties is None:
1✔
71
            self._load()
1✔
72
        return namespaces.namespace(self._properties[3], version=self.version)
1✔
73

74
    @property
1✔
75
    def common_symbol(self):
1✔
76
        if self._properties is None:
1✔
77
            self._load()
1✔
78
        return int(self._properties[4])
1✔
79

80
    @property
1✔
81
    def formal_argument(self):
1✔
82
        if self._properties is None:
×
83
            self._load()
×
84
        return procedures.arglist(self._properties[5], version=self.version)
×
85

86
    @property
1✔
87
    def parameter(self):
1✔
88
        if self._properties is None:
1✔
89
            self._load()
1✔
90
        if self._parameter is not None:
1✔
91
            return expressions.Expression(self._parameter, version=self.version)
1✔
92

93
    @property
1✔
94
    def array_spec(self):
1✔
95
        if self._properties is None:
1✔
96
            self._load()
1✔
97
        return arrays.arrayspec(self._properties[6], version=self.version)
1✔
98

99
    @property
1✔
100
    def symbol_reference(self):
1✔
101
        if self._properties is None:
1✔
102
            self._load()
1✔
103
        if not any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
104
            return int(self._properties[7])
1✔
105

106
    @property
1✔
107
    def cray_pointer_reference(self):
1✔
108
        if self._properties is None:
1✔
109
            self._load()
1✔
110
        if any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
111
            return int(self._properties[7])
1✔
112

113
    @property
1✔
114
    def derived(self):
1✔
115
        if self._properties is None:
1✔
116
            self._load()
1✔
117
        return namespaces.derived_ns(self._properties[8], version=self.version)
1✔
118

119
    @property
1✔
120
    def actual_argument(self):
1✔
121
        if self._properties is None:
×
122
            self._load()
×
123
        return procedures.arglist(self._properties[9], version=self.version)
×
124

125
    @property
1✔
126
    def namelist(self):
1✔
127
        if self._properties is None:
×
128
            self._load()
×
129
        return namelists.namelist(self._properties[10], version=self.version)
×
130

131
    @property
1✔
132
    def intrinsic(self):
1✔
133
        if self._properties is None:
×
134
            self._load()
×
NEW
135
        return self._properties[11] == 1
×
136

137
    @property
1✔
138
    def intrinsic_symbol(self):
1✔
139
        if self._properties is None:
×
140
            self._load()
×
141
        if len(self._properties) > 12:
×
NEW
142
            return self._properties[12] == 1
×
143

144
    @property
1✔
145
    def hash(self):
1✔
146
        if self._properties is None:
×
147
            self._load()
×
148
        if len(self._properties) > 13:
×
149
            return int(self._properties[13])
×
150

151
    @property
1✔
152
    def simd(self):
1✔
153
        if self._properties is None:
×
154
            self._load()
×
155
        if len(self._properties) >= 14:
×
156
            return simds.simd(self._properties[14], version=self.version)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc