Esempio n. 1
0
def test_get_language_dir():
    r"""Test the get_language_dir method."""
    assert_raises(ValueError, languages.get_language_dir, 'invalid')
    test_lang = tools.get_supported_lang()
    test_skip = ['make', 'cmake', 'executable', 'timesync', 'osr']
    for lang in test_lang:
        if lang in test_skip:
            continue
        languages.get_language_dir(lang)
Esempio n. 2
0
def test_get_language_dir():
    r"""Test the get_language_dir method."""
    assert_raises(ValueError, languages.get_language_dir, 'invalid')
    test_lang = constants.LANGUAGES_WITH_ALIASES['all']
    test_skip = ['make', 'cmake', 'executable', 'timesync', 'osr']
    for lang in test_lang:
        if lang in test_skip:
            continue
        languages.get_language_dir(lang)
Esempio n. 3
0
def import_language_install(language, no_import=False):
    r"""Temporarily import a language installation script.

    Args:
        language (str): Name of language that installation script should be
            imported for.
        no_import (bool, optional): If True, yggdrasil will not be imported.
            Defaults to False.

    Yields:
        module: Language installation module.

    """
    if not is_file(os.path.join(lang_dir, language, 'install.py')):
        if not (no_import or is_dir(os.path.join(lang_dir, language))):
            from yggdrasil.languages import get_language_dir
            fname = os.path.basename(get_language_dir(language))
            with import_language_install(fname, no_import=True) as install:
                yield install
        else:
            yield None
    else:
        try:
            sys.path.insert(0, os.path.join(lang_dir, language))
            import install
            yield install
        finally:
            sys.path.pop(0)
            if install is not None:
                del install
            if 'install' in sys.modules:
                del sys.modules['install']
            gc.collect()
Esempio n. 4
0
import os
from yggdrasil.languages import get_language_dir
from yggdrasil.drivers.PythonModelDriver import PythonModelDriver

_model_script = os.path.join(get_language_dir('lpy'), 'lpy_model.py')


class LPyModelDriver(PythonModelDriver):  # pragma: lpy
    r"""Class for running LPy models."""

    _schema_subtype_description = ('Model is an LPy system.')
    executable_type = 'dsl'
    language = 'lpy'
    language_ext = '.lpy'
    # base_languages = ['python']  # Uncomment if PythonModelDriver not parent
    default_interpreter_flags = [_model_script]
    interface_dependencies = ['openalea.lpy']
    function_param = None
    full_language = False
    is_dsl = True

    @classmethod
    def language_version(cls, **kwargs):
        r"""Determine the version of this language.

        Args:
            **kwargs: Keyword arguments are passed to cls.run_executable.

        Returns:
            str: Version of compiler/interpreter for this language.
Esempio n. 5
0
import os
import re
import copy
import logging
from collections import OrderedDict
from yggdrasil import platform, tools
from yggdrasil.languages import get_language_dir
from yggdrasil.drivers import CModelDriver
from yggdrasil.drivers.CompiledModelDriver import (CompilerBase,
                                                   CompiledModelDriver,
                                                   get_compilation_tool)
from yggdrasil.metaschema.properties.ScalarMetaschemaProperties import (
    _valid_types)

logger = logging.getLogger(__name__)
_top_lang_dir = get_language_dir('fortran')
_incl_interface = _top_lang_dir
_c_internal_libs = copy.deepcopy(CModelDriver.CModelDriver.internal_libraries)


# TODO: Add support for f77: e.g.
# https://people.sc.fsu.edu/~jburkardt/f77_src/f77_calls_c/f77_calls_c.html
class FortranCompilerBase(CompilerBase):
    r"""Base class for Fortran compilers."""
    languages = ['fortran']
    default_executable_env = 'FC'
    default_flags_env = 'FFLAGS'
    default_flags = [
        '-g', '-Wall', '-cpp', '-pedantic-errors', '-ffree-line-length-0'
    ]
    linker_attributes = {
Esempio n. 6
0
try:  # pragma: matlab
    disable_engine = ygg_cfg.get('matlab', 'disable_engine', 'False').lower()
    if platform._is_win or (disable_engine == 'true'):
        _matlab_engine_installed = False
        if not tools.is_subprocess():
            logger.debug("matlab.engine disabled")
    else:
        import matlab.engine
        _matlab_engine_installed = True
except ImportError:  # pragma: no matlab
    logger.debug("Could not import matlab.engine. "
                 + "Matlab support for using a sharedEngine will be disabled.")
    _matlab_engine_installed = False


_top_lang_dir = get_language_dir('matlab')
_compat_map = {
    'R2015b': ['2.7', '3.3', '3.4'],
    'R2017a': ['2.7', '3.3', '3.4', '3.5'],
    'R2017b': ['2.7', '3.3', '3.4', '3.5', '3.6'],
    'R2018b': ['2.7', '3.3', '3.4', '3.5', '3.6']}


def kill_all():
    r"""Kill all Matlab shared engines."""
    if platform._is_win:  # pragma: windows
        os.system(('taskkill /F /IM matlab.engine.shareEngine /T'))
    else:
        os.system(('pkill -f matlab.engine.shareEngine'))

Esempio n. 7
0
    default_executable_env = 'LIBTOOL'
    static_library_flag = '-static'  # This is the default


class MSVCArchiver(ArchiverBase):
    r"""Microsoft Visual Studio C Archiver."""
    toolname = 'LIB'
    languages = ['c', 'c++']
    platforms = ['Windows']
    static_library_flag = None
    output_key = '/OUT:%s'


# _top_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../'))
# _incl_interface = os.path.join(_top_dir, 'interface')
_top_lang_dir = get_language_dir('c')
_incl_interface = _top_lang_dir
_incl_seri = os.path.join(_top_lang_dir, 'serialize')
_incl_comm = os.path.join(_top_lang_dir, 'communication')


class CModelDriver(CompiledModelDriver):
    r"""Class for running C models."""

    _schema_subtype_description = ('Model is written in C.')
    language = 'c'
    language_ext = ['.c', '.h']
    interface_library = 'ygg'
    supported_comms = ['ipc', 'zmq']
    supported_comm_options = {
        'ipc': {
Esempio n. 8
0
    'sphinx.ext.todo',
    'sphinx.ext.coverage',
    'sphinx.ext.mathjax',
    'sphinx.ext.ifconfig',
    'sphinx.ext.viewcode',
    'sphinx.ext.githubpages',
    'sphinx.ext.napoleon',
    'breathe',
]

relative_files = []
for lang in tools.get_supported_lang():
    if lang == 'python':
        continue
    try:
        lang_dir = languages.get_language_dir(lang)
        lang_ext = components.import_component('model',
                                               lang).get_language_ext()
    except ValueError:
        continue
    for iext in lang_ext:
        relative_files += [
            os.path.relpath(f, start=srcdir)
            for f in glob.glob(os.path.join(lang_dir, '*' + iext))
        ]
        relative_files += [
            os.path.relpath(f, start=srcdir)
            for f in glob.glob(os.path.join(lang_dir, '*', '*' + iext))
        ]

breathe_projects = {"yggdrasil": doxydir}