def retinotopy_model(name='<STR_LIT>', hemi=None,<EOL>radius=np.pi/<NUM_LIT>, sphere_radius=<NUM_LIT>,<EOL>search_paths=None, update=False):
origname = name<EOL>tup = (name,hemi,radius,sphere_radius)<EOL>if tup in retinotopy_model.cache:<EOL><INDENT>return retinotopy_model.cache[tup]<EOL><DEDENT>if os.path.isfile(name):<EOL><INDENT>fname = name<EOL>name = None<EOL><DEDENT>elif name.lower() in ['<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>']:<EOL><INDENT>tmp = get_default_schira_model()<EOL>retinotopy_model.cache[tup] = tmp<EOL>return tmp<EOL><DEDENT>else:<EOL><INDENT>name = name if hemi is None else ('<STR_LIT>' % (hemi.lower(), name))<EOL>if len(name) > <NUM_LIT:4> and name[-<NUM_LIT:4>:] == '<STR_LIT>':<EOL><INDENT>fname = name<EOL>name = name[:-<NUM_LIT:4>]<EOL><DEDENT>elif len(name) > <NUM_LIT:7> and name[-<NUM_LIT:7>:] == '<STR_LIT>':<EOL><INDENT>fname = name<EOL>name = name[:-<NUM_LIT:7>]<EOL><DEDENT>else:<EOL><INDENT>fname = name + '<STR_LIT>'<EOL>spaths = ([] if search_paths is None else search_paths) + _retinotopy_model_paths<EOL>fname = next(<EOL>(os.path.join(path, nm0)<EOL>for path in spaths<EOL>for nm0 in os.listdir(path)<EOL>for nm in [nm0[:-<NUM_LIT:4>] if len(nm0) > <NUM_LIT:4> and nm0[-<NUM_LIT:4>:] == '<STR_LIT>'    elsenm0[:-<NUM_LIT:7>] if len(nm0) > <NUM_LIT:7> and nm0[-<NUM_LIT:7>:] == '<STR_LIT>' elseNone]<EOL>if nm is not None and nm == name),<EOL>None)<EOL><DEDENT><DEDENT>if fname is None: raise ValueError('<STR_LIT>' % origname)<EOL>mdl = load_fmm_model(fname).persist()<EOL>retinotopy_model.cache[tup] = mdl<EOL>return mdl<EOL>
retinotopy_model() yields a standard retinotopy model of V1, V2, and V3 as well as other areas
(depending on the options). The model itself is represented as a RegisteredRetinotopyModel
object, which may internally store a set of meshes with values at the vertices that define the
polar angle and eccentricity, or as another object (such as with the SchiraModel). The mesh
models are loaded from files in the neuropythy lib directory. Because the model's class is
RegisteredRetinotopyModel, so the details of the model's 2D projection onto the cortical surface
are included in the model.

The following options may be given:
  * name (default: 'benson17') indicates the name of the model to load; the Benson17 model is
    included with the neuropythy library along with various others. If name is a filename, this
    file is loaded (must be a valid fmm or fmm.gz file). Currently, models that are included
    with neuropythy are: Benson17, Benson17-uncorrected, Schira10, and Benson14 (which is
    identical to Schira10, as Schira10 was used by Benson14).
  * hemi (default: None) specifies that the model should go with a particular hemisphere, either
    'lh' or 'rh'. Generally, model files are names lh.<model>.fmm.gz or rh.<model>.fmm.gz, but
    models intended for the fsaverage_sym don't necessarily get a prefix. Note that you can
    leave this as none and just specify that the model name is 'lh.model' instead.
  * radius, sphere_radius (defaults: pi/2.5 and 100.0, respectively) specify the radius of the
    projection (on the surface of the sphere) and the radius of the sphere (100 is the radius
    for Freesurfer spheres). See neuropythy.registration.load_fmm_model for mode details.
  * search_paths (default: None) specifies directories in which to look for fmm model files. No
    matter what is included in these files, the neuropythy library's folders are searched last.