rbx.cp 0.5.17__py3-none-any.whl → 0.5.18__py3-none-any.whl
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/box/code.py +8 -6
- rbx/box/contest/build_contest_statements.py +3 -4
- rbx/box/contest/contest_package.py +13 -1
- rbx/box/contest/contest_utils.py +0 -9
- rbx/box/contest/main.py +33 -22
- rbx/box/contest/statements.py +2 -3
- rbx/box/main.py +10 -3
- rbx/box/package.py +22 -0
- rbx/box/packaging/contest_main.py +2 -2
- rbx/box/solutions.py +3 -3
- rbx/grading/judge/sandboxes/timeit.py +3 -3
- rbx/grading/steps.py +19 -1
- rbx/utils.py +7 -0
- {rbx_cp-0.5.17.dist-info → rbx_cp-0.5.18.dist-info}/METADATA +2 -1
- {rbx_cp-0.5.17.dist-info → rbx_cp-0.5.18.dist-info}/RECORD +18 -18
- {rbx_cp-0.5.17.dist-info → rbx_cp-0.5.18.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.17.dist-info → rbx_cp-0.5.18.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.17.dist-info → rbx_cp-0.5.18.dist-info}/entry_points.txt +0 -0
rbx/box/code.py
CHANGED
@@ -124,6 +124,14 @@ def compile_item(
|
|
124
124
|
if sanitized.should_sanitize():
|
125
125
|
commands = add_sanitizer_flags(commands)
|
126
126
|
|
127
|
+
# Remove any memory constraints for a sanitized executable.
|
128
|
+
# Sanitizers are known to be memory-hungry.
|
129
|
+
sandbox_params.address_space = None
|
130
|
+
|
131
|
+
# Reset timeout configs since sanitizers are known to be time-hungry.
|
132
|
+
sandbox_params.timeout = None
|
133
|
+
sandbox_params.wallclock_timeout = None
|
134
|
+
|
127
135
|
compiled_digest = DigestHolder()
|
128
136
|
|
129
137
|
artifacts = GradingArtifacts()
|
@@ -214,12 +222,6 @@ def run_item(
|
|
214
222
|
# Reset timeout configs since sanitizers are known to be time-hungry.
|
215
223
|
sandbox_params.timeout = None
|
216
224
|
sandbox_params.wallclock_timeout = None
|
217
|
-
orig_execution_config = get_execution_config(language)
|
218
|
-
if orig_execution_config.sandbox is not None:
|
219
|
-
sandbox_params.timeout = orig_execution_config.sandbox.timeLimit
|
220
|
-
sandbox_params.wallclock_timeout = (
|
221
|
-
orig_execution_config.sandbox.wallTimeLimit
|
222
|
-
)
|
223
225
|
sanitized = True
|
224
226
|
|
225
227
|
sandbox_params.set_stdall(
|
@@ -7,8 +7,7 @@ from typing import List, Optional, Tuple
|
|
7
7
|
import typer
|
8
8
|
|
9
9
|
from rbx import console, testing_utils
|
10
|
-
from rbx.box import cd
|
11
|
-
from rbx.box.contest import contest_utils
|
10
|
+
from rbx.box import cd, package
|
12
11
|
from rbx.box.contest.contest_package import get_problems
|
13
12
|
from rbx.box.contest.schema import Contest, ContestProblem, ContestStatement
|
14
13
|
from rbx.box.schema import Package, Testcase
|
@@ -60,7 +59,7 @@ class ExtractedProblem:
|
|
60
59
|
|
61
60
|
def _get_samples(problem: ContestProblem) -> List[Testcase]:
|
62
61
|
with cd.new_package_cd(problem.get_path()):
|
63
|
-
|
62
|
+
package.clear_package_cache()
|
64
63
|
return get_samples()
|
65
64
|
|
66
65
|
|
@@ -158,7 +157,7 @@ def _build_problem_statements(
|
|
158
157
|
f'Building statement for problem {extracted_problem.problem.short_name}...'
|
159
158
|
)
|
160
159
|
with cd.new_package_cd(extracted_problem.problem.get_path()):
|
161
|
-
|
160
|
+
package.clear_package_cache()
|
162
161
|
# TODO: respect steps override
|
163
162
|
content, _ = build_statements.build_statement_bytes(
|
164
163
|
extracted_problem.statement,
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import functools
|
2
2
|
import pathlib
|
3
|
-
from typing import List, Optional
|
3
|
+
from typing import List, Optional, Tuple
|
4
4
|
|
5
|
+
import ruyaml
|
5
6
|
import typer
|
6
7
|
from pydantic import ValidationError
|
7
8
|
|
@@ -81,3 +82,14 @@ def get_problems(contest: Contest) -> List[Package]:
|
|
81
82
|
for problem in contest.problems:
|
82
83
|
problems.append(find_problem_package_or_die(problem.get_path()))
|
83
84
|
return problems
|
85
|
+
|
86
|
+
|
87
|
+
def get_ruyaml() -> Tuple[ruyaml.YAML, ruyaml.Any]:
|
88
|
+
contest_yaml_path = find_contest_yaml()
|
89
|
+
if contest_yaml_path is None:
|
90
|
+
console.console.print(
|
91
|
+
f'Contest not found in {pathlib.Path().absolute()}', style='error'
|
92
|
+
)
|
93
|
+
raise typer.Exit(1)
|
94
|
+
res = ruyaml.YAML()
|
95
|
+
return res, res.load(contest_yaml_path.read_text())
|
rbx/box/contest/contest_utils.py
CHANGED
@@ -2,15 +2,6 @@ from rbx.box import environment, package
|
|
2
2
|
from rbx.box.contest import contest_package
|
3
3
|
|
4
4
|
|
5
|
-
def clear_package_cache():
|
6
|
-
pkgs = [package]
|
7
|
-
|
8
|
-
for pkg in pkgs:
|
9
|
-
for fn in pkg.__dict__.values():
|
10
|
-
if hasattr(fn, 'cache_clear'):
|
11
|
-
fn.cache_clear()
|
12
|
-
|
13
|
-
|
14
5
|
def clear_all_caches():
|
15
6
|
pkgs = [package, environment, contest_package]
|
16
7
|
|
rbx/box/contest/main.py
CHANGED
@@ -8,12 +8,11 @@ import typer
|
|
8
8
|
|
9
9
|
from rbx import annotations, console, utils
|
10
10
|
from rbx.box import cd, creation, presets
|
11
|
-
from rbx.box.contest import contest_utils, statements
|
11
|
+
from rbx.box.contest import contest_package, contest_utils, statements
|
12
12
|
from rbx.box.contest.contest_package import (
|
13
13
|
find_contest,
|
14
14
|
find_contest_package_or_die,
|
15
15
|
find_contest_yaml,
|
16
|
-
save_contest,
|
17
16
|
within_contest,
|
18
17
|
)
|
19
18
|
from rbx.box.contest.schema import ContestProblem
|
@@ -145,16 +144,19 @@ def add(path: str, short_name: str, preset: Optional[str] = None):
|
|
145
144
|
creation.create(name, preset=preset, path=pathlib.Path(path))
|
146
145
|
|
147
146
|
contest = find_contest_package_or_die()
|
148
|
-
|
149
|
-
contest
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
147
|
+
|
148
|
+
ru, contest = contest_package.get_ruyaml()
|
149
|
+
|
150
|
+
contest['problems'].append(
|
151
|
+
{
|
152
|
+
'short_name': short_name,
|
153
|
+
'path': path,
|
154
|
+
}
|
155
155
|
)
|
156
|
+
dest = find_contest_yaml()
|
157
|
+
assert dest is not None
|
158
|
+
utils.save_ruyaml(dest, ru, contest)
|
156
159
|
|
157
|
-
save_contest(contest)
|
158
160
|
console.console.print(
|
159
161
|
f'Problem [item]{name} ({short_name})[/item] added to contest at [item]{path}[/item].'
|
160
162
|
)
|
@@ -165,25 +167,34 @@ def add(path: str, short_name: str, preset: Optional[str] = None):
|
|
165
167
|
def remove(path_or_short_name: str):
|
166
168
|
contest = find_contest_package_or_die()
|
167
169
|
|
168
|
-
|
169
|
-
|
170
|
-
for problem in contest.problems:
|
170
|
+
removed_problem_idx = None
|
171
|
+
removed_problem = None
|
172
|
+
for i, problem in enumerate(contest.problems):
|
171
173
|
if (
|
172
174
|
problem.path == pathlib.Path(path_or_short_name)
|
173
175
|
or problem.short_name == path_or_short_name
|
174
176
|
):
|
175
|
-
|
176
|
-
|
177
|
-
|
177
|
+
removed_problem_idx = i
|
178
|
+
removed_problem = problem
|
179
|
+
break
|
178
180
|
|
179
|
-
|
180
|
-
save_contest(contest)
|
181
|
-
|
182
|
-
for problem in removed_problems:
|
183
|
-
shutil.rmtree(str(problem.path), ignore_errors=True)
|
181
|
+
if removed_problem_idx is None or removed_problem is None:
|
184
182
|
console.console.print(
|
185
|
-
f'Problem [item]{
|
183
|
+
f'[error]Problem [item]{path_or_short_name}[/item] not found in contest.[/error]'
|
186
184
|
)
|
185
|
+
raise typer.Exit(1)
|
186
|
+
|
187
|
+
ru, contest = contest_package.get_ruyaml()
|
188
|
+
|
189
|
+
del contest['problems'][removed_problem_idx]
|
190
|
+
dest = find_contest_yaml()
|
191
|
+
assert dest is not None
|
192
|
+
utils.save_ruyaml(dest, ru, contest)
|
193
|
+
|
194
|
+
shutil.rmtree(str(removed_problem.path), ignore_errors=True)
|
195
|
+
console.console.print(
|
196
|
+
f'Problem [item]{removed_problem.short_name}[/item] removed from contest at [item]{removed_problem.path}[/item].'
|
197
|
+
)
|
187
198
|
|
188
199
|
|
189
200
|
@app.command(
|
rbx/box/contest/statements.py
CHANGED
@@ -3,8 +3,7 @@ from typing import Annotated, List, Optional
|
|
3
3
|
import typer
|
4
4
|
|
5
5
|
from rbx import annotations, console
|
6
|
-
from rbx.box import builder, cd, environment
|
7
|
-
from rbx.box.contest import contest_utils
|
6
|
+
from rbx.box import builder, cd, environment, package
|
8
7
|
from rbx.box.contest.build_contest_statements import build_statement
|
9
8
|
from rbx.box.contest.contest_package import (
|
10
9
|
find_contest_package_or_die,
|
@@ -50,7 +49,7 @@ def build(
|
|
50
49
|
f'Processing problem [item]{problem.short_name}[/item]...'
|
51
50
|
)
|
52
51
|
with cd.new_package_cd(problem.get_path()):
|
53
|
-
|
52
|
+
package.clear_package_cache()
|
54
53
|
|
55
54
|
if not builder.build(
|
56
55
|
verification=verification, groups=set(['samples']), output=None
|
rbx/box/main.py
CHANGED
@@ -508,10 +508,17 @@ def stress(
|
|
508
508
|
groups_by_name[testgroup] = TestcaseGroup(
|
509
509
|
name=testgroup, generatorScript=CodeItem(path=new_script_path)
|
510
510
|
)
|
511
|
-
|
512
|
-
|
513
|
-
|
511
|
+
ru, problem_yml = package.get_ruyaml()
|
512
|
+
problem_yml['testcases'].append(
|
513
|
+
{
|
514
|
+
'name': testgroup,
|
515
|
+
'generatorScript': new_script_path.name,
|
516
|
+
}
|
514
517
|
)
|
518
|
+
dest = package.find_problem_yaml()
|
519
|
+
assert dest is not None
|
520
|
+
utils.save_ruyaml(dest, ru, problem_yml)
|
521
|
+
package.clear_package_cache()
|
515
522
|
|
516
523
|
if testgroup not in groups_by_name:
|
517
524
|
break
|
rbx/box/package.py
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
import functools
|
2
2
|
import pathlib
|
3
|
+
import sys
|
3
4
|
from typing import Dict, List, Optional, Tuple
|
4
5
|
|
6
|
+
import ruyaml
|
5
7
|
import typer
|
6
8
|
from pydantic import ValidationError
|
7
9
|
|
@@ -119,6 +121,17 @@ def save_package(
|
|
119
121
|
problem_yaml_path.write_text(utils.model_to_yaml(package))
|
120
122
|
|
121
123
|
|
124
|
+
def get_ruyaml() -> Tuple[ruyaml.YAML, ruyaml.Any]:
|
125
|
+
problem_yaml_path = find_problem_yaml()
|
126
|
+
if problem_yaml_path is None:
|
127
|
+
console.console.print(
|
128
|
+
f'Problem not found in {pathlib.Path().absolute()}', style='error'
|
129
|
+
)
|
130
|
+
raise typer.Exit(1)
|
131
|
+
res = ruyaml.YAML()
|
132
|
+
return res, res.load(problem_yaml_path.read_text())
|
133
|
+
|
134
|
+
|
122
135
|
@functools.cache
|
123
136
|
def get_problem_cache_dir(root: pathlib.Path = pathlib.Path()) -> pathlib.Path:
|
124
137
|
cache_dir = find_problem(root) / '.box'
|
@@ -328,3 +341,12 @@ def get_compilation_files(code: CodeItem) -> List[Tuple[pathlib.Path, pathlib.Pa
|
|
328
341
|
)
|
329
342
|
)
|
330
343
|
return res
|
344
|
+
|
345
|
+
|
346
|
+
def clear_package_cache():
|
347
|
+
pkgs = [sys.modules[__name__]]
|
348
|
+
|
349
|
+
for pkg in pkgs:
|
350
|
+
for fn in pkg.__dict__.values():
|
351
|
+
if hasattr(fn, 'cache_clear'):
|
352
|
+
fn.cache_clear()
|
@@ -6,7 +6,7 @@ import typer
|
|
6
6
|
|
7
7
|
from rbx import annotations, console
|
8
8
|
from rbx.box import cd, environment, package
|
9
|
-
from rbx.box.contest import build_contest_statements, contest_package
|
9
|
+
from rbx.box.contest import build_contest_statements, contest_package
|
10
10
|
from rbx.box.packaging.main import run_packager
|
11
11
|
from rbx.box.packaging.packager import (
|
12
12
|
BaseContestPackager,
|
@@ -33,7 +33,7 @@ def run_contest_packager(
|
|
33
33
|
f'Processing problem [item]{problem.short_name}[/item]...'
|
34
34
|
)
|
35
35
|
with cd.new_package_cd(problem.get_path()):
|
36
|
-
|
36
|
+
package.clear_package_cache()
|
37
37
|
package_path = run_packager(packager_cls, verification=verification)
|
38
38
|
built_packages.append(
|
39
39
|
BuiltProblemPackage(
|
rbx/box/solutions.py
CHANGED
@@ -628,7 +628,7 @@ def _print_solution_outcome(
|
|
628
628
|
|
629
629
|
if has_sanitizer_warnings:
|
630
630
|
console.print(
|
631
|
-
'[warning]WARNING[/warning] The solution had sanitizer errors or warnings, marked with [
|
631
|
+
'[warning]WARNING[/warning] The solution had sanitizer errors or warnings, marked with [warning]*[/warning]. See their stderr for more details.'
|
632
632
|
)
|
633
633
|
|
634
634
|
console.print(f'Time: {get_evals_formatted_time(evals)}')
|
@@ -725,7 +725,7 @@ async def _render_detailed_group_table(
|
|
725
725
|
verdict = get_testcase_markup_verdict(eval)
|
726
726
|
time = get_evals_formatted_time([eval])
|
727
727
|
if eval.result.sanitizer_warnings:
|
728
|
-
time = f'{time} [
|
728
|
+
time = f'{time} [warning]*[/warning]'
|
729
729
|
evals_per_solution[str(solution.path)].append(eval)
|
730
730
|
row.append(f'{verdict} {time}')
|
731
731
|
table.add_row(*row)
|
@@ -830,7 +830,7 @@ async def print_run_report(
|
|
830
830
|
console.print(f'{i}/', end='')
|
831
831
|
console.print(get_testcase_markup_verdict(eval), end='')
|
832
832
|
if eval.result.sanitizer_warnings:
|
833
|
-
console.print('[
|
833
|
+
console.print('[warning]*[/warning]', end='')
|
834
834
|
console.print('', end=' ')
|
835
835
|
group_evals.append(eval)
|
836
836
|
solution_evals.append(eval)
|
@@ -200,14 +200,14 @@ def main():
|
|
200
200
|
os.kill(sub_pid, 9)
|
201
201
|
return
|
202
202
|
|
203
|
-
signal.
|
203
|
+
signal.setitimer(signal.ITIMER_REAL, 0.3)
|
204
204
|
|
205
|
-
signal.
|
205
|
+
signal.setitimer(signal.ITIMER_REAL, 0.3)
|
206
206
|
signal.signal(signal.SIGALRM, handle_alarm)
|
207
207
|
wait_and_finish(sub_pid, options, start_time, alarm_msg=alarm_msg)
|
208
208
|
|
209
209
|
# Cancel alarm before exiting to avoid surprises.
|
210
|
-
signal.
|
210
|
+
signal.setitimer(signal.ITIMER_REAL, 0)
|
211
211
|
|
212
212
|
# Exit gracefully.
|
213
213
|
sys.exit()
|
rbx/grading/steps.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import functools
|
2
2
|
import pathlib
|
3
|
+
import re
|
3
4
|
import shlex
|
4
5
|
import shutil
|
5
6
|
import subprocess
|
@@ -435,6 +436,21 @@ def _check_for_sanitizer_warnings(
|
|
435
436
|
return any(_check_for_sanitizer_warnings_in_line(line.decode()) for line in f)
|
436
437
|
|
437
438
|
|
439
|
+
_WARNING_RE = re.compile(r'[^:]+:\d+:\d+:[ ]+warning:.*')
|
440
|
+
|
441
|
+
|
442
|
+
def _check_for_compilation_warnings_in_line(line: str) -> bool:
|
443
|
+
if line.startswith('./'):
|
444
|
+
return False
|
445
|
+
matched = _WARNING_RE.match(line) is not None
|
446
|
+
# if matched:
|
447
|
+
# console.print(
|
448
|
+
# '[warning]Compilation warning:[/warning]',
|
449
|
+
# utils.highlight_json_obj(line),
|
450
|
+
# )
|
451
|
+
return matched
|
452
|
+
|
453
|
+
|
438
454
|
def _check_for_compilation_warnings(
|
439
455
|
sandbox: SandboxBase, stderr_file: Optional[pathlib.Path]
|
440
456
|
) -> bool:
|
@@ -443,7 +459,9 @@ def _check_for_compilation_warnings(
|
|
443
459
|
if not sandbox.file_exists(stderr_file):
|
444
460
|
return False
|
445
461
|
with sandbox.get_file(stderr_file) as f:
|
446
|
-
return any(
|
462
|
+
return any(
|
463
|
+
_check_for_compilation_warnings_in_line(line.strip().decode()) for line in f
|
464
|
+
)
|
447
465
|
|
448
466
|
|
449
467
|
def compile(
|
rbx/utils.py
CHANGED
@@ -9,6 +9,7 @@ from typing import Any, Optional, Type, TypeVar
|
|
9
9
|
import rich
|
10
10
|
import rich.prompt
|
11
11
|
import rich.status
|
12
|
+
import ruyaml
|
12
13
|
import typer
|
13
14
|
import yaml
|
14
15
|
from fastapi.encoders import jsonable_encoder
|
@@ -91,6 +92,12 @@ def validate_field(model: Type[T], field: str, value: Any):
|
|
91
92
|
)
|
92
93
|
|
93
94
|
|
95
|
+
def save_ruyaml(path: pathlib.Path, yml: ruyaml.YAML, data: ruyaml.Any):
|
96
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
97
|
+
with path.open('w') as f:
|
98
|
+
yml.dump(data, f)
|
99
|
+
|
100
|
+
|
94
101
|
def confirm_on_status(status: Optional[rich.status.Status], *args, **kwargs) -> bool:
|
95
102
|
if status:
|
96
103
|
status.stop()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rbx.cp
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.18
|
4
4
|
Summary:
|
5
5
|
Author: Roberto Sales
|
6
6
|
Requires-Python: >=3.9,<4.0
|
@@ -27,6 +27,7 @@ Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
|
27
27
|
Requires-Dist: questionary (>=2.1.0,<3.0.0)
|
28
28
|
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
29
29
|
Requires-Dist: rich (>=13.9.4,<14.0.0)
|
30
|
+
Requires-Dist: ruyaml (>=0.91.0,<0.92.0)
|
30
31
|
Requires-Dist: textual (>=0.79.1,<0.80.0)
|
31
32
|
Requires-Dist: typer (>=0.15.1,<0.16.0)
|
32
33
|
Description-Content-Type: text/markdown
|
@@ -5,16 +5,16 @@ rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
rbx/box/builder.py,sha256=Fz-3DpKg4kfciOz-ZcxpYPRjDqKVzKN9q2NtFsHA6Rc,3241
|
6
6
|
rbx/box/cd.py,sha256=9a_SOnzoJBXxxffp4Wbf3UKXIwKuN3Hvj7K6SocALwE,1194
|
7
7
|
rbx/box/checkers.py,sha256=VpgDzevOK7hrffG2zJGxquNiu-a9Fl3wquLn7xadcK0,6285
|
8
|
-
rbx/box/code.py,sha256=
|
8
|
+
rbx/box/code.py,sha256=XUyE8QY9qgKC6AwoRvnjo1TodchMzNL2EAXeXHT4mYM,9815
|
9
9
|
rbx/box/compile.py,sha256=OJLthDQ921w9vyoE6Gk1Df54i5RwtRJ2YG-8XEfefcs,2489
|
10
10
|
rbx/box/conftest.py,sha256=sEmciXSeDC-wmrZ1JSxbsUenKNP_VWW32mrCun2pY3I,1070
|
11
11
|
rbx/box/contest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
|
-
rbx/box/contest/build_contest_statements.py,sha256=
|
13
|
-
rbx/box/contest/contest_package.py,sha256=
|
14
|
-
rbx/box/contest/contest_utils.py,sha256=
|
15
|
-
rbx/box/contest/main.py,sha256=
|
12
|
+
rbx/box/contest/build_contest_statements.py,sha256=oulTAgTgvRiyn8DiDlEV48p7stFrJLCrMy8qTRE05c4,11281
|
13
|
+
rbx/box/contest/contest_package.py,sha256=OaUbpBtkhkgOPzJ1ccI_Vq4FMSaJvZm3gMOKfVY8oy4,3032
|
14
|
+
rbx/box/contest/contest_utils.py,sha256=TDE7I6YQJlu4dQd68wzOp019bNgqiT0RlM-LMQMjL9w,301
|
15
|
+
rbx/box/contest/main.py,sha256=6voYLTy3qXth_Yb477K9dySSK-rF0WvCbBrr7xn78A8,7329
|
16
16
|
rbx/box/contest/schema.py,sha256=rxzjJasMWPKKhvSJs4eW4A2oCiA4gXgfF-MzqsbPslQ,4914
|
17
|
-
rbx/box/contest/statements.py,sha256=
|
17
|
+
rbx/box/contest/statements.py,sha256=Pe4uo1hxvEON8O11VAzsOP3DxUel0vmwiAmolh4ltEs,2910
|
18
18
|
rbx/box/creation.py,sha256=mVHVVj8ozX9D5qpkLewE5WSjF6HtTm74Pkwubk-bATg,2259
|
19
19
|
rbx/box/deferred.py,sha256=II3X9e87JCOZtmspnHh-n4PFqh-FsH_oc0XJHZ9ZYVQ,691
|
20
20
|
rbx/box/download.py,sha256=MFP-R26JiYGAP89I0TK-0fYc69Fsd20tsBqgtRCy5AE,2234
|
@@ -22,11 +22,11 @@ rbx/box/environment.py,sha256=GjwnJwtkTdkHmUh1b23zagjLsTiJQAOpP36A93mA-zc,11159
|
|
22
22
|
rbx/box/extensions.py,sha256=gIC73VbF1897er3iIMhaIw6GE8o1t43M7q97Iz7-_lg,503
|
23
23
|
rbx/box/generators.py,sha256=YpwtT-SmbiBMdnNSGsJ6kXuF4vOEoqXOq9MC9T92Sng,16157
|
24
24
|
rbx/box/generators_test.py,sha256=mQqHepAMYa6zV_PseQALI0nIX6AdQktt6lh94muFhNw,1758
|
25
|
-
rbx/box/main.py,sha256=
|
26
|
-
rbx/box/package.py,sha256=
|
25
|
+
rbx/box/main.py,sha256=OzBKO7Ys87CRs_4Slm3u7e1TrJ4ZfLUa3I27qfNbL_8,21948
|
26
|
+
rbx/box/package.py,sha256=gaqqiRL2l91GydJc4nrLQvhFNcxt7Di7KquiNJq6AiQ,11129
|
27
27
|
rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
|
28
28
|
rbx/box/packaging/boca/packager.py,sha256=FOhSRg5K5Y4qNB0WyTR3DKgrpObf9I0JbyGpJHOtxpo,10673
|
29
|
-
rbx/box/packaging/contest_main.py,sha256=
|
29
|
+
rbx/box/packaging/contest_main.py,sha256=Hbxh7geNqrePs5tWhPgdg5W2qhaW5yoreK_VP0Sm19k,2727
|
30
30
|
rbx/box/packaging/main.py,sha256=CyjfuvwmRsJGk4lKVp2LT_WCQ5jZ5L_7NfZQEC40nuY,2228
|
31
31
|
rbx/box/packaging/packager.py,sha256=suCT_SLnWa915rV2j8VFqzH43HGKRTr9mGGlrvj45aw,3267
|
32
32
|
rbx/box/packaging/polygon/packager.py,sha256=HNpxP2nclLChSnrQtkT7tLwDdXHl1dzXMIF5RZwr9M4,10811
|
@@ -39,7 +39,7 @@ rbx/box/presets/schema.py,sha256=mZmSPkQsw7eQM0lQN6er1MO_LiW1ObwwAZFDK0F5fxE,196
|
|
39
39
|
rbx/box/sanitizers/warning_stack.py,sha256=RI97_GJgdjTKIXY_r0EKp5h0qQQSDSdNDh5K7zINrqs,2861
|
40
40
|
rbx/box/schema.py,sha256=MerNqhIeOxRBUw0CEbtfNFsHEJVsILilAjEGwW0nujQ,13227
|
41
41
|
rbx/box/setter_config.py,sha256=6nGTPMvnJ7y1sM-EBuI493NSZOIiOZ1DTypSXrL-HRY,3686
|
42
|
-
rbx/box/solutions.py,sha256=
|
42
|
+
rbx/box/solutions.py,sha256=oY6NpveOK1H7jU1sokCFAz4xJzo-8t-YQYcNzqLjMUc,31009
|
43
43
|
rbx/box/solutions_test.py,sha256=Cx7Goon_0sz_PaUcD8qa8gmjgzOVub6VHss3CB0GaA0,1524
|
44
44
|
rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
45
|
rbx/box/statements/build_statements.py,sha256=24ZUM5H33NhmqnDL0ofA1anUKWxuZG1paA1tCV4AKns,11911
|
@@ -77,11 +77,11 @@ rbx/grading/judge/sandbox.py,sha256=0h3YCmGabf9OfORJgx6v2Bed4kE-i8FyuZkPux-sDVk,
|
|
77
77
|
rbx/grading/judge/sandboxes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
78
|
rbx/grading/judge/sandboxes/isolate.py,sha256=9xgBuNfAvGtO2zME1FXRah2rcPvzDShsPG0TTuX_UDU,25649
|
79
79
|
rbx/grading/judge/sandboxes/stupid_sandbox.py,sha256=2rFinUSafape4ad_r0TXBX0ZwnAfuVgEnDviozXbYlo,10155
|
80
|
-
rbx/grading/judge/sandboxes/timeit.py,sha256=
|
80
|
+
rbx/grading/judge/sandboxes/timeit.py,sha256=xScfasI2lsSQGZVpIZ7qBZfi0IaKC-1k8wO5qFp7UoM,6634
|
81
81
|
rbx/grading/judge/storage.py,sha256=FirqjwDqb0m0h2OTFyWrZL7CQ4XjZNxhqB4JpnDIhZY,9485
|
82
82
|
rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
|
83
83
|
rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
|
84
|
-
rbx/grading/steps.py,sha256=
|
84
|
+
rbx/grading/steps.py,sha256=w7dtT65Gu5uRzuBNxKDP5MnieMggJ1TkagNgS03tfSI,22660
|
85
85
|
rbx/grading/steps_with_caching.py,sha256=5cI71VSjEaDzCPQikpamG_EjZqkkFKKdBtyJeA4QB7Q,1531
|
86
86
|
rbx/grading/steps_with_caching_run_test.py,sha256=nRzB4OcXkb-kQ4WCj0iTGVfBACllxZ0Ek5RSwfoJRgo,15262
|
87
87
|
rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
|
@@ -161,9 +161,9 @@ rbx/testdata/box1/wa.sol.cpp,sha256=qsHmvtLJOFI_sdvUT6ITqk7FJYqhrRTCmEIRdy4gSGE,
|
|
161
161
|
rbx/testdata/caching/executable.py,sha256=WKRHNf_fprFJd1Fq1ubmQtR3mZzTYVNwKPLWuZ4HrWg,10
|
162
162
|
rbx/testdata/compatible,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
163
163
|
rbx/testing_utils.py,sha256=ZZLKMUHlZ4HwsuNY50jqSBJ9HhpnFdba7opjDsvXE1U,2084
|
164
|
-
rbx/utils.py,sha256=
|
165
|
-
rbx_cp-0.5.
|
166
|
-
rbx_cp-0.5.
|
167
|
-
rbx_cp-0.5.
|
168
|
-
rbx_cp-0.5.
|
169
|
-
rbx_cp-0.5.
|
164
|
+
rbx/utils.py,sha256=WlmnF4whc0-6ksVZoOhmom2bR2spT6zETFHjnpJOCsA,4383
|
165
|
+
rbx_cp-0.5.18.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
166
|
+
rbx_cp-0.5.18.dist-info/METADATA,sha256=20P5Jn38-CFMSoYc1lpOC7UsJu9Q-oSXD3kROvB8_M4,3290
|
167
|
+
rbx_cp-0.5.18.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
168
|
+
rbx_cp-0.5.18.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
|
169
|
+
rbx_cp-0.5.18.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|