Source code for dendrotweaks.biophys.io.converter

# SPDX-FileCopyrightText: 2025 Poirazi Lab <dendrotweaks@dendrites.gr>
# SPDX-License-Identifier: MPL-2.0

from dendrotweaks.biophys.io.reader import MODFileReader
from dendrotweaks.biophys.io.parser import MODFileParser
from dendrotweaks.biophys.io.code_generators import PythonCodeGenerator

[docs] class MODFileConverter(): """ Converts a MOD file to a Python file. Attributes ---------- reader : MODFileReader The MOD file reader. parser : MODFileParser The MOD file parser. generator : PythonCodeGenerator The Python code generator. """ def __init__(self): self.reader = MODFileReader() self.parser = MODFileParser() self.generator = PythonCodeGenerator() @property def mod_content(self): """ The content of the MOD file. """ return self.reader.content @property def blocks(self): """ The blocks of the MOD file corresponding to the NMODL blocks e.g. NEURON, PARAMETER, ASSIGNED, etc. """ return self.reader.blocks @property def ast(self): """ The abstract syntax tree of the MOD file. """ return self.parser.ast @property def python_content(self): """ The content of the generated Python file. """ return self.code_generator.content # def convert(self, path_to_mod, path_to_python, path_to_template): # """ Converts a mod file to a python file. # Parameters # ---------- # path_to_mod : str # The path to the mod file. # path_to_python : str # The path to the python file. # path_to_template : str # The path to the template file. # """ # self.read_file(path_to_mod) # generates self.mod_content # self.preprocess() # generates self.blocks # self.parse() # generates self.ast # self.generate_python(path_to_template) # generates self.python_content # self.write_file(path_to_python) # writes self.python_content to path_to_python
[docs] def convert(self, path_to_mod_file: str, path_to_python_file: str, path_to_python_template: str, path_to_json_file:str = None, verbose: bool = False) -> None: """ Converts a MOD file to a Python file. Parameters ---------- path_to_mod : str The path to the original MOD file. path_to_python : str The path to the output Python file. path_to_template : str The path to the jinja2 template file. path_to_json : str, optional The path to the json file to write the AST. verbose : bool, optional Whether to print the progress of the conversion. """ if verbose: print(f"READING") self.reader.read_file(path_to_mod_file) self.reader.preprocess() blocks = self.reader.get_blocks(verbose) if blocks.get('KINETIC'): raise NotImplementedError( "Conversion aborted: MOD files containing KINETIC blocks are not supported by DendroTweaks." ) if verbose: print(f"\nPARSING") self.parser.parse(blocks, verbose) self.parser.postprocess() ast = self.parser.get_ast() if path_to_json_file: self.parser.write_file(path_to_json_file) if verbose: print(f"\nGENERATING") self.generator.generate(ast, path_to_python_template) self.generator.write_file(path_to_python_file)