remove_code.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import argparse
  2. import os
  3. import re
  4. from collections import defaultdict
  5. def get_likely_indent_size(array_of_tabs) -> int:
  6. sizes = defaultdict(int)
  7. for i in range(len(array_of_tabs) - 1):
  8. diff = array_of_tabs[i + 1] - array_of_tabs[i]
  9. if diff > 0:
  10. sizes[diff] += 1
  11. if len(sizes) == 0:
  12. return 4
  13. return int(max(sizes, key=sizes.get))
  14. def get_target_filepath(self):
  15. target_filepath = os.path.join(
  16. self.workspace_mount_path,
  17. self.biocoder_instance.repository.split('/')[1],
  18. self.biocoder_instance.filePath,
  19. )
  20. return target_filepath
  21. def remove_code(target_filepath: str, line_start: int, line_end: int, language: str):
  22. comment_prefix = {'python': '#', 'java': '//'}
  23. with open(target_filepath, 'r') as f:
  24. lines = f.read().split('\n')
  25. # print("="*10+"ORIGINAL"+"="*10)
  26. # print("\n".join(lines))
  27. signature_line = lines[line_start - 1]
  28. # get the number of tabs
  29. def get_indent_size(s: str):
  30. return len(re.match(r'\s*', s).group())
  31. indent_sizes = list(map(get_indent_size, lines))
  32. indent_size = get_likely_indent_size(indent_sizes)
  33. comment_indent_size = get_indent_size(signature_line) + indent_size
  34. lines = (
  35. lines[:line_start]
  36. + [
  37. f"{' '*comment_indent_size+comment_prefix[language.lower()]}TODO: replace with your code here"
  38. ]
  39. + ([''] * 2)
  40. + lines[line_end:]
  41. )
  42. first_line_after_removed_index = line_start
  43. while len(
  44. lines[first_line_after_removed_index].strip()
  45. ) == 0 and first_line_after_removed_index < len(lines):
  46. first_line_after_removed_index += 1
  47. first_line_after_removed = lines[first_line_after_removed_index]
  48. print('FIRST LINE AFTER REMOVED: ', first_line_after_removed)
  49. with open('/testing_files/first_line_after_removed.txt', 'w') as f:
  50. f.write(first_line_after_removed)
  51. with open(target_filepath, 'w') as f:
  52. f.write('\n'.join(lines))
  53. if __name__ == '__main__':
  54. parser = argparse.ArgumentParser()
  55. parser.add_argument('--target_filepath', type=str, required=True)
  56. parser.add_argument('--line_start', type=int, required=True)
  57. parser.add_argument('--line_end', type=int, required=True)
  58. parser.add_argument('--language', type=str, required=True)
  59. args = parser.parse_args()
  60. remove_code(args.target_filepath, args.line_start, args.line_end, args.language)