Skip to content

Commit

Permalink
migrate from string.Template to string.format
Browse files Browse the repository at this point in the history
  • Loading branch information
StrikerRUS committed May 10, 2020
1 parent 7626a60 commit 13fbada
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 50 deletions.
4 changes: 2 additions & 2 deletions m2cgen/interpreters/c/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

class CCodeGenerator(CLikeCodeGenerator):

tpl_scalar_var_declare = CT("double ${var_name};")
tpl_vector_var_declare = CT("double ${var_name}[${size}];")
tpl_scalar_var_declare = CT("double {var_name};")
tpl_vector_var_declare = CT("double {var_name}[{size}];")

scalar_type = "double"
vector_type = "double *"
Expand Down
35 changes: 23 additions & 12 deletions m2cgen/interpreters/code_generator.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
from string import Template
from string import Formatter


class _Formatter(Formatter):
def convert_field(self, value, conversion):
# Force calling str() representation by default,
# because without it numpy gives the same output
# for different float types
return super().convert_field(
value=value,
conversion="s" if conversion is None else conversion)


class CodeTemplate:

fmt = _Formatter()

def __init__(self, template):
self.template = Template(template)
self.str_template = template

def __str__(self):
return self.str_template

def __call__(self, *args, **kwargs):
return self.template.substitute(*args, **kwargs)
return self.fmt.format(self.str_template, *args, **kwargs)


class BaseCodeGenerator:
Expand Down Expand Up @@ -156,12 +167,12 @@ class CLikeCodeGenerator(ImperativeCodeGenerator):
have to provide logic for wrapping expressions into functions/classes/etc.
"""

tpl_num_value = CodeTemplate("${value}")
tpl_infix_expression = CodeTemplate("(${left}) ${op} (${right})")
tpl_var_declaration = CodeTemplate("${var_type} ${var_name};")
tpl_return_statement = CodeTemplate("return ${value};")
tpl_array_index_access = CodeTemplate("${array_name}[${index}]")
tpl_if_statement = CodeTemplate("if (${if_def}) {")
tpl_else_statement = CodeTemplate("} else {")
tpl_block_termination = CodeTemplate("}")
tpl_var_assignment = CodeTemplate("${var_name} = ${value};")
tpl_num_value = CodeTemplate("{value}")
tpl_infix_expression = CodeTemplate("({left}) {op} ({right})")
tpl_var_declaration = CodeTemplate("{var_type} {var_name};")
tpl_return_statement = CodeTemplate("return {value};")
tpl_array_index_access = CodeTemplate("{array_name}[{index}]")
tpl_if_statement = CodeTemplate("if ({if_def}) {{")
tpl_else_statement = CodeTemplate("}} else {{")
tpl_block_termination = CodeTemplate("}}")
tpl_var_assignment = CodeTemplate("{var_name} = {value};")
18 changes: 9 additions & 9 deletions m2cgen/interpreters/go/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@


class GoCodeGenerator(ImperativeCodeGenerator):
tpl_num_value = CodeTemplate("${value}")
tpl_infix_expression = CodeTemplate("(${left}) ${op} (${right})")
tpl_array_index_access = CodeTemplate("${array_name}[${index}]")
tpl_else_statement = CodeTemplate("} else {")
tpl_block_termination = CodeTemplate("}")
tpl_var_declaration = CodeTemplate("var ${var_name} ${var_type}")
tpl_return_statement = CodeTemplate("return ${value}")
tpl_if_statement = CodeTemplate("if ${if_def} {")
tpl_var_assignment = CodeTemplate("${var_name} = ${value}")
tpl_num_value = CodeTemplate("{value}")
tpl_infix_expression = CodeTemplate("({left}) {op} ({right})")
tpl_array_index_access = CodeTemplate("{array_name}[{index}]")
tpl_else_statement = CodeTemplate("}} else {{")
tpl_block_termination = CodeTemplate("}}")
tpl_var_declaration = CodeTemplate("var {var_name} {var_type}")
tpl_return_statement = CodeTemplate("return {value}")
tpl_if_statement = CodeTemplate("if {if_def} {{")
tpl_var_assignment = CodeTemplate("{var_name} = {value}")

scalar_type = "float64"
vector_type = "[]float64"
Expand Down
6 changes: 3 additions & 3 deletions m2cgen/interpreters/haskell/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@


class HaskellCodeGenerator(BaseCodeGenerator):
tpl_num_value = CodeTemplate("${value}")
tpl_infix_expression = CodeTemplate("(${left}) ${op} (${right})")
tpl_module_definition = CodeTemplate("module ${module_name} where")
tpl_num_value = CodeTemplate("{value}")
tpl_infix_expression = CodeTemplate("({left}) {op} ({right})")
tpl_module_definition = CodeTemplate("module {module_name} where")

def __init__(self, *args, **kwargs):
self._func_idx = 0
Expand Down
2 changes: 1 addition & 1 deletion m2cgen/interpreters/php/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

class PhpCodeGenerator(CLikeCodeGenerator):

tpl_array_index_access = CodeTemplate("$$${array_name}[${index}]")
tpl_array_index_access = CodeTemplate("${array_name}[{index}]")

def __init__(self, *args, **kwargs):
super(PhpCodeGenerator, self).__init__(*args, **kwargs)
Expand Down
8 changes: 4 additions & 4 deletions m2cgen/interpreters/powershell/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@

class PowershellCodeGenerator(CLikeCodeGenerator):

tpl_var_declare = CT("${var_type}${var_name} = ${init_val}")
tpl_var_assignment = CT("${var_name} = ${value}")
tpl_array_index_access = CT("$$${array_name}[${index}]")
tpl_return_statement = CT("return ${value}")
tpl_var_declare = CT("{var_type}{var_name} = {init_val}")
tpl_var_assignment = CT("{var_name} = {value}")
tpl_array_index_access = CT("${array_name}[{index}]")
tpl_return_statement = CT("return {value}")

scalar_type = "[double]"
vector_type = "[double[]]"
Expand Down
14 changes: 7 additions & 7 deletions m2cgen/interpreters/python/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@

class PythonCodeGenerator(ImperativeCodeGenerator):

tpl_num_value = CT("${value}")
tpl_infix_expression = CT("(${left}) ${op} (${right})")
tpl_return_statement = CT("return ${value}")
tpl_array_index_access = CT("${array_name}[${index}]")
tpl_array_convert_to_numpy = CT("np.asarray(${value})")
tpl_if_statement = CT("if ${if_def}:")
tpl_num_value = CT("{value}")
tpl_infix_expression = CT("({left}) {op} ({right})")
tpl_return_statement = CT("return {value}")
tpl_array_index_access = CT("{array_name}[{index}]")
tpl_array_convert_to_numpy = CT("np.asarray({value})")
tpl_if_statement = CT("if {if_def}:")
tpl_else_statement = CT("else:")
tpl_var_assignment = CT("${var_name} = ${value}")
tpl_var_assignment = CT("{var_name} = {value}")

tpl_var_declaration = CT("")
tpl_block_termination = CT("")
Expand Down
4 changes: 2 additions & 2 deletions m2cgen/interpreters/r/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

class RCodeGenerator(CLikeCodeGenerator):

tpl_return_statement = CodeTemplate("return(${value})")
tpl_var_assignment = CodeTemplate("${var_name} <- ${value}")
tpl_return_statement = CodeTemplate("return({value})")
tpl_var_assignment = CodeTemplate("{var_name} <- {value}")

def __init__(self, *args, **kwargs):
super(RCodeGenerator, self).__init__(*args, **kwargs)
Expand Down
20 changes: 10 additions & 10 deletions m2cgen/interpreters/visual_basic/code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@


class VisualBasicCodeGenerator(ImperativeCodeGenerator):
tpl_num_value = CodeTemplate("${value}")
tpl_infix_expression = CodeTemplate("(${left}) ${op} (${right})")
tpl_num_value = CodeTemplate("{value}")
tpl_infix_expression = CodeTemplate("({left}) {op} ({right})")
tpl_var_declaration = \
CodeTemplate("Dim ${var_name}${type_modifier} As ${var_type}")
tpl_return_statement = CodeTemplate("${func_name} = ${value}")
tpl_if_statement = CodeTemplate("If ${if_def} Then")
CodeTemplate("Dim {var_name}{type_modifier} As {var_type}")
tpl_return_statement = CodeTemplate("{func_name} = {value}")
tpl_if_statement = CodeTemplate("If {if_def} Then")
tpl_else_statement = CodeTemplate("Else")
tpl_block_termination = CodeTemplate("End ${block_name}")
tpl_array_index_access = CodeTemplate("${array_name}(${index})")
tpl_array_set_by_index = CodeTemplate("${array_name}(${index}) = ${value}")
tpl_var_assignment = CodeTemplate("${var_name} = ${value}")
tpl_module_definition = CodeTemplate("Module ${module_name}")
tpl_block_termination = CodeTemplate("End {block_name}")
tpl_array_index_access = CodeTemplate("{array_name}({index})")
tpl_array_set_by_index = CodeTemplate("{array_name}({index}) = {value}")
tpl_var_assignment = CodeTemplate("{var_name} = {value}")
tpl_module_definition = CodeTemplate("Module {module_name}")

scalar_type = "Double"

Expand Down

0 comments on commit 13fbada

Please sign in to comment.