rbx.cp 0.16.1__tar.gz → 0.16.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/PKG-INFO +1 -1
  2. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/pyproject.toml +1 -1
  3. rbx_cp-0.16.4/rbx/__version__.py +1 -0
  4. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/cli.py +1 -3
  5. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/git_utils.py +27 -3
  6. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/boca/packager.py +16 -12
  7. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/main.py +2 -1
  8. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/xml_schema.py +4 -2
  9. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/presets/__init__.py +38 -13
  10. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/presets/fetch.py +15 -1
  11. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/preset.rbx.yml +1 -1
  12. rbx_cp-0.16.1/rbx/__version__.py +0 -1
  13. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/LICENSE +0 -0
  14. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/README.md +0 -0
  15. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/__init__.py +0 -0
  16. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/annotations.py +0 -0
  17. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/autoenum.py +0 -0
  18. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/__init__.py +0 -0
  19. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/builder.py +0 -0
  20. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/cd.py +0 -0
  21. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/checkers.py +0 -0
  22. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/code.py +0 -0
  23. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/compile.py +0 -0
  24. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/__init__.py +0 -0
  25. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/build_contest_statements.py +0 -0
  26. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/contest_package.py +0 -0
  27. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/contest_utils.py +0 -0
  28. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/main.py +0 -0
  29. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/schema.py +0 -0
  30. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/contest/statements.py +0 -0
  31. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/creation.py +0 -0
  32. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/deferred.py +0 -0
  33. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/download.py +0 -0
  34. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/dump_schemas.py +0 -0
  35. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/environment.py +0 -0
  36. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/extensions.py +0 -0
  37. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/fields.py +0 -0
  38. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/formatting.py +0 -0
  39. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/generators.py +0 -0
  40. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/global_package.py +0 -0
  41. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/header.py +0 -0
  42. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/lang.py +0 -0
  43. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/lazy_importing_main.py +0 -0
  44. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/limits_info.py +0 -0
  45. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/linting.py +0 -0
  46. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/main.py +0 -0
  47. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/naming.py +0 -0
  48. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/package.py +0 -0
  49. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/__init__.py +0 -0
  50. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/boca/__init__.py +0 -0
  51. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/boca/boca_language_utils.py +0 -0
  52. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/boca/boca_outcome_utils.py +0 -0
  53. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/boca/extension.py +0 -0
  54. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/contest_main.py +0 -0
  55. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/importer.py +0 -0
  56. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/moj/packager.py +0 -0
  57. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/packager.py +0 -0
  58. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/pkg/packager.py +0 -0
  59. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/importer.py +0 -0
  60. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/packager.py +0 -0
  61. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/polygon_api.py +0 -0
  62. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/test.py +0 -0
  63. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/packaging/polygon/upload.py +0 -0
  64. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/presets/lock_schema.py +0 -0
  65. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/presets/schema.py +0 -0
  66. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/remote.py +0 -0
  67. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/retries.py +0 -0
  68. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/sanitizers/issue_stack.py +0 -0
  69. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/sanitizers/warning_stack.py +0 -0
  70. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/schema.py +0 -0
  71. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/setter_config.py +0 -0
  72. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/solutions.py +0 -0
  73. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/state.py +0 -0
  74. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/__init__.py +0 -0
  75. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/build_statements.py +0 -0
  76. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/builders.py +0 -0
  77. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/expander.py +0 -0
  78. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/joiners.py +0 -0
  79. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/latex.py +0 -0
  80. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/latex_jinja.py +0 -0
  81. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/statements/schema.py +0 -0
  82. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/stats.py +0 -0
  83. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/stresses.py +0 -0
  84. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/stressing/__init__.py +0 -0
  85. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/stressing/finder_parser.py +0 -0
  86. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/stressing/generator_parser.py +0 -0
  87. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tasks.py +0 -0
  88. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testcase_extractors.py +0 -0
  89. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testcase_utils.py +0 -0
  90. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testcases/__init__.py +0 -0
  91. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testcases/main.py +0 -0
  92. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testing/__init__.py +0 -0
  93. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testing/testing_package.py +0 -0
  94. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testing/testing_preset.py +0 -0
  95. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/testing/testing_shared.py +0 -0
  96. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/timing.py +0 -0
  97. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/__init__.py +0 -0
  98. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/__init__.py +0 -0
  99. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/debug_utils.py +0 -0
  100. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/main.py +0 -0
  101. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/manual_scrape.py +0 -0
  102. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/scrape.py +0 -0
  103. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/boca/scraper.py +0 -0
  104. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/converter.py +0 -0
  105. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/tooling/main.py +0 -0
  106. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/__init__.py +0 -0
  107. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/captured_log.py +0 -0
  108. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/css/app.tcss +0 -0
  109. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/main.py +0 -0
  110. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/__init__.py +0 -0
  111. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/build.py +0 -0
  112. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/command.py +0 -0
  113. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/differ.py +0 -0
  114. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/error.py +0 -0
  115. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/rich_log_modal.py +0 -0
  116. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/run.py +0 -0
  117. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/run_explorer.py +0 -0
  118. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/run_test_explorer.py +0 -0
  119. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/selector.py +0 -0
  120. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/screens/test_explorer.py +0 -0
  121. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/utils/__init__.py +0 -0
  122. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/utils/run_ui.py +0 -0
  123. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/__init__.py +0 -0
  124. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/diff_box.py +0 -0
  125. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/file_log.py +0 -0
  126. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/interaction_box.py +0 -0
  127. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/rich_log_box.py +0 -0
  128. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/test_output_box.py +0 -0
  129. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/ui/widgets/two_sided_test_output_box.py +0 -0
  130. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/unit.py +0 -0
  131. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/box/validators.py +0 -0
  132. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/config.py +0 -0
  133. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/console.py +0 -0
  134. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/__init__.py +0 -0
  135. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/caching.py +0 -0
  136. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/debug_context.py +0 -0
  137. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/grading_context.py +0 -0
  138. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/__init__.py +0 -0
  139. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/cacher.py +0 -0
  140. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/digester.py +0 -0
  141. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/program.py +0 -0
  142. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/sandbox.py +0 -0
  143. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/sandboxes/__init__.py +0 -0
  144. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/sandboxes/stupid_sandbox.py +0 -0
  145. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/sandboxes/tee.py +0 -0
  146. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/judge/storage.py +0 -0
  147. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/limits.py +0 -0
  148. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/profiling.py +0 -0
  149. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/steps.py +0 -0
  150. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/grading/steps_with_caching.py +0 -0
  151. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/checkers/boilerplate.cpp +0 -0
  152. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/checkers/noop.cpp +0 -0
  153. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/default_config.json +0 -0
  154. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/default_setter_config.mac.yml +0 -0
  155. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/default_setter_config.yml +0 -0
  156. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/envs/default.rbx.yml +0 -0
  157. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/checker.sh +0 -0
  158. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compare.sh +0 -0
  159. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/c +0 -0
  160. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/cc +0 -0
  161. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/cpp +0 -0
  162. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/java +0 -0
  163. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/kt +0 -0
  164. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/py2 +0 -0
  165. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/compile/py3 +0 -0
  166. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/c +0 -0
  167. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/cc +0 -0
  168. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/cpp +0 -0
  169. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/java +0 -0
  170. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/kt +0 -0
  171. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/py2 +0 -0
  172. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactive/py3 +0 -0
  173. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactor_compile.sh +0 -0
  174. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/interactor_run.sh +0 -0
  175. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/bkp +0 -0
  176. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/c +0 -0
  177. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/cc +0 -0
  178. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/cpp +0 -0
  179. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/java +0 -0
  180. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/kt +0 -0
  181. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/py2 +0 -0
  182. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/run/py3 +0 -0
  183. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/safeexec.c +0 -0
  184. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/boca/safeexec_compile.sh +0 -0
  185. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/c/compile.sh +0 -0
  186. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/c/prep.sh +0 -0
  187. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/c/run.sh +0 -0
  188. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/compare.sh +0 -0
  189. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/cpp/compile.sh +0 -0
  190. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/cpp/prep.sh +0 -0
  191. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/cpp/run.sh +0 -0
  192. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/interactor_prep.sh +0 -0
  193. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/interactor_run.sh +0 -0
  194. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/java/compile.sh +0 -0
  195. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/java/prep.sh +0 -0
  196. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/java/run.sh +0 -0
  197. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py2/compile.sh +0 -0
  198. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py2/prep.sh +0 -0
  199. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py2/run.sh +0 -0
  200. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py3/compile.sh +0 -0
  201. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py3/prep.sh +0 -0
  202. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/packagers/moj/scripts/py3/run.sh +0 -0
  203. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/.gitignore +0 -0
  204. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
  205. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
  206. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/statement/info.rbx.tex +0 -0
  207. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/statement/instructions.tex +0 -0
  208. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/contest/statement/logo.png +0 -0
  209. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/env.rbx.yml +0 -0
  210. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/.gitignore +0 -0
  211. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/gens/gen.cpp +0 -0
  212. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/manual_tests/samples/000.in +0 -0
  213. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/manual_tests/samples/001.in +0 -0
  214. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
  215. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/rbx.h +0 -0
  216. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
  217. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/sols/wa-overflow.cpp +0 -0
  218. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
  219. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/testlib.h +0 -0
  220. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/testplan/random.py +0 -0
  221. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/testplan/random.txt +0 -0
  222. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/validator.cpp +0 -0
  223. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
  224. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/shared/contest_template.rbx.tex +0 -0
  225. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/shared/icpc.sty +0 -0
  226. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/presets/default/shared/problem_template.rbx.tex +0 -0
  227. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/templates/rbx.h +0 -0
  228. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/resources/templates/template.cpp +0 -0
  229. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/testing_utils.py +0 -0
  230. {rbx_cp-0.16.1 → rbx_cp-0.16.4}/rbx/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rbx.cp
3
- Version: 0.16.1
3
+ Version: 0.16.4
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9.1,<4.0.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "rbx.cp"
3
- version = "0.16.1"
3
+ version = "0.16.4"
4
4
  description = ""
5
5
  packages = [
6
6
  {include = "rbx"}
@@ -0,0 +1 @@
1
+ __version__ = '0.16.4'
@@ -109,9 +109,7 @@ app.add_typer(
109
109
 
110
110
  def version_callback(value: bool) -> None:
111
111
  if value:
112
- import importlib.metadata
113
-
114
- version = importlib.metadata.version('rbx.cp')
112
+ version = utils.get_version()
115
113
 
116
114
  console.console.print(f'rbx version {version}')
117
115
  raise typer.Exit()
@@ -48,9 +48,33 @@ def ls_remote_tags(uri: str) -> List[str]:
48
48
  ]
49
49
 
50
50
 
51
- def latest_remote_tag(uri: str) -> str:
51
+ def ls_version_remote_tags(uri: str) -> List[str]:
52
52
  tags = ls_remote_tags(uri)
53
53
  valid_tags = [tag for tag in tags if semver.Version.is_valid(tag)]
54
- if not valid_tags:
54
+ return valid_tags
55
+
56
+
57
+ def latest_remote_tag(
58
+ uri: str, before: Optional[str] = None, after: Optional[str] = None
59
+ ) -> str:
60
+ tags = ls_version_remote_tags(uri)
61
+ if not tags:
55
62
  raise ValueError(f'No valid tags found for {uri}')
56
- return sorted(valid_tags, key=semver.VersionInfo.parse)[-1]
63
+ if before is not None:
64
+ tags = [
65
+ tag
66
+ for tag in tags
67
+ if semver.VersionInfo.parse(tag) <= semver.VersionInfo.parse(before)
68
+ ]
69
+ if after is not None:
70
+ tags = [
71
+ tag
72
+ for tag in tags
73
+ if semver.VersionInfo.parse(tag) >= semver.VersionInfo.parse(after)
74
+ ]
75
+ return sorted(tags, key=semver.VersionInfo.parse)[-1]
76
+
77
+
78
+ def has_remote_tag(uri: str, tag: str) -> bool:
79
+ tags = ls_remote_tags(uri)
80
+ return tag in tags
@@ -1,7 +1,7 @@
1
1
  import pathlib
2
2
  import shutil
3
3
  from math import fabs
4
- from typing import List
4
+ from typing import List, Optional
5
5
 
6
6
  import typer
7
7
 
@@ -29,19 +29,21 @@ class BocaPackager(BasePackager):
29
29
  def task_types(cls) -> List[TaskType]:
30
30
  return [TaskType.BATCH, TaskType.COMMUNICATION]
31
31
 
32
- def _get_main_statement(self) -> Statement:
32
+ def _get_main_statement(self) -> Optional[Statement]:
33
33
  pkg = package.find_problem_package_or_die()
34
34
 
35
35
  if not pkg.expanded_statements:
36
- console.console.print('[error]No statements found.[/error]')
37
- raise typer.Exit(1)
36
+ return None
38
37
 
39
38
  return pkg.expanded_statements[0]
40
39
 
41
40
  def _get_main_built_statement(
42
41
  self, built_statements: List[BuiltStatement]
43
- ) -> BuiltStatement:
42
+ ) -> Optional[BuiltStatement]:
44
43
  statement = self._get_main_statement()
44
+ if statement is None:
45
+ return None
46
+
45
47
  for built_statement in built_statements:
46
48
  if built_statement.statement == statement:
47
49
  return built_statement
@@ -322,13 +324,15 @@ class BocaPackager(BasePackager):
322
324
  (tests_path / language).write_text('exit 0\n')
323
325
 
324
326
  # Problem statement
325
- description_path = into_path / 'description'
326
- description_path.mkdir(parents=True, exist_ok=True)
327
- (description_path / 'problem.info').write_text(self._get_problem_info())
328
- shutil.copyfile(
329
- self._get_main_built_statement(built_statements).path,
330
- (description_path / self._get_problem_basename()).with_suffix('.pdf'),
331
- )
327
+ main_built_statement = self._get_main_built_statement(built_statements)
328
+ if main_built_statement is not None:
329
+ description_path = into_path / 'description'
330
+ description_path.mkdir(parents=True, exist_ok=True)
331
+ (description_path / 'problem.info').write_text(self._get_problem_info())
332
+ shutil.copyfile(
333
+ self._get_main_built_statement(built_statements).path,
334
+ (description_path / self._get_problem_basename()).with_suffix('.pdf'),
335
+ )
332
336
 
333
337
  # Copy solutions
334
338
  solutions_path = into_path / 'solutions'
@@ -26,7 +26,8 @@ async def polygon(
26
26
  None,
27
27
  '--language',
28
28
  '-l',
29
- help='If set, will use the given language as the main language.',
29
+ help='If set, will use the given language as the main language. '
30
+ 'Leave unset if your problem has no statements.',
30
31
  ),
31
32
  upload_as_english: bool = typer.Option(
32
33
  False,
@@ -27,12 +27,14 @@ class File(BaseXmlModel):
27
27
 
28
28
 
29
29
  class Test(BaseXmlModel):
30
- method: Literal['manual', 'generated'] = attr()
30
+ method: Literal['manual', 'generated'] = attr(default='manual')
31
31
 
32
32
  sample: Optional[bool] = attr(default=None)
33
33
 
34
34
  description: Optional[str] = attr(default=None)
35
35
 
36
+ verdict: Optional[str] = attr(default=None)
37
+
36
38
 
37
39
  class Testset(BaseXmlModel):
38
40
  name: Optional[str] = attr(default=None)
@@ -60,7 +62,7 @@ class Judging(BaseXmlModel):
60
62
 
61
63
  class Checker(BaseXmlModel):
62
64
  name: Optional[str] = attr(default=None)
63
- type: Literal['testlib'] = attr()
65
+ type: Literal['testlib'] = attr(default='testlib')
64
66
  source: File = element()
65
67
  binary: Optional[File] = element(default=None)
66
68
  cpy: Optional[File] = element(tag='copy', default=None)
@@ -11,7 +11,7 @@ import semver
11
11
  import typer
12
12
 
13
13
  from rbx import console, utils
14
- from rbx.box import cd
14
+ from rbx.box import cd, git_utils
15
15
  from rbx.box.git_utils import latest_remote_tag
16
16
  from rbx.box.presets.fetch import (
17
17
  PresetFetchInfo,
@@ -605,7 +605,18 @@ def _install_preset_from_remote(
605
605
  console.console.print(
606
606
  f'Cloning preset from [item]{fetch_info.fetch_uri}[/item]...'
607
607
  )
608
- git.Repo.clone_from(fetch_info.fetch_uri, d)
608
+ repo = git.Repo.clone_from(fetch_info.fetch_uri, d)
609
+ if fetch_info.tool_tag is not None:
610
+ console.console.print(
611
+ f'Checking out tool tag [item]{fetch_info.tool_tag}[/item]...'
612
+ )
613
+ try:
614
+ repo.git.checkout(fetch_info.tool_tag)
615
+ except Exception as e:
616
+ console.console.print(
617
+ f'[error]Could not checkout tool tag [item]{fetch_info.tool_tag}[/item] for preset [item]{fetch_info.name}[/item].[/error]'
618
+ )
619
+ raise typer.Exit(1) from e
609
620
  pd = pathlib.Path(d)
610
621
  if fetch_info.inner_dir:
611
622
  console.console.print(
@@ -719,14 +730,32 @@ def _install_preset_from_fetch_info(
719
730
  update=update,
720
731
  )
721
732
  return
722
- if _install_preset_from_resources(
723
- fetch_info,
724
- dest,
725
- ensure_contest=ensure_contest,
726
- ensure_problem=ensure_problem,
727
- update=update,
728
- ):
733
+ if fetch_info.is_tool():
734
+ # Fallback to the remote tool tag if it exists.
735
+ assert fetch_info.tool_tag is not None
736
+ remote_fetch_info = get_preset_fetch_info(
737
+ get_remote_uri_from_tool_preset(fetch_info.name)
738
+ )
739
+ assert remote_fetch_info is not None
740
+ remote_fetch_info.tool_tag = fetch_info.tool_tag
741
+
742
+ _install_preset_from_remote(
743
+ remote_fetch_info,
744
+ dest,
745
+ ensure_contest=ensure_contest,
746
+ ensure_problem=ensure_problem,
747
+ update=update,
748
+ )
729
749
  return
750
+
751
+ # if _install_preset_from_resources(
752
+ # fetch_info,
753
+ # dest,
754
+ # ensure_contest=ensure_contest,
755
+ # ensure_problem=ensure_problem,
756
+ # update=update,
757
+ # ):
758
+ # return
730
759
  console.console.print(
731
760
  f'[error]Preset [item]{fetch_info.name}[/item] not found.[/error]'
732
761
  )
@@ -895,8 +924,6 @@ def _sync(try_update: bool = False, force: bool = False, symlinks: bool = False)
895
924
  def copy_tree_normalizing_gitdir(
896
925
  src_path: pathlib.Path, dst_path: pathlib.Path, update: bool = False
897
926
  ):
898
- from rbx.box import git_utils
899
-
900
927
  shutil.copytree(str(src_path), str(dst_path), dirs_exist_ok=update, symlinks=True)
901
928
 
902
929
  if not (src_path / '.git').is_file():
@@ -918,8 +945,6 @@ def copy_local_preset(
918
945
  ):
919
946
  copy_tree_normalizing_gitdir(preset_path, dest_path / '.local.rbx')
920
947
 
921
- from rbx.box import git_utils
922
-
923
948
  preset_repo = git_utils.get_repo_or_nil(preset_path)
924
949
  current_repo = git_utils.get_repo_or_nil(
925
950
  pathlib.Path.cwd(), search_parent_directories=True
@@ -4,6 +4,11 @@ from typing import Optional
4
4
 
5
5
  from pydantic import BaseModel
6
6
 
7
+ from rbx import utils
8
+ from rbx.box import git_utils
9
+
10
+ _RBX_REMOTE_URI = 'https://github.com/rsalesc/rbx'
11
+
7
12
 
8
13
  class PresetFetchInfo(BaseModel):
9
14
  # The actual name of this preset.
@@ -18,12 +23,18 @@ class PresetFetchInfo(BaseModel):
18
23
  # Inner directory from where to pull the preset.
19
24
  inner_dir: str = ''
20
25
 
26
+ # Tool tag.
27
+ tool_tag: Optional[str] = None
28
+
21
29
  def is_remote(self) -> bool:
22
30
  return self.fetch_uri is not None
23
31
 
24
32
  def is_local_dir(self) -> bool:
25
33
  return bool(self.inner_dir) and not self.is_remote()
26
34
 
35
+ def is_tool(self) -> bool:
36
+ return self.tool_tag is not None
37
+
27
38
 
28
39
  def get_inner_dir_from_tool_preset(tool_preset: str) -> str:
29
40
  return f'rbx/resources/presets/{tool_preset}'
@@ -78,7 +89,10 @@ def get_preset_fetch_info(uri: Optional[str]) -> Optional[PresetFetchInfo]:
78
89
  match = compiled.match(s)
79
90
  if match is None:
80
91
  return None
81
- return PresetFetchInfo(name=s)
92
+ tool_tag = git_utils.latest_remote_tag(
93
+ _RBX_REMOTE_URI, before=utils.get_version()
94
+ )
95
+ return PresetFetchInfo(name=s, tool_tag=tool_tag)
82
96
 
83
97
  extractors = [
84
98
  get_github_fetch_info,
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  # yaml-language-server: $schema=https://rsalesc.github.io/rbx/schemas/Preset.json
3
3
  name: "default"
4
- min_version: "0.16.1"
4
+ min_version: "0.16.4"
5
5
  uri: "rsalesc/rbx/rbx/resources/presets/default"
6
6
  problem: "problem"
7
7
  contest: "contest"
@@ -1 +0,0 @@
1
- __version__ = '0.16.1'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes