docs: def calc_model(cortex, model_argument, model_hemi=Ellipsis, radius=np.pi/3):
      '''
      calc_model loads the appropriate model object given the model argument, which may given the name
      of the model or a model object itself.
  
      Required afferent parameters:
        @ model_argument Must be either a RegisteredRetinotopyModel object or the name of a model that
          can be loaded.
  
      Optional afferent parameters:
        @ model_hemi May be used to specify the hemisphere of the model; this is usually only used
          when the fsaverage_sym hemisphere is desired, in which case this should be set to None; if
          left at the default value (Ellipsis), then it will use the hemisphere of the cortex param.
  
      Provided efferent values:
        @ model Will be the RegisteredRetinotopyModel object to which the mesh should be registered.
      '''
      if pimms.is_str(model_argument):
          h = cortex.chirality if model_hemi is Ellipsis else \
              None             if model_hemi is None     else \
              model_hemi
          model = retinotopy_model(model_argument, hemi=h, radius=radius)
      else:
          model = model_argument
      if not isinstance(model, RegisteredRetinotopyModel):
          raise ValueError('model must be a RegisteredRetinotopyModel')
      return model