Index: sasmodels/kernelpy.py
===================================================================
--- sasmodels/kernelpy.py	(revision e62a134977ad95083b632930400ef7aa9f96129d)
+++ sasmodels/kernelpy.py	(revision c1a888bc42c8cdf15d77cf0bd00d057c059837be)
@@ -14,5 +14,5 @@
 
 try:
-    from typing import Union
+    from typing import Union, Callable
 except:
     pass
Index: sasmodels/model_test.py
===================================================================
--- sasmodels/model_test.py	(revision e62a134977ad95083b632930400ef7aa9f96129d)
+++ sasmodels/model_test.py	(revision c1a888bc42c8cdf15d77cf0bd00d057c059837be)
@@ -323,5 +323,5 @@
 
 def model_tests():
-    # type: () -> Iterator[Callable[[], None]
+    # type: () -> Iterator[Callable[[], None]]
     """
     Test runner visible to nosetests.
Index: sasmodels/modelinfo.py
===================================================================
--- sasmodels/modelinfo.py	(revision f6029fd401b236fd9d9f4276492a559b0a5f1243)
+++ sasmodels/modelinfo.py	(revision c1a888bc42c8cdf15d77cf0bd00d057c059837be)
@@ -83,9 +83,9 @@
     # if limits is a list of strings, then this is a choice list
     # field, and limits are 1 to length of string list
+    choices = []  # type: List[str]
     if isinstance(limits, list) and all(isstr(k) for k in limits):
         choices = limits
-        limits = [0, len(choices)-1]
-    else:
-        choices = []
+        limits = (0., len(choices)-1.)
+
     # TODO: maybe allow limits of None for (-inf, inf)
     try:
@@ -276,5 +276,5 @@
     def __init__(self, name, units='', default=None, limits=(-np.inf, np.inf),
                  ptype='', description=''):
-        # type: (str, str, float, Limits, str, str)
+        # type: (str, str, float, Limits, str, str) -> None
         self.id = name.split('[')[0].strip() # type: str
         self.name = name                     # type: str
@@ -327,5 +327,5 @@
 
     def as_call_reference(self, prefix=""):
-        # type: () -> str
+        # type: (str) -> str
         # Note: if the parameter is a struct type, then we will need to use
         # &prefix+id.  For scalars and vectors we can just use prefix+id.
@@ -549,5 +549,5 @@
 
         # Gather entries such as name[n] into groups of the same n
-        dependent = dict((p.id, []) for p in control)
+        dependent = dict((p.id, []) for p in control)  # type: Dict[str, List[Parameter]]
         for p in self.kernel_parameters:
             if p.length_control is not None:
@@ -555,5 +555,5 @@
 
         # Gather entries such as name[4] into groups of the same length
-        fixed = {}
+        fixed = {}  # type: Dict[int, List[Parameter]]
         for p in self.kernel_parameters:
             if p.length > 1 and p.length_control is None:
@@ -617,5 +617,5 @@
     info = ModelInfo()
     #print("make parameter table", kernel_module.parameters)
-    parameters = make_parameter_table(kernel_module.parameters)
+    parameters = make_parameter_table(getattr(kernel_module, 'parameters', []))
     demo = expand_pars(parameters, getattr(kernel_module, 'demo', None))
     filename = abspath(kernel_module.__file__)
@@ -713,11 +713,11 @@
     source = None           # type: List[str]
     tests = None            # type: List[TestCondition]
-    ER = None               # type: Optional[Callable[[np.ndarray, ...], np.ndarray]]
-    VR = None               # type: Optional[Callable[[np.ndarray, ...], Tuple[np.ndarray, np.ndarray]]]
-    form_volume = None      # type: Optional[Callable[[np.ndarray, ...], float]]
-    Iq = None               # type: Optional[Callable[[np.ndarray, ...], np.ndarray]]
-    Iqxy = None             # type: Optional[Callable[[np.ndarray, ...], np.ndarray]]
-    profile = None
-    sesans = None
+    ER = None               # type: Optional[Callable[[np.ndarray], np.ndarray]]
+    VR = None               # type: Optional[Callable[[np.ndarray], Tuple[np.ndarray, np.ndarray]]]
+    form_volume = None      # type: Optional[Callable[[np.ndarray], float]]
+    Iq = None               # type: Optional[Callable[[np.ndarray], np.ndarray]]
+    Iqxy = None             # type: Optional[Callable[[np.ndarray], np.ndarray]]
+    profile = None          # type: Optional[Callable[[np.ndarray], None]]
+    sesans = None           # type: Optional[Callable[[np.ndarray], np.ndarray]]
     mono_details = None     # type: CallDetails
 
