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

rjfarmer / gfModParser / 18542693371

15 Oct 2025 09:07PM UTC coverage: 88.199% (-0.6%) from 88.811%
18542693371

push

github

rjfarmer
Fix string test

1009 of 1144 relevant lines covered (88.2%)

0.88 hits per line

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

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

3
from typing import Type
1✔
4

5

6
from gfModParser import utils
1✔
7

8
from . import attributes
1✔
9
from . import components
1✔
10
from . import expressions
1✔
11
from . import simds
1✔
12
from . import namespaces
1✔
13
from . import procedures
1✔
14
from . import arrays
1✔
15
from . import namelists
1✔
16

17

18
class Properties:
1✔
19
    """
20
    Stores properties of an object
21
    """
22

23
    def __init__(self, properties, *, version):
1✔
24
        self._raw = properties
1✔
25
        self.version = version
1✔
26
        self._properties = None
1✔
27
        self._components = None
1✔
28

29
        self._comp_access = None
1✔
30
        self._exp_type = None
1✔
31

32
    def _load(self):
1✔
33
        self._properties = []
1✔
34
        p = utils.bracket_split(self._raw)
1✔
35
        self._properties = p[0]
1✔
36

37
        if isinstance(self._properties[2], str):
1✔
38
            self._comp_access = self._properties[2]
1✔
39
            _ = self._properties.pop(2)
1✔
40
        if self.attributes.is_parameter:
1✔
41
            self._exp_type = self._properties[6]
1✔
42
            _ = self._properties.pop(6)
1✔
43

44
    @property
1✔
45
    def attributes(self) -> attributes.Attributes:
1✔
46
        if self._properties is None:
1✔
47
            self._load()
1✔
48
        return attributes.Attributes(self._properties[0], version=self.version)
1✔
49

50
    @property
1✔
51
    def components(self) -> components.Components:
1✔
52
        if self._properties is None:
1✔
53
            self._load()
1✔
54
        if self._components is None:
1✔
55
            self._components = components.Components(
1✔
56
                self._properties[1], version=self.version
57
            )
58

59
        return self._components
1✔
60

61
    @property
1✔
62
    def component_access(self):
1✔
63
        if self._properties is None:
1✔
64
            self._load()
1✔
65
        return self._comp_access
1✔
66

67
    @property
1✔
68
    def typespec(self) -> expressions.typespec:
1✔
69
        if self._properties is None:
1✔
70
            self._load()
1✔
71
        return expressions.typespec(self._properties[2], version=self.version)
1✔
72

73
    @property
1✔
74
    def namespace(self) -> namespaces.namespace:
1✔
75
        if self._properties is None:
1✔
76
            self._load()
1✔
77
        return namespaces.namespace(self._properties[3], version=self.version)
1✔
78

79
    @property
1✔
80
    def common_symbol(self) -> int:
1✔
81
        if self._properties is None:
1✔
82
            self._load()
1✔
83
        return int(self._properties[4])
1✔
84

85
    @property
1✔
86
    def formal_argument(self) -> procedures.Arglist:
1✔
87
        """
88
        Symbol references for the procedure arguments
89
        """
90
        if self._properties is None:
1✔
91
            self._load()
1✔
92
        return procedures.Arglist(self._properties[5], version=self.version)
1✔
93

94
    @property
1✔
95
    def exp_type(self) -> expressions.Expression | None:
1✔
96
        if self._properties is None:
1✔
97
            self._load()
1✔
98

99
        if self._exp_type is not None:
1✔
100
            return expressions.Expression(self._exp_type, version=self.version)
1✔
101
        return None
×
102

103
    @property
1✔
104
    def array_spec(self) -> arrays.arrayspec:
1✔
105
        if self._properties is None:
1✔
106
            self._load()
1✔
107
        return arrays.arrayspec(self._properties[6], version=self.version)
1✔
108

109
    @property
1✔
110
    def symbol_reference(self) -> int:
1✔
111
        """
112
        0 if a subroutine, else the symbol reference for a function result
113
        """
114
        if self._properties is None:
1✔
115
            self._load()
1✔
116
        if not any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
117
            return int(self._properties[7])
1✔
118
        return -1
×
119

120
    @property
1✔
121
    def cray_pointer_reference(self) -> int:
1✔
122
        if self._properties is None:
1✔
123
            self._load()
1✔
124
        if any([i == "CRAY_POINTER" for i in self.attributes.attributes]):
1✔
125
            return int(self._properties[7])
1✔
126
        return -1
1✔
127

128
    @property
1✔
129
    def derived(self) -> namespaces.derived_ns:
1✔
130
        if self._properties is None:
1✔
131
            self._load()
1✔
132
        return namespaces.derived_ns(self._properties[8], version=self.version)
1✔
133

134
    @property
1✔
135
    def actual_argument(self) -> procedures.Arglist:
1✔
136
        if self._properties is None:
×
137
            self._load()
×
138
        return procedures.Arglist(self._properties[9], version=self.version)
×
139

140
    @property
1✔
141
    def namelist(self) -> namelists.Namelist | None:
1✔
142
        if self._properties is None:
1✔
143
            self._load()
1✔
144
        if self.attributes.is_namelist:
1✔
145
            return namelists.Namelist(self._properties[10], version=self.version)
1✔
146
        return None
×
147

148
    @property
1✔
149
    def intrinsic(self) -> bool:
1✔
150
        if self._properties is None:
×
151
            self._load()
×
152
        return self._properties[11] == 1
×
153

154
    @property
1✔
155
    def intrinsic_symbol(self) -> bool:
1✔
156
        if self._properties is None:
×
157
            self._load()
×
158
        if len(self._properties) > 12:
×
159
            return self._properties[12] == 1
×
160
        return False
×
161

162
    @property
1✔
163
    def hash(self) -> int:
1✔
164
        if self._properties is None:
×
165
            self._load()
×
166
        if len(self._properties) > 13:
×
167
            return int(self._properties[13])
×
168
        return -1
×
169

170
    @property
1✔
171
    def simd(self) -> simds.simd_dec | None:
1✔
172
        if self._properties is None:
×
173
            self._load()
×
174
        if len(self._properties) >= 14:
×
175
            return simds.simd_dec(self._properties[14], version=self.version)
×
176
        return None
×
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