@pimms.calc('<STR_LIT>', '<STR_LIT>')<EOL>def calc_atlas_projections(subject_cortices, atlas_cortices, atlas_map, worklog, atlases=Ellipsis):
<EOL>if atlases is Ellipsis:   atlases = ('<STR_LIT>', '<STR_LIT>')<EOL>if pimms.is_str(atlases): atlases = tuple(re.split(r'<STR_LIT>', atlases)[::<NUM_LIT:2>])<EOL>def _atlas_to_atlver(atl):<EOL><INDENT>atl0 = atl<EOL>if not pimms.is_vector(atl):<EOL><INDENT>if '<STR_LIT::>' in atl:<EOL><INDENT>atl = atl.split('<STR_LIT::>')<EOL>if len(atl) != <NUM_LIT:2>: raise ValueError('<STR_LIT>' % atl0)<EOL><DEDENT>else: atl = [atl, None]<EOL><DEDENT>if len(atl) != <NUM_LIT:2>: raise ValueError('<STR_LIT>' % atl0)<EOL>if pimms.is_str(atl[<NUM_LIT:1>]):<EOL><INDENT>if len(atl[<NUM_LIT:1>]) == <NUM_LIT:0>: atl = (atl[<NUM_LIT:0>], None)<EOL>else:<EOL><INDENT>if atl[<NUM_LIT:1>][<NUM_LIT:0>] == '<STR_LIT:v>': atl[<NUM_LIT:1>] = atl[<NUM_LIT:1>][<NUM_LIT:1>:]<EOL>try: atl = (atl[<NUM_LIT:0>], tuple([int(x) for x in re.split(r'<STR_LIT>', atl[<NUM_LIT:1>])]))<EOL>except Exception:<EOL><INDENT>raise ValueError('<STR_LIT>' % atl[<NUM_LIT:1>])<EOL><DEDENT><DEDENT><DEDENT>elif pimms.is_int(atl[<NUM_LIT:1>]):  atl = (atl[<NUM_LIT:0>], (atl[<NUM_LIT:1>],))<EOL>elif pimms.is_real(atl[<NUM_LIT:1>]): atl = (atl[<NUM_LIT:0>], (int(atl[<NUM_LIT:1>]), int(<NUM_LIT:10>*(atl[<NUM_LIT:1>] - int(atl[<NUM_LIT:1>]))),))<EOL>elif pimms.is_vector(atl[<NUM_LIT:1>], int): atl = (atl[<NUM_LIT:0>], tuple(atl[<NUM_LIT:1>]))<EOL>elif atl[<NUM_LIT:1>] is not None:<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>else: atl = tuple(atl)<EOL>return atl + (atl0,)<EOL><DEDENT>worklog('<STR_LIT>')<EOL>wl = worklog.indent()<EOL>atl_props = AutoDict()<EOL>avt = AutoDict()<EOL>keyfn = lambda k:((np.inf,)     if k is None                 else<EOL>k + (np.inf,) if len(k) == <NUM_LIT:0> or k[-<NUM_LIT:1>] != <NUM_LIT:0> else <EOL>k)<EOL>for (atl,version,atl0) in [_atlas_to_atlver(atl) for atl in atlases]:<EOL><INDENT>if atl not in atlas_map: raise ValueError('<STR_LIT>' % atl)<EOL>atldat = atlas_map[atl]<EOL>if version is None: v = sorted(atldat.keys(), key=keyfn)[-<NUM_LIT:1>]<EOL>elif version in atldat: v = version<EOL>else: raise ValueError('<STR_LIT>' % (version,atl))<EOL>wl('<STR_LIT>' % (atl, v))<EOL>avt[atl][v] = '<STR_LIT>' if v is None or '<STR_LIT::>' not in atl0 else ('<STR_LIT>' + '<STR_LIT:_>'.join(map(str, v)))<EOL>lmaps = atlas_map[atl][v]<EOL>for (h,hmap) in six.iteritems(lmaps):<EOL><INDENT>hmap = pimms.lazy_map(<EOL>{m:curry(<EOL>lambda hmap,h,m: atlas_cortices[h].interpolate(<EOL>subject_cortices[h],<EOL>hmap[m]),<EOL>hmap, h, m)<EOL>for m in six.iterkeys(hmap)})<EOL>lmaps = lmaps.set(h, hmap)<EOL><DEDENT>atl_props[atl][v] = lmaps<EOL><DEDENT>return {'<STR_LIT>':  pimms.persist(atl_props),<EOL>'<STR_LIT>': pimms.persist(avt)}<EOL>
calc_atlas_projections calculates the lazy map of atlas projections.

Afferent parameters:
  @ atlases 
    The atlases that should be applied to the subject. This can be specified as a list/tuple of
    atlas names or as a string where the atlas names are separated by whitespace, commas, or
    semicolons. For example, to specify the 'benson14' atlas as well as the 'wang15' atlas, then
    ('benson14', 'wang15'), 'benson14 wang15' or 'benson14,wang15' would all be acceptable. To
    specify an atlas version, separate the atlas-name and the version with a colon (:), such as
    'benson14:2.5'. If no version is provided, then the highest version found is used. If
    atlases is set to None or Ellipsis (the default), this is equivalent to 'benson14,wang15'.

Efferent values:
  @ atlas_properties 
    The atlas properties is a nested pimms lazy map whose key-path are like those of the
    atlas_map afferent parameter but which contains only those atlases requested via the atlases
    afferent parameter and whose deepest values are interpolated property vectors for the 
    target subject.
  @ atlas_version_tags 
    Each atlas can be specified as <atlas> or <atlas>:<version>; if the version is specified,
    then the version tag string (e.g., '.v1_5') is included in this dictionary; if only <atlas>
    was specified then this string is ''. If <atlas>: is specified, then the version string for
    whichever atlas was used is included.