nodes: 0, module; 1, function_definition; 2, function_name:assemble; 3, parameters; 4, comment:# type: (AbstractModule, *AbstractModule, **Any) -> SeqRecord; 5, block; 6, identifier:self; 7, identifier:module; 8, list_splat_pattern; 9, dictionary_splat_pattern; 10, expression_statement; 11, expression_statement; 12, return_statement; 13, identifier:modules; 14, identifier:kwargs; 15, comment:"""Assemble the provided modules into the vector.
  
          Arguments:
              module (`~moclo.base.modules.AbstractModule`): a module to insert
                  in the vector.
              modules (`~moclo.base.modules.AbstractModule`, optional): additional
                  modules to insert in the vector. The order of the parameters
                  is not important, since modules will be sorted by their start
                  overhang in the function.
  
          Returns:
              `~Bio.SeqRecord.SeqRecord`: the assembled sequence with sequence
              annotations inherited from the vector and the modules.
  
          Raises:
              `~moclo.errors.DuplicateModules`: when two different modules share
                  the same start overhang, leading in possibly non-deterministic
                  constructs.
              `~moclo.errors.MissingModule`: when a module has an end overhang
                  that is not shared by any other module, leading to a partial
                  construct only
              `~moclo.errors.InvalidSequence`: when one of the modules does not
                  match the required module structure (missing site, wrong
                  overhang, etc.).
              `~moclo.errors.UnusedModules`: when some modules were not used
                  during the assembly (mostly caused by duplicate parts).
  
          """; 16, assignment; 17, call; 18, identifier:mgr; 19, call; 20, attribute; 21, argument_list; 22, identifier:AssemblyManager; 23, argument_list; 24, identifier:mgr; 25, identifier:assemble; 26, keyword_argument; 27, keyword_argument; 28, keyword_argument; 29, keyword_argument; 30, identifier:vector; 31, identifier:self; 32, identifier:modules; 33, binary_operator:[module] + list(modules); 34, identifier:name; 35, call; 36, identifier:id_; 37, call; 38, list; 39, call; 40, attribute; 41, argument_list; 42, attribute; 43, argument_list; 44, identifier:module; 45, identifier:list; 46, argument_list; 47, identifier:kwargs; 48, identifier:get; 49, string:"name"; 50, string:"assembly"; 51, identifier:kwargs; 52, identifier:get; 53, string:"id"; 54, string:"assembly"; 55, identifier:modules
code: def assemble(self, module, *modules, **kwargs):
          # type: (AbstractModule, *AbstractModule, **Any) -> SeqRecord
          """Assemble the provided modules into the vector.
  
          Arguments:
              module (`~moclo.base.modules.AbstractModule`): a module to insert
                  in the vector.
              modules (`~moclo.base.modules.AbstractModule`, optional): additional
                  modules to insert in the vector. The order of the parameters
                  is not important, since modules will be sorted by their start
                  overhang in the function.
  
          Returns:
              `~Bio.SeqRecord.SeqRecord`: the assembled sequence with sequence
              annotations inherited from the vector and the modules.
  
          Raises:
              `~moclo.errors.DuplicateModules`: when two different modules share
                  the same start overhang, leading in possibly non-deterministic
                  constructs.
              `~moclo.errors.MissingModule`: when a module has an end overhang
                  that is not shared by any other module, leading to a partial
                  construct only
              `~moclo.errors.InvalidSequence`: when one of the modules does not
                  match the required module structure (missing site, wrong
                  overhang, etc.).
              `~moclo.errors.UnusedModules`: when some modules were not used
                  during the assembly (mostly caused by duplicate parts).
  
          """
  
          mgr = AssemblyManager(
              vector=self,
              modules=[module] + list(modules),
              name=kwargs.get("name", "assembly"),
              id_=kwargs.get("id", "assembly"),
          )
          return mgr.assemble()