rbx.cp 0.16.4__tar.gz → 0.17.0__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.
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/PKG-INFO +1 -1
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/pyproject.toml +1 -1
- rbx_cp-0.17.0/rbx/__version__.py +1 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/naming.py +32 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/boca/packager.py +4 -5
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/packager.py +9 -4
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/importer.py +21 -6
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/packager.py +10 -9
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/upload.py +2 -2
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/schema.py +6 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/builders.py +4 -1
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/schema.py +5 -2
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/converter.py +1 -1
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/preset.rbx.yml +1 -1
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/problem.rbx.yml +2 -1
- rbx_cp-0.16.4/rbx/__version__.py +0 -1
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/LICENSE +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/README.md +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/annotations.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/autoenum.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/builder.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/cd.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/checkers.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/cli.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/code.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/compile.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/build_contest_statements.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/contest_package.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/contest_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/schema.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/contest/statements.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/creation.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/deferred.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/download.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/dump_schemas.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/environment.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/extensions.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/fields.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/formatting.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/generators.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/git_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/global_package.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/header.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/lang.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/lazy_importing_main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/limits_info.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/linting.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/package.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/boca/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/boca/boca_language_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/boca/boca_outcome_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/boca/extension.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/contest_main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/importer.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/moj/packager.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/pkg/packager.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/polygon_api.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/test.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/packaging/polygon/xml_schema.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/presets/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/presets/fetch.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/presets/lock_schema.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/presets/schema.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/remote.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/retries.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/sanitizers/issue_stack.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/sanitizers/warning_stack.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/setter_config.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/solutions.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/state.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/build_statements.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/expander.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/joiners.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/latex.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/statements/latex_jinja.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/stats.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/stresses.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/stressing/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/stressing/finder_parser.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/stressing/generator_parser.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tasks.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testcase_extractors.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testcase_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testcases/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testcases/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testing/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testing/testing_package.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testing/testing_preset.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/testing/testing_shared.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/timing.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/debug_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/manual_scrape.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/scrape.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/boca/scraper.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/tooling/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/captured_log.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/css/app.tcss +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/main.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/build.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/command.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/differ.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/error.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/rich_log_modal.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/run.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/run_explorer.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/run_test_explorer.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/selector.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/screens/test_explorer.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/utils/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/utils/run_ui.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/diff_box.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/file_log.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/interaction_box.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/rich_log_box.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/test_output_box.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/ui/widgets/two_sided_test_output_box.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/unit.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/box/validators.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/config.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/console.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/caching.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/debug_context.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/grading_context.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/cacher.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/digester.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/program.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/sandbox.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/sandboxes/__init__.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/sandboxes/stupid_sandbox.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/sandboxes/tee.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/judge/storage.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/limits.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/profiling.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/steps.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/grading/steps_with_caching.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/checkers/boilerplate.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/checkers/noop.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/default_config.json +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/default_setter_config.mac.yml +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/default_setter_config.yml +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/envs/default.rbx.yml +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/checker.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compare.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/c +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/cc +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/java +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/kt +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/py2 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/compile/py3 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/c +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/cc +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/java +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/kt +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/py2 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactive/py3 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactor_compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/interactor_run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/bkp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/c +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/cc +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/java +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/kt +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/py2 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/run/py3 +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/safeexec.c +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/boca/safeexec_compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/c/compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/c/prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/c/run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/compare.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/cpp/compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/cpp/prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/cpp/run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/interactor_prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/interactor_run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/java/compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/java/prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/java/run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py2/compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py2/prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py2/run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py3/compile.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py3/prep.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/packagers/moj/scripts/py3/run.sh +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/.gitignore +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/statement/info.rbx.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/statement/instructions.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/contest/statement/logo.png +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/env.rbx.yml +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/.gitignore +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/gens/gen.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/manual_tests/samples/000.in +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/manual_tests/samples/001.in +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/rbx.h +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/sols/wa-overflow.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/testlib.h +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/testplan/random.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/testplan/random.txt +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/validator.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/shared/contest_template.rbx.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/shared/icpc.sty +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/presets/default/shared/problem_template.rbx.tex +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/templates/rbx.h +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/resources/templates/template.cpp +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/testing_utils.py +0 -0
- {rbx_cp-0.16.4 → rbx_cp-0.17.0}/rbx/utils.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '0.17.0'
|
@@ -1,8 +1,13 @@
|
|
1
1
|
from typing import Optional, Tuple
|
2
2
|
|
3
|
+
import typer
|
4
|
+
|
3
5
|
from rbx.box import package
|
4
6
|
from rbx.box.contest import contest_package
|
5
7
|
from rbx.box.contest.schema import ContestProblem
|
8
|
+
from rbx.box.schema import Package
|
9
|
+
from rbx.box.statements.schema import Statement
|
10
|
+
from rbx.console import console
|
6
11
|
|
7
12
|
|
8
13
|
def get_problem_entry_in_contest() -> Optional[Tuple[int, ContestProblem]]:
|
@@ -44,3 +49,30 @@ def get_problem_name_with_contest_info() -> str:
|
|
44
49
|
if contest is None or short_name is None:
|
45
50
|
return problem.name
|
46
51
|
return f'{contest.name}-{short_name}-{problem.name}'
|
52
|
+
|
53
|
+
|
54
|
+
def get_title(
|
55
|
+
lang: Optional[str] = None,
|
56
|
+
statement: Optional[Statement] = None,
|
57
|
+
pkg: Optional[Package] = None,
|
58
|
+
fallback_to_title: bool = False,
|
59
|
+
) -> str:
|
60
|
+
if pkg is None:
|
61
|
+
pkg = package.find_problem_package_or_die()
|
62
|
+
title: Optional[str] = None
|
63
|
+
if lang is not None:
|
64
|
+
title = pkg.titles.get(lang)
|
65
|
+
if statement is not None:
|
66
|
+
title = statement.title or title
|
67
|
+
if title is None:
|
68
|
+
if fallback_to_title and pkg.titles:
|
69
|
+
if len(pkg.titles) != 1:
|
70
|
+
console.print(
|
71
|
+
'[error]Package has multiple titles and no statement. Could not infer which title to use.[/error]'
|
72
|
+
)
|
73
|
+
console.print(f'Available titles: {pkg.titles}')
|
74
|
+
raise typer.Exit(1)
|
75
|
+
title = list(pkg.titles.values())[0]
|
76
|
+
else:
|
77
|
+
title = pkg.name
|
78
|
+
return title
|
@@ -48,10 +48,7 @@ class BocaPackager(BasePackager):
|
|
48
48
|
if built_statement.statement == statement:
|
49
49
|
return built_statement
|
50
50
|
|
51
|
-
|
52
|
-
'[error]Main statement not found among built statements.[/error]'
|
53
|
-
)
|
54
|
-
raise typer.Exit(1)
|
51
|
+
return None
|
55
52
|
|
56
53
|
def _get_problem_name(self) -> str:
|
57
54
|
# BOCA forces Java class names to be the name of the problem.
|
@@ -66,9 +63,11 @@ class BocaPackager(BasePackager):
|
|
66
63
|
|
67
64
|
def _get_problem_info(self) -> str:
|
68
65
|
statement = self._get_main_statement()
|
66
|
+
lang = statement.language if statement is not None else None
|
67
|
+
title = naming.get_title(lang, statement, fallback_to_title=True)
|
69
68
|
return (
|
70
69
|
f'basename={self._get_problem_basename()}\n'
|
71
|
-
f'fullname={
|
70
|
+
f'fullname={title}\n'
|
72
71
|
f'descfile={self._get_problem_basename()}.pdf\n'
|
73
72
|
)
|
74
73
|
|
@@ -3,7 +3,7 @@ import pathlib
|
|
3
3
|
import shutil
|
4
4
|
import tempfile
|
5
5
|
from abc import ABC, abstractmethod
|
6
|
-
from typing import List, Tuple, Type
|
6
|
+
from typing import List, Optional, Tuple, Type
|
7
7
|
|
8
8
|
import typer
|
9
9
|
|
@@ -94,12 +94,17 @@ class BasePackager(ABC):
|
|
94
94
|
res.extend(tests_per_group[group.name])
|
95
95
|
return res
|
96
96
|
|
97
|
-
def
|
97
|
+
def get_statement_for_language_or_null(self, lang: str) -> Optional[Statement]:
|
98
98
|
pkg = package.find_problem_package_or_die()
|
99
99
|
for statement in pkg.expanded_statements:
|
100
100
|
if statement.language == lang:
|
101
101
|
return statement
|
102
|
-
|
102
|
+
return None
|
103
|
+
|
104
|
+
def get_statement_for_language_or_die(self, lang: str) -> Statement:
|
105
|
+
statement = self.get_statement_for_language_or_null(lang)
|
106
|
+
if statement is None:
|
107
|
+
raise ValueError(f'No statement for language {lang} found.')
|
103
108
|
|
104
109
|
|
105
110
|
class BaseContestPackager(ABC):
|
@@ -210,7 +215,7 @@ async def run_packager(
|
|
210
215
|
for statement_type in statement_types:
|
211
216
|
languages = packager.languages()
|
212
217
|
for language in languages:
|
213
|
-
statement = packager.
|
218
|
+
statement = packager.get_statement_for_language_or_die(language)
|
214
219
|
statement_path = build_statement(statement, pkg, statement_type)
|
215
220
|
built_statements.append(
|
216
221
|
BuiltStatement(statement, statement_path, statement_type)
|
@@ -70,6 +70,14 @@ def _populate_tests(
|
|
70
70
|
]
|
71
71
|
|
72
72
|
|
73
|
+
def _populate_titles(problem: Problem, pkg: Package):
|
74
|
+
titles = {}
|
75
|
+
for name in problem.names:
|
76
|
+
iso639_code = lang.lang_to_code(name.language)
|
77
|
+
titles[iso639_code] = name.value
|
78
|
+
pkg.titles = titles
|
79
|
+
|
80
|
+
|
73
81
|
def _populate_statements(
|
74
82
|
problem: Problem,
|
75
83
|
pkg: Package,
|
@@ -83,9 +91,6 @@ def _populate_statements(
|
|
83
91
|
found_main = False
|
84
92
|
|
85
93
|
for statement in pdf_statements:
|
86
|
-
if statement.language not in name_per_language:
|
87
|
-
continue
|
88
|
-
name = name_per_language[statement.language]
|
89
94
|
statement_path = into_path / _get_statement_path(statement)
|
90
95
|
statement_path.parent.mkdir(parents=True, exist_ok=True)
|
91
96
|
shutil.copy(pkg_path / statement.path, statement_path)
|
@@ -93,8 +98,7 @@ def _populate_statements(
|
|
93
98
|
iso639_code = lang.lang_to_code(statement.language)
|
94
99
|
|
95
100
|
pkg_statement = BoxStatement(
|
96
|
-
name=f'statement-{
|
97
|
-
title=name.value,
|
101
|
+
name=f'statement-{statement.language}',
|
98
102
|
language=iso639_code,
|
99
103
|
path=_get_statement_path(statement),
|
100
104
|
type=StatementType.PDF,
|
@@ -110,7 +114,8 @@ def _populate_statements(
|
|
110
114
|
found_main = True
|
111
115
|
continue
|
112
116
|
|
113
|
-
|
117
|
+
name = name_per_language.get(statement.language)
|
118
|
+
if name is not None and name.main and not found_main:
|
114
119
|
# If main statement, add it to the front of the list
|
115
120
|
pkg_statements = [pkg_statement] + pkg_statements
|
116
121
|
found_main = True
|
@@ -124,8 +129,17 @@ def _populate_statements(
|
|
124
129
|
console.console.print(
|
125
130
|
f'[error]Main statement of language [item]{main_language}[/item] not found.[/error]',
|
126
131
|
)
|
132
|
+
console.console.print(
|
133
|
+
'If you want no statement in your imported package, '
|
134
|
+
'leave the [item]--main-language[/item] flag unset.'
|
135
|
+
)
|
127
136
|
raise typer.Exit(1)
|
128
137
|
|
138
|
+
if not pkg_statements:
|
139
|
+
console.console.print(
|
140
|
+
'[warning]Imported problem has no statements. Continuing without a statement.[/warning]',
|
141
|
+
)
|
142
|
+
|
129
143
|
|
130
144
|
def _is_cpp_source(source: File) -> bool:
|
131
145
|
if source.type is None:
|
@@ -224,6 +238,7 @@ class PolygonImporter(BaseImporter):
|
|
224
238
|
)
|
225
239
|
|
226
240
|
_populate_tests(testset, pkg, pkg_path, into_path)
|
241
|
+
_populate_titles(problem, pkg)
|
227
242
|
_populate_statements(problem, pkg, pkg_path, into_path, self.main_language)
|
228
243
|
_copy_checker(problem, pkg, pkg_path, into_path)
|
229
244
|
_copy_interactor(problem, pkg, pkg_path, into_path)
|
@@ -5,7 +5,7 @@ from typing import List, Optional
|
|
5
5
|
import typer
|
6
6
|
|
7
7
|
from rbx import console, utils
|
8
|
-
from rbx.box import header, limits_info, package
|
8
|
+
from rbx.box import header, limits_info, naming, package
|
9
9
|
from rbx.box.lang import code_to_lang, code_to_langs, is_valid_lang_code
|
10
10
|
from rbx.box.packaging.packager import (
|
11
11
|
BaseContestPackager,
|
@@ -62,7 +62,7 @@ class PolygonPackager(BasePackager):
|
|
62
62
|
|
63
63
|
lang_codes = set()
|
64
64
|
for statement in pkg.expanded_statements:
|
65
|
-
lang_codes.add(statement.
|
65
|
+
lang_codes.add(statement.language)
|
66
66
|
|
67
67
|
for lang in langs:
|
68
68
|
if lang not in lang_codes:
|
@@ -72,14 +72,15 @@ class PolygonPackager(BasePackager):
|
|
72
72
|
)
|
73
73
|
raise typer.Exit(1)
|
74
74
|
|
75
|
+
def _get_name(self, lang: str) -> polygon_schema.Name:
|
76
|
+
statement = self.get_statement_for_language_or_null(lang)
|
77
|
+
return polygon_schema.Name(
|
78
|
+
language=code_to_langs([lang])[0],
|
79
|
+
value=naming.get_title(lang, statement),
|
80
|
+
)
|
81
|
+
|
75
82
|
def _get_names(self) -> List[polygon_schema.Name]:
|
76
|
-
names = [
|
77
|
-
polygon_schema.Name(
|
78
|
-
language=code_to_langs([lang])[0],
|
79
|
-
value=self.get_statement_for_language(lang).title,
|
80
|
-
)
|
81
|
-
for lang in self.languages()
|
82
|
-
]
|
83
|
+
names = [self._get_name(lang) for lang in self.languages()]
|
83
84
|
|
84
85
|
_select_main_language(names, self.main_language)
|
85
86
|
|
@@ -8,7 +8,7 @@ import rich.progress
|
|
8
8
|
import typer
|
9
9
|
|
10
10
|
from rbx import console
|
11
|
-
from rbx.box import header, limits_info, package
|
11
|
+
from rbx.box import header, limits_info, naming, package
|
12
12
|
from rbx.box.generators import get_all_built_testcases
|
13
13
|
from rbx.box.lang import code_to_langs, is_valid_lang_code
|
14
14
|
from rbx.box.packaging.polygon import polygon_api as api
|
@@ -353,7 +353,7 @@ def _upload_statement(
|
|
353
353
|
blocks = _get_statement_blocks(statement)
|
354
354
|
polygon_statement = api.Statement(
|
355
355
|
encoding='utf-8',
|
356
|
-
name=statement.
|
356
|
+
name=naming.get_title(statement.language, statement, pkg),
|
357
357
|
legend=blocks.blocks.get('legend') or '',
|
358
358
|
input=blocks.blocks.get('input') or '',
|
359
359
|
output=blocks.blocks.get('output') or '',
|
@@ -508,6 +508,12 @@ class Package(BaseModel):
|
|
508
508
|
# Name of the problem.
|
509
509
|
name: str = NameField(description='The name of the problem.')
|
510
510
|
|
511
|
+
titles: Dict[str, str] = Field(
|
512
|
+
default={},
|
513
|
+
description='Titles for the problem in each language. '
|
514
|
+
'Languages should be specified as lowercase ISO 639-1 codes.',
|
515
|
+
)
|
516
|
+
|
511
517
|
type: TaskType = Field(
|
512
518
|
default=TaskType.BATCH, description='The type of the problem.'
|
513
519
|
)
|
@@ -11,6 +11,7 @@ import typer
|
|
11
11
|
from pydantic import BaseModel
|
12
12
|
|
13
13
|
from rbx import console, utils
|
14
|
+
from rbx.box import naming
|
14
15
|
from rbx.box.fields import Primitive
|
15
16
|
from rbx.box.schema import LimitsProfile, Package, Testcase
|
16
17
|
from rbx.box.statements.latex_jinja import (
|
@@ -130,7 +131,9 @@ class StatementBuilderProblem(StatementBuilderItem):
|
|
130
131
|
'statement': self.statement,
|
131
132
|
'samples': self.samples,
|
132
133
|
'vars': JinjaDictWrapper.from_dict(self.vars or {}, wrapper_key='vars'),
|
133
|
-
'title':
|
134
|
+
'title': naming.get_title(
|
135
|
+
self.statement.language, self.statement, self.package
|
136
|
+
),
|
134
137
|
'limits': self.limits,
|
135
138
|
}
|
136
139
|
if self.short_name is not None:
|
@@ -132,8 +132,11 @@ class Statement(BaseModel):
|
|
132
132
|
default='en', description='Language code of this statement (ISO 639-1).'
|
133
133
|
)
|
134
134
|
|
135
|
-
title: str = Field(
|
136
|
-
default=
|
135
|
+
title: Optional[str] = Field(
|
136
|
+
default=None,
|
137
|
+
description='Title of the problem, as it appears in the statement. '
|
138
|
+
'Can be left unset if the problem has no title or if title comes '
|
139
|
+
'from the `titles` field of the package.',
|
137
140
|
)
|
138
141
|
|
139
142
|
path: pathlib.Path = Field(
|
@@ -63,7 +63,7 @@ async def convert(
|
|
63
63
|
built_statements = []
|
64
64
|
for statement_type in packager.statement_types():
|
65
65
|
for language in packager.languages():
|
66
|
-
statement = packager.
|
66
|
+
statement = packager.get_statement_for_language_or_die(language)
|
67
67
|
statement_path = build_statement(statement, pkg, statement_type)
|
68
68
|
built_statements.append(
|
69
69
|
BuiltStatement(statement, statement_path, statement_type)
|
@@ -3,6 +3,8 @@
|
|
3
3
|
name: "new-problem"
|
4
4
|
timeLimit: 1000 # ms
|
5
5
|
memoryLimit: 256 # MiB
|
6
|
+
titles:
|
7
|
+
en: "New problem"
|
6
8
|
checker: {path: "wcmp.cpp"} # Download others from testlib with `rbx download checker`
|
7
9
|
validator: {path: "validator.cpp"}
|
8
10
|
testcases:
|
@@ -31,7 +33,6 @@ solutions:
|
|
31
33
|
outcome: "INCORRECT"
|
32
34
|
statements:
|
33
35
|
- name: "statement-en"
|
34
|
-
title: "New Problem"
|
35
36
|
path: "statement/statement.rbx.tex" # Open this file to edit your statement.
|
36
37
|
type: "rbxTeX"
|
37
38
|
language: "en"
|
rbx_cp-0.16.4/rbx/__version__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '0.16.4'
|
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
|
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
|
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
|