Index: sasmodels/modelinfo.py
===================================================================
--- sasmodels/modelinfo.py	(revision 04dc6971e45748ea6403588af4f52ee10891af08)
+++ sasmodels/modelinfo.py	(revision 60f03de6b699388ad10f53569d70661864b486d6)
@@ -71,5 +71,5 @@
 def parse_parameter(name, units='', default=np.NaN,
                     user_limits=None, ptype='', description=''):
-    # type: (str, str, float, Limits, str, str) -> Parameter
+    # type: (str, str, float, Sequence[Any], str, str) -> Parameter
     """
     Parse an individual parameter from the parameter definition block.
Index: sasmodels/sasview_model.py
===================================================================
--- sasmodels/sasview_model.py	(revision 04dc6971e45748ea6403588af4f52ee10891af08)
+++ sasmodels/sasview_model.py	(revision 60f03de6b699388ad10f53569d70661864b486d6)
@@ -31,5 +31,5 @@
 
 try:
-    from typing import Dict, Mapping, Any, Sequence, Tuple, NamedTuple, List, Optional, Union
+    from typing import Dict, Mapping, Any, Sequence, Tuple, NamedTuple, List, Optional, Union, Callable
     from .modelinfo import ModelInfo, Parameter
     from .kernel import KernelModel
@@ -38,4 +38,5 @@
         [("number", int), ("control", str), ("choices", List[str]),
          ("x_axis_label", str)])
+    SasviewModelType = Callable[[int], "SasviewModel"]
 except ImportError:
     pass
@@ -50,5 +51,5 @@
 # TODO: figure out how to say that the return type is a subclass
 def load_standard_models():
-    # type: () -> List[type]
+    # type: () -> List[SasviewModelType]
     """
     Load and return the list of predefined models.
@@ -67,5 +68,5 @@
 
 def load_custom_model(path):
-    # type: (str) -> type
+    # type: (str) -> SasviewModelType
     """
     Load a custom model given the model path.
@@ -77,5 +78,5 @@
 
 def _make_standard_model(name):
-    # type: (str) -> type
+    # type: (str) -> SasviewModelType
     """
     Load the sasview model defined by *name*.
@@ -91,5 +92,5 @@
 
 def _make_model_from_info(model_info):
-    # type: (ModelInfo) -> type
+    # type: (ModelInfo) -> SasviewModelType
     """
     Convert *model_info* into a SasView model wrapper.
@@ -99,5 +100,5 @@
     attrs = _generate_model_attributes(model_info)
     attrs['__init__'] = __init__
-    ConstructedModel = type(model_info.name, (SasviewModel,), attrs)
+    ConstructedModel = type(model_info.name, (SasviewModel,), attrs) # type: SasviewModelType
     return ConstructedModel
 
@@ -220,5 +221,6 @@
     dispersion = None  # type: Dict[str, Any]
     #: units and limits for each parameter
-    details = None     # type: Mapping[str, Tuple[str, float, float]]
+    details = None     # type: Dict[str, Sequence[Any]]
+    #                  # actual type is Dict[str, List[str, float, float]]
     #: multiplicity value, or None if no multiplicity on the model
     multiplicity = None     # type: Optional[int]
@@ -311,8 +313,8 @@
                 beta is a list of the corresponding SLD values
         """
-        args = []
+        args = [] # type: List[Union[float, np.ndarray]]
         for p in self._model_info.parameters.kernel_parameters:
             if p.id == self.multiplicity_info.control:
-                args.append(self.multiplicity)
+                args.append(float(self.multiplicity))
             elif p.length == 1:
                 args.append(self.params.get(p.id, np.NaN))
@@ -415,8 +417,7 @@
             # pylint: disable=unpacking-non-sequence
             q, phi = x
-            return self.calculate_Iq([q * math.cos(phi)],
-                                     [q * math.sin(phi)])[0]
-        else:
-            return self.calculate_Iq([float(x)])[0]
+            return self.calculate_Iq([q*math.cos(phi)], [q*math.sin(phi)])[0]
+        else:
+            return self.calculate_Iq([x])[0]
 
 
@@ -433,7 +434,7 @@
         """
         if isinstance(x, (list, tuple)):
-            return self.calculate_Iq([float(x[0])], [float(x[1])])[0]
-        else:
-            return self.calculate_Iq([float(x)])[0]
+            return self.calculate_Iq([x[0]], [x[1]])[0]
+        else:
+            return self.calculate_Iq([x])[0]
 
     def evalDistribution(self, qdist):
