rbx.cp 0.5.13__py3-none-any.whl → 0.5.14__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/environment.py CHANGED
@@ -197,7 +197,7 @@ def get_environment(env: Optional[str] = None) -> Environment:
197
197
  except ValidationError as e:
198
198
  console.console.print(e)
199
199
  console.console.print(
200
- f'[error]Error parsing environment file [item]{env_path}[/item].[/error]'
200
+ f'[error]Error parsing environment file [item]{env_path}[/item][/error]'
201
201
  )
202
202
  raise typer.Exit(1) from e
203
203
 
rbx/box/generators.py CHANGED
@@ -339,7 +339,7 @@ def generate_standalone(
339
339
  )
340
340
  if not generation_log or generation_log.exitcode != 0:
341
341
  console.console.print(
342
- f'[error]Failed generating test using generator call [info]{call.name} {expanded_args_str}[/info].[/error]',
342
+ f'[error]Failed generating test using generator call [info]{call.name} {expanded_args_str}[/info][/error]',
343
343
  )
344
344
  if generation_log is not None:
345
345
  console.console.print(
@@ -361,7 +361,7 @@ def generate_standalone(
361
361
  ok, message, *_ = validators.validate_test(output, validator, validator_digest)
362
362
  if not ok:
363
363
  console.console.print(
364
- f'[error]Failed validating testcase generated by call [info]{call.name} {expanded_args_str}[/info].[/error]'
364
+ f'[error]Failed validating testcase generated by call [info]{call.name} {expanded_args_str}[/info][/error]'
365
365
  )
366
366
  console.console.print(f'[error]Message:[/error] {message}')
367
367
  console.console.print(f'Testcase written at [item]{output}[/item]')
rbx/box/main.py CHANGED
@@ -44,7 +44,6 @@ from rbx.box.solutions import (
44
44
  run_solutions,
45
45
  )
46
46
  from rbx.box.statements import build_statements
47
- from rbx.box.ui import main as ui_pkg
48
47
 
49
48
  app = typer.Typer(no_args_is_help=True, cls=annotations.AliasGroup)
50
49
  app.add_typer(
@@ -73,10 +72,10 @@ app.add_typer(
73
72
  )
74
73
 
75
74
 
76
- @app.command('ui', hidden=True)
77
- @package.within_problem
78
- def ui():
79
- ui_pkg.start()
75
+ # @app.command('ui', hidden=True)
76
+ # @package.within_problem
77
+ # def ui():
78
+ # ui_pkg.start()
80
79
 
81
80
 
82
81
  @app.command('edit, e', help='Open problem.rbx.yml in your default editor.')
@@ -4,6 +4,7 @@ import tempfile
4
4
  from typing import Annotated, Iterable, List, Optional, Sequence, Union
5
5
 
6
6
  import git
7
+ import questionary
7
8
  import rich
8
9
  import rich.prompt
9
10
  import typer
@@ -16,7 +17,7 @@ from rbx.box.presets.fetch import PresetFetchInfo, get_preset_fetch_info
16
17
  from rbx.box.presets.lock_schema import LockedAsset, PresetLock
17
18
  from rbx.box.presets.schema import Preset, TrackedAsset
18
19
  from rbx.config import get_default_app_path
19
- from rbx.grading.judge.digester import digest_cooperatively
20
+ from rbx.grading.judge.digester import digest_cooperatively, digest_file
20
21
 
21
22
  app = typer.Typer(no_args_is_help=True)
22
23
 
@@ -34,7 +35,7 @@ def get_preset_yaml(root: pathlib.Path = pathlib.Path()) -> Preset:
34
35
  found = find_preset_yaml(root)
35
36
  if not found:
36
37
  console.console.print(
37
- f'[error][item]preset.rbx.yml[/item] not found in [item]{root.absolute()}[/item].[/error]'
38
+ f'[error][item]preset.rbx.yml[/item] not found in [item]{root.absolute()}[/item][/error]'
38
39
  )
39
40
  raise typer.Exit(1)
40
41
  return utils.model_from_yaml(Preset, found.read_text())
@@ -300,10 +301,22 @@ def optionally_install_environment_from_preset(
300
301
  if preset.env is None:
301
302
  return
302
303
  env_path = get_environment_path(preset.name)
304
+ preset_env_path = root / preset.env
303
305
  if env_path.is_file():
304
- return
306
+ if digest_file(preset_env_path) == digest_file(env_path):
307
+ return
308
+ overwrite = questionary.confirm(
309
+ 'Preset environment file has changed. Overwrite?',
310
+ default=False,
311
+ ).ask()
312
+ if not overwrite:
313
+ return
314
+
315
+ console.console.print(
316
+ f'[success]Overwriting the existing environment based on [item]{preset.env}[/item].'
317
+ )
305
318
  env_path.parent.mkdir(parents=True, exist_ok=True)
306
- shutil.copyfile(str(root / preset.env), env_path)
319
+ shutil.copyfile(str(preset_env_path), env_path)
307
320
 
308
321
 
309
322
  def _install(root: pathlib.Path = pathlib.Path(), force: bool = False):
@@ -406,7 +419,7 @@ def _sync(update: bool = False):
406
419
  '[error]Package does not have a [item].preset.lock.yml[/item] file and thus cannot be synced.[/error]'
407
420
  )
408
421
  console.console.print(
409
- '[error]Ensure this package was created through a preset, or manually associate one with [item]rbx presets lock [PRESET][/item].[/error]'
422
+ '[error]Ensure this package was created through a preset, or manually associate one with [item]rbx presets lock [PRESET][/item][/error]'
410
423
  )
411
424
  raise typer.Exit(1)
412
425
 
rbx/box/solutions.py CHANGED
@@ -114,7 +114,7 @@ def compile_solutions(
114
114
  compiled_solutions[solution.path] = compile_item(solution)
115
115
  except:
116
116
  console.console.print(
117
- f'[error]Failed compiling solution [item]{solution.path}[/item].[/error]'
117
+ f'[error]Failed compiling solution [item]{solution.path}[/item][/error]'
118
118
  )
119
119
  raise
120
120
 
@@ -778,7 +778,10 @@ def print_run_report(
778
778
  is_closing_group = last_group is not None and is_new_group
779
779
 
780
780
  if is_closing_group:
781
- console.print(f'({get_evals_formatted_time(group_evals)})', end='')
781
+ console.print(
782
+ f'({get_evals_formatted_time(group_evals)}, {get_evals_formatted_memory(group_evals)})',
783
+ end='',
784
+ )
782
785
  console.print()
783
786
 
784
787
  if is_new_solution:
rbx/box/stresses.py CHANGED
@@ -35,7 +35,7 @@ def _compile_finder(finder: CodeItem) -> str:
35
35
  digest = compile_item(finder)
36
36
  except Exception as e:
37
37
  console.console.print(
38
- f'[error]Failed compiling checker [item]{finder.path}[/item].[/error]'
38
+ f'[error]Failed compiling checker [item]{finder.path}[/item][/error]'
39
39
  )
40
40
  raise typer.Exit(1) from e
41
41
  return digest
@@ -214,7 +214,7 @@ def run_stress(
214
214
 
215
215
  if internal_error_results:
216
216
  console.console.print(
217
- f'[error]Checkers failed during stress test [item]{name}[/item] with args [info]{expanded_generator_call.name} {expanded_generator_call.args}[/info].[/error]'
217
+ f'[error]Checkers failed during stress test [item]{name}[/item] with args [info]{expanded_generator_call.name} {expanded_generator_call.args}[/info][/error]'
218
218
  )
219
219
  for internal_error_result in internal_error_results:
220
220
  assert internal_error_result.checker is not None
@@ -300,7 +300,7 @@ def validate(tree: lark.ParseTree):
300
300
  for checker in all_checkers:
301
301
  if not pathlib.Path(checker).is_file():
302
302
  console.console.print(
303
- f'[error]Finder expression references non-existing checker [item]{checker}[/item].[/error]'
303
+ f'[error]Finder expression references non-existing checker [item]{checker}[/item][/error]'
304
304
  )
305
305
  raise typer.Exit(1)
306
306
 
@@ -308,7 +308,7 @@ def validate(tree: lark.ParseTree):
308
308
  for solution in all_solutions:
309
309
  if not pathlib.Path(solution).is_file():
310
310
  console.console.print(
311
- f'[error]Finder expression references non-existing solution [item]{solution}[/item].[/error]'
311
+ f'[error]Finder expression references non-existing solution [item]{solution}[/item][/error]'
312
312
  )
313
313
  raise typer.Exit(1)
314
314
 
rbx/box/validators.py CHANGED
@@ -35,7 +35,7 @@ def _compile_validator(validator: CodeItem) -> str:
35
35
  digest = compile_item(validator)
36
36
  except:
37
37
  console.console.print(
38
- f'[error]Failed compiling validator [item]{validator.path}[/item].[/error]'
38
+ f'[error]Failed compiling validator [item]{validator.path}[/item][/error]'
39
39
  )
40
40
  raise
41
41
  return digest
rbx/clone.py CHANGED
@@ -158,7 +158,7 @@ def main(lang: Optional[str] = None):
158
158
  )
159
159
  else:
160
160
  console.print(
161
- f'[status][rbx]rbx[/rbx] parsed problem from [item]{problem.url}[/item].[/status]'
161
+ f'[status][rbx]rbx[/rbx] parsed problem from [item]{problem.url}[/item][/status]'
162
162
  )
163
163
  else:
164
164
  batch_to_left[problem.batch.id] -= 1
@@ -1,4 +1,5 @@
1
1
  import hashlib
2
+ import pathlib
2
3
  from typing import IO
3
4
 
4
5
  import gevent
@@ -33,3 +34,8 @@ def digest_cooperatively(f: IO[bytes], chunk_size: int = 2**20):
33
34
  d = Digester()
34
35
  digest_cooperatively_into_digester(f, d, chunk_size)
35
36
  return d.digest()
37
+
38
+
39
+ def digest_file(path: pathlib.Path):
40
+ with open(path, 'rb') as f:
41
+ return digest_cooperatively(f)
rbx/grading/steps.py CHANGED
@@ -132,12 +132,6 @@ class TestcaseIO(BaseModel):
132
132
  output: Optional[pathlib.Path] = None
133
133
 
134
134
 
135
- class PreprocessLog(BaseModel):
136
- cmd: List[str]
137
- exitcode: int
138
- log: str
139
-
140
-
141
135
  class RunLogMetadata(BaseModel):
142
136
  language: Optional[str] = None
143
137
 
@@ -162,6 +156,11 @@ class RunLog(BaseModel):
162
156
  return f'FAILED with exit code {self.exitcode} and sandbox status {self.exitstatus} (time: {time}s, memory: {memory//(1024*1024)}MB)'
163
157
 
164
158
 
159
+ class PreprocessLog(RunLog):
160
+ cmd: List[str]
161
+ log: str
162
+
163
+
165
164
  class TestcaseLog(RunLog):
166
165
  stdout_absolute_path: Optional[pathlib.Path] = None
167
166
  stderr_absolute_path: Optional[pathlib.Path] = None
@@ -397,6 +396,9 @@ def compile(
397
396
  log = PreprocessLog(
398
397
  cmd=cmd,
399
398
  exitcode=sandbox.get_exit_code(),
399
+ exitstatus=sandbox.get_exit_status(),
400
+ time=sandbox.get_execution_time(),
401
+ memory=sandbox.get_memory_used(),
400
402
  log='\n'.join(std_outputs),
401
403
  )
402
404
  logs.append(log)
@@ -406,10 +408,10 @@ def compile(
406
408
 
407
409
  if logs and logs[-1].exitcode != 0:
408
410
  console.print(
409
- 'Preprocessing [error]failed[/error] with command',
411
+ '[error]FAILED[/error] Preprocessing failed with command',
410
412
  utils.highlight_json_obj(logs[-1].cmd),
411
413
  )
412
- console.print(f'Exit code: [error]{logs[-1].exitcode}[/error]')
414
+ console.print(f'[error]Summary:[/error] {logs[-1].get_summary()}')
413
415
  console.print(Text.from_ansi(logs[-1].log), style='default')
414
416
  return False
415
417
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rbx.cp
3
- Version: 0.5.13
3
+ Version: 0.5.14
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9,<4.0
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Dist: chardet (>=5.2.0,<6.0.0)
13
- Requires-Dist: fastapi (>=0.111.0,<0.112.0)
13
+ Requires-Dist: fastapi (>=0.115.8,<0.116.0)
14
14
  Requires-Dist: filelock (>=3.14.0,<4.0.0)
15
15
  Requires-Dist: gevent (>=24.2.1,<25.0.0)
16
16
  Requires-Dist: gitpython (>=3.1.43,<4.0.0)
@@ -26,9 +26,9 @@ Requires-Dist: python-iso639 (>=2024.4.27,<2025.0.0)
26
26
  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
- Requires-Dist: rich (>=13.7.1,<14.0.0)
29
+ Requires-Dist: rich (>=13.9.4,<14.0.0)
30
30
  Requires-Dist: textual (>=0.79.1,<0.80.0)
31
- Requires-Dist: typer[all] (>=0.12.3,<0.13.0)
31
+ Requires-Dist: typer (>=0.15.1,<0.16.0)
32
32
  Description-Content-Type: text/markdown
33
33
 
34
34
  <p align="center">
@@ -17,11 +17,11 @@ rbx/box/contest/schema.py,sha256=rxzjJasMWPKKhvSJs4eW4A2oCiA4gXgfF-MzqsbPslQ,491
17
17
  rbx/box/contest/statements.py,sha256=cRK5ndsywotUm66QqvtReqVAc-fW4c-2OZufK3Xd8_c,2947
18
18
  rbx/box/creation.py,sha256=mVHVVj8ozX9D5qpkLewE5WSjF6HtTm74Pkwubk-bATg,2259
19
19
  rbx/box/download.py,sha256=MFP-R26JiYGAP89I0TK-0fYc69Fsd20tsBqgtRCy5AE,2234
20
- rbx/box/environment.py,sha256=ocUKoVAxa-vAun0lv_BLJdYj4uqLh3mknHTxIssTDP0,11160
20
+ rbx/box/environment.py,sha256=GjwnJwtkTdkHmUh1b23zagjLsTiJQAOpP36A93mA-zc,11159
21
21
  rbx/box/extensions.py,sha256=p0iLaU28KswOBDX2HGVO_dR2gk-JSAWb6sXC6GZ1d0w,738
22
- rbx/box/generators.py,sha256=XiPg3uJuhBeJNN363_aSlvMwmrH5XNYSiTAEjL1GDYI,16304
22
+ rbx/box/generators.py,sha256=lKX_50Yf4bretHxgGzEZxKV7LFjpweaADC-22WEpLY4,16302
23
23
  rbx/box/generators_test.py,sha256=mQqHepAMYa6zV_PseQALI0nIX6AdQktt6lh94muFhNw,1758
24
- rbx/box/main.py,sha256=2CcJ1xRk-VV7snd3zu1w58-3LP7Dlhn7ZJslmowWDA4,16441
24
+ rbx/box/main.py,sha256=id1YpYKb7GHWoEMdiRAwfT08kY-ol52ulGcaCaPhtqw,16411
25
25
  rbx/box/package.py,sha256=Hds0WIvhAWXnYOmIXGULcLLVeFM1YkllOPSKHB5QSkk,10532
26
26
  rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
27
27
  rbx/box/packaging/boca/packager.py,sha256=FOhSRg5K5Y4qNB0WyTR3DKgrpObf9I0JbyGpJHOtxpo,10673
@@ -31,12 +31,12 @@ rbx/box/packaging/packager.py,sha256=suCT_SLnWa915rV2j8VFqzH43HGKRTr9mGGlrvj45aw
31
31
  rbx/box/packaging/polygon/packager.py,sha256=CcjHzDr4MwSyp270gsPY6RWoz8bUJeykDqXPvQ3XZ1U,10773
32
32
  rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
33
33
  rbx/box/packaging/polygon/xml_schema.py,sha256=-r24bCeRMGLrGGoT9FIgmqr87xHL-JzrFaR6bztbYtw,2703
34
- rbx/box/presets/__init__.py,sha256=ic-lLHXHeHKE7yov_pq_ec8pcfhMuik8HGHxeqE3Cvk,17072
34
+ rbx/box/presets/__init__.py,sha256=Wiegp1onXPaZs8RE1J3PKT5j3PFWKw2U2rkgOSbnYeM,17529
35
35
  rbx/box/presets/fetch.py,sha256=F-BCOlvEBEyDqtOhiDuGPn4EDtA4Bwm-fqHJ7zZGlW8,1975
36
36
  rbx/box/presets/lock_schema.py,sha256=6sRPnyePOC8yy-5WcD5JRZdDJHf8loqbvpQ1IPiOU9s,349
37
37
  rbx/box/presets/schema.py,sha256=mZmSPkQsw7eQM0lQN6er1MO_LiW1ObwwAZFDK0F5fxE,1962
38
38
  rbx/box/schema.py,sha256=RBQmFxr35LfaRwbxR6WezeQQ3twqh9VS3tn20rlRm_I,12580
39
- rbx/box/solutions.py,sha256=3WRhLcD_xknQb6KSjNVj7L-QHtsAmqZzHQ-LaU9oobI,27358
39
+ rbx/box/solutions.py,sha256=zfRawpEufWOI2uw7jNFb86bx8HwU5UaiwQMUj9KlDBE,27447
40
40
  rbx/box/solutions_test.py,sha256=DetQj7ZVnV3tBXBpCrFeK_Yv3XUtdEf29y_6qnyeyfY,1496
41
41
  rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  rbx/box/statements/build_statements.py,sha256=24ZUM5H33NhmqnDL0ofA1anUKWxuZG1paA1tCV4AKns,11911
@@ -45,9 +45,9 @@ rbx/box/statements/joiners.py,sha256=ZbxomnMjEFT8yf5WSWUB4tBa3DL3AhjGEuh8uqHyDdg
45
45
  rbx/box/statements/latex.py,sha256=LkcHwXjMFxbw--Gj9T1VkFKQFsXhY9dN7xZHpZycNW8,1346
46
46
  rbx/box/statements/latex_jinja.py,sha256=7WBfn1h8DpqCAmSE6Av64HfURMnJ2AO4QX1CD72sz5E,7096
47
47
  rbx/box/statements/schema.py,sha256=g3KgBn4nIqx-0utH8R2FCqPmJP969chhYfn96chQgd4,3851
48
- rbx/box/stresses.py,sha256=vENwbFO9QPR5MAarfW5D8g3CNr8AC_DewIP9EmT3he0,10597
48
+ rbx/box/stresses.py,sha256=DUc8TWFlVXUvh-iaBnvwVNmgoCi1puOJiKTHMP8COds,10595
49
49
  rbx/box/stressing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- rbx/box/stressing/finder_parser.py,sha256=Hw9m2viRGnVqVgO39D51s2qAEjZK1LKWe94rkqCx7VA,11919
50
+ rbx/box/stressing/finder_parser.py,sha256=syZGg_Wm762jAe2eN0oBCNeiM0H8lfZRWT5HKOXpkuQ,11917
51
51
  rbx/box/stressing/generator_parser.py,sha256=oHZryjR3YohgaSO9WEirQ7b2e-98WgZStF0N99W4Thw,7380
52
52
  rbx/box/testcases.py,sha256=bi7T5xXkwyWOkoI6ILcaf2gSSVuuNtZjhP5yL0DJAu4,1452
53
53
  rbx/box/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -55,10 +55,10 @@ rbx/box/ui/captured_log.py,sha256=ptICDPViVnz-_2NfrcB0SSBXNW5L74zI-vAZNN7kSok,11
55
55
  rbx/box/ui/css/app.tcss,sha256=apd5PkPEvl5jK3kE2qrxPyVED1VnvSsj08QQwzUPwEA,786
56
56
  rbx/box/ui/main.py,sha256=b0rHcBF42W4AOCv7WhtiGf_rUnY0yxpqO5oj3wfR4R4,984
57
57
  rbx/box/ui/run.py,sha256=wMEXrEFdQvMHz2hRKAFIithTnTtaL0kNQZu0jKmb8jI,7060
58
- rbx/box/validators.py,sha256=RvDukBK_lA-321cDNIXS2dy9cv9iz-z_f4xcFMFE7a0,8310
58
+ rbx/box/validators.py,sha256=pRBYCJRbA_7FrthJG9tNHQyTxq7yBNuu8lTgd7irc3s,8309
59
59
  rbx/box/validators_test.py,sha256=hriR6rD32Ouu64eKYYTPLZVvqMxXj7Q2h1l_JAefL7U,344
60
60
  rbx/checker.py,sha256=pj1jO3my48ru-qugbER5onccANCjoR0-PaFe3H3VGEY,4118
61
- rbx/clone.py,sha256=Fyjnr3Bp0xmUIZH6DkAGcGc2n3P5PDdoVszIYJbUmwM,6745
61
+ rbx/clone.py,sha256=wpHyED0_7ST7LD3vj7HjXhzqEzlwh6dRQvKQVDYhGeU,6744
62
62
  rbx/config.py,sha256=2B0PwgDaLjfs5PI8-kfDia6UVOAJq4rpWvb8VmweSXg,7360
63
63
  rbx/conftest.py,sha256=ouilbOIpvX8jTEdCAiWT85CbdBQKUUf41BjmDI82u-Y,967
64
64
  rbx/console.py,sha256=l0iulQH3_jQEm455W66TbDtC4a8owkWTHIIQpJaXofQ,715
@@ -69,7 +69,7 @@ rbx/grading/caching.py,sha256=oGPnKpk9NIUJKwDMsPbEF0bMUtjHN8CEeAOvCzfM5dk,11848
69
69
  rbx/grading/conftest.py,sha256=iN9LUG1IQqhK5JjkctcP68v6675oYsiD2sQSgyLMTqw,960
70
70
  rbx/grading/judge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  rbx/grading/judge/cacher.py,sha256=W4bdPIvI8tXOl8A7B4Ncuzi9-zXCp0DX40i1XKQGOAU,17761
72
- rbx/grading/judge/digester.py,sha256=hsstwtj302SYgQPeHVtA-7qOupMN-pMUGC6pNuWsrgs,826
72
+ rbx/grading/judge/digester.py,sha256=m6o-kjwyFOXKdImUXtVbdMHhwrgrXk8FDnJFVefnTIw,951
73
73
  rbx/grading/judge/sandbox.py,sha256=0h3YCmGabf9OfORJgx6v2Bed4kE-i8FyuZkPux-sDVk,23569
74
74
  rbx/grading/judge/sandboxes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  rbx/grading/judge/sandboxes/isolate.py,sha256=9xgBuNfAvGtO2zME1FXRah2rcPvzDShsPG0TTuX_UDU,25649
@@ -78,7 +78,7 @@ rbx/grading/judge/sandboxes/timeit.py,sha256=rOQnxf90hhTrWOQ1Mt57HNhZAAn1jDULtMj
78
78
  rbx/grading/judge/storage.py,sha256=FirqjwDqb0m0h2OTFyWrZL7CQ4XjZNxhqB4JpnDIhZY,9485
79
79
  rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
80
80
  rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
81
- rbx/grading/steps.py,sha256=s5oII5MPTSQgoYVOQsLeLoKkpCzbkzyDTgCkj5TAfHE,18466
81
+ rbx/grading/steps.py,sha256=pJM3Xnog6ZXia2xvWMeJmNij_ipRg2hec_WBf1n5O44,18598
82
82
  rbx/grading/steps_with_caching.py,sha256=C_IA_dStxp6poJyGggFFyEouU9y_739UOLKUiJITb8M,1489
83
83
  rbx/grading/steps_with_caching_run_test.py,sha256=nRzB4OcXkb-kQ4WCj0iTGVfBACllxZ0Ek5RSwfoJRgo,15262
84
84
  rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
@@ -157,8 +157,8 @@ rbx/testdata/caching/executable.py,sha256=WKRHNf_fprFJd1Fq1ubmQtR3mZzTYVNwKPLWuZ
157
157
  rbx/testdata/compatible,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
158
  rbx/testing_utils.py,sha256=ZZLKMUHlZ4HwsuNY50jqSBJ9HhpnFdba7opjDsvXE1U,2084
159
159
  rbx/utils.py,sha256=wy8zQRb97n3lptilK7UxM4A44KjXb1W5Z1tD61a-K4A,4173
160
- rbx_cp-0.5.13.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
161
- rbx_cp-0.5.13.dist-info/METADATA,sha256=cgpJkqgDicWnI2ApTi9-DFK-ulkKvg2ePYynguZL9wg,3254
162
- rbx_cp-0.5.13.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
163
- rbx_cp-0.5.13.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
164
- rbx_cp-0.5.13.dist-info/RECORD,,
160
+ rbx_cp-0.5.14.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
161
+ rbx_cp-0.5.14.dist-info/METADATA,sha256=1dncSdLwt6q_zdoeysRdfAlZVk4wfHXA4cDojM5d3kA,3249
162
+ rbx_cp-0.5.14.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
163
+ rbx_cp-0.5.14.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
164
+ rbx_cp-0.5.14.dist-info/RECORD,,