rbx.cp 0.5.27__py3-none-any.whl → 0.5.29__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/builder.py +5 -5
- rbx/box/code.py +2 -0
- rbx/box/generators.py +403 -276
- rbx/box/main.py +10 -7
- rbx/box/retries.py +143 -0
- rbx/box/schema.py +15 -6
- rbx/box/setter_config.py +22 -0
- rbx/box/solutions.py +209 -101
- rbx/box/stresses.py +62 -33
- rbx/box/stressing/finder_parser.py +2 -2
- rbx/box/testcases.py +17 -1
- rbx/grading/steps.py +1 -0
- rbx/grading/steps_with_caching.py +5 -3
- rbx/resources/default_setter_config.mac.yml +8 -0
- rbx/resources/default_setter_config.yml +8 -0
- rbx/utils.py +8 -2
- {rbx_cp-0.5.27.dist-info → rbx_cp-0.5.29.dist-info}/METADATA +1 -4
- {rbx_cp-0.5.27.dist-info → rbx_cp-0.5.29.dist-info}/RECORD +21 -20
- {rbx_cp-0.5.27.dist-info → rbx_cp-0.5.29.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.27.dist-info → rbx_cp-0.5.29.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.27.dist-info → rbx_cp-0.5.29.dist-info}/entry_points.txt +0 -0
rbx/box/stresses.py
CHANGED
@@ -9,14 +9,22 @@ from pydantic import BaseModel
|
|
9
9
|
from rbx import console
|
10
10
|
from rbx.box import checkers, package, validators
|
11
11
|
from rbx.box.code import SanitizationLevel, compile_item, run_item
|
12
|
-
from rbx.box.generators import
|
12
|
+
from rbx.box.generators import (
|
13
|
+
GenerationMetadata,
|
14
|
+
expand_generator_call,
|
15
|
+
generate_standalone,
|
16
|
+
)
|
17
|
+
from rbx.box.retries import Retrier
|
13
18
|
from rbx.box.schema import CodeItem, GeneratorCall, Stress, Testcase
|
14
19
|
from rbx.box.solutions import compile_solutions, get_outcome_style_verdict
|
15
20
|
from rbx.box.stressing import finder_parser
|
16
21
|
from rbx.grading.steps import (
|
17
22
|
DigestOrDest,
|
18
23
|
DigestOrSource,
|
24
|
+
Evaluation,
|
19
25
|
Outcome,
|
26
|
+
TestcaseIO,
|
27
|
+
TestcaseLog,
|
20
28
|
)
|
21
29
|
from rbx.utils import StatusProgress
|
22
30
|
|
@@ -119,9 +127,12 @@ def run_stress(
|
|
119
127
|
input_path = runs_dir / '.stress' / 'input'
|
120
128
|
input_path.parent.mkdir(parents=True, exist_ok=True)
|
121
129
|
|
122
|
-
expanded_generator_call =
|
123
|
-
|
124
|
-
|
130
|
+
expanded_generator_call = expand_generator_call(stress.generator)
|
131
|
+
generate_standalone(
|
132
|
+
GenerationMetadata(
|
133
|
+
generator_call=expanded_generator_call,
|
134
|
+
copied_to=Testcase(inputPath=input_path),
|
135
|
+
),
|
125
136
|
generator_digest=generator_digest,
|
126
137
|
validator_digest=compiled_validator[1]
|
127
138
|
if compiled_validator is not None
|
@@ -131,8 +142,9 @@ def run_stress(
|
|
131
142
|
@functools.cache
|
132
143
|
def run_solution_fn(
|
133
144
|
solution: str,
|
145
|
+
retry_index: Optional[int] = None,
|
134
146
|
input_path=input_path,
|
135
|
-
) ->
|
147
|
+
) -> TestcaseLog:
|
136
148
|
index = solution_indices[solution]
|
137
149
|
sol = solutions[index]
|
138
150
|
output_path = input_path.with_stem(f'{index}').with_suffix('.out')
|
@@ -144,29 +156,30 @@ def run_stress(
|
|
144
156
|
stdin=DigestOrSource.create(input_path),
|
145
157
|
stdout=DigestOrDest.create(output_path),
|
146
158
|
stderr=DigestOrDest.create(stderr_path),
|
159
|
+
retry_index=retry_index,
|
147
160
|
)
|
148
161
|
|
149
|
-
return
|
150
|
-
|
151
|
-
|
152
|
-
|
162
|
+
return TestcaseLog(
|
163
|
+
**(run_log.model_dump() if run_log is not None else {}),
|
164
|
+
stdout_absolute_path=output_path.absolute(),
|
165
|
+
stderr_absolute_path=stderr_path.absolute(),
|
153
166
|
)
|
154
167
|
|
155
168
|
# Get main solution output.
|
156
169
|
expected_output_path = empty_path
|
157
170
|
if needs_expected_output:
|
158
|
-
|
159
|
-
main_checker_result = checkers.check_with_no_output(
|
171
|
+
main_testcase_log = run_solution_fn(str(solutions[0].path))
|
172
|
+
main_checker_result = checkers.check_with_no_output(main_testcase_log)
|
160
173
|
if main_checker_result.outcome != Outcome.ACCEPTED:
|
161
174
|
console.console.print(
|
162
175
|
'[error]Error while generating main solution output.[/error]'
|
163
176
|
)
|
164
177
|
console.console.print(f'Input written at [item]{input_path}[/item]')
|
165
178
|
console.console.print(
|
166
|
-
f'Output written at [item]{
|
179
|
+
f'Output written at [item]{main_testcase_log.stdout_absolute_path}[/item]'
|
167
180
|
)
|
168
181
|
console.console.print(
|
169
|
-
f'Stderr written at [item]{
|
182
|
+
f'Stderr written at [item]{main_testcase_log.stderr_absolute_path}[/item]'
|
170
183
|
)
|
171
184
|
console.console.print()
|
172
185
|
console.console.print(
|
@@ -174,7 +187,7 @@ def run_stress(
|
|
174
187
|
"use the two-way modifier in your finder expression (':2')."
|
175
188
|
)
|
176
189
|
raise typer.Exit(1)
|
177
|
-
expected_output_path =
|
190
|
+
expected_output_path = main_testcase_log.stdout_absolute_path
|
178
191
|
|
179
192
|
@functools.cache
|
180
193
|
def run_solution_and_checker_fn(
|
@@ -182,27 +195,43 @@ def run_stress(
|
|
182
195
|
input_path=input_path,
|
183
196
|
expected_output_path=expected_output_path,
|
184
197
|
) -> finder_parser.FinderResult:
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
checker_digest
|
196
|
-
|
197
|
-
|
198
|
-
|
198
|
+
def run_fn(retry_index: int) -> Evaluation:
|
199
|
+
solution = call.solution
|
200
|
+
checker = call.checker
|
201
|
+
|
202
|
+
testcase_log = run_solution_fn(solution, retry_index=retry_index)
|
203
|
+
assert testcase_log.stdout_absolute_path is not None
|
204
|
+
|
205
|
+
if checker is None:
|
206
|
+
checker_result = checkers.check_with_no_output(testcase_log)
|
207
|
+
else:
|
208
|
+
checker_digest = finders_digest[checker.path]
|
209
|
+
checker_result = checkers.check(
|
210
|
+
checker_digest,
|
211
|
+
testcase_log,
|
212
|
+
Testcase(inputPath=input_path, outputPath=expected_output_path),
|
213
|
+
program_output=testcase_log.stdout_absolute_path,
|
214
|
+
)
|
215
|
+
|
216
|
+
return Evaluation(
|
217
|
+
result=checker_result,
|
218
|
+
testcase=TestcaseIO(
|
219
|
+
index=0,
|
220
|
+
input=input_path,
|
221
|
+
output=expected_output_path,
|
222
|
+
),
|
223
|
+
log=testcase_log,
|
199
224
|
)
|
225
|
+
|
226
|
+
retrier = Retrier(is_stress=True)
|
227
|
+
eval = retrier.repeat(run_fn)
|
228
|
+
|
200
229
|
return finder_parser.FinderResult(
|
201
|
-
solution=solution,
|
202
|
-
outcome=
|
203
|
-
checker=checker,
|
204
|
-
|
205
|
-
checker_result=
|
230
|
+
solution=call.solution,
|
231
|
+
outcome=eval.result.outcome,
|
232
|
+
checker=call.checker,
|
233
|
+
solution_log=eval.log,
|
234
|
+
checker_result=eval.result,
|
206
235
|
)
|
207
236
|
|
208
237
|
runner = finder_parser.FinderTreeRunner(runner=run_solution_and_checker_fn)
|
@@ -10,7 +10,7 @@ import typer
|
|
10
10
|
from rbx import console
|
11
11
|
from rbx.box import package
|
12
12
|
from rbx.box.schema import CodeItem, ExpectedOutcome
|
13
|
-
from rbx.grading.steps import CheckerResult, Outcome, RunLog
|
13
|
+
from rbx.grading.steps import CheckerResult, Outcome, RunLog, TestcaseLog
|
14
14
|
|
15
15
|
LARK_GRAMMAR = r"""
|
16
16
|
// A bunch of words
|
@@ -102,7 +102,7 @@ class FinderResult:
|
|
102
102
|
checker: Optional[FinderChecker]
|
103
103
|
|
104
104
|
# Auxiliary information.
|
105
|
-
|
105
|
+
solution_log: Optional[TestcaseLog] = None
|
106
106
|
checker_result: Optional[CheckerResult] = None
|
107
107
|
|
108
108
|
|
rbx/box/testcases.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import pathlib
|
2
2
|
import shutil
|
3
|
-
from typing import List
|
3
|
+
from typing import List, Tuple
|
4
4
|
|
5
5
|
import typer
|
6
6
|
from pydantic import BaseModel
|
@@ -11,6 +11,22 @@ from rbx.box.package import get_build_testgroup_path, get_build_tests_path
|
|
11
11
|
from rbx.box.schema import Testcase, TestcaseGroup
|
12
12
|
|
13
13
|
|
14
|
+
class TestcaseEntry(BaseModel):
|
15
|
+
group: str
|
16
|
+
index: int
|
17
|
+
|
18
|
+
def key(self) -> Tuple[str, int]:
|
19
|
+
return self.group, self.index
|
20
|
+
|
21
|
+
def __str__(self) -> str:
|
22
|
+
return f'{self.group}/{self.index}'
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def parse(cls, spec: str) -> 'TestcaseEntry':
|
26
|
+
group, index = spec.split('/')
|
27
|
+
return TestcaseEntry(group=group.strip(), index=int(index))
|
28
|
+
|
29
|
+
|
14
30
|
class TestcaseData(BaseModel):
|
15
31
|
input: str
|
16
32
|
output: str
|
rbx/grading/steps.py
CHANGED
@@ -46,9 +46,11 @@ def run(
|
|
46
46
|
) -> Optional[RunLog]:
|
47
47
|
artifacts.logs = GradingLogsHolder()
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
cacheable_params = params.get_cacheable_params()
|
50
|
+
if metadata is not None and metadata.retryIndex is not None:
|
51
|
+
cacheable_params['__retry_index__'] = metadata.retryIndex
|
52
|
+
|
53
|
+
with dependency_cache([command], [artifacts], cacheable_params) as is_cached:
|
52
54
|
if not is_cached:
|
53
55
|
steps.run(
|
54
56
|
command=command,
|
@@ -14,6 +14,14 @@ command_substitutions:
|
|
14
14
|
python2: python2
|
15
15
|
python3: python3
|
16
16
|
|
17
|
+
repeats:
|
18
|
+
# Number of times to run the solution.
|
19
|
+
reps: 1
|
20
|
+
# Number of times to retry if the solution TLs.
|
21
|
+
retries: 0
|
22
|
+
# Number of times to retry in stress mode if the solution TLs.
|
23
|
+
retries_for_stress: 0
|
24
|
+
|
17
25
|
# Whether sanitizers will be enabled by default
|
18
26
|
# when running testlib components.
|
19
27
|
# This flag has no effect on running solutions with
|
@@ -14,6 +14,14 @@ command_substitutions:
|
|
14
14
|
python2: python2
|
15
15
|
python3: python3
|
16
16
|
|
17
|
+
repeats:
|
18
|
+
# Number of times to run the solution.
|
19
|
+
reps: 1
|
20
|
+
# Number of times to retry if the solution TLs.
|
21
|
+
retries: 0
|
22
|
+
# Number of times to retry in stress mode if the solution TLs.
|
23
|
+
retries_for_stress: 0
|
24
|
+
|
17
25
|
# Whether sanitizers will be enabled by default
|
18
26
|
# when running testlib components.
|
19
27
|
# This flag has no effect on running solutions with
|
rbx/utils.py
CHANGED
@@ -98,12 +98,18 @@ def save_ruyaml(path: pathlib.Path, yml: ruyaml.YAML, data: ruyaml.Any):
|
|
98
98
|
yml.dump(data, f)
|
99
99
|
|
100
100
|
|
101
|
-
|
101
|
+
@contextlib.contextmanager
|
102
|
+
def no_progress(status: Optional[rich.status.Status]):
|
102
103
|
if status:
|
103
104
|
status.stop()
|
104
|
-
|
105
|
+
yield
|
105
106
|
if status:
|
106
107
|
status.start()
|
108
|
+
|
109
|
+
|
110
|
+
def confirm_on_status(status: Optional[rich.status.Status], *args, **kwargs) -> bool:
|
111
|
+
with no_progress(status):
|
112
|
+
res = rich.prompt.Confirm.ask(*args, **kwargs, console=console)
|
107
113
|
return res
|
108
114
|
|
109
115
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rbx.cp
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.29
|
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>
|
@@ -2,10 +2,10 @@ rbx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
rbx/annotations.py,sha256=Z3jBUyZoXkrz34jko3Rft0bnMME6nWb0vsV5I3HlgR0,3064
|
3
3
|
rbx/autoenum.py,sha256=cusv8ClXRlDVvhZ8eDrtYcL_2peXlHugAey_ht8roXk,12025
|
4
4
|
rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
rbx/box/builder.py,sha256=
|
5
|
+
rbx/box/builder.py,sha256=eynVPyRdpYtSNmr8MP7-8jspNH74lj-DclwtiIcJrvM,3280
|
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=sD3kpQaPU8_E5TJFjRL-tgGxz-qyC0oKsyykgQArbJA,11606
|
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
|
@@ -20,9 +20,9 @@ rbx/box/deferred.py,sha256=II3X9e87JCOZtmspnHh-n4PFqh-FsH_oc0XJHZ9ZYVQ,691
|
|
20
20
|
rbx/box/download.py,sha256=MFP-R26JiYGAP89I0TK-0fYc69Fsd20tsBqgtRCy5AE,2234
|
21
21
|
rbx/box/environment.py,sha256=47NtyuVC6zSQKAtQaXPEXvqcD-KJiuWRpWF8pYvcG4c,11158
|
22
22
|
rbx/box/extensions.py,sha256=gIC73VbF1897er3iIMhaIw6GE8o1t43M7q97Iz7-_lg,503
|
23
|
-
rbx/box/generators.py,sha256=
|
23
|
+
rbx/box/generators.py,sha256=CVTFHlLton7puNxlfH1tTyOvpIQCb4H-KtmhUyl_si8,20440
|
24
24
|
rbx/box/generators_test.py,sha256=mQqHepAMYa6zV_PseQALI0nIX6AdQktt6lh94muFhNw,1758
|
25
|
-
rbx/box/main.py,sha256=
|
25
|
+
rbx/box/main.py,sha256=ErfFSaMzXs12dmc2PazHYZlhGHjkAwdO1sLtsHz5taI,23428
|
26
26
|
rbx/box/package.py,sha256=SSckCXo7Zh412_qjYhSNwConjhR0Sk8911qGJU34Hac,11851
|
27
27
|
rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
|
28
28
|
rbx/box/packaging/boca/packager.py,sha256=FOhSRg5K5Y4qNB0WyTR3DKgrpObf9I0JbyGpJHOtxpo,10673
|
@@ -36,10 +36,11 @@ rbx/box/presets/__init__.py,sha256=jivkMH5lWuNpwg4HExpacgPo7RqaENqmrE86aq3CJ6A,1
|
|
36
36
|
rbx/box/presets/fetch.py,sha256=F-BCOlvEBEyDqtOhiDuGPn4EDtA4Bwm-fqHJ7zZGlW8,1975
|
37
37
|
rbx/box/presets/lock_schema.py,sha256=6sRPnyePOC8yy-5WcD5JRZdDJHf8loqbvpQ1IPiOU9s,349
|
38
38
|
rbx/box/presets/schema.py,sha256=mZmSPkQsw7eQM0lQN6er1MO_LiW1ObwwAZFDK0F5fxE,1962
|
39
|
+
rbx/box/retries.py,sha256=z7cIh1QmLVUsTr3Attt_28dbwNg6KWTwpulcWCFwMPo,4667
|
39
40
|
rbx/box/sanitizers/warning_stack.py,sha256=RI97_GJgdjTKIXY_r0EKp5h0qQQSDSdNDh5K7zINrqs,2861
|
40
|
-
rbx/box/schema.py,sha256=
|
41
|
-
rbx/box/setter_config.py,sha256=
|
42
|
-
rbx/box/solutions.py,sha256=
|
41
|
+
rbx/box/schema.py,sha256=1A-NqOKkXY4QWIwwkWuKQgTR2nJVV_JYEfXmVE9d470,14035
|
42
|
+
rbx/box/setter_config.py,sha256=sg38rzTuT0RNANNV558cSCORvovOK6EIz_ioVzaTkGI,4223
|
43
|
+
rbx/box/solutions.py,sha256=AkvAJ2msVj-FHVfT3XwTFrvMXwJEGV_SF3imnvARogg,41871
|
43
44
|
rbx/box/solutions_test.py,sha256=Cx7Goon_0sz_PaUcD8qa8gmjgzOVub6VHss3CB0GaA0,1524
|
44
45
|
rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
46
|
rbx/box/statements/build_statements.py,sha256=upsMT-cAnSvbmKgtijdFc0OxPcyeBxRG92hY6dN-ZOk,11920
|
@@ -48,11 +49,11 @@ rbx/box/statements/joiners.py,sha256=ZbxomnMjEFT8yf5WSWUB4tBa3DL3AhjGEuh8uqHyDdg
|
|
48
49
|
rbx/box/statements/latex.py,sha256=LkcHwXjMFxbw--Gj9T1VkFKQFsXhY9dN7xZHpZycNW8,1346
|
49
50
|
rbx/box/statements/latex_jinja.py,sha256=7WBfn1h8DpqCAmSE6Av64HfURMnJ2AO4QX1CD72sz5E,7096
|
50
51
|
rbx/box/statements/schema.py,sha256=g3KgBn4nIqx-0utH8R2FCqPmJP969chhYfn96chQgd4,3851
|
51
|
-
rbx/box/stresses.py,sha256=
|
52
|
+
rbx/box/stresses.py,sha256=ceFpkZVKBfKKVrKFjeARdub5VGKmU9JPZwj-FxcqYjQ,11771
|
52
53
|
rbx/box/stressing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
|
-
rbx/box/stressing/finder_parser.py,sha256=
|
54
|
+
rbx/box/stressing/finder_parser.py,sha256=jXpYNa4FyugzmHi3r96Uv4rU1krRQJc5Ihr9jf1cvNo,11918
|
54
55
|
rbx/box/stressing/generator_parser.py,sha256=oHZryjR3YohgaSO9WEirQ7b2e-98WgZStF0N99W4Thw,7380
|
55
|
-
rbx/box/testcases.py,sha256=
|
56
|
+
rbx/box/testcases.py,sha256=d10qlOLK-gzedL3PYm56eq5R4D_kBjTBC1S9VKlRkz0,1850
|
56
57
|
rbx/box/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
58
|
rbx/box/ui/captured_log.py,sha256=ptICDPViVnz-_2NfrcB0SSBXNW5L74zI-vAZNN7kSok,11319
|
58
59
|
rbx/box/ui/css/app.tcss,sha256=apd5PkPEvl5jK3kE2qrxPyVED1VnvSsj08QQwzUPwEA,786
|
@@ -81,8 +82,8 @@ rbx/grading/judge/sandboxes/timeit.py,sha256=xScfasI2lsSQGZVpIZ7qBZfi0IaKC-1k8wO
|
|
81
82
|
rbx/grading/judge/storage.py,sha256=FirqjwDqb0m0h2OTFyWrZL7CQ4XjZNxhqB4JpnDIhZY,9485
|
82
83
|
rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
|
83
84
|
rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
|
84
|
-
rbx/grading/steps.py,sha256=
|
85
|
-
rbx/grading/steps_with_caching.py,sha256=
|
85
|
+
rbx/grading/steps.py,sha256=UDUcV49Zct4DjVPQTXMSVNXcZuN1HGkaiutKZoSk2D8,23074
|
86
|
+
rbx/grading/steps_with_caching.py,sha256=3yGgQ04Bt6iyb811VtNcvFq5hkWhNy5g4NFf-9iN448,1689
|
86
87
|
rbx/grading/steps_with_caching_run_test.py,sha256=nRzB4OcXkb-kQ4WCj0iTGVfBACllxZ0Ek5RSwfoJRgo,15262
|
87
88
|
rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
|
88
89
|
rbx/hydration.py,sha256=WqbgIfCZNwqspVhMuUlx8-sNOYhq_ZWbeZnkcetuAZI,3669
|
@@ -93,8 +94,8 @@ rbx/providers/codeforces.py,sha256=HWQN3Zb9UfXgCfwcNMEk6m1HoXQ-UE2odVfZoPukyCg,2
|
|
93
94
|
rbx/providers/provider.py,sha256=CNRB-uJZkNFIWv8xhW2s8PY9EwUSK8Ey1Yvxk4YLvcg,688
|
94
95
|
rbx/resources/checkers/boilerplate.cpp,sha256=vj1Qjy59JKEzb4ZpaX_MkL1FaZn_tTLZXjrIkP0nGfc,363
|
95
96
|
rbx/resources/default_config.json,sha256=8GZVHns4nci0-e5ALk9C1lfO6TO9W2ZlmZtxHkL6ibA,949
|
96
|
-
rbx/resources/default_setter_config.mac.yml,sha256=
|
97
|
-
rbx/resources/default_setter_config.yml,sha256=
|
97
|
+
rbx/resources/default_setter_config.mac.yml,sha256=i28xwAUDg-kuxx19knCiYkh-NR7QeYen5e0s2BdkpYg,1029
|
98
|
+
rbx/resources/default_setter_config.yml,sha256=oy6fbuQyYaJS2Cw2zcbYcBBGt6138CyB3-bLl45_QqY,1000
|
98
99
|
rbx/resources/envs/default.rbx.yml,sha256=8gl4DXc5mVISx__1libPQfmuHYdW32xjysfqpNESIAo,853
|
99
100
|
rbx/resources/envs/isolate.rbx.yml,sha256=VZAJ-Mu-A5Rt4m0VtMygOXA7eLLvCCmoorv_0acDmXQ,870
|
100
101
|
rbx/resources/packagers/boca/checker.sh,sha256=c7EBnKZXJKNDv_HxBv62Jt2bLV-GIOJ8FgxJisMJ1Ys,1033
|
@@ -161,9 +162,9 @@ rbx/testdata/box1/wa.sol.cpp,sha256=qsHmvtLJOFI_sdvUT6ITqk7FJYqhrRTCmEIRdy4gSGE,
|
|
161
162
|
rbx/testdata/caching/executable.py,sha256=WKRHNf_fprFJd1Fq1ubmQtR3mZzTYVNwKPLWuZ4HrWg,10
|
162
163
|
rbx/testdata/compatible,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
163
164
|
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.
|
165
|
+
rbx/utils.py,sha256=q1ZmfVCD6rdKVVZFBqwVetldSgGAbIh_KLHseBTUSiQ,4511
|
166
|
+
rbx_cp-0.5.29.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
167
|
+
rbx_cp-0.5.29.dist-info/METADATA,sha256=tU0tBGxpQHo5ixeqzCwUZUK3q0JDhoMMv7MUVqPntLM,3212
|
168
|
+
rbx_cp-0.5.29.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
169
|
+
rbx_cp-0.5.29.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
|
170
|
+
rbx_cp-0.5.29.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|