rbx.cp 0.17.5__tar.gz → 0.17.7__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.17.5 → rbx_cp-0.17.7}/PKG-INFO +1 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/pyproject.toml +1 -1
- rbx_cp-0.17.7/rbx/__version__.py +1 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/sanitizers/warning_stack.py +3 -3
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/schema.py +7 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/program.py +23 -3
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/sandboxes/stupid_sandbox.py +6 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/preset.rbx.yml +1 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/utils.py +49 -17
- rbx_cp-0.17.5/rbx/__version__.py +0 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/LICENSE +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/README.md +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/annotations.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/autoenum.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/builder.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/cd.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/checkers.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/cli.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/code.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/compile.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/build_contest_statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/contest_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/contest_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/contest/statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/creation.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/deferred.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/download.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/dump_schemas.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/environment.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/extensions.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/fields.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/formatting.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/generators.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/git_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/global_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/header.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/lang.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/lazy_importing_main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/limits_info.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/linting.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/naming.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/boca/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/boca/boca_language_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/boca/boca_outcome_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/boca/extension.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/boca/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/contest_main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/importer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/moj/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/pkg/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/importer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/polygon_api.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/test.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/upload.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/packaging/polygon/xml_schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/presets/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/presets/fetch.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/presets/lock_schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/presets/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/remote.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/retries.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/sanitizers/issue_stack.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/setter_config.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/solutions.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/state.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/build_statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/builders.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/expander.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/joiners.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/latex.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/latex_jinja.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/statements/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/stats.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/stresses.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/stressing/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/stressing/finder_parser.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/stressing/generator_parser.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tasks.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testcase_extractors.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testcase_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testcases/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testcases/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testing/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testing/testing_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testing/testing_preset.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/testing/testing_shared.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/timing.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/debug_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/manual_scrape.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/scrape.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/boca/scraper.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/converter.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/tooling/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/captured_log.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/css/app.tcss +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/build.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/command.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/differ.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/error.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/rich_log_modal.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/run.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/run_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/run_test_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/selector.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/screens/test_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/utils/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/utils/run_ui.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/diff_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/file_log.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/interaction_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/rich_log_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/test_output_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/ui/widgets/two_sided_test_output_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/unit.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/box/validators.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/config.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/console.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/caching.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/debug_context.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/grading_context.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/cacher.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/digester.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/sandbox.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/sandboxes/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/sandboxes/tee.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/judge/storage.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/limits.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/profiling.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/steps.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/grading/steps_with_caching.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/checkers/boilerplate.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/checkers/noop.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/default_config.json +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/default_setter_config.mac.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/default_setter_config.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/envs/default.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/checker.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compare.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/compile/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactive/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactor_compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/interactor_run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/bkp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/run/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/safeexec.c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/boca/safeexec_compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/c/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/c/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/c/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/compare.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/cpp/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/cpp/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/cpp/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/interactor_prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/interactor_run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/java/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/java/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/java/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py2/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py2/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py2/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py3/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py3/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/packagers/moj/scripts/py3/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/.gitignore +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/info.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/instructions.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/logo.png +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/env.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/.gitignore +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/gens/gen.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/manual_tests/samples/000.in +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/manual_tests/samples/001.in +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/rbx.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/sols/wa-overflow.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/testlib.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/testplan/random.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/testplan/random.txt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/validator.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/shared/contest_template.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/shared/icpc.sty +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/shared/problem_template.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/templates/rbx.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/templates/template.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/testing_utils.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '0.17.7'
|
@@ -29,9 +29,9 @@ class WarningStack:
|
|
29
29
|
f = reference.get_file(cacher)
|
30
30
|
if f is None:
|
31
31
|
return
|
32
|
-
with
|
33
|
-
|
34
|
-
|
32
|
+
with f:
|
33
|
+
with dest_path.open('wb') as fout:
|
34
|
+
shutil.copyfileobj(f, fout)
|
35
35
|
self.sanitizer_warnings[code.path] = dest_path
|
36
36
|
|
37
37
|
def clear(self):
|
@@ -106,6 +106,11 @@ class ExpectedOutcome(AutoEnum):
|
|
106
106
|
|
107
107
|
Especially useful for environments where TLE and RTE are indistinguishable."""
|
108
108
|
|
109
|
+
JUDGE_FAILED = alias('judge failed', 'jf') # type: ignore
|
110
|
+
"""Expected outcome for solutions that finish with a judge failed verdict.
|
111
|
+
|
112
|
+
Only useful for checker tests."""
|
113
|
+
|
109
114
|
def style(self) -> str:
|
110
115
|
if self == ExpectedOutcome.ANY:
|
111
116
|
return 'orange'
|
@@ -161,6 +166,8 @@ class ExpectedOutcome(AutoEnum):
|
|
161
166
|
return outcome in {Outcome.RUNTIME_ERROR} or outcome.is_slow()
|
162
167
|
if self == ExpectedOutcome.OUTPUT_LIMIT_EXCEEDED:
|
163
168
|
return outcome == Outcome.OUTPUT_LIMIT_EXCEEDED
|
169
|
+
if self == ExpectedOutcome.JUDGE_FAILED:
|
170
|
+
return outcome == Outcome.JUDGE_FAILED
|
164
171
|
return False
|
165
172
|
|
166
173
|
def get_matches(self) -> List[Outcome]:
|
@@ -20,8 +20,12 @@ FileLike = Union[PathOrStr, IO[bytes], int]
|
|
20
20
|
def _maybe_close_files(files):
|
21
21
|
for fobj in files:
|
22
22
|
if isinstance(fobj, int):
|
23
|
-
|
24
|
-
|
23
|
+
try:
|
24
|
+
os.close(fobj)
|
25
|
+
except OSError:
|
26
|
+
pass
|
27
|
+
else:
|
28
|
+
fobj.close()
|
25
29
|
|
26
30
|
|
27
31
|
def _is_pathlike(obj: Any) -> bool:
|
@@ -250,6 +254,20 @@ class Program:
|
|
250
254
|
threading.Thread(target=self._handle_wall, daemon=True).start()
|
251
255
|
threading.Thread(target=self._handle_alarm, daemon=True).start()
|
252
256
|
|
257
|
+
def close_pipes(self):
|
258
|
+
if self.popen is None:
|
259
|
+
return
|
260
|
+
if self.params.io.input == subprocess.PIPE and self.pipes.input is not None:
|
261
|
+
self.pipes.input.close()
|
262
|
+
if self.params.io.output == subprocess.PIPE and self.pipes.output is not None:
|
263
|
+
self.pipes.output.close()
|
264
|
+
if self.params.io.stderr == subprocess.PIPE and self.pipes.stderr is not None:
|
265
|
+
self.pipes.stderr.close()
|
266
|
+
|
267
|
+
def close(self):
|
268
|
+
self.close_pipes()
|
269
|
+
_maybe_close_files(self._files)
|
270
|
+
|
253
271
|
def process_exit(self, exitstatus, ru) -> ProgramResult:
|
254
272
|
_maybe_close_files(self._files)
|
255
273
|
|
@@ -307,4 +325,6 @@ class Program:
|
|
307
325
|
def wait(self):
|
308
326
|
assert self.popen is not None
|
309
327
|
_, exitstatus, ru = os.wait4(self.pid, 0)
|
310
|
-
|
328
|
+
res = self.process_exit(exitstatus, ru)
|
329
|
+
self.close_pipes()
|
330
|
+
return res
|
@@ -335,6 +335,12 @@ class StupidSandbox(SandboxBase):
|
|
335
335
|
else:
|
336
336
|
raise RuntimeError(f'Unknown pid: {pid}')
|
337
337
|
|
338
|
+
for p in (interactor, program):
|
339
|
+
p.close()
|
340
|
+
if should_tee:
|
341
|
+
for p in (solution_tee, interactor_tee):
|
342
|
+
p.close()
|
343
|
+
|
338
344
|
return typing.cast(Tuple[SandboxLog, SandboxLog], tuple(results))
|
339
345
|
|
340
346
|
def cleanup(self, delete=False):
|
@@ -1,13 +1,11 @@
|
|
1
1
|
import contextlib
|
2
2
|
import enum
|
3
|
-
import fcntl
|
4
3
|
import functools
|
5
4
|
import json
|
6
5
|
import os
|
7
6
|
import os.path
|
8
7
|
import pathlib
|
9
8
|
import re
|
10
|
-
import resource
|
11
9
|
import shutil
|
12
10
|
import subprocess
|
13
11
|
import sys
|
@@ -54,7 +52,7 @@ def get_upgrade_command(
|
|
54
52
|
parsed_version = (
|
55
53
|
semver.VersionInfo.parse(version) if isinstance(version, str) else version
|
56
54
|
) or get_semver()
|
57
|
-
return f'
|
55
|
+
return f'uv tool install {PIP_NAME}@{parsed_version.major}'
|
58
56
|
|
59
57
|
|
60
58
|
def check_version_compatibility_between(
|
@@ -75,19 +73,41 @@ def check_version_compatibility(required: str) -> SemVerCompatibility:
|
|
75
73
|
return check_version_compatibility_between(installed, required)
|
76
74
|
|
77
75
|
|
78
|
-
def print_open_fd_count() -> int:
|
76
|
+
def print_open_fd_count(id: Optional[str] = None) -> int:
|
79
77
|
import psutil
|
80
78
|
|
81
79
|
try:
|
82
|
-
|
83
|
-
|
84
|
-
print(f'Number of opened file descriptors: {open_fds}')
|
80
|
+
open_fds = get_open_fds()
|
81
|
+
print(f'Number of opened file descriptors for {id or "..."}: {open_fds}')
|
85
82
|
except psutil.AccessDenied:
|
86
83
|
print('Access denied. Run with appropriate permissions (e.g., sudo) if needed.')
|
87
84
|
except Exception as e:
|
88
85
|
print(f'An error occurred: {e}')
|
89
86
|
|
90
87
|
|
88
|
+
class FdLeakDetector:
|
89
|
+
def __init__(self, id: Optional[str] = None, diff: bool = False):
|
90
|
+
self.open_fds = 0
|
91
|
+
self.id = id
|
92
|
+
self.diff = diff
|
93
|
+
|
94
|
+
def __enter__(self):
|
95
|
+
self.open_fds = get_open_fds()
|
96
|
+
return self
|
97
|
+
|
98
|
+
def __exit__(self, *args, **kwargs):
|
99
|
+
open_fds = get_open_fds()
|
100
|
+
if open_fds > self.open_fds:
|
101
|
+
print(
|
102
|
+
f'File descriptor leak detected for {self.id or "..."}: {open_fds - self.open_fds} new file descriptors opened'
|
103
|
+
)
|
104
|
+
elif self.diff and open_fds < self.open_fds:
|
105
|
+
print(
|
106
|
+
f'File descriptor diff detected for {self.id or "..."}: {self.open_fds - open_fds} file descriptors closed'
|
107
|
+
)
|
108
|
+
self.open_fds = open_fds
|
109
|
+
|
110
|
+
|
91
111
|
def create_and_write(path: pathlib.Path, *args, **kwargs):
|
92
112
|
path.parent.mkdir(parents=True, exist_ok=True)
|
93
113
|
path.write_text(*args, **kwargs)
|
@@ -256,16 +276,28 @@ def confirm_on_status(status: Optional[rich.status.Status], *args, **kwargs) ->
|
|
256
276
|
return res
|
257
277
|
|
258
278
|
|
259
|
-
def get_open_fds():
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
279
|
+
def get_open_fds() -> int:
|
280
|
+
import psutil
|
281
|
+
|
282
|
+
try:
|
283
|
+
current_process = psutil.Process()
|
284
|
+
open_fds = current_process.num_fds()
|
285
|
+
return open_fds
|
286
|
+
except psutil.AccessDenied:
|
287
|
+
return 0
|
288
|
+
except Exception as e:
|
289
|
+
print(f'An error occurred: {e}')
|
290
|
+
return 0
|
291
|
+
|
292
|
+
# fds = []
|
293
|
+
# soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
|
294
|
+
# for fd in range(0, soft):
|
295
|
+
# try:
|
296
|
+
# fcntl.fcntl(fd, fcntl.F_GETFD)
|
297
|
+
# except IOError:
|
298
|
+
# continue
|
299
|
+
# fds.append(fd)
|
300
|
+
# return fds
|
269
301
|
|
270
302
|
|
271
303
|
def command_exists(command):
|
rbx_cp-0.17.5/rbx/__version__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '0.17.5'
|
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
|
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
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/contest.rbx.tex
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/info.rbx.tex
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/contest/statement/instructions.tex
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/manual_tests/samples/000.in
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/manual_tests/samples/001.in
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/problem/statement/statement.rbx.tex
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/shared/contest_template.rbx.tex
RENAMED
File without changes
|
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.7}/rbx/resources/presets/default/shared/problem_template.rbx.tex
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|