def create_program(self, skip_rebuild=False):
    """
      Creates the structure of the program with its source files and
      binary files. When the ``Instrument`` option ``force-rebuild``
      is set, it will trigger the compilation of all python source files.

      :param skip_rebuild: Force skipping the build. Mostly here due to the
                           recursive nature of this function.
    """
    self.program_files = []
    self._bytecode_files = []
    for location in self.input_location:
      scan_dir(location, self.program_files, ('py', 'pyc'))

    # Do we need to compile all the files?
    py_files, pyc_files = Program.split_program_source_bc(self.program_files)

    logger.debug("Force rebuilding? %s", self.options.get('force-rebuild'))

    if not skip_rebuild:
      if len(py_files) != len(pyc_files) or self.instrumentation.get_option('force-rebuild'):
        self.compile_program()
    else:
      self._bytecode_files = list(pyc_files)
      logger.debug("Bytecode := %s", pyc_files)
dataset/ETHPy150Open neuroo/equip/equip/prog.py/Program.create_program/original