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/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 generate_standalone
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 = generate_standalone(
123
- stress.generator,
124
- input_path,
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
- ) -> finder_parser.FinderSolutionResult:
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 finder_parser.FinderSolutionResult(
150
- output_path=output_path,
151
- stderr_path=stderr_path,
152
- run_log=run_log,
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
- main_result = run_solution_fn(str(solutions[0].path))
159
- main_checker_result = checkers.check_with_no_output(main_result.run_log)
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]{main_result.output_path}[/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]{main_result.stderr_path}[/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 = main_result.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
- solution = call.solution
186
- checker = call.checker
187
-
188
- solution_result = run_solution_fn(solution)
189
-
190
- if checker is None:
191
- checker_result = checkers.check_with_no_output(solution_result.run_log)
192
- else:
193
- checker_digest = finders_digest[checker.path]
194
- checker_result = checkers.check(
195
- checker_digest,
196
- solution_result.run_log,
197
- Testcase(inputPath=input_path, outputPath=expected_output_path),
198
- program_output=solution_result.output_path,
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=checker_result.outcome,
203
- checker=checker,
204
- solution_result=solution_result,
205
- checker_result=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
- solution_result: Optional[FinderSolutionResult] = None
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
@@ -170,6 +170,7 @@ class RunLogMetadata(BaseModel):
170
170
  is_sanitized: bool = False
171
171
  timeLimit: Optional[int] = None
172
172
  memoryLimit: Optional[int] = None
173
+ retryIndex: Optional[int] = None
173
174
 
174
175
 
175
176
  class RunLog(BaseModel):
@@ -46,9 +46,11 @@ def run(
46
46
  ) -> Optional[RunLog]:
47
47
  artifacts.logs = GradingLogsHolder()
48
48
 
49
- with dependency_cache(
50
- [command], [artifacts], params.get_cacheable_params()
51
- ) as is_cached:
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
- def confirm_on_status(status: Optional[rich.status.Status], *args, **kwargs) -> bool:
101
+ @contextlib.contextmanager
102
+ def no_progress(status: Optional[rich.status.Status]):
102
103
  if status:
103
104
  status.stop()
104
- res = rich.prompt.Confirm.ask(*args, **kwargs, console=console)
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.27
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=0TiRQJoHqLHAI8QwBrscbaJmhdcmialVtP_oEkfHcs0,3260
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=N2pjerRsESDqQ0G8NNeUJQgXxlJTZwNmanhhXZn5tN8,11531
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=bzURQrNEscCO8_3BYXCyGK9ZneX4-eOJZP5JJV28f3I,16350
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=PZYbC2k6f2pMIuj1-X_yEANCWYstkIXJ7Bg0Szi37YA,23293
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=mPEOchzoGDwk_S9wUw1DKqwJWJ0S5GTxQnZIlm9BFwo,13709
41
- rbx/box/setter_config.py,sha256=6nGTPMvnJ7y1sM-EBuI493NSZOIiOZ1DTypSXrL-HRY,3686
42
- rbx/box/solutions.py,sha256=KnF8f_bPGPvYBH_jdud9obziDIO8jEMOjjEHYrLIoT4,38065
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=nWkNMqcDtfRv6C0g1n_EAG8wLBVMIJKAmxITVzdzlQw,10706
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=syZGg_Wm762jAe2eN0oBCNeiM0H8lfZRWT5HKOXpkuQ,11917
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=bi7T5xXkwyWOkoI6ILcaf2gSSVuuNtZjhP5yL0DJAu4,1452
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=EKH9k5buU69f8wgek6rAk72oAnDJ22nOp2Rw-touk_Q,23037
85
- rbx/grading/steps_with_caching.py,sha256=5cI71VSjEaDzCPQikpamG_EjZqkkFKKdBtyJeA4QB7Q,1531
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=_E6BAzAvB3J15Ld3CaaVY2q5bqSk6i1UL8y5Eyhw1aU,816
97
- rbx/resources/default_setter_config.yml,sha256=ZGPwlIkQby0bWRtKCwVVZpUZlDHxxw-tO4m8_MXf8Vs,787
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=WlmnF4whc0-6ksVZoOhmom2bR2spT6zETFHjnpJOCsA,4383
165
- rbx_cp-0.5.27.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
166
- rbx_cp-0.5.27.dist-info/METADATA,sha256=8jFwdPKGFjf2KdKy6qhCDaRf0UJvVlG9e140Lz9ZDuc,3290
167
- rbx_cp-0.5.27.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
168
- rbx_cp-0.5.27.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
169
- rbx_cp-0.5.27.dist-info/RECORD,,
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,,