docs: Lots of improvements to the documentation.

Signed-off-by: Tim 'mithro' Ansell <tansell@google.com>
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)