rbx.cp 0.17.5__tar.gz → 0.17.6__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.6}/PKG-INFO +1 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/pyproject.toml +1 -1
- rbx_cp-0.17.6/rbx/__version__.py +1 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/sanitizers/warning_stack.py +3 -3
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/program.py +23 -3
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/sandboxes/stupid_sandbox.py +3 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/preset.rbx.yml +1 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/utils.py +48 -16
- rbx_cp-0.17.5/rbx/__version__.py +0 -1
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/LICENSE +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/README.md +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/annotations.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/autoenum.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/builder.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/cd.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/checkers.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/cli.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/code.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/compile.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/build_contest_statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/contest_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/contest_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/contest/statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/creation.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/deferred.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/download.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/dump_schemas.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/environment.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/extensions.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/fields.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/formatting.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/generators.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/git_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/global_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/header.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/lang.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/lazy_importing_main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/limits_info.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/linting.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/naming.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/boca/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/boca/boca_language_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/boca/boca_outcome_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/boca/extension.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/boca/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/contest_main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/importer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/moj/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/pkg/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/importer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/packager.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/polygon_api.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/test.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/upload.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/packaging/polygon/xml_schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/presets/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/presets/fetch.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/presets/lock_schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/presets/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/remote.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/retries.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/sanitizers/issue_stack.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/setter_config.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/solutions.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/state.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/build_statements.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/builders.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/expander.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/joiners.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/latex.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/latex_jinja.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/statements/schema.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/stats.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/stresses.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/stressing/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/stressing/finder_parser.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/stressing/generator_parser.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tasks.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testcase_extractors.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testcase_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testcases/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testcases/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testing/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testing/testing_package.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testing/testing_preset.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/testing/testing_shared.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/timing.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/debug_utils.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/manual_scrape.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/scrape.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/boca/scraper.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/converter.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/tooling/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/captured_log.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/css/app.tcss +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/main.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/build.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/command.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/differ.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/error.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/rich_log_modal.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/run.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/run_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/run_test_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/selector.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/screens/test_explorer.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/utils/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/utils/run_ui.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/diff_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/file_log.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/interaction_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/rich_log_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/test_output_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/ui/widgets/two_sided_test_output_box.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/unit.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/box/validators.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/config.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/console.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/caching.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/debug_context.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/grading_context.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/cacher.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/digester.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/sandbox.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/sandboxes/__init__.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/sandboxes/tee.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/judge/storage.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/limits.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/profiling.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/steps.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/grading/steps_with_caching.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/checkers/boilerplate.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/checkers/noop.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/default_config.json +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/default_setter_config.mac.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/default_setter_config.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/envs/default.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/checker.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compare.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/compile/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactive/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactor_compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/interactor_run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/bkp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/cc +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/java +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/kt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/py2 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/run/py3 +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/safeexec.c +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/boca/safeexec_compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/c/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/c/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/c/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/compare.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/cpp/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/cpp/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/cpp/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/interactor_prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/interactor_run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/java/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/java/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/java/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py2/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py2/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py2/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py3/compile.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py3/prep.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/packagers/moj/scripts/py3/run.sh +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/.gitignore +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/info.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/instructions.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/logo.png +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/env.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/.gitignore +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/gens/gen.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/manual_tests/samples/000.in +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/manual_tests/samples/001.in +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/rbx.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/sols/wa-overflow.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/testlib.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/testplan/random.py +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/testplan/random.txt +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/validator.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/shared/contest_template.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/shared/icpc.sty +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/shared/problem_template.rbx.tex +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/templates/rbx.h +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/templates/template.cpp +0 -0
- {rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/testing_utils.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '0.17.6'
|
@@ -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):
|
@@ -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,9 @@ class StupidSandbox(SandboxBase):
|
|
335
335
|
else:
|
336
336
|
raise RuntimeError(f'Unknown pid: {pid}')
|
337
337
|
|
338
|
+
for p in (interactor, program, solution_tee, interactor_tee):
|
339
|
+
p.close()
|
340
|
+
|
338
341
|
return typing.cast(Tuple[SandboxLog, SandboxLog], tuple(results))
|
339
342
|
|
340
343
|
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
|
@@ -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
|
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/contest.rbx.tex
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.6}/rbx/resources/presets/default/contest/statement/info.rbx.tex
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.6}/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.6}/rbx/resources/presets/default/problem/manual_tests/samples/000.in
RENAMED
File without changes
|
{rbx_cp-0.17.5 → rbx_cp-0.17.6}/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.6}/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.6}/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.6}/rbx/resources/presets/default/shared/problem_template.rbx.tex
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|