# CodeObject class

(Shortest import: `from brian2.codegen.codeobject import CodeObject)`

class brian2.codegen.codeobject.CodeObject(*args, **kw)

  Bases: `Nameable`

  Executable code object.

  The `code` can either be a string or a `brian2.codegen.templates.MultiTemplate`.

  After initialisation, the code is compiled with the given namespace using `code.compile(namespace)`.

  Calling `code(key1=val1, key2=val2)` executes the code with the given variables inserted into the namespace.

  Attributes

  `class_name` | A short name for this type of `CodeObject`
  `generator_class` | The `CodeGenerator` class used by this `CodeObject`

  Methods

  `__call__`(**kwds) | Call self as a function.
  `after_run`() | Runs the finalizing code in the namespace.
  `before_run`() | Runs the preparation code in the namespace.
  `compile`() |
  `compile_block`(block) |
  `is_available`() | Whether this target for code generation is available.
  `run`() | Runs the main code in the namespace.
  `run_block`(block) |
  `update_namespace`() | Update the namespace for this timestep.

  Details

  class_name

    A short name for this type of `CodeObject`

  generator_class

    The `CodeGenerator` class used by this `CodeObject`

  __call__(**kwds)

    Call self as a function.

  after_run()

    Runs the finalizing code in the namespace. This code will only be executed once per run.

    Returns:

      return_value : dict

      > A dictionary with the keys corresponding to the `output_variables` defined during the call of `CodeGenerator.code_object`.

  before_run()

    Runs the preparation code in the namespace. This code will only be executed once per run.

    Returns:

      return_value : dict

      > A dictionary with the keys corresponding to the `output_variables` defined during the call of `CodeGenerator.code_object`.

  compile()
  compile_block(block)
  classmethod is_available()

    Whether this target for code generation is available. Should use a minimal example to check whether code generation works in general.

  run()

    Runs the main code in the namespace.

    Returns:

      return_value : dict

      > A dictionary with the keys corresponding to the `output_variables` defined during the call of `CodeGenerator.code_object`.

  run_block(block)
  update_namespace()

    Update the namespace for this timestep. Should only deal with variables where the reference changes every timestep, i.e. where the current reference in `namespace` is not correct.