def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} self.autoload_stage = False if add_builtin: from mathics.builtin import modules, contribute from mathics.core.evaluation import Evaluation from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [ get_file_time(module.__file__) for module in modules ] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'r') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, 'w') pickle.dump(self.builtin, builtin_file, -1) self.autoload_stage = True for root, dirs, files in os.walk( # noqa os.path.join(ROOT_DIR, 'autoload')): for f in filter(lambda x: x.endswith('.m'), files): with open(os.path.join(root, f)) as stream: Evaluation(stream.read(), self, timeout=30) self.autoload_stage = False
def __init__(self, add_builtin=False, builtin_filename=None, extension_modules=[]) -> None: super(Definitions, self).__init__() self.builtin = {} self.user = {} self.pymathics = {} self.definitions_cache = {} self.lookup_cache = {} self.proxy = defaultdict(set) self.now = 0 # increments whenever something is updated if add_builtin: from mathics.builtin import modules, contribute from mathics.core.evaluation import Evaluation from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [get_file_time(module.__file__) for module in modules] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'rb') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) for module in extension_modules: try: loaded_module = self.load_pymathics_module(module, remove_on_quit=False) except PyMathicsLoadException as e: print(e.module + ' is not a valid pymathics module.') continue except ImportError as e: print(e.__repr__()) continue #print(module + loaded_module.pymathics_version_data['version'] + " by " + loaded_module.pymathics_version_data['author']) if builtin_filename is not None: builtin_file = open(builtin_filename, 'wb') pickle.dump(self.builtin, builtin_file, -1) # Load symbols from the autoload folder for root, dirs, files in os.walk(os.path.join(ROOT_DIR, 'autoload')): for path in [os.path.join(root, f) for f in files if f.endswith('.m')]: Expression('Get', String(path)).evaluate(Evaluation(self)) # Move any user definitions created by autoloaded files to # builtins, and clear out the user definitions list. This # means that any autoloaded definitions become shared # between users and no longer disappear after a Quit[]. # # Autoloads that accidentally define a name in Global` # could cause confusion, so check for this. # for name in self.user: if name.startswith('Global`'): raise ValueError("autoload defined %s." % name) self.builtin.update(self.user) self.user = {} self.clear_cache()
def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} self.autoload_stage = False if add_builtin: from mathics.builtin import modules, contribute from mathics.core.evaluation import Evaluation from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [get_file_time(module.__file__) for module in modules] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'r') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, 'w') pickle.dump(self.builtin, builtin_file, -1) self.autoload_stage = True for root, dirs, files in os.walk( # noqa os.path.join(ROOT_DIR, 'autoload')): for f in filter(lambda x: x.endswith('.m'), files): with open(os.path.join(root, f)) as stream: Evaluation(stream.read(), self, timeout=30) self.autoload_stage = False
def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} self.definitions_cache = {} self.lookup_cache = {} self.proxy = defaultdict(set) self.now = 0 # increments whenever something is updated if add_builtin: from mathics.builtin import modules, contribute from mathics.core.evaluation import Evaluation from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [ get_file_time(module.__file__) for module in modules ] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'rb') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, 'wb') pickle.dump(self.builtin, builtin_file, -1) for root, dirs, files in os.walk(os.path.join( ROOT_DIR, 'autoload')): for path in [ os.path.join(root, f) for f in files if f.endswith('.m') ]: Expression('Get', String(path)).evaluate(Evaluation(self)) # Move any user definitions created by autoloaded files to # builtins, and clear out the user definitions list. This # means that any autoloaded definitions become shared # between users and no longer disappear after a Quit[]. # # Autoloads that accidentally define a name in Global` # could cause confusion, so check for this. # for name in self.user: if name.startswith('Global`'): raise ValueError("autoload defined %s." % name) self.builtin.update(self.user) self.user = {} self.clear_cache()
def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} self.definitions_cache = {} self.lookup_cache = {} self.proxy = defaultdict(set) self.now = 0 # increments whenever something is updated if add_builtin: from mathics.builtin import modules, contribute from mathics.core.evaluation import Evaluation from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [get_file_time(module.__file__) for module in modules] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'rb') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, 'wb') pickle.dump(self.builtin, builtin_file, -1) for root, dirs, files in os.walk(os.path.join(ROOT_DIR, 'autoload')): for path in [os.path.join(root, f) for f in files if f.endswith('.m')]: Expression('Get', String(path)).evaluate(Evaluation(self)) # Move any user definitions created by autoloaded files to # builtins, and clear out the user definitions list. This # means that any autoloaded definitions become shared # between users and no longer disappear after a Quit[]. # # Autoloads that accidentally define a name in Global` # could cause confusion, so check for this. # for name in self.user: if name.startswith('Global`'): raise ValueError("autoload defined %s." % name) self.builtin.update(self.user) self.user = {} self.clear_cache()
def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} if add_builtin: from mathics.builtin import modules, contribute from mathics.core.expression import builtin_evaluation loaded = False if builtin_filename is not None: builtin_dates = [get_file_time(module.__file__) for module in modules] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, "r") self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, "w") pickle.dump(self.builtin, builtin_file, -1)
def __init__(self, add_builtin=False, builtin_filename=None): super(Definitions, self).__init__() self.builtin = {} self.user = {} if add_builtin: from mathics.builtin import modules, contribute from mathics.core.expression import builtin_evaluation loaded = False if builtin_filename is not None: builtin_dates = [ get_file_time(module.__file__) for module in modules ] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, 'r') self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) if builtin_filename is not None: builtin_file = open(builtin_filename, 'w') pickle.dump(self.builtin, builtin_file, -1)
def __init__(self, add_builtin=False, builtin_filename=None, extension_modules=[]) -> None: super(Definitions, self).__init__() self.builtin = {} self.user = {} self.pymathics = {} self.definitions_cache = {} self.lookup_cache = {} self.proxy = defaultdict(set) self.now = 0 # increments whenever something is updated self._packages = [] if add_builtin: from mathics.builtin import modules, contribute from mathics.settings import ROOT_DIR loaded = False if builtin_filename is not None: builtin_dates = [ get_file_time(module.__file__) for module in modules ] builtin_time = max(builtin_dates) if get_file_time(builtin_filename) > builtin_time: builtin_file = open(builtin_filename, "rb") self.builtin = pickle.load(builtin_file) loaded = True if not loaded: contribute(self) for module in extension_modules: try: self.load_pymathics_module(module, remove_on_quit=False) except PyMathicsLoadException: raise except ImportError: raise if builtin_filename is not None: builtin_file = open(builtin_filename, "wb") pickle.dump(self.builtin, builtin_file, -1) autoload_files(self, ROOT_DIR, "autoload") # Move any user definitions created by autoloaded files to # builtins, and clear out the user definitions list. This # means that any autoloaded definitions become shared # between users and no longer disappear after a Quit[]. # # Autoloads that accidentally define a name in Global` # could cause confusion, so check for this. # for name in self.user: if name.startswith("Global`"): raise ValueError("autoload defined %s." % name) self.builtin.update(self.user) self.user = {} self.clear_cache() # FIXME load dynamically as we do other things import mathics.format.asy # noqa import mathics.format.json # noqa import mathics.format.svg # noqa