Coverage for pyVHDLModel/Interface.py: 66%

86 statements  

« prev     ^ index     » next       coverage.py v7.6.9, created at 2024-12-20 22:13 +0000

1# ==================================================================================================================== # 

2# __ ___ _ ____ _ __ __ _ _ # 

3# _ __ _ \ \ / / | | | _ \| | | \/ | ___ __| | ___| | # 

4# | '_ \| | | \ \ / /| |_| | | | | | | |\/| |/ _ \ / _` |/ _ \ | # 

5# | |_) | |_| |\ V / | _ | |_| | |___| | | | (_) | (_| | __/ | # 

6# | .__/ \__, | \_/ |_| |_|____/|_____|_| |_|\___/ \__,_|\___|_| # 

7# |_| |___/ # 

8# ==================================================================================================================== # 

9# Authors: # 

10# Patrick Lehmann # 

11# # 

12# License: # 

13# ==================================================================================================================== # 

14# Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany # 

15# Copyright 2016-2017 Patrick Lehmann - Dresden, Germany # 

16# # 

17# Licensed under the Apache License, Version 2.0 (the "License"); # 

18# you may not use this file except in compliance with the License. # 

19# You may obtain a copy of the License at # 

20# # 

21# http://www.apache.org/licenses/LICENSE-2.0 # 

22# # 

23# Unless required by applicable law or agreed to in writing, software # 

24# distributed under the License is distributed on an "AS IS" BASIS, # 

25# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # 

26# See the License for the specific language governing permissions and # 

27# limitations under the License. # 

28# # 

29# SPDX-License-Identifier: Apache-2.0 # 

30# ==================================================================================================================== # 

31# 

32""" 

33This module contains parts of an abstract document language model for VHDL. 

34 

35Interface items are used in generic, port and parameter declarations. 

36""" 

37from typing import Iterable, Optional as Nullable 

38 

39from pyTooling.Decorators import export, readonly 

40from pyTooling.MetaClasses import ExtendedType 

41 

42from pyVHDLModel.Symbol import Symbol 

43from pyVHDLModel.Base import ModelEntity, DocumentedEntityMixin, ExpressionUnion, Mode 

44from pyVHDLModel.Object import Constant, Signal, Variable, File 

45from pyVHDLModel.Subprogram import Procedure, Function 

46from pyVHDLModel.Type import Type 

47 

48 

49@export 

50class InterfaceItemMixin(DocumentedEntityMixin, mixin=True): 

51 """An ``InterfaceItem`` is a base-class for all mixin-classes for all interface items.""" 

52 

53 def __init__(self, documentation: Nullable[str] = None) -> None: 

54 super().__init__(documentation) 

55 

56 

57@export 

58class InterfaceItemWithModeMixin(metaclass=ExtendedType, mixin=True): 

59 """An ``InterfaceItemWithMode`` is a mixin-class to provide a ``Mode`` to interface items.""" 

60 

61 _mode: Mode 

62 

63 def __init__(self, mode: Mode) -> None: 

64 self._mode = mode 

65 

66 @readonly 

67 def Mode(self) -> Mode: 

68 return self._mode 

69 

70 

71@export 

72class GenericInterfaceItemMixin(InterfaceItemMixin, mixin=True): 

73 """A ``GenericInterfaceItem`` is a mixin class for all generic interface items.""" 

74 

75 

76@export 

77class PortInterfaceItemMixin(InterfaceItemMixin, InterfaceItemWithModeMixin, mixin=True): 

78 """A ``PortInterfaceItem`` is a mixin class for all port interface items.""" 

79 

80 def __init__(self, mode: Mode) -> None: 

81 super().__init__() 

82 InterfaceItemWithModeMixin.__init__(self, mode) 

83 

84 

85@export 

86class ParameterInterfaceItemMixin(InterfaceItemMixin, mixin=True): 

87 """A ``ParameterInterfaceItem`` is a mixin class for all parameter interface items.""" 

88 

89 

90@export 

91class GenericConstantInterfaceItem(Constant, GenericInterfaceItemMixin, InterfaceItemWithModeMixin): 

92 def __init__( 

93 self, 

94 identifiers: Iterable[str], 

95 mode: Mode, 

96 subtype: Symbol, 

97 defaultExpression: Nullable[ExpressionUnion] = None, 

98 documentation: Nullable[str] = None, 

99 parent: ModelEntity = None 

100 ) -> None: 

101 super().__init__(identifiers, subtype, defaultExpression, documentation, parent) 

102 GenericInterfaceItemMixin.__init__(self) 

103 InterfaceItemWithModeMixin.__init__(self, mode) 

104 

105 

106@export 

107class GenericTypeInterfaceItem(Type, GenericInterfaceItemMixin): 

108 def __init__(self, identifier: str, documentation: Nullable[str] = None, parent: ModelEntity = None) -> None: 

109 super().__init__(identifier, documentation, parent) 

110 GenericInterfaceItemMixin.__init__(self) 

111 

112 

113@export 

114class GenericSubprogramInterfaceItem(GenericInterfaceItemMixin): 

115 pass 

116 

117 

118@export 

119class GenericProcedureInterfaceItem(Procedure, GenericInterfaceItemMixin): 

120 def __init__(self, identifier: str, documentation: Nullable[str] = None, parent: ModelEntity = None) -> None: 

121 super().__init__(identifier, documentation, parent) 

122 GenericInterfaceItemMixin.__init__(self) 

123 

124 

125@export 

126class GenericFunctionInterfaceItem(Function, GenericInterfaceItemMixin): 

127 def __init__(self, identifier: str, documentation: Nullable[str] = None, parent: ModelEntity = None) -> None: 

128 super().__init__(identifier, documentation, parent) 

129 GenericInterfaceItemMixin.__init__(self) 

130 

131 

132@export 

133class GenericPackageInterfaceItem(GenericInterfaceItemMixin): 

134 def __init__(self, identifier: str, documentation: Nullable[str] = None, parent: ModelEntity = None) -> None: 

135 super().__init__(identifier, documentation, parent) 

136 GenericInterfaceItemMixin.__init__(self) 

137 

138 

139@export 

140class PortSignalInterfaceItem(Signal, PortInterfaceItemMixin): 

141 def __init__( 

142 self, 

143 identifiers: Iterable[str], 

144 mode: Mode, 

145 subtype: Symbol, 

146 defaultExpression: Nullable[ExpressionUnion] = None, 

147 documentation: Nullable[str] = None, 

148 parent: ModelEntity = None 

149 ) -> None: 

150 super().__init__(identifiers, subtype, defaultExpression, documentation, parent) 

151 PortInterfaceItemMixin.__init__(self, mode) 

152 

153 

154@export 

155class ParameterConstantInterfaceItem(Constant, ParameterInterfaceItemMixin, InterfaceItemWithModeMixin): 

156 def __init__( 

157 self, 

158 identifiers: Iterable[str], 

159 mode: Mode, 

160 subtype: Symbol, 

161 defaultExpression: Nullable[ExpressionUnion] = None, 

162 documentation: Nullable[str] = None, 

163 parent: ModelEntity = None 

164 ) -> None: 

165 super().__init__(identifiers, subtype, defaultExpression, documentation, parent) 

166 ParameterInterfaceItemMixin.__init__(self) 

167 InterfaceItemWithModeMixin.__init__(self, mode) 

168 

169 

170@export 

171class ParameterVariableInterfaceItem(Variable, ParameterInterfaceItemMixin, InterfaceItemWithModeMixin): 

172 def __init__( 

173 self, 

174 identifiers: Iterable[str], 

175 mode: Mode, 

176 subtype: Symbol, 

177 defaultExpression: Nullable[ExpressionUnion] = None, 

178 documentation: Nullable[str] = None, 

179 parent: ModelEntity = None 

180 ) -> None: 

181 super().__init__(identifiers, subtype, defaultExpression, documentation, parent) 

182 ParameterInterfaceItemMixin.__init__(self) 

183 InterfaceItemWithModeMixin.__init__(self, mode) 

184 

185 

186@export 

187class ParameterSignalInterfaceItem(Signal, ParameterInterfaceItemMixin, InterfaceItemWithModeMixin): 

188 def __init__( 

189 self, 

190 identifiers: Iterable[str], 

191 mode: Mode, 

192 subtype: Symbol, 

193 defaultExpression: Nullable[ExpressionUnion] = None, 

194 documentation: Nullable[str] = None, 

195 parent: ModelEntity = None 

196 ) -> None: 

197 super().__init__(identifiers, subtype, defaultExpression, documentation, parent) 

198 ParameterInterfaceItemMixin.__init__(self) 

199 InterfaceItemWithModeMixin.__init__(self, mode) 

200 

201 

202@export 

203class ParameterFileInterfaceItem(File, ParameterInterfaceItemMixin): 

204 def __init__( 

205 self, 

206 identifiers: Iterable[str], 

207 subtype: Symbol, 

208 documentation: Nullable[str] = None, 

209 parent: ModelEntity = None 

210 ) -> None: 

211 super().__init__(identifiers, subtype, documentation, parent) 

212 ParameterInterfaceItemMixin.__init__(self)