Skip to content

Commit b3985dd

Browse files
authored
Add explicit @OverRide type annotations (#439)
1 parent ddd8f11 commit b3985dd

File tree

334 files changed

+1895
-13
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

334 files changed

+1895
-13
lines changed

blinky_skeleton.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
from typing_extensions import override
2+
13
from edg import *
24

35

46
class BlinkyExample(SimpleBoardTop):
7+
@override
58
def contents(self) -> None:
69
super().contents()
710
# your implementation here

edg/BoardTop.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing_extensions import override
2+
13
from .parts import *
24

35

@@ -8,6 +10,7 @@ def __init__(self) -> None:
810
self.refdes_prefix = self.Parameter(StringExpr())
911
self.assign(self.refdes_prefix, "") # override with refinements
1012

13+
@override
1114
def refinements(self) -> Refinements:
1215
return super().refinements() + Refinements(
1316
class_refinements=[
@@ -52,6 +55,7 @@ class BoardTop(BaseBoardTop):
5255

5356

5457
class JlcToolingHole(InternalSubcircuit, FootprintBlock):
58+
@override
5559
def contents(self) -> None:
5660
super().contents()
5761
self.footprint(
@@ -62,6 +66,7 @@ def contents(self) -> None:
6266

6367

6468
class JlcToolingHoles(InternalSubcircuit, Block):
69+
@override
6570
def contents(self) -> None:
6671
super().contents()
6772
self.th1 = self.Block(JlcToolingHole())
@@ -71,6 +76,7 @@ def contents(self) -> None:
7176

7277
class JlcTopRefinements(BaseBoardTop):
7378
"""Design top with refinements to use parts from JLC's assembly service"""
79+
@override
7480
def refinements(self) -> Refinements:
7581
return super().refinements() + Refinements(
7682
class_refinements=[
@@ -111,13 +117,15 @@ def refinements(self) -> Refinements:
111117

112118
class JlcBoardTop(JlcTopRefinements):
113119
"""Design top with refinements to use parts from JLC's assembly service and including the tooling holes"""
120+
@override
114121
def contents(self) -> None:
115122
super().contents()
116123
self.jlc_th = self.Block(JlcToolingHoles())
117124

118125

119126
class SimpleBoardTop(JlcTopRefinements):
120127
"""A BoardTop with refinements that make getting started easier but may not be desirable everywhere."""
128+
@override
121129
def refinements(self) -> Refinements:
122130
return super().refinements() + Refinements(
123131
class_refinements=[

edg/abstract_parts/AbstractAnalogSwitch.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
from typing import List, cast, Optional, Dict
22

3+
from typing_extensions import override
4+
35
from ..electronics_model import *
46
from .Categories import Interface
57

68

79
@abstract_block
810
class AnalogSwitch(Interface, KiCadImportableBlock, Block):
911
"""Base class for a n-ported analog switch with passive-typed ports."""
12+
@override
1013
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
1114
assert symbol_name.startswith('edg_importable:Mux') # can be any Mux
1215
count = int(symbol_name.removeprefix('edg_importable:Mux'))
@@ -43,6 +46,7 @@ def __init__(self, switch_size: IntLike = 0):
4346
self.switch_size = self.ArgParameter(switch_size)
4447
self.generator_param(self.switch_size, self.inputs.requested(), self.control_gnd.is_connected())
4548

49+
@override
4650
def generate(self) -> None:
4751
import math
4852
super().generate()
@@ -104,6 +108,7 @@ def generate(self) -> None:
104108
class AnalogMuxer(Interface, KiCadImportableBlock, GeneratorBlock):
105109
"""Wrapper around AnalogSwitch that provides muxing functionality - multiple sink ports, one source port.
106110
"""
111+
@override
107112
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
108113
assert symbol_name.startswith('edg_importable:Mux') # can be any Mux
109114
count = int(symbol_name.removeprefix('edg_importable:Mux'))
@@ -132,6 +137,7 @@ def __init__(self) -> None:
132137

133138
self.generator_param(self.inputs.requested(), self.control_gnd.is_connected())
134139

140+
@override
135141
def generate(self) -> None:
136142
super().generate()
137143
self.inputs.defined()
@@ -175,6 +181,7 @@ def __init__(self) -> None:
175181

176182
self.generator_param(self.outputs.requested())
177183

184+
@override
178185
def generate(self) -> None:
179186
super().generate()
180187
self.outputs.defined()

edg/abstract_parts/AbstractAntenna.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
3636
super().__init__(*args, **kwargs)
3737
self.generator_param(self.frequency, self.power, self.impedance)
3838

39+
@override
3940
def _row_filter(self, row: PartsTableRow) -> bool:
4041
return super()._row_filter(row) and \
4142
self.get(self.frequency).fuzzy_in(row[self.FREQUENCY_RATING]) and \
4243
row[self.IMPEDANCE].fuzzy_in(self.get(self.impedance)) and\
4344
self.get(self.power).fuzzy_in(row[self.POWER_RATING])
4445

46+
@override
4547
def _row_generate(self, row: PartsTableRow) -> None:
4648
super()._row_generate(row)
4749
self.assign(self.actual_frequency_rating, row[self.FREQUENCY_RATING])

edg/abstract_parts/AbstractBjt.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class Bjt(KiCadImportableBlock, DiscreteSemiconductor, HasStandardFootprint):
1313
"""
1414
_STANDARD_FOOTPRINT = lambda: BjtStandardFootprint
1515

16+
@override
1617
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
1718
# TODO actually check that the device channel corresponds with the schematic?
1819
assert symbol_name.startswith('Device:Q_NPN_') or symbol_name.startswith('Device:Q_PNP_')
@@ -48,6 +49,7 @@ def __init__(self, collector_voltage: RangeLike, collector_current: RangeLike, *
4849
self.actual_power_rating = self.Parameter(RangeExpr())
4950
self.actual_gain = self.Parameter(RangeExpr())
5051

52+
@override
5153
def contents(self) -> None:
5254
super().contents()
5355

@@ -94,6 +96,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
9496
super().__init__(*args, **kwargs)
9597
self.generator_param(self.collector_voltage, self.collector_current, self.gain, self.power, self.channel)
9698

99+
@override
97100
def _row_filter(self, row: PartsTableRow) -> bool:
98101
return super()._row_filter(row) and \
99102
row[self.CHANNEL] == self.get(self.channel) and \
@@ -102,6 +105,7 @@ def _row_filter(self, row: PartsTableRow) -> bool:
102105
row[self.GAIN].fuzzy_in(self.get(self.gain)) and \
103106
self.get(self.power).fuzzy_in(row[self.POWER_RATING])
104107

108+
@override
105109
def _row_generate(self, row: PartsTableRow) -> None:
106110
super()._row_generate(row)
107111
self.assign(self.actual_collector_voltage_rating, row[self.VCE_RATING])

edg/abstract_parts/AbstractCapacitor.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from typing import Optional, cast, Dict, Any, Tuple, Mapping
44
import math
55

6+
from typing_extensions import override
7+
68
from ..electronics_model import *
79
from .ESeriesUtil import ESeriesUtil
810
from .PartsTable import PartsTableColumn, PartsTableRow, PartsTable
@@ -35,6 +37,7 @@ def __init__(self, capacitance: RangeLike, voltage: RangeLike, *,
3537
self.actual_capacitance = self.Parameter(RangeExpr())
3638
self.actual_voltage_rating = self.Parameter(RangeExpr())
3739

40+
@override
3841
def contents(self) -> None:
3942
super().contents()
4043

@@ -55,6 +58,7 @@ class Capacitor(UnpolarizedCapacitor, KiCadInstantiableBlock, HasStandardFootpri
5558
"\s*" + f"([\d.{PartParserUtil.SI_PREFIXES}]+\s*V)" + "$")
5659
CAPACITOR_DEFAULT_TOL = 0.20 # TODO this should be unified elsewhere
5760

61+
@override
5862
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
5963
assert symbol_name in ('Device:C', 'Device:C_Small', 'Device:C_Polarized', 'Device:C_Polarized_Small')
6064
return {'1': self.pos, '2': self.neg}
@@ -75,6 +79,7 @@ def parse_capacitor(cls, value: str) -> Tuple[Range, Range]:
7579
return (capacitance, Range.zero_to_upper(voltage))
7680

7781
@classmethod
82+
@override
7883
def block_from_symbol(cls, symbol_name: str, properties: Mapping[str, str]) -> 'Capacitor':
7984
return Capacitor(*cls.parse_capacitor(properties['Value']))
8085

@@ -180,11 +185,13 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
180185
super().__init__(*args, **kwargs)
181186
self.generator_param(self.capacitance, self.voltage, self.voltage_rating_derating, self.exact_capacitance)
182187

188+
@override
183189
def _row_generate(self, row: PartsTableRow) -> None:
184190
super()._row_generate(row)
185191
self.assign(self.actual_voltage_rating, row[self.VOLTAGE_RATING])
186192
self.assign(self.actual_capacitance, row[self.CAPACITANCE])
187193

194+
@override
188195
def _row_filter(self, row: PartsTableRow) -> bool:
189196
derated_voltage = self.get(self.voltage) / self.get(self.voltage_rating_derating)
190197
return super()._row_filter(row) and \
@@ -195,6 +202,7 @@ def _row_filter_capacitance(self, row: PartsTableRow) -> bool:
195202
return row[self.CAPACITANCE].fuzzy_in(self.get(self.capacitance))
196203

197204
@classmethod
205+
@override
198206
def _row_sort_by(cls, row: PartsTableRow) -> Any:
199207
return (ESeriesUtil.series_of(row[cls.NOMINAL_CAPACITANCE], default=ESeriesUtil.SERIES_MAX + 1),
200208
super()._row_sort_by(row))
@@ -224,10 +232,12 @@ def __init__(self, *args: Any, single_nominal_capacitance: RangeLike = (0, 22)*u
224232

225233
self.actual_derated_capacitance = self.Parameter(RangeExpr())
226234

235+
@override
227236
def _row_filter_capacitance(self, row: PartsTableRow) -> bool:
228237
# post-derating capacitance filtering is in _table_postprocess
229238
return Range.exact(row[self.NOMINAL_CAPACITANCE]).fuzzy_in(self.get(self.single_nominal_capacitance))
230239

240+
@override
231241
def _table_postprocess(self, table: PartsTable) -> PartsTable:
232242
def add_derated_row(row: PartsTableRow) -> Optional[Dict[PartsTableColumn, Any]]:
233243
if not self.get(self.exact_capacitance):
@@ -264,6 +274,7 @@ def add_derated_row(row: PartsTableRow) -> Optional[Dict[PartsTableColumn, Any]]
264274
row[self.PARALLEL_DERATED_CAPACITANCE].fuzzy_in(self.get(self.capacitance))
265275
))
266276

277+
@override
267278
def _row_generate(self, row: PartsTableRow) -> None:
268279
"""This one is weird. Because this is the last in the class order, this is called last.
269280
So the top subclass needs explicit logic to handle parallel capacitors."""
@@ -307,6 +318,7 @@ def __init__(self, footprint: StringLike = "", manufacturer: StringLike = "", pa
307318
class DecouplingCapacitor(DiscreteApplication, KiCadImportableBlock):
308319
"""Optionally polarized capacitor used for DC decoupling, with VoltageSink connections with voltage inference.
309320
Implemented as a shim block."""
321+
@override
310322
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
311323
assert symbol_name in ('Device:C', 'Device:C_Small', 'Device:C_Polarized', 'Device:C_Polarized_Small')
312324
return {'1': self.pwr, '2': self.gnd}
@@ -339,6 +351,7 @@ def connected(self, gnd: Optional[Port[GroundLink]] = None, pwr: Optional[Port[V
339351
class AnalogCapacitor(DiscreteApplication, KiCadImportableBlock):
340352
"""Capacitor attached to an analog line, that presents as an open model-wise.
341353
"""
354+
@override
342355
def symbol_pinning(self, symbol_name: str) -> Dict[str, BasePort]:
343356
assert symbol_name in ('Device:C', 'Device:C_Small', 'Device:C_Polarized', 'Device:C_Polarized_Small')
344357
return {'1': self.io, '2': self.gnd}
@@ -363,6 +376,7 @@ def connected(self, gnd: Optional[Port[GroundLink]] = None, io: Optional[Port[An
363376

364377

365378
class CombinedCapacitorElement(Capacitor): # to avoid an abstract part error
379+
@override
366380
def contents(self) -> None:
367381
super().contents()
368382
self.assign(self.actual_capacitance, self.capacitance) # fake it, since a combined capacitance is handwavey
@@ -391,6 +405,7 @@ def __init__(self, *, extend_upper: BoolLike = False) -> None:
391405
self.generator_param(self.pos.requested(), self.neg.requested(), self.extend_upper)
392406

393407

408+
@override
394409
def generate(self) -> None:
395410
super().generate()
396411
capacitance = self.capacitances.sum()

edg/abstract_parts/AbstractComparator.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
from typing import Mapping
22

3+
from typing_extensions import override
4+
35
from .ResistiveDivider import FeedbackVoltageDivider, VoltageDivider
46
from ..abstract_parts import Analog
57
from ..electronics_model import *
68

79

810
class Comparator(KiCadInstantiableBlock, Analog):
911
"""Abstract comparator interface, output goes high when inp > inn."""
12+
@override
1013
def symbol_pinning(self, symbol_name: str) -> Mapping[str, BasePort]:
1114
assert symbol_name in ('Simulation_SPICE:OPAMP', 'edg_importable:Opamp')
1215
return {'+': self.inp, '-': self.inn, '3': self.out, 'V+': self.pwr, 'V-': self.gnd}
1316

1417
@classmethod
18+
@override
1519
def block_from_symbol(cls, symbol_name: str, properties: Mapping[str, str]) -> 'Comparator':
1620
return Comparator()
1721

@@ -55,6 +59,7 @@ def __init__(self, trip_voltage: RangeLike, *, invert: BoolLike = False,
5559

5660
self.actual_trip_voltage = self.Parameter(RangeExpr())
5761

62+
@override
5863
def generate(self) -> None:
5964
super().generate()
6065

edg/abstract_parts/AbstractCrystal.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import Any
22

3+
from typing_extensions import override
4+
35
from ..electronics_model import *
46
from . import PartsTableSelector, PartsTableColumn, Capacitor, PartsTableRow
57
from .Categories import *
@@ -21,6 +23,7 @@ def __init__(self, frequency: RangeLike) -> None:
2123
self.crystal = self.Port(CrystalPort(self.actual_frequency), [InOut]) # set by subclass
2224
self.gnd = self.Port(Ground(), [Common])
2325

26+
@override
2427
def contents(self) -> None:
2528
super().contents()
2629

@@ -66,10 +69,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
6669
super().__init__(*args, **kwargs)
6770
self.generator_param(self.frequency)
6871

72+
@override
6973
def _row_filter(self, row: PartsTableRow) -> bool:
7074
return super()._row_filter(row) and \
7175
(row[self.FREQUENCY] in self.get(self.frequency))
7276

77+
@override
7378
def _row_generate(self, row: PartsTableRow) -> None:
7479
super()._row_generate(row)
7580
self.assign(self.actual_frequency, row[self.FREQUENCY])
@@ -103,6 +108,7 @@ class OscillatorCrystal(OscillatorReference): # TODO rename to disambiguate fro
103108
# TODO this should be formalized better.
104109
CAPACITOR_TOLERANCE = 0.38
105110

111+
@override
106112
def contents(self) -> None:
107113
super().contents()
108114

0 commit comments

Comments
 (0)