rbx.cp 0.6.1__py3-none-any.whl → 0.7.0__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/cd.py CHANGED
@@ -10,13 +10,20 @@ from rbx.box.sanitizers import warning_stack
10
10
  from rbx.utils import new_cd
11
11
 
12
12
 
13
- def find_package(root: pathlib.Path = pathlib.Path()) -> Optional[pathlib.Path]:
13
+ def find_package(
14
+ root: pathlib.Path = pathlib.Path(), consider_presets: bool = False
15
+ ) -> Optional[pathlib.Path]:
14
16
  root = root.resolve()
15
17
 
16
18
  def has_file():
17
19
  problem_yaml_path = root / 'problem.rbx.yml'
18
20
  contest_yaml_path = root / 'contest.rbx.yml'
19
- return problem_yaml_path.is_file() or contest_yaml_path.is_file()
21
+ preset_yaml_path = root / 'preset.rbx.yml'
22
+ return (
23
+ problem_yaml_path.is_file()
24
+ or contest_yaml_path.is_file()
25
+ or (consider_presets and preset_yaml_path.is_file())
26
+ )
20
27
 
21
28
  while root != pathlib.PosixPath('/') and not has_file():
22
29
  root = root.parent
@@ -49,10 +56,31 @@ def is_contest_package(root: pathlib.Path = pathlib.Path()) -> bool:
49
56
  return (dir / 'contest.rbx.yml').is_file()
50
57
 
51
58
 
52
- def within_closest_package(func):
59
+ def is_preset_package(root: pathlib.Path = pathlib.Path()) -> bool:
60
+ dir = find_package(root, consider_presets=True)
61
+ if dir is None:
62
+ return False
63
+ return (dir / 'preset.rbx.yml').is_file()
64
+
65
+
66
+ def within_closest_package(func, consider_presets: bool = False):
67
+ @functools.wraps(func)
68
+ def wrapper(*args, **kwargs):
69
+ package = find_package(consider_presets=consider_presets)
70
+ if package is None:
71
+ console.console.print('[error]No rbx package found.[/error]')
72
+ raise typer.Exit(1)
73
+ # Get deepest package.
74
+ with new_package_cd(package):
75
+ return func(*args, **kwargs)
76
+
77
+ return wrapper
78
+
79
+
80
+ def within_closest_wrapper(func):
53
81
  @functools.wraps(func)
54
82
  def wrapper(*args, **kwargs):
55
- package = find_package()
83
+ package = find_package(consider_presets=True)
56
84
  if package is None:
57
85
  console.console.print('[error]No rbx package found.[/error]')
58
86
  raise typer.Exit(1)
rbx/box/cli.py CHANGED
@@ -915,11 +915,11 @@ def stats(
915
915
  rich_help_panel='Management',
916
916
  help='Format files of the current package.',
917
917
  )
918
- @cd.within_closest_package
919
- def fix():
918
+ @cd.within_closest_wrapper
919
+ def fix(print_diff: bool = typer.Option(False, '--print-diff', '-p')):
920
920
  from rbx.box import linting
921
921
 
922
- linting.fix_package()
922
+ linting.fix_package(print_diff=print_diff)
923
923
 
924
924
 
925
925
  @app.command(
rbx/box/contest/main.py CHANGED
@@ -16,6 +16,7 @@ from rbx.box.contest.contest_package import (
16
16
  within_contest,
17
17
  )
18
18
  from rbx.box.contest.schema import ContestProblem
19
+ from rbx.box.linting import fix_package
19
20
  from rbx.box.packaging import contest_main as packaging
20
21
  from rbx.box.schema import Package
21
22
  from rbx.config import open_editor
@@ -68,9 +69,33 @@ def create(
68
69
 
69
70
  with cd.new_package_cd(dest_path):
70
71
  contest_utils.clear_all_caches()
72
+ fix_package()
71
73
  presets.generate_lock()
72
74
 
73
75
 
76
+ @app.command('init, i', help='Initialize a new contest in the current directory.')
77
+ def init(
78
+ preset: Annotated[
79
+ Optional[str],
80
+ typer.Option(
81
+ '--preset',
82
+ '-p',
83
+ help='Which preset to use to create this package. Can be a named of an already installed preset, or an URI, in which case the preset will be downloaded.\n'
84
+ 'If not provided, the default preset will be used, or the active preset if any.',
85
+ ),
86
+ ] = None,
87
+ ):
88
+ console.console.print('Initializing new contest in the current directory...')
89
+
90
+ fetch_info = presets.get_preset_fetch_info_with_fallback(preset)
91
+
92
+ presets.install_contest(pathlib.Path.cwd(), fetch_info)
93
+
94
+ contest_utils.clear_all_caches()
95
+ fix_package()
96
+ presets.generate_lock()
97
+
98
+
74
99
  @app.command('edit, e', help='Open contest.rbx.yml in your default editor.')
75
100
  @within_contest
76
101
  def edit():
rbx/box/creation.py CHANGED
@@ -5,6 +5,7 @@ import typer
5
5
 
6
6
  from rbx import console, utils
7
7
  from rbx.box import package, presets
8
+ from rbx.box.linting import fix_package
8
9
 
9
10
 
10
11
  def create(
@@ -42,4 +43,6 @@ def create(
42
43
  problem['name'] = name
43
44
  utils.save_ruyaml(dest_path / 'problem.rbx.yml', ru, problem)
44
45
 
46
+ fix_package(dest_path)
47
+
45
48
  presets.generate_lock(dest_path)
rbx/box/linting.py CHANGED
@@ -1,26 +1,95 @@
1
+ import difflib
1
2
  import pathlib
3
+ from typing import Optional, Type
2
4
 
3
5
  import yamlfix
4
6
  import yamlfix.model
7
+ from pydantic import BaseModel
5
8
 
6
9
  from rbx import console
7
- from rbx.box.cd import is_contest_package, is_problem_package
10
+ from rbx.box.cd import is_contest_package, is_preset_package, is_problem_package
11
+ from rbx.box.contest.schema import Contest
12
+ from rbx.box.presets import get_preset_yaml
13
+ from rbx.box.presets.schema import Preset
14
+ from rbx.box.schema import Package
8
15
  from rbx.box.stats import find_problem_packages_from_contest
16
+ from rbx.utils import uploaded_schema_path
9
17
 
10
18
 
11
- def fix_yaml(path: pathlib.Path, verbose: bool = True):
12
- config = yamlfix.model.YamlfixConfig(quote_basic_values=True)
19
+ def fix_language_server(path: pathlib.Path, model_cls: Type[BaseModel]) -> bool:
20
+ stream = []
21
+ with path.open('r') as f:
22
+ for line in f:
23
+ if line.strip().startswith('# yaml-language-server:'):
24
+ continue
25
+ stream.append(line)
26
+ if line.startswith('---'):
27
+ stream.append(
28
+ f'# yaml-language-server: $schema={uploaded_schema_path(model_cls)}\n'
29
+ )
30
+ content = ''.join(stream)
31
+ orig_text = path.read_text()
32
+ path.write_text(content)
33
+ return orig_text != content
34
+
35
+
36
+ def fix_yaml(
37
+ path: pathlib.Path,
38
+ verbose: bool = True,
39
+ print_diff: bool = False,
40
+ model_cls: Optional[Type[BaseModel]] = None,
41
+ ):
42
+ orig_text = path.read_text()
43
+
44
+ # Config to go hand-to-hand with VSCode YAML extension,
45
+ # which we offer first class support to. Unfortunately,
46
+ # YAML extension is not perfect :(
47
+ config = yamlfix.model.YamlfixConfig(
48
+ quote_basic_values=True,
49
+ quote_representation='"',
50
+ comments_min_spaces_from_content=1,
51
+ )
13
52
  _, changed = yamlfix.fix_files([str(path)], dry_run=False, config=config)
53
+
54
+ if model_cls is not None:
55
+ if fix_language_server(path, model_cls):
56
+ changed = True
57
+
14
58
  if changed and verbose:
15
59
  console.console.print(
16
60
  f'Formatting [item]{path}[/item].',
17
61
  )
18
62
 
63
+ if print_diff and changed:
64
+ unified_diff = difflib.unified_diff(
65
+ orig_text.splitlines(), path.read_text().splitlines()
66
+ )
67
+ console.console.print(
68
+ f'Diff for [item]{path}[/item].\n' + '\n'.join(unified_diff),
69
+ )
70
+
71
+
72
+ def fix_package(root: pathlib.Path = pathlib.Path(), print_diff: bool = False):
73
+ if is_preset_package(root):
74
+ fix_yaml(root / 'preset.rbx.yml', model_cls=Preset, print_diff=print_diff)
75
+ preset = get_preset_yaml(root)
76
+ if preset.problem is not None:
77
+ fix_yaml(
78
+ root / preset.problem / 'problem.rbx.yml',
79
+ model_cls=Package,
80
+ print_diff=print_diff,
81
+ )
82
+ if preset.contest is not None:
83
+ fix_package(root / preset.contest, print_diff=print_diff)
84
+ return
19
85
 
20
- def fix_package(root: pathlib.Path = pathlib.Path()):
21
86
  if is_problem_package(root):
22
- fix_yaml(root / 'problem.rbx.yml')
87
+ fix_yaml(root / 'problem.rbx.yml', model_cls=Package, print_diff=print_diff)
23
88
  if is_contest_package(root):
24
- fix_yaml(root / 'contest.rbx.yml')
89
+ fix_yaml(root / 'contest.rbx.yml', model_cls=Contest, print_diff=print_diff)
25
90
  for problem in find_problem_packages_from_contest(root):
26
- fix_yaml(problem / 'problem.rbx.yml')
91
+ fix_yaml(
92
+ problem / 'problem.rbx.yml',
93
+ model_cls=Package,
94
+ print_diff=print_diff,
95
+ )
@@ -23,7 +23,7 @@ def _find_preset_yaml(root: pathlib.Path = pathlib.Path()) -> Optional[pathlib.P
23
23
  return None
24
24
 
25
25
 
26
- def _get_preset_yaml(root: pathlib.Path = pathlib.Path()) -> Preset:
26
+ def get_preset_yaml(root: pathlib.Path = pathlib.Path()) -> Preset:
27
27
  found = _find_preset_yaml(root)
28
28
  if not found:
29
29
  console.console.print(
@@ -221,7 +221,7 @@ def _copy_updated_assets(
221
221
  def get_active_preset_or_null(root: pathlib.Path = pathlib.Path()) -> Optional[Preset]:
222
222
  local_preset = _find_local_preset(root)
223
223
  if local_preset is not None:
224
- return _get_preset_yaml(local_preset)
224
+ return get_preset_yaml(local_preset)
225
225
  return None
226
226
 
227
227
 
@@ -319,7 +319,7 @@ def _install_preset_from_dir(
319
319
  update: bool = False,
320
320
  override_uri: Optional[str] = None,
321
321
  ):
322
- preset = _get_preset_yaml(src)
322
+ preset = get_preset_yaml(src)
323
323
 
324
324
  if ensure_contest and preset.contest is None:
325
325
  console.console.print(
@@ -391,7 +391,7 @@ def _install_preset_from_local_dir(
391
391
  update: bool = False,
392
392
  ):
393
393
  pd = pathlib.Path(fetch_info.inner_dir)
394
- preset = _get_preset_yaml(pd)
394
+ preset = get_preset_yaml(pd)
395
395
  console.console.print(
396
396
  f'Installing local preset [item]{preset.name}[/item] into [item]{dest}[/item]...'
397
397
  )
@@ -1,14 +1,15 @@
1
+ ---
2
+ # yaml-language-server: $schema=https://rsalesc.github.io/rbx/schemas/Contest.json
1
3
  # Add problems by running `rbx contest add <problem-name> <short-name>`
2
-
3
4
  name: "new-contest"
4
5
  statements:
5
6
  - name: "statement-en"
6
7
  title: "New contest"
7
- language: en
8
+ language: "en"
8
9
  path: "statement/contest.rbx.tex"
9
10
  type: "jinja-tex"
10
11
  assets: ["statement/olymp.sty", "statement/*.png"]
11
- joiner: { type: "tex2pdf" }
12
+ joiner: {type: "tex2pdf"}
12
13
  override:
13
14
  configure:
14
15
  - type: "rbx-tex" # Convert rbxTeX to TeX
@@ -1,12 +1,14 @@
1
+ ---
2
+ # yaml-language-server: $schema=https://rsalesc.github.io/rbx/schemas/Preset.json
1
3
  name: "default"
2
- uri: rsalesc/rbx/rbx/resources/presets/default
4
+ uri: "rsalesc/rbx/rbx/resources/presets/default"
3
5
  problem: "problem"
4
6
  contest: "contest"
5
7
  tracking:
6
8
  problem:
7
- - path: statement/template.rbx.tex
8
- - path: statement/olymp.sty
9
+ - path: "statement/template.rbx.tex"
10
+ - path: "statement/olymp.sty"
9
11
  contest:
10
- - path: statement/template.rbx.tex
11
- - path: statement/olymp.sty
12
- - path: statement/contest.rbx.tex
12
+ - path: "statement/template.rbx.tex"
13
+ - path: "statement/olymp.sty"
14
+ - path: "statement/contest.rbx.tex"
@@ -1,10 +1,10 @@
1
- # yaml-language-server: $schema=/home/rsalesc/.config/rbx/schemas/Package.json
2
-
1
+ ---
2
+ # yaml-language-server: $schema=https://rsalesc.github.io/rbx/schemas/Package.json
3
3
  name: "new-problem"
4
4
  timeLimit: 1000
5
5
  memoryLimit: 256
6
- checker: { path: "wcmp.cpp" } # Download others from testlib with `rbx download checker`
7
- validator: { path: "validator.cpp" }
6
+ checker: {path: "wcmp.cpp"} # Download others from testlib with `rbx download checker`
7
+ validator: {path: "validator.cpp"}
8
8
  generators:
9
9
  - path: "gen.cpp"
10
10
  name: "gen"
@@ -19,16 +19,16 @@ testcases:
19
19
  path: "random.py" # Generator script written programatically.
20
20
  solutions:
21
21
  - path: "sols/main.cpp"
22
- outcome: ACCEPTED
22
+ outcome: "ACCEPTED"
23
23
  - path: "sols/wa.cpp"
24
- outcome: WRONG_ANSWER
24
+ outcome: "WRONG_ANSWER"
25
25
  - path: "sols/slow.cpp"
26
- outcome: TLE_OR_RTE # Can be TLE too
26
+ outcome: "TLE_OR_RTE" # Can be TLE too
27
27
  statements:
28
28
  - name: "statement-en"
29
29
  title: "New Problem"
30
30
  path: "statement/statement.rbx.tex" # Open this file to edit your statement.
31
- type: rbxTeX
31
+ type: "rbxTeX"
32
32
  language: "en"
33
33
  assets: ["statement/olymp.sty", "statement/*.png"]
34
34
  configure:
@@ -52,5 +52,4 @@ unitTests:
52
52
  - glob: "unit/checker/wa*"
53
53
  outcome: "WRONG_ANSWER"
54
54
  vars:
55
- "MAX_N": 1000000000 # Can be used in the validator, in stress tests and in the statement.
56
-
55
+ MAX_N: 1000000000 # Can be used in the validator, in stress tests and in the statement.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rbx.cp
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9.1,<4.0.0
@@ -34,6 +34,7 @@ Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
34
34
  Requires-Dist: questionary (>=2.1.0,<3.0.0)
35
35
  Requires-Dist: requests (>=2.32.3,<3.0.0)
36
36
  Requires-Dist: rich (>=13.9.4,<14.0.0)
37
+ Requires-Dist: ruamel-yaml (>=0.18.14,<0.19.0)
37
38
  Requires-Dist: ruyaml (>=0.91.0,<0.92.0)
38
39
  Requires-Dist: syncer (>=2.0.3,<3.0.0)
39
40
  Requires-Dist: textual (>=3.1.1,<4.0.0)
@@ -3,9 +3,9 @@ rbx/annotations.py,sha256=qcJGL_INONSirH7LTrEma5RsweAIbO6QlRHVvRvb9ao,3521
3
3
  rbx/autoenum.py,sha256=cusv8ClXRlDVvhZ8eDrtYcL_2peXlHugAey_ht8roXk,12025
4
4
  rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  rbx/box/builder.py,sha256=MDm2qqmhedAbhn3rWP6cDwbBsGhV6sz_2sg1zLkPDw0,3613
6
- rbx/box/cd.py,sha256=w7Z8Goq9gNwC4g0OWBazo-M25nysuTXYrhB4Q9DZ0nw,1820
6
+ rbx/box/cd.py,sha256=bPiSLMDNFtfOSYaQ9TBGm-Cl8SKajqDZMr98uXMvKA8,2699
7
7
  rbx/box/checkers.py,sha256=2eLfMOzJajoca26M4rOBxUxve3-BpxcMu_q2upI1Pcg,13017
8
- rbx/box/cli.py,sha256=NCKkdXF6_zmepw_ZAktH8WLTSCItwozboGe0x48JrZs,27643
8
+ rbx/box/cli.py,sha256=d6N_CvipfTGDyjLANkwpbvJRk9WmQTA9nnbT9GrWTPo,27724
9
9
  rbx/box/code.py,sha256=9Eba-LlvmMkfyiNAFOk2V2rRXKQvQYWyC_d0q195pZw,24445
10
10
  rbx/box/compile.py,sha256=Kzn5mEQu4vb91W9vjyt0DS6cfPJzFLTUoowFj7uHLUo,2539
11
11
  rbx/box/conftest.py,sha256=sEmciXSeDC-wmrZ1JSxbsUenKNP_VWW32mrCun2pY3I,1070
@@ -13,10 +13,10 @@ rbx/box/contest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  rbx/box/contest/build_contest_statements.py,sha256=643LJY1XEgevitbnzc05Cgo8wcLp7w91Z1K4D5XKcqA,12016
14
14
  rbx/box/contest/contest_package.py,sha256=EqtmEw36Hpr7-AYf4hGV0tYDu5esj7k14w7ZEIYU36o,2980
15
15
  rbx/box/contest/contest_utils.py,sha256=fsWHG1e65wq9zvRY3tdf32VF0nU1yzGTOBX5yjXiNk4,1102
16
- rbx/box/contest/main.py,sha256=l8fAR_mB6AIa0QcIgL9X2oGjoXSHw6uiwJq6C-ZkoLc,6545
16
+ rbx/box/contest/main.py,sha256=qjBGZpSzeCHA3IfjVsO1yywNek9K-h6Fqtp1-ulHoVo,7399
17
17
  rbx/box/contest/schema.py,sha256=eb7xtyq078YYWYHueximNhyHFINzwgLMFm1j9U3LxBQ,7461
18
18
  rbx/box/contest/statements.py,sha256=wTLmCO3VlGUcN-CzBf-uKUSOAbLUnDeZhdMcsIuF63A,3803
19
- rbx/box/creation.py,sha256=dJwtaG6520fK2BflLKVtXSHiMABX0q-m3gJ465h7k0Y,1301
19
+ rbx/box/creation.py,sha256=I3sclB5WTK_pcXDnYU6LEbvGVSHwRS_30L3GVAz-QqM,1369
20
20
  rbx/box/deferred.py,sha256=II3X9e87JCOZtmspnHh-n4PFqh-FsH_oc0XJHZ9ZYVQ,691
21
21
  rbx/box/download.py,sha256=tLW5gLVeLk0gHMEMwScSoHIXQPkXuPsqXzItsrsnUZY,3070
22
22
  rbx/box/dump_schemas.py,sha256=3j5t47_vJmXj0BCczxDX6ByOcsfolGEDNCBXlPpk86w,593
@@ -31,7 +31,7 @@ rbx/box/header.py,sha256=ifErXcIxG5lM5AyRiHDr7JE401vR4ORNXCNpHXxN_ls,2001
31
31
  rbx/box/lang.py,sha256=GaWvf4rgukflIZ9ti4MUKSJcz9wm2mIVuFcrO-pA8L8,669
32
32
  rbx/box/lazy_importing_main.py,sha256=6Z8As7qVFFT619xHH9Xt8VCH57NjC4aDxfAgkWiUwT8,116
33
33
  rbx/box/lazy_importing_test.py,sha256=B0-b3y_DkxEmtVfu4NfmVsgVdFl6kRCsEL6GLMHJISo,628
34
- rbx/box/linting.py,sha256=Kr9ySmGxM0dkXmQKJ6w40eAOmFYdnevdMwd3WGeeyrY,842
34
+ rbx/box/linting.py,sha256=XdIgn8uRmPt06mLaP9ROnn6P1aSRdery6FkiLazLDM8,3181
35
35
  rbx/box/main.py,sha256=a8CYi77kOywPFly4-ucEIJLXQW-1NFp91kK2fA42YTE,86
36
36
  rbx/box/naming.py,sha256=pOG37X_wQM9CCSYwJIUf-b-ZHEs_nchO7wQEdP_quJg,1367
37
37
  rbx/box/package.py,sha256=ZywWmXjQo-A14fMOhOCzAO5IjFX9x-TBs8PusAv8iWE,13771
@@ -47,7 +47,7 @@ rbx/box/packaging/polygon/polygon_api.py,sha256=mPKEqiwANJ1nr-JhOgzGMaDhnbljsAgz
47
47
  rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
48
48
  rbx/box/packaging/polygon/upload.py,sha256=6dIbjwygKtirLBkbh40UgtHU1NHGxSMoFAtg2BcC2II,12902
49
49
  rbx/box/packaging/polygon/xml_schema.py,sha256=ZgcLyvxggMUccbTNdzflue5G-FTN2_ZmOGGF7FD0Y5A,2851
50
- rbx/box/presets/__init__.py,sha256=tuLdCvuFJptJEhGcllEs86_2xxaFmScBOtPNhXWb3NU,22713
50
+ rbx/box/presets/__init__.py,sha256=9BLun8zOwbn6T9eyNtIMONL3Ty5j77UUPzenB2-JOpY,22709
51
51
  rbx/box/presets/fetch.py,sha256=900aq9S8e12TlgSenG0iHgtF4OWgqavZsptgI_a1YKM,2508
52
52
  rbx/box/presets/lock_schema.py,sha256=Ohxs5J_B5_Dr8ZajptGqKzRzIjQS2ehDHbCOSy07PyY,309
53
53
  rbx/box/presets/schema.py,sha256=KhAZjA5VU7dBEvGc22jBWO8JHKkQ-sbPz6EcJK8Rgfg,2299
@@ -196,14 +196,14 @@ rbx/resources/packagers/moj/scripts/py2/run.sh,sha256=qshf-K3mKP4c7b45S3D82Wj0Ai
196
196
  rbx/resources/packagers/moj/scripts/py3/compile.sh,sha256=XPn8qDR_gPAAZD9h5lVEMdBkrSogRZvpT4MAaNNp9nk,96
197
197
  rbx/resources/packagers/moj/scripts/py3/prep.sh,sha256=it1e07QRpsnku3-rXOO1ovaw-RJlVVPy9R3I6WWwgMM,126
198
198
  rbx/resources/packagers/moj/scripts/py3/run.sh,sha256=LrMi7Tap9no8gh64QNGUXbWauP6ZpSl-wEwXZ2qhPo0,197
199
- rbx/resources/presets/default/contest/contest.rbx.yml,sha256=8Eb5DI3RAX_0x9KO9xDS-L1PHYaNujcLOGQijFfTsPg,449
199
+ rbx/resources/presets/default/contest/contest.rbx.yml,sha256=nN6FTb9xTISR2Lxv6AoCegEStgmwsfPo5KaFiBlJgWU,535
200
200
  rbx/resources/presets/default/contest/statement/contest.rbx.tex,sha256=3YDQo5c-SGbwXcd4uytyY_Mc7UriAditgdJnbN8UdHg,3062
201
201
  rbx/resources/presets/default/contest/statement/olymp.sty,sha256=k4TCQz1IeXV75oZ2_dcWEQ3ziTDegOEdnYn4Xb4vzsU,6766
202
202
  rbx/resources/presets/default/contest/statement/template.rbx.tex,sha256=XSGtd8JJKfOmU7yTWcC02x6NND9GUlj9uXOEJC168Lg,834
203
- rbx/resources/presets/default/preset.rbx.yml,sha256=hYesK08n17FBNThr4iaGrDfC0L3us_pzGDkhD33Ryt4,313
203
+ rbx/resources/presets/default/preset.rbx.yml,sha256=zepC-H2d7c3EZ3pP_agafpinxgCQ53U_JF7X3-WuGak,411
204
204
  rbx/resources/presets/default/problem/.gitignore,sha256=zc-lnGQQZsLBaXpSshesA_QfxhiZdNCSJDEuKqlPtjw,29
205
205
  rbx/resources/presets/default/problem/gen.cpp,sha256=rn6sGRjZ1sFE1Rq02r6488iquY9xTrutcvLv4d1sohA,178
206
- rbx/resources/presets/default/problem/problem.rbx.yml,sha256=-J2UqB9tJnwXOWLAs6wHGXAPtTGYE6inpJwqbCrLyGE,1681
206
+ rbx/resources/presets/default/problem/problem.rbx.yml,sha256=-tmGCLQD1TLtezoUjbRxJQzz5CtfRtvJEjEG2EYKEls,1689
207
207
  rbx/resources/presets/default/problem/random.py,sha256=-iPorU24QHfp39EYRJX9jMKcTIxxz5ejKoAzPLIuu1g,98
208
208
  rbx/resources/presets/default/problem/random.txt,sha256=2BA_AM8IAKEcrUTJhnzWnNJN8whDN82E2137NhFkt2U,137
209
209
  rbx/resources/presets/default/problem/rbx.h,sha256=LBkbC3gbDPW2Fdm1p99hNhF7oKpZLLSY7dE4zpepp5w,2161
@@ -230,8 +230,8 @@ rbx/testcase.py,sha256=yKOq3CAJZ1YTmInvnoIs0u1iJnRj_X85XiWbLI-p9d8,1951
230
230
  rbx/testcase_rendering.py,sha256=nfmv6dSEqd4aR3TsaODwkKGK6AXty_DDKtWf_ejiQpI,2084
231
231
  rbx/testing_utils.py,sha256=x_PqD8Zd2PkN91NxVHUnSTs044-1WK5KKtttKQBXpFs,2083
232
232
  rbx/utils.py,sha256=SfR844_i0ebRDMkmS_w1YdZiWPc6h2RGADygewlWRbA,4845
233
- rbx_cp-0.6.1.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
234
- rbx_cp-0.6.1.dist-info/METADATA,sha256=4o56u8aN673yNGkQTzObRY7lqic2IEQjNPInIlJHzcA,4409
235
- rbx_cp-0.6.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
236
- rbx_cp-0.6.1.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
237
- rbx_cp-0.6.1.dist-info/RECORD,,
233
+ rbx_cp-0.7.0.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
234
+ rbx_cp-0.7.0.dist-info/METADATA,sha256=cJPXcUWJPFAQ-Bo1Ijc8YJqpvo-aJcBsodttyutj-2g,4456
235
+ rbx_cp-0.7.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
236
+ rbx_cp-0.7.0.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
237
+ rbx_cp-0.7.0.dist-info/RECORD,,
File without changes