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

rjfarmer / gfModParser / 18325561673

07 Oct 2025 08:37PM UTC coverage: 88.694% (-1.2%) from 89.901%
18325561673

push

github

rjfarmer
Typing

84 of 99 new or added lines in 13 files covered. (84.85%)

2 existing lines in 1 file now uncovered.

1012 of 1141 relevant lines covered (88.69%)

0.89 hits per line

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

83.72
/gfModParser/modules/properties.py
1
# SPDX-License-Identifier: GPL-2.0+
2

3
from .. import utils
1✔
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 = utils.bracket_split(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) -> int:
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
        """
83
        Symbol references for the procedure arguments
84
        """
85
        if self._properties is None:
1✔
86
            self._load()
1✔
87
        return procedures.Arglist(self._properties[5], version=self.version)
1✔
88

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

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

102
    @property
1✔
103
    def symbol_reference(self) -> int:
1✔
104
        """
105
        0 if a subroutine, else the symbol reference for a function result
106
        """
107
        if self._properties is None:
1✔
108
            self._load()
1✔
109
        if not any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
110
            return int(self._properties[7])
1✔
NEW
111
        return -1
×
112

113
    @property
1✔
114
    def cray_pointer_reference(self) -> int:
1✔
115
        if self._properties is None:
1✔
116
            self._load()
1✔
117
        if any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
118
            return int(self._properties[7])
1✔
119
        return -1
1✔
120

121
    @property
1✔
122
    def derived(self):
1✔
123
        if self._properties is None:
1✔
124
            self._load()
1✔
125
        return namespaces.derived_ns(self._properties[8], version=self.version)
1✔
126

127
    @property
1✔
128
    def actual_argument(self):
1✔
129
        if self._properties is None:
×
130
            self._load()
×
131
        return procedures.Arglist(self._properties[9], version=self.version)
×
132

133
    @property
1✔
134
    def namelist(self):
1✔
135
        if self._properties is None:
1✔
136
            self._load()
1✔
137
        if self.attributes.is_namelist:
1✔
138
            return namelists.Namelist(self._properties[10], version=self.version)
1✔
139

140
    @property
1✔
141
    def intrinsic(self) -> bool:
1✔
142
        if self._properties is None:
×
143
            self._load()
×
144
        return self._properties[11] == 1
×
145

146
    @property
1✔
147
    def intrinsic_symbol(self) -> bool:
1✔
148
        if self._properties is None:
×
149
            self._load()
×
150
        if len(self._properties) > 12:
×
151
            return self._properties[12] == 1
×
NEW
152
        return False
×
153

154
    @property
1✔
155
    def hash(self) -> int:
1✔
156
        if self._properties is None:
×
157
            self._load()
×
158
        if len(self._properties) > 13:
×
159
            return int(self._properties[13])
×
NEW
160
        return -1
×
161

162
    @property
1✔
163
    def simd(self):
1✔
164
        if self._properties is None:
×
165
            self._load()
×
166
        if len(self._properties) >= 14:
×
167
            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