diff --git a/scripts/python-skywater-pdk/skywater_pdk/base.py b/scripts/python-skywater-pdk/skywater_pdk/base.py
index ec4864b..5ace788 100644
--- a/scripts/python-skywater-pdk/skywater_pdk/base.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/base.py
@@ -42,6 +42,15 @@
         String containing any filename extracted.
         String containing the file extension
 
+    See Also
+    --------
+    skywater_pdk.base.parse_filename
+    skywater_pdk.base.Cell
+    skywater_pdk.base.Library
+
+    Examples
+    --------
+
     >>> parse_pathname('skywater-pdk/libraries/sky130_fd_sc_hd/v0.0.1/cells/a2111o')
     (Cell(name='a2111o', library=Library(node=LibraryNode.SKY130, source=LibrarySource('fd'), type=LibraryType.sc, name='hd', version=LibraryVersion(milestone=0, major=0, minor=1, commits=0, hash=''))), None)
 
@@ -160,6 +169,15 @@
     ext : str, optional
         String containing the file extension
 
+    See Also
+    --------
+    skywater_pdk.base.parse_pathname
+    skywater_pdk.base.Cell
+    skywater_pdk.base.Library
+
+    Examples
+    --------
+
     >>> t = list(parse_filename('sky130_fd_io__top_ground_padonlyv2__tt_1p80V_3p30V_3p30V_25C.wrap.lib'))
     >>> t.pop(0)
     Cell(name='top_ground_padonlyv2', library=Library(node=LibraryNode.SKY130, source=LibrarySource('fd'), type=LibraryType.io, name='', version=None))
@@ -245,7 +263,17 @@
 @dataclass_json
 @dataclass(order=True, frozen=True)
 class LibraryVersion:
-    """
+    """Version number for a library.
+
+    See Also
+    --------
+    skywater_pdk.base.LibraryNode
+    skywater_pdk.base.LibrarySource
+    skywater_pdk.base.LibraryType
+    skywater_pdk.base.LibraryVersion
+
+    Examples
+    --------
 
     >>> v0 = LibraryVersion.parse("v0.0.0")
     >>> v0
@@ -314,6 +342,8 @@
 
 
 class LibraryNode(Enum):
+    """Process node for a library."""
+
     SKY130 = "SkyWater 130nm"
 
     @classmethod
@@ -371,6 +401,8 @@
 
 
 class LibraryType(Enum):
+    """Type of library contents."""
+
     pr = "Primitives"
     sc = "Standard Cells"
     sp = "Build Space (Flash, SRAM, etc)"
@@ -397,7 +429,20 @@
 @dataclass_json
 @dataclass
 class Library:
-    """
+    """Library of cells.
+
+    See Also
+    --------
+    skywater_pdk.base.parse_pathname
+    skywater_pdk.base.parse_filename
+    skywater_pdk.base.Cell
+    skywater_pdk.base.LibraryNode
+    skywater_pdk.base.LibrarySource
+    skywater_pdk.base.LibraryType
+    skywater_pdk.base.LibraryVersion
+
+    Examples
+    --------
 
     >>> l = Library.parse("sky130_fd_sc_hd")
     >>> l
@@ -463,7 +508,17 @@
 @dataclass_json
 @dataclass
 class Cell:
-    """
+    """Cell in a library.
+
+    See Also
+    --------
+    skywater_pdk.base.parse_pathname
+    skywater_pdk.base.parse_filename
+    skywater_pdk.base.Library
+
+    Examples
+    --------
+
     >>> c = Cell.parse("sky130_fd_sc_hd__abc")
     >>> c
     Cell(name='abc', library=Library(node=LibraryNode.SKY130, source=LibrarySource('fd'), type=LibraryType.sc, name='hd', version=None))
diff --git a/scripts/python-skywater-pdk/skywater_pdk/sizes.py b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
index 637babd..aa3b02b 100644
--- a/scripts/python-skywater-pdk/skywater_pdk/sizes.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/sizes.py
@@ -65,6 +65,15 @@
 class CellSize(abc.ABC):
     """Drive strength variants of a given cell.
 
+    See Also
+    --------
+    skywater_pdk.base.Cell
+    skywater_pdk.sizes.CellSizeNumeric
+    skywater_pdk.sizes.CellSizeLowPower
+    skywater_pdk.sizes.CellSizeMinimum
+
+    Examples
+    --------
     >>> d1 = CellSize.from_suffix("_1")
     >>> d2 = CellSize.from_suffix("_lp")
     >>> d3 = CellSize.from_suffix("_m")
@@ -138,6 +147,16 @@
 @dataclass(frozen=True)
 class CellSizeNumeric(CellSize):
     """
+
+    See Also
+    --------
+    skywater_pdk.base.Cell
+    skywater_pdk.sizes.CellSize
+    skywater_pdk.sizes.CellSizeLowPower
+    skywater_pdk.sizes.CellSizeMinimum
+
+    Examples
+    --------
     >>> s1 = CellSizeNumeric.from_suffix("_1")
     >>> s2 = CellSizeNumeric.from_suffix("_2")
     >>> s3 = CellSizeNumeric.from_suffix("_3")
@@ -199,6 +218,16 @@
 @dataclass(frozen=True)
 class CellSizeLowPower(CellSize):
     """
+
+    See Also
+    --------
+    skywater_pdk.base.Cell
+    skywater_pdk.sizes.CellSize
+    skywater_pdk.sizes.CellSizeNumeric
+    skywater_pdk.sizes.CellSizeMinimum
+
+    Examples
+    --------
     >>> lp = CellSizeLowPower.from_suffix("_lp")
     >>> lp2 = CellSizeLowPower.from_suffix("_lp2")
     >>> lp3 = CellSizeLowPower.from_suffix("_lp3")
@@ -270,6 +299,17 @@
 
 class CellSizeMinimum(CellSize):
     """
+
+    See Also
+    --------
+    skywater_pdk.base.Cell
+    skywater_pdk.sizes.CellSize
+    skywater_pdk.sizes.CellSizeNumeric
+    skywater_pdk.sizes.CellSizeLowPower
+
+
+    Examples
+    --------
     >>> m = CellSizeMinimum.from_suffix("_m")
     >>> CellSizeMinimum.from_suffix("_m2")
     Traceback (most recent call last):
diff --git a/scripts/python-skywater-pdk/skywater_pdk/utils.py b/scripts/python-skywater-pdk/skywater_pdk/utils.py
index d0b284a..9f7a641 100644
--- a/scripts/python-skywater-pdk/skywater_pdk/utils.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/utils.py
@@ -19,6 +19,7 @@
 
 import dataclasses
 import dataclasses_json
+import functools
 import random
 import sys
 
@@ -64,6 +65,9 @@
 def comparable_to_none(cls):
     """
 
+    Examples
+    --------
+
     >>> @comparable_to_none
     ... @dataclass(order=True)
     ... class A:
@@ -124,11 +128,20 @@
             s = super().__repr__()
             return s.replace('comparable_to_none.<locals>.ComparableToNoneVersion', cls.__name__)
 
+    for a in functools.WRAPPER_ASSIGNMENTS:
+        if not hasattr(cls, a):
+            continue
+        setattr(ComparableToNoneVersion, a, getattr(cls, a))
+
     return ComparableToNoneVersion
 
 
 def _is_optional_type(t):
     """
+
+    Examples
+    --------
+
     >>> _is_optional_type(Optional[int])
     True
     >>> _is_optional_type(Optional[Tuple])
@@ -141,6 +154,10 @@
 
 def _get_the_optional_type(t):
     """
+
+    Examples
+    --------
+
     >>> _get_the_optional_type(Optional[int])
     <class 'int'>
     >>> _get_the_optional_type(Optional[Tuple])
@@ -158,6 +175,10 @@
 
 def _get_type_name(ot):
     """
+
+    Examples
+    --------
+
     >>> _get_type_name(int)
     'int'
     >>> _get_type_name(Tuple)
