rbx.cp 0.5.28__tar.gz → 0.5.30__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.5.28 → rbx_cp-0.5.30}/PKG-INFO +1 -4
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/README.md +0 -3
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/pyproject.toml +1 -1
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/builder.py +5 -5
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/code.py +50 -1
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/schema.py +5 -5
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/creation.py +10 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/extensions.py +2 -2
- rbx_cp-0.5.30/rbx/box/formatting.py +10 -0
- rbx_cp-0.5.30/rbx/box/generators.py +612 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/generators_test.py +1 -1
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/main.py +17 -7
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/schema.py +51 -34
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/setter_config.py +7 -7
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/solutions.py +151 -62
- rbx_cp-0.5.30/rbx/box/state.py +9 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/schema.py +6 -4
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/stresses.py +11 -4
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/testcases.py +17 -1
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/sandboxes/stupid_sandbox.py +0 -1
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/utils.py +8 -2
- rbx_cp-0.5.28/rbx/box/generators.py +0 -483
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/LICENSE +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/annotations.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/autoenum.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/cd.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/checkers.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/compile.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/conftest.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/build_contest_statements.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/contest_package.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/contest_utils.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/main.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/contest/statements.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/deferred.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/download.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/environment.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/package.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/boca/extension.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/boca/packager.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/contest_main.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/main.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/packager.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/polygon/packager.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/polygon/test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/packaging/polygon/xml_schema.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/presets/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/presets/fetch.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/presets/lock_schema.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/presets/schema.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/retries.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/sanitizers/warning_stack.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/solutions_test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/build_statements.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/builders.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/joiners.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/latex.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/statements/latex_jinja.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/stressing/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/stressing/finder_parser.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/stressing/generator_parser.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/ui/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/ui/captured_log.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/ui/css/app.tcss +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/ui/main.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/ui/run.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/validators.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/box/validators_test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/checker.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/clone.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/config.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/conftest.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/console.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/create.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/edit.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/caching.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/conftest.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/cacher.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/digester.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/sandbox.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/sandboxes/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/sandboxes/isolate.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/sandboxes/timeit.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/storage.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/judge/testiso.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/steps.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/steps_with_caching.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading/steps_with_caching_run_test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/grading_utils.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/hydration.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/main.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/metadata.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/providers/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/providers/codeforces.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/providers/provider.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/checkers/boilerplate.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/default_config.json +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/default_setter_config.mac.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/default_setter_config.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/envs/default.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/envs/isolate.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/checker.sh +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compare +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/c +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/cc +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/java +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/kt +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/pas +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/py2 +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/compile/py3 +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/c +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/cc +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/java +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/kt +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/py2 +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/packagers/boca/run/py3 +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/contest/statement/olymp.sty +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/contest/statement/template.rbx.tex +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/preset.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/.gitignore +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/gen.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/random.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/random.txt +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/sols/slow.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/sols/wa.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/statement/olymp.sty +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/statement/projecao.png +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/statement/template.rbx.tex +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/tests/samples/000.in +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/tests/samples/001.in +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/validator.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/resources/templates/template.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/run.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/schema.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/submit.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/submitors/__init__.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/submitors/codeforces.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/submitors/submitor.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/test.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testcase.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testcase_rendering.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/gen1.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/gen2.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/genScript.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/hard-tle.sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/ole.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/problem.rbx.yml +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/re.sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/tests/1.in +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/tle-and-incorrect.sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/tle.sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/validator.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/box1/wa.sol.cpp +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/caching/executable.py +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testdata/compatible +0 -0
- {rbx_cp-0.5.28 → rbx_cp-0.5.30}/rbx/testing_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rbx.cp
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.30
|
4
4
|
Summary:
|
5
5
|
Author: Roberto Sales
|
6
6
|
Requires-Python: >=3.9,<4.0
|
@@ -32,9 +32,6 @@ Requires-Dist: textual (>=0.79.1,<0.80.0)
|
|
32
32
|
Requires-Dist: typer (>=0.15.1,<0.16.0)
|
33
33
|
Description-Content-Type: text/markdown
|
34
34
|
|
35
|
-
<p align="center">
|
36
|
-
<img src="docs/rbx_transparent.png" width="240px">
|
37
|
-
</p>
|
38
35
|
<p align="center">
|
39
36
|
<em>The go-to CLI tool for competitive programmers and setters.</em>
|
40
37
|
</p>
|
@@ -49,11 +49,11 @@ def build(
|
|
49
49
|
infos = validate_testcases(s, groups=groups)
|
50
50
|
print_validation_report(infos)
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
52
|
+
if has_validation_errors(infos):
|
53
|
+
console.console.print(
|
54
|
+
'[error]Validation failed, check the report above.[/error]'
|
55
|
+
)
|
56
|
+
return False
|
57
57
|
|
58
58
|
with utils.StatusProgress(
|
59
59
|
'Building outputs for testcases...',
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import pathlib
|
2
2
|
import re
|
3
|
+
import resource
|
3
4
|
import shlex
|
4
5
|
from enum import Enum
|
5
6
|
from pathlib import PosixPath
|
@@ -10,7 +11,7 @@ import rich.text
|
|
10
11
|
import typer
|
11
12
|
|
12
13
|
from rbx import console
|
13
|
-
from rbx.box import download, package, setter_config
|
14
|
+
from rbx.box import download, package, setter_config, state
|
14
15
|
from rbx.box.environment import (
|
15
16
|
ExecutionConfig,
|
16
17
|
get_compilation_config,
|
@@ -22,6 +23,7 @@ from rbx.box.environment import (
|
|
22
23
|
get_sandbox_params_from_config,
|
23
24
|
merge_execution_configs,
|
24
25
|
)
|
26
|
+
from rbx.box.formatting import get_formatted_memory
|
25
27
|
from rbx.box.sanitizers import warning_stack
|
26
28
|
from rbx.box.schema import CodeItem
|
27
29
|
from rbx.grading import steps_with_caching
|
@@ -150,6 +152,49 @@ def _ignore_warning_in_cxx_input(input: GradingFileInput):
|
|
150
152
|
input.src = preprocessed_path
|
151
153
|
|
152
154
|
|
155
|
+
def _check_stack_limit():
|
156
|
+
if not state.STATE.run_through_cli:
|
157
|
+
return
|
158
|
+
soft, hard = None, None
|
159
|
+
try:
|
160
|
+
soft, hard = resource.getrlimit(resource.RLIMIT_STACK)
|
161
|
+
except Exception:
|
162
|
+
pass
|
163
|
+
|
164
|
+
if (
|
165
|
+
soft is not None
|
166
|
+
and hard is not None
|
167
|
+
and soft < hard
|
168
|
+
and soft < 256 * 1024 * 1024 # 256 MiB
|
169
|
+
):
|
170
|
+
soft_fmt = get_formatted_memory(soft)
|
171
|
+
hard_fmt = get_formatted_memory(hard)
|
172
|
+
console.console.print(
|
173
|
+
f'[error]Stack limit is too low (limit is set as [item]{soft_fmt}[/item], but configured user capacity is [item]{hard_fmt}[/item]).[/error]'
|
174
|
+
)
|
175
|
+
console.console.print(
|
176
|
+
'[error]It is not safe to develop problems in [item]rbx[/item] with this configuration.[/error]'
|
177
|
+
)
|
178
|
+
console.console.print(
|
179
|
+
'To solve this, add the following lines to the end of your [item]~/.bashrc[/item] or [item]~/.zshrc[/item] file (or equivalent shell configuration file):'
|
180
|
+
)
|
181
|
+
console.console.print(
|
182
|
+
"""
|
183
|
+
```
|
184
|
+
export RBX_BIN_PATH=`which rbx`
|
185
|
+
function rbx() {
|
186
|
+
ulimit -s unlimited && $RBX_BIN_PATH $@
|
187
|
+
}
|
188
|
+
```
|
189
|
+
"""
|
190
|
+
)
|
191
|
+
console.console.print()
|
192
|
+
console.console.print(
|
193
|
+
'You can read more about this in [item]https://rsalesc.github.io/rbx/stack-limit/[/item].'
|
194
|
+
)
|
195
|
+
raise typer.Exit(1)
|
196
|
+
|
197
|
+
|
153
198
|
# Compile code item and return its digest in the storage.
|
154
199
|
def compile_item(
|
155
200
|
code: CodeItem,
|
@@ -157,6 +202,8 @@ def compile_item(
|
|
157
202
|
force_warnings: bool = False,
|
158
203
|
verbose: bool = False,
|
159
204
|
) -> str:
|
205
|
+
_check_stack_limit()
|
206
|
+
|
160
207
|
generator_path = PosixPath(code.path)
|
161
208
|
|
162
209
|
if not generator_path.is_file():
|
@@ -268,6 +315,8 @@ def run_item(
|
|
268
315
|
extra_config: Optional[ExecutionConfig] = None,
|
269
316
|
retry_index: Optional[int] = None,
|
270
317
|
) -> Optional[RunLog]:
|
318
|
+
_check_stack_limit()
|
319
|
+
|
271
320
|
language = find_language_name(code)
|
272
321
|
execution_options = get_execution_config(language)
|
273
322
|
if extra_config is not None:
|
@@ -19,7 +19,7 @@ class ProblemStatementOverride(BaseModel):
|
|
19
19
|
model_config = ConfigDict(extra='forbid')
|
20
20
|
|
21
21
|
configure: List[ConversionStep] = Field(
|
22
|
-
[],
|
22
|
+
default=[],
|
23
23
|
discriminator='type',
|
24
24
|
description="""
|
25
25
|
Configure how certain conversion steps should happen when applied to the statement file.
|
@@ -33,7 +33,7 @@ configure them in case they are applied.
|
|
33
33
|
class ContestStatement(BaseModel):
|
34
34
|
model_config = ConfigDict(extra='forbid')
|
35
35
|
|
36
|
-
language: str = Field('en', description='Language code for this statement.')
|
36
|
+
language: str = Field(default='en', description='Language code for this statement.')
|
37
37
|
|
38
38
|
title: str = Field(description='Title of the contest in this language.')
|
39
39
|
|
@@ -50,7 +50,7 @@ class ContestStatement(BaseModel):
|
|
50
50
|
type: StatementType = Field(description='Type of the input statement file.')
|
51
51
|
|
52
52
|
joiner: Optional[Joiner] = Field(
|
53
|
-
None,
|
53
|
+
default=None,
|
54
54
|
description="""
|
55
55
|
Joiner to be used to build the statement.
|
56
56
|
|
@@ -98,7 +98,7 @@ Can be glob pattern as well, such as `imgs/*.png`.
|
|
98
98
|
# Vars to be re-used in the statement.
|
99
99
|
# - It will be available as \VAR{vars} variable in the contest-level box statement.
|
100
100
|
vars: Dict[str, Primitive] = Field(
|
101
|
-
{}, description='Variables to be re-used across the package.'
|
101
|
+
default={}, description='Variables to be re-used across the package.'
|
102
102
|
)
|
103
103
|
|
104
104
|
@property
|
@@ -147,7 +147,7 @@ class Contest(BaseModel):
|
|
147
147
|
# Vars to be re-used in the statements.
|
148
148
|
# - It will be available as \VAR{vars} variable in the contest-level box statement.
|
149
149
|
vars: Dict[str, Primitive] = Field(
|
150
|
-
{}, description='Variables to be re-used across the package.'
|
150
|
+
default={}, description='Variables to be re-used across the package.'
|
151
151
|
)
|
152
152
|
|
153
153
|
@property
|
@@ -6,6 +6,7 @@ import typer
|
|
6
6
|
|
7
7
|
from rbx import console
|
8
8
|
from rbx.box import presets
|
9
|
+
from rbx.box.contest.contest_package import find_contest_yaml
|
9
10
|
from rbx.box.presets.fetch import get_preset_fetch_info
|
10
11
|
|
11
12
|
|
@@ -26,6 +27,15 @@ def create(
|
|
26
27
|
] = None,
|
27
28
|
path: Optional[pathlib.Path] = None,
|
28
29
|
):
|
30
|
+
if find_contest_yaml() is not None:
|
31
|
+
console.console.print(
|
32
|
+
'[error]Cannot [item]rbx create[/item] a problem inside a contest.[/error]'
|
33
|
+
)
|
34
|
+
console.console.print(
|
35
|
+
'[error]Instead, use [item]rbx contest add[/item] to add a problem to a contest.[/error]'
|
36
|
+
)
|
37
|
+
raise typer.Exit(1)
|
38
|
+
|
29
39
|
preset = preset or 'default'
|
30
40
|
console.console.print(f'Creating new problem [item]{name}[/item]...')
|
31
41
|
|
@@ -8,11 +8,11 @@ from rbx.box.packaging.boca.extension import BocaExtension, BocaLanguageExtensio
|
|
8
8
|
# Extension abstractions.
|
9
9
|
class Extensions(BaseModel):
|
10
10
|
boca: Optional[BocaExtension] = Field(
|
11
|
-
None, description='Environment-level extensions for BOCA packaging.'
|
11
|
+
default=None, description='Environment-level extensions for BOCA packaging.'
|
12
12
|
)
|
13
13
|
|
14
14
|
|
15
15
|
class LanguageExtensions(BaseModel):
|
16
16
|
boca: Optional[BocaLanguageExtension] = Field(
|
17
|
-
None, description='Language-level extensions for BOCA packaging.'
|
17
|
+
default=None, description='Language-level extensions for BOCA packaging.'
|
18
18
|
)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
def get_formatted_memory(memory_in_bytes: int, mib_decimal_places: int = 0) -> str:
|
2
|
+
if memory_in_bytes < 1024 * 1024:
|
3
|
+
if memory_in_bytes < 1024:
|
4
|
+
return f'{memory_in_bytes} B'
|
5
|
+
return f'{memory_in_bytes / 1024:.0f} KiB'
|
6
|
+
return f'{memory_in_bytes / (1024 * 1024):.{mib_decimal_places}f} MiB'
|
7
|
+
|
8
|
+
|
9
|
+
def get_formatted_time(time_in_ms: int) -> str:
|
10
|
+
return f'{time_in_ms} ms'
|