Source code for morphforge.simulation.neuron.biophysics.modfile

#!/usr/bin/python
# -*- coding: utf-8 -*-

# ---------------------------------------------------------------------
# Copyright (c) 2012 Michael Hull.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#  - Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#  - Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ----------------------------------------------------------------------

import re
from os.path import join as Join

from morphforge.core import LocMgr, LogMgr
from morphforge.core.misc import StrUtils


[docs]class ModFile(object): @classmethod
[docs] def extract_nrn_suffix_from_text(cls, txt): r = re.compile( r""".* ^[^:]* SUFFIX \s* (?P<suffix>[a-zA-Z0-9_]+) (\s+:.*)? $ .*""", re.VERBOSE | re.MULTILINE | re.DOTALL) match_obj = r.match(txt) assert match_obj, "Can't extract suffix from mod-file" nrnsuffix = match_obj.groupdict()['suffix'] return nrnsuffix
[docs] def __init__( self, modtxt, name=None, additional_compile_flags='', additional_link_flags='', additional_ld_library_path='', strict_modlunit=True, ): # if no name is provided: if name == None: name = ModFile.extract_nrn_suffix_from_text(modtxt) self.name = name self.modtxt = modtxt self.additional_compile_flags = additional_compile_flags self.additional_link_flags = additional_link_flags self.additional_ld_library_path = additional_ld_library_path self.strict_modlunit = strict_modlunit
[docs] def ensure_built(self): LogMgr.info('Ensuring Modfile is built') from morphforge.simulation.neuron.biophysics.modfilecompiler import ModFileCompiler ModFileCompiler().build_modfile(self, self.strict_modlunit)
[docs] def get_md5_hash(self): return StrUtils.get_hash_md5(self.modtxt)
[docs] def get_built_filename_short(self, ensure_built=True): if ensure_built: self.ensure_built() return 'mod_' + self.get_md5_hash() + '.so'
[docs] def get_built_filename_full(self, ensure_built=True): if ensure_built: self.ensure_built() return Join(LocMgr.get_default_mod_outdir(), self.get_built_filename_short(ensure_built=ensure_built))