diff --git a/scripts/python-skywater-pdk/skywater_pdk/sizes.py b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
index ac6ff64..ff8df2b 100644
--- a/scripts/python-skywater-pdk/skywater_pdk/sizes.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
@@ -21,16 +21,16 @@
     """
 
     >>> parse_size('_1')
-    TransistorSizeNumeric(units=1)
+    CellSizeNumeric(units=1)
 
     >>> parse_size('sky130_fd_sc_ms__sdfrtp_1.v')
-    TransistorSizeNumeric(units=1)
+    CellSizeNumeric(units=1)
 
     >>> parse_size('libraries/sky130_fd_sc_ms/v0.0.1/cells/sdfrtp/sky130_fd_sc_ms__sdfrtp_1.v')
-    TransistorSizeNumeric(units=1)
+    CellSizeNumeric(units=1)
 
     >>> parse_size('libraries/sky130_fd_sc_ms/v0.0.1/cells/sdfrtp/sky130_fd_sc_ms__sdfrtp_1.bb.blackbox.v')
-    TransistorSizeNumeric(units=1)
+    CellSizeNumeric(units=1)
 
     >>> parse_size('libraries/sky130_fd_sc_ms/v0.0.1/cells/sdfrtp/sky130_fd_sc_ms__sdfrtp.v')
     >>> parse_size('sky130_fd_sc_ms__sdfrtp.v')
@@ -44,7 +44,7 @@
     if not s or s == '_':
         return None
     try:
-        return TransistorSize.from_suffix(s)
+        return CellSize.from_suffix(s)
     except InvalidSuffixError as e:
         return None
 
@@ -54,23 +54,23 @@
         ValueError.__init__(self, "Invalid suffix: {}".format(s.strip()))
 
 
-class TransistorSize(abc.ABC):
+class CellSize(abc.ABC):
     """Drive strength variants of a given cell.
 
-    >>> d1 = TransistorSize.from_suffix("_1")
-    >>> d2 = TransistorSize.from_suffix("_lp")
-    >>> d3 = TransistorSize.from_suffix("_m")
-    >>> d4 = TransistorSize.from_suffix("_2")
-    >>> TransistorSize.from_suffix("_abc")
+    >>> d1 = CellSize.from_suffix("_1")
+    >>> d2 = CellSize.from_suffix("_lp")
+    >>> d3 = CellSize.from_suffix("_m")
+    >>> d4 = CellSize.from_suffix("_2")
+    >>> CellSize.from_suffix("_abc")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _abc
     >>> l = [d1, d2, d3, d4]
     >>> l
-    [TransistorSizeNumeric(units=1), TransistorSizeLowPower(lp_variant=0), TransistorSizeMinimum(), TransistorSizeNumeric(units=2)]
+    [CellSizeNumeric(units=1), CellSizeLowPower(lp_variant=0), CellSizeMinimum(), CellSizeNumeric(units=2)]
     >>> l.sort()
     >>> l
-    [TransistorSizeNumeric(units=1), TransistorSizeNumeric(units=2), TransistorSizeLowPower(lp_variant=0), TransistorSizeMinimum()]
+    [CellSizeNumeric(units=1), CellSizeNumeric(units=2), CellSizeLowPower(lp_variant=0), CellSizeMinimum()]
     """
 
     @abc.abstractmethod
@@ -102,7 +102,7 @@
         return "with size {}".format(self.describe())
 
     def _cmp(self, op, o):
-        if not isinstance(o, TransistorSize):
+        if not isinstance(o, CellSize):
             return False
         return op(self.suffix, o.suffix)
 
@@ -128,21 +128,21 @@
 
 @dataclass_json
 @dataclass(frozen=True)
-class TransistorSizeNumeric(TransistorSize):
+class CellSizeNumeric(CellSize):
     """
-    >>> s1 = TransistorSizeNumeric.from_suffix("_1")
-    >>> s2 = TransistorSizeNumeric.from_suffix("_2")
-    >>> s3 = TransistorSizeNumeric.from_suffix("_3")
-    >>> TransistorSizeNumeric.from_suffix("_-1")
+    >>> s1 = CellSizeNumeric.from_suffix("_1")
+    >>> s2 = CellSizeNumeric.from_suffix("_2")
+    >>> s3 = CellSizeNumeric.from_suffix("_3")
+    >>> CellSizeNumeric.from_suffix("_-1")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _-1
     >>> s1
-    TransistorSizeNumeric(units=1)
+    CellSizeNumeric(units=1)
     >>> s2
-    TransistorSizeNumeric(units=2)
+    CellSizeNumeric(units=2)
     >>> s3
-    TransistorSizeNumeric(units=3)
+    CellSizeNumeric(units=3)
     >>> str(s1)
     'with size of 1 units'
     >>> str(s2)
@@ -189,21 +189,21 @@
 
 @dataclass_json
 @dataclass(frozen=True)
-class TransistorSizeLowPower(TransistorSize):
+class CellSizeLowPower(CellSize):
     """
-    >>> lp = TransistorSizeLowPower.from_suffix("_lp")
-    >>> lp2 = TransistorSizeLowPower.from_suffix("_lp2")
-    >>> lp3 = TransistorSizeLowPower.from_suffix("_lp3")
-    >>> TransistorSizeLowPower.from_suffix("_ld")
+    >>> lp = CellSizeLowPower.from_suffix("_lp")
+    >>> lp2 = CellSizeLowPower.from_suffix("_lp2")
+    >>> lp3 = CellSizeLowPower.from_suffix("_lp3")
+    >>> CellSizeLowPower.from_suffix("_ld")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _ld
     >>> lp
-    TransistorSizeLowPower(lp_variant=0)
+    CellSizeLowPower(lp_variant=0)
     >>> lp2
-    TransistorSizeLowPower(lp_variant=1)
+    CellSizeLowPower(lp_variant=1)
     >>> lp3
-    TransistorSizeLowPower(lp_variant=2)
+    CellSizeLowPower(lp_variant=2)
     >>> str(lp)
     'with size for low power'
     >>> str(lp2)
@@ -260,15 +260,15 @@
             return cls(i-1)
 
 
-class TransistorSizeMinimum(TransistorSize):
+class CellSizeMinimum(CellSize):
     """
-    >>> m = TransistorSizeMinimum.from_suffix("_m")
-    >>> TransistorSizeMinimum.from_suffix("_m2")
+    >>> m = CellSizeMinimum.from_suffix("_m")
+    >>> CellSizeMinimum.from_suffix("_m2")
     Traceback (most recent call last):
         ...
     InvalidSuffixError: Invalid suffix: _m2
     >>> m
-    TransistorSizeMinimum()
+    CellSizeMinimum()
     >>> str(m)
     'with size minimum'
     >>> m.describe()
@@ -276,8 +276,8 @@
     >>> m.suffix
     '_m'
 
-    >>> m1 = TransistorSizeMinimum()
-    >>> m2 = TransistorSizeMinimum()
+    >>> m1 = CellSizeMinimum()
+    >>> m2 = CellSizeMinimum()
     >>> assert m1 is m2
     """
     _object = None
@@ -287,7 +287,7 @@
         return cls._object
 
     def __repr__(self):
-        return "TransistorSizeMinimum()"
+        return "CellSizeMinimum()"
 
     def describe(self):
         return "minimum"
@@ -309,7 +309,7 @@
         return {'minimum': None}
 
 
-TransistorSizeMinimum._object = TransistorSizeMinimum()
+CellSizeMinimum._object = CellSizeMinimum()
 
 
 if __name__ == "__main__":
