rbx.cp 0.16.4__py3-none-any.whl → 0.17.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/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.16.4'
1
+ __version__ = '0.17.0'
rbx/box/naming.py CHANGED
@@ -1,8 +1,13 @@
1
1
  from typing import Optional, Tuple
2
2
 
3
+ import typer
4
+
3
5
  from rbx.box import package
4
6
  from rbx.box.contest import contest_package
5
7
  from rbx.box.contest.schema import ContestProblem
8
+ from rbx.box.schema import Package
9
+ from rbx.box.statements.schema import Statement
10
+ from rbx.console import console
6
11
 
7
12
 
8
13
  def get_problem_entry_in_contest() -> Optional[Tuple[int, ContestProblem]]:
@@ -44,3 +49,30 @@ def get_problem_name_with_contest_info() -> str:
44
49
  if contest is None or short_name is None:
45
50
  return problem.name
46
51
  return f'{contest.name}-{short_name}-{problem.name}'
52
+
53
+
54
+ def get_title(
55
+ lang: Optional[str] = None,
56
+ statement: Optional[Statement] = None,
57
+ pkg: Optional[Package] = None,
58
+ fallback_to_title: bool = False,
59
+ ) -> str:
60
+ if pkg is None:
61
+ pkg = package.find_problem_package_or_die()
62
+ title: Optional[str] = None
63
+ if lang is not None:
64
+ title = pkg.titles.get(lang)
65
+ if statement is not None:
66
+ title = statement.title or title
67
+ if title is None:
68
+ if fallback_to_title and pkg.titles:
69
+ if len(pkg.titles) != 1:
70
+ console.print(
71
+ '[error]Package has multiple titles and no statement. Could not infer which title to use.[/error]'
72
+ )
73
+ console.print(f'Available titles: {pkg.titles}')
74
+ raise typer.Exit(1)
75
+ title = list(pkg.titles.values())[0]
76
+ else:
77
+ title = pkg.name
78
+ return title
@@ -48,10 +48,7 @@ class BocaPackager(BasePackager):
48
48
  if built_statement.statement == statement:
49
49
  return built_statement
50
50
 
51
- console.console.print(
52
- '[error]Main statement not found among built statements.[/error]'
53
- )
54
- raise typer.Exit(1)
51
+ return None
55
52
 
56
53
  def _get_problem_name(self) -> str:
57
54
  # BOCA forces Java class names to be the name of the problem.
@@ -66,9 +63,11 @@ class BocaPackager(BasePackager):
66
63
 
67
64
  def _get_problem_info(self) -> str:
68
65
  statement = self._get_main_statement()
66
+ lang = statement.language if statement is not None else None
67
+ title = naming.get_title(lang, statement, fallback_to_title=True)
69
68
  return (
70
69
  f'basename={self._get_problem_basename()}\n'
71
- f'fullname={statement.title}\n'
70
+ f'fullname={title}\n'
72
71
  f'descfile={self._get_problem_basename()}.pdf\n'
73
72
  )
74
73
 
@@ -3,7 +3,7 @@ import pathlib
3
3
  import shutil
4
4
  import tempfile
5
5
  from abc import ABC, abstractmethod
6
- from typing import List, Tuple, Type
6
+ from typing import List, Optional, Tuple, Type
7
7
 
8
8
  import typer
9
9
 
@@ -94,12 +94,17 @@ class BasePackager(ABC):
94
94
  res.extend(tests_per_group[group.name])
95
95
  return res
96
96
 
97
- def get_statement_for_language(self, lang: str) -> Statement:
97
+ def get_statement_for_language_or_null(self, lang: str) -> Optional[Statement]:
98
98
  pkg = package.find_problem_package_or_die()
99
99
  for statement in pkg.expanded_statements:
100
100
  if statement.language == lang:
101
101
  return statement
102
- raise
102
+ return None
103
+
104
+ def get_statement_for_language_or_die(self, lang: str) -> Statement:
105
+ statement = self.get_statement_for_language_or_null(lang)
106
+ if statement is None:
107
+ raise ValueError(f'No statement for language {lang} found.')
103
108
 
104
109
 
105
110
  class BaseContestPackager(ABC):
@@ -210,7 +215,7 @@ async def run_packager(
210
215
  for statement_type in statement_types:
211
216
  languages = packager.languages()
212
217
  for language in languages:
213
- statement = packager.get_statement_for_language(language)
218
+ statement = packager.get_statement_for_language_or_die(language)
214
219
  statement_path = build_statement(statement, pkg, statement_type)
215
220
  built_statements.append(
216
221
  BuiltStatement(statement, statement_path, statement_type)
@@ -70,6 +70,14 @@ def _populate_tests(
70
70
  ]
71
71
 
72
72
 
73
+ def _populate_titles(problem: Problem, pkg: Package):
74
+ titles = {}
75
+ for name in problem.names:
76
+ iso639_code = lang.lang_to_code(name.language)
77
+ titles[iso639_code] = name.value
78
+ pkg.titles = titles
79
+
80
+
73
81
  def _populate_statements(
74
82
  problem: Problem,
75
83
  pkg: Package,
@@ -83,9 +91,6 @@ def _populate_statements(
83
91
  found_main = False
84
92
 
85
93
  for statement in pdf_statements:
86
- if statement.language not in name_per_language:
87
- continue
88
- name = name_per_language[statement.language]
89
94
  statement_path = into_path / _get_statement_path(statement)
90
95
  statement_path.parent.mkdir(parents=True, exist_ok=True)
91
96
  shutil.copy(pkg_path / statement.path, statement_path)
@@ -93,8 +98,7 @@ def _populate_statements(
93
98
  iso639_code = lang.lang_to_code(statement.language)
94
99
 
95
100
  pkg_statement = BoxStatement(
96
- name=f'statement-{name.language}',
97
- title=name.value,
101
+ name=f'statement-{statement.language}',
98
102
  language=iso639_code,
99
103
  path=_get_statement_path(statement),
100
104
  type=StatementType.PDF,
@@ -110,7 +114,8 @@ def _populate_statements(
110
114
  found_main = True
111
115
  continue
112
116
 
113
- if name.main and not found_main:
117
+ name = name_per_language.get(statement.language)
118
+ if name is not None and name.main and not found_main:
114
119
  # If main statement, add it to the front of the list
115
120
  pkg_statements = [pkg_statement] + pkg_statements
116
121
  found_main = True
@@ -124,8 +129,17 @@ def _populate_statements(
124
129
  console.console.print(
125
130
  f'[error]Main statement of language [item]{main_language}[/item] not found.[/error]',
126
131
  )
132
+ console.console.print(
133
+ 'If you want no statement in your imported package, '
134
+ 'leave the [item]--main-language[/item] flag unset.'
135
+ )
127
136
  raise typer.Exit(1)
128
137
 
138
+ if not pkg_statements:
139
+ console.console.print(
140
+ '[warning]Imported problem has no statements. Continuing without a statement.[/warning]',
141
+ )
142
+
129
143
 
130
144
  def _is_cpp_source(source: File) -> bool:
131
145
  if source.type is None:
@@ -224,6 +238,7 @@ class PolygonImporter(BaseImporter):
224
238
  )
225
239
 
226
240
  _populate_tests(testset, pkg, pkg_path, into_path)
241
+ _populate_titles(problem, pkg)
227
242
  _populate_statements(problem, pkg, pkg_path, into_path, self.main_language)
228
243
  _copy_checker(problem, pkg, pkg_path, into_path)
229
244
  _copy_interactor(problem, pkg, pkg_path, into_path)
@@ -5,7 +5,7 @@ from typing import List, Optional
5
5
  import typer
6
6
 
7
7
  from rbx import console, utils
8
- from rbx.box import header, limits_info, package
8
+ from rbx.box import header, limits_info, naming, package
9
9
  from rbx.box.lang import code_to_lang, code_to_langs, is_valid_lang_code
10
10
  from rbx.box.packaging.packager import (
11
11
  BaseContestPackager,
@@ -62,7 +62,7 @@ class PolygonPackager(BasePackager):
62
62
 
63
63
  lang_codes = set()
64
64
  for statement in pkg.expanded_statements:
65
- lang_codes.add(statement.title)
65
+ lang_codes.add(statement.language)
66
66
 
67
67
  for lang in langs:
68
68
  if lang not in lang_codes:
@@ -72,14 +72,15 @@ class PolygonPackager(BasePackager):
72
72
  )
73
73
  raise typer.Exit(1)
74
74
 
75
+ def _get_name(self, lang: str) -> polygon_schema.Name:
76
+ statement = self.get_statement_for_language_or_null(lang)
77
+ return polygon_schema.Name(
78
+ language=code_to_langs([lang])[0],
79
+ value=naming.get_title(lang, statement),
80
+ )
81
+
75
82
  def _get_names(self) -> List[polygon_schema.Name]:
76
- names = [
77
- polygon_schema.Name(
78
- language=code_to_langs([lang])[0],
79
- value=self.get_statement_for_language(lang).title,
80
- )
81
- for lang in self.languages()
82
- ]
83
+ names = [self._get_name(lang) for lang in self.languages()]
83
84
 
84
85
  _select_main_language(names, self.main_language)
85
86
 
@@ -8,7 +8,7 @@ import rich.progress
8
8
  import typer
9
9
 
10
10
  from rbx import console
11
- from rbx.box import header, limits_info, package
11
+ from rbx.box import header, limits_info, naming, package
12
12
  from rbx.box.generators import get_all_built_testcases
13
13
  from rbx.box.lang import code_to_langs, is_valid_lang_code
14
14
  from rbx.box.packaging.polygon import polygon_api as api
@@ -353,7 +353,7 @@ def _upload_statement(
353
353
  blocks = _get_statement_blocks(statement)
354
354
  polygon_statement = api.Statement(
355
355
  encoding='utf-8',
356
- name=statement.title,
356
+ name=naming.get_title(statement.language, statement, pkg),
357
357
  legend=blocks.blocks.get('legend') or '',
358
358
  input=blocks.blocks.get('input') or '',
359
359
  output=blocks.blocks.get('output') or '',
rbx/box/schema.py CHANGED
@@ -508,6 +508,12 @@ class Package(BaseModel):
508
508
  # Name of the problem.
509
509
  name: str = NameField(description='The name of the problem.')
510
510
 
511
+ titles: Dict[str, str] = Field(
512
+ default={},
513
+ description='Titles for the problem in each language. '
514
+ 'Languages should be specified as lowercase ISO 639-1 codes.',
515
+ )
516
+
511
517
  type: TaskType = Field(
512
518
  default=TaskType.BATCH, description='The type of the problem.'
513
519
  )
@@ -11,6 +11,7 @@ import typer
11
11
  from pydantic import BaseModel
12
12
 
13
13
  from rbx import console, utils
14
+ from rbx.box import naming
14
15
  from rbx.box.fields import Primitive
15
16
  from rbx.box.schema import LimitsProfile, Package, Testcase
16
17
  from rbx.box.statements.latex_jinja import (
@@ -130,7 +131,9 @@ class StatementBuilderProblem(StatementBuilderItem):
130
131
  'statement': self.statement,
131
132
  'samples': self.samples,
132
133
  'vars': JinjaDictWrapper.from_dict(self.vars or {}, wrapper_key='vars'),
133
- 'title': self.statement.title or self.package.name,
134
+ 'title': naming.get_title(
135
+ self.statement.language, self.statement, self.package
136
+ ),
134
137
  'limits': self.limits,
135
138
  }
136
139
  if self.short_name is not None:
@@ -132,8 +132,11 @@ class Statement(BaseModel):
132
132
  default='en', description='Language code of this statement (ISO 639-1).'
133
133
  )
134
134
 
135
- title: str = Field(
136
- default='', description='Name of the problem, as it appears in the statement.'
135
+ title: Optional[str] = Field(
136
+ default=None,
137
+ description='Title of the problem, as it appears in the statement. '
138
+ 'Can be left unset if the problem has no title or if title comes '
139
+ 'from the `titles` field of the package.',
137
140
  )
138
141
 
139
142
  path: pathlib.Path = Field(
@@ -63,7 +63,7 @@ async def convert(
63
63
  built_statements = []
64
64
  for statement_type in packager.statement_types():
65
65
  for language in packager.languages():
66
- statement = packager.get_statement_for_language(language)
66
+ statement = packager.get_statement_for_language_or_die(language)
67
67
  statement_path = build_statement(statement, pkg, statement_type)
68
68
  built_statements.append(
69
69
  BuiltStatement(statement, statement_path, statement_type)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  # yaml-language-server: $schema=https://rsalesc.github.io/rbx/schemas/Preset.json
3
3
  name: "default"
4
- min_version: "0.16.4"
4
+ min_version: "0.17.0"
5
5
  uri: "rsalesc/rbx/rbx/resources/presets/default"
6
6
  problem: "problem"
7
7
  contest: "contest"
@@ -3,6 +3,8 @@
3
3
  name: "new-problem"
4
4
  timeLimit: 1000 # ms
5
5
  memoryLimit: 256 # MiB
6
+ titles:
7
+ en: "New problem"
6
8
  checker: {path: "wcmp.cpp"} # Download others from testlib with `rbx download checker`
7
9
  validator: {path: "validator.cpp"}
8
10
  testcases:
@@ -31,7 +33,6 @@ solutions:
31
33
  outcome: "INCORRECT"
32
34
  statements:
33
35
  - name: "statement-en"
34
- title: "New Problem"
35
36
  path: "statement/statement.rbx.tex" # Open this file to edit your statement.
36
37
  type: "rbxTeX"
37
38
  language: "en"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rbx.cp
3
- Version: 0.16.4
3
+ Version: 0.17.0
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9.1,<4.0.0
@@ -1,5 +1,5 @@
1
1
  rbx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- rbx/__version__.py,sha256=9ZYMANsHpUpRueGC3gdnVjGvLseEK8ywMOkZEQU44Gg,23
2
+ rbx/__version__.py,sha256=ctD9pjqBvASXR0DHHzalDZFaQsnMJWDpTalYrvY3e_Y,23
3
3
  rbx/annotations.py,sha256=_TkLhgZWiUyon3bonHwUo03ls1jY8LwgcR4bVgtgnc0,3519
4
4
  rbx/autoenum.py,sha256=cusv8ClXRlDVvhZ8eDrtYcL_2peXlHugAey_ht8roXk,12025
5
5
  rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -33,25 +33,25 @@ rbx/box/lazy_importing_main.py,sha256=6Z8As7qVFFT619xHH9Xt8VCH57NjC4aDxfAgkWiUwT
33
33
  rbx/box/limits_info.py,sha256=NTtcZTlDzemOtQQXbNbLORpl3RM9nYHc2-cGMnGYfF8,5370
34
34
  rbx/box/linting.py,sha256=wRE0hKCduTBHZYBFmmis_d9AMTsDu0Q-AjByCeTnkrY,3187
35
35
  rbx/box/main.py,sha256=a8CYi77kOywPFly4-ucEIJLXQW-1NFp91kK2fA42YTE,86
36
- rbx/box/naming.py,sha256=pOG37X_wQM9CCSYwJIUf-b-ZHEs_nchO7wQEdP_quJg,1367
36
+ rbx/box/naming.py,sha256=M6aYLIge8PHhIuCX50rwGe5VRzgUL--2BVtymIqeeXs,2389
37
37
  rbx/box/package.py,sha256=FjJWSr5yom4_S2k-HZfmDYRB954WaefFaVVME90CdEE,15382
38
38
  rbx/box/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  rbx/box/packaging/boca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  rbx/box/packaging/boca/boca_language_utils.py,sha256=bd5-KxN-0h6yg74Jx3NUsgwf_euBU95zC2GLw0MAFS4,1071
41
41
  rbx/box/packaging/boca/boca_outcome_utils.py,sha256=MhO7aKTJ1weCgSJBA9MF_ejK3HFBFwC5dIsiR4wA1Mw,310
42
42
  rbx/box/packaging/boca/extension.py,sha256=EQALNEOv4zVDXSKs_dk11n92y7cBZVn8TogIK683lE0,890
43
- rbx/box/packaging/boca/packager.py,sha256=W-qCyIe8ZFxtZ-yYPKVVV7ayszIfpL_ZYrmow11fgvA,13903
43
+ rbx/box/packaging/boca/packager.py,sha256=8dTGP6RMaWqd3a_3Tl2tEW-OuDgktXYsO8qoSuHHkPY,13909
44
44
  rbx/box/packaging/contest_main.py,sha256=G3CO4RILxGbUhyLsTdeDqPXEJ3sK2pSH9X8piqU61FQ,4486
45
45
  rbx/box/packaging/importer.py,sha256=qcKpDQyf6EvYXorofLs5abteBEWV9AezA8tcihCw5wk,909
46
46
  rbx/box/packaging/main.py,sha256=GRTP7_Ao-8I5F0GrLTAXSOwYbh1DYP_cLPm5jUMKN0U,2782
47
47
  rbx/box/packaging/moj/packager.py,sha256=FjghOe5CPlaF1GqK0NZgWVV_eYWpdTmz88bh04yeAyI,8708
48
- rbx/box/packaging/packager.py,sha256=2a2yldbVZzEQLoQnfGc8fHDHasFRdLUwAGlQuxudLBs,7324
48
+ rbx/box/packaging/packager.py,sha256=QWSUN8JAdJz9GK0TxtGTtqJHVZf99vHOe1k7qbY55qk,7608
49
49
  rbx/box/packaging/pkg/packager.py,sha256=4pt4cZa_MU9gsWNVvh5Um1KEIh_axBHlXmPf6rpFoHg,4904
50
- rbx/box/packaging/polygon/importer.py,sha256=xmtKQo5q81s30u41cEe5PWsepDMJx2XbZRxa6vA4p9c,7571
51
- rbx/box/packaging/polygon/packager.py,sha256=1ddKbUJ-RgzgolDZTkmDJFF5N3JGTXRYVA84L4QU62c,12311
50
+ rbx/box/packaging/polygon/importer.py,sha256=SqyYUpeDZuqY8MH_ZaD26p3asAWJelcSzsgvFW1Bctg,8099
51
+ rbx/box/packaging/polygon/packager.py,sha256=cnKRnUvoRJM2Ytp_GHxN4fG-a1lPEo1pvg6NjBoLNgQ,12428
52
52
  rbx/box/packaging/polygon/polygon_api.py,sha256=mPKEqiwANJ1nr-JhOgzGMaDhnbljsAgzzPHW6kkf7R4,41016
53
53
  rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
54
- rbx/box/packaging/polygon/upload.py,sha256=w7F0ejfEwhXrAyKADkA2FGuOfTCq96nMNi1YJNRyrtU,13801
54
+ rbx/box/packaging/polygon/upload.py,sha256=902GlUaq9KBkQ_UMOX96kAeeuLMM_MmASILPP5ZPYVo,13846
55
55
  rbx/box/packaging/polygon/xml_schema.py,sha256=UbGtW5-SKN3wK952-eoTvcIDVoO0et10IA9bTb7jV8Y,3210
56
56
  rbx/box/presets/__init__.py,sha256=YusqU2ewwq3R1MqIXRM2N-i3uFX6s8m8PDbFJDr4zyg,37451
57
57
  rbx/box/presets/fetch.py,sha256=aom7f5atJ5Vy5Ox7k0aF8FDVMIeTjF0IRCkP_nrt6Ms,3118
@@ -61,18 +61,18 @@ rbx/box/remote.py,sha256=hCdiZSmh6Y1vnSEwLZ_gtAMYV-WLVlU3iVnvcObRpRc,5274
61
61
  rbx/box/retries.py,sha256=BZsi4sYBjm3VK5zb_pBQSYQuKo3ZntmtEFoVPZHg4QI,4982
62
62
  rbx/box/sanitizers/issue_stack.py,sha256=N4RVVHnswNPsZZaPcVAkNIhRH32AUo8fxfoka4lgRrQ,3420
63
63
  rbx/box/sanitizers/warning_stack.py,sha256=6-rr3dkMq6MpfjrVZ8lSQjF4RZ5YzZSAPMzHCfm-6h4,2876
64
- rbx/box/schema.py,sha256=SfGQYGrB6To4pRm4Y1ly5ON6Ng3oKBFQ6GVKpeSslr0,19808
64
+ rbx/box/schema.py,sha256=3rkRkBiyZw0Dq3GMKX1zh5BE4-aSURFZogAQGoYqVck,20006
65
65
  rbx/box/setter_config.py,sha256=vyZbsbgkjelZOblMLX5A1j4CLqPNQkrv83IZr_3-46Y,5301
66
66
  rbx/box/solutions.py,sha256=Id5X9711p5VX0kZfVXpj_klADPz8k5GvQsV3oXvhgrU,52848
67
67
  rbx/box/state.py,sha256=MMf3DvfQji0jKEliCHct2Tpp_0epL1tvP8HbHNArQIc,166
68
68
  rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  rbx/box/statements/build_statements.py,sha256=ZbciKblRUnRnTuuZfqU4W4EK6XhKkxuT1ByGMPjzNQU,13298
70
- rbx/box/statements/builders.py,sha256=OkT8f9mRSZKztobrzEAXW5KTbPpUknFeL1Jns7Xx2K0,13778
70
+ rbx/box/statements/builders.py,sha256=6849Nku1N0gBYC13wt8Eo6A3s6EfL4hh1VORwrpbEZI,13865
71
71
  rbx/box/statements/expander.py,sha256=sdbMtNcJQCbXGIkFIl9h24pGr77vhFLnM31V5AfuduI,1715
72
72
  rbx/box/statements/joiners.py,sha256=jItNXkAbTjFQpPMgfDMW86n3vMTbaE8sgo9I8Yf4Txg,2886
73
73
  rbx/box/statements/latex.py,sha256=ipTGjL4kjAsnqgiH6Pk1PwKFegBumQP4-y0pFAbNN8I,1584
74
74
  rbx/box/statements/latex_jinja.py,sha256=UQyD3hOFsiEQdFjqMswRrPXyGCiRPgnzZPmAcvJuPyM,11671
75
- rbx/box/statements/schema.py,sha256=mTaowRbRvtgspQk9JqejIxc2BERz3ooP4xT1ZudZmcw,5381
75
+ rbx/box/statements/schema.py,sha256=zCjpSsq24V179pS7Pti82x4gIpIMogNP6u1EQxdWolE,5529
76
76
  rbx/box/stats.py,sha256=rUAnmp7kTgUvIQ56NLpQaIQkazB37MVcUos5en3xUQw,3258
77
77
  rbx/box/stresses.py,sha256=SV0Hx7SPZZEIhwasWDVpTWuMhWWTjfJs2IEW-H0xJZw,12092
78
78
  rbx/box/stressing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -95,7 +95,7 @@ rbx/box/tooling/boca/main.py,sha256=knl1rpaHIwA63KkzMJMZQrejzMpbTPBhYqGx1IpuNm4,
95
95
  rbx/box/tooling/boca/manual_scrape.py,sha256=iuNtOHrWczdaWNNRMKGYkgr-wSwgtjZedpz5-sX5IRQ,724
96
96
  rbx/box/tooling/boca/scrape.py,sha256=q1BoVstfLbw5CwB9e2hQnseBv6HQMnXq2z_tk18ui6M,1024
97
97
  rbx/box/tooling/boca/scraper.py,sha256=6B3aI62YdzD7o1zykh9qavl6Qm6cTD--mEvVIjPvEaI,33701
98
- rbx/box/tooling/converter.py,sha256=CvZXDjmKqYLTFq9oaQjERa4Gqjlq3rK5dfQl1HFuRrI,2537
98
+ rbx/box/tooling/converter.py,sha256=cTRUuZ7GToMuAUo6VE7tOtaeNkXHJZE29me0yopvvsY,2544
99
99
  rbx/box/tooling/main.py,sha256=uj6XHjJMF3nyb4enbbTK8XbUAuiRLT_RP1kVwSMqV5E,2003
100
100
  rbx/box/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
101
  rbx/box/ui/captured_log.py,sha256=HPoV6LZohuECmjoqOdM_xFZbpICzQnI4n3rF-lf_b1Q,11634
@@ -201,12 +201,12 @@ rbx/resources/presets/default/contest/statement/info.rbx.tex,sha256=Wz8Tbmi2lPWM
201
201
  rbx/resources/presets/default/contest/statement/instructions.tex,sha256=JG_eR13ukZgEahrrmrbg40H8cUzpoUE8QLocihN-fZ8,2414
202
202
  rbx/resources/presets/default/contest/statement/logo.png,sha256=RLNYmZoc-BR6AZKkmr4UEg3h01YeFzvy604jMAQC7aA,414485
203
203
  rbx/resources/presets/default/env.rbx.yml,sha256=quSPG5Xs9KroYLATNLPNtORLGRWtrLLt2Fx81T1enAM,1692
204
- rbx/resources/presets/default/preset.rbx.yml,sha256=Fq2dBpQzcNEVZcES3ThbQadyyGb3WEMkxK6Mggttg7Q,520
204
+ rbx/resources/presets/default/preset.rbx.yml,sha256=eyWr8H0ltcVe05IOYjWPJDhJe_0QX6gJjwFCwdC--0M,520
205
205
  rbx/resources/presets/default/problem/.gitignore,sha256=1rt95y9Q7ZHIQn28JyZQUdD5zkpRosjAl9ZqoQmX2cE,149
206
206
  rbx/resources/presets/default/problem/gens/gen.cpp,sha256=rn6sGRjZ1sFE1Rq02r6488iquY9xTrutcvLv4d1sohA,178
207
207
  rbx/resources/presets/default/problem/manual_tests/samples/000.in,sha256=w66OEtCJGqjUNj8cJrqgImgGVm8W_OlIUtF255ds-ow,4
208
208
  rbx/resources/presets/default/problem/manual_tests/samples/001.in,sha256=P4QInDX87xXoDWu4PVIzUeNW5LtTlUKbMCvJ9uZOPGw,20
209
- rbx/resources/presets/default/problem/problem.rbx.yml,sha256=MMqCKkrRMoycIg5CmuV9hkGo45aUHCyRHQehzwZwzpo,2215
209
+ rbx/resources/presets/default/problem/problem.rbx.yml,sha256=DkGgyy7bAjR8ZPlKjXmF3POv_m9MR3qUqd7WzE88GUI,2218
210
210
  rbx/resources/presets/default/problem/rbx.h,sha256=iMNSI9tKGK8KJkl0Cgw1jhGdlRjqN_frFs-MFFS5Oq8,3760
211
211
  rbx/resources/presets/default/problem/sols/main.cpp,sha256=AW-j65DiFYUN18rddTKCWc_VyYCMgCbjZ0jAJ-0JLuA,124
212
212
  rbx/resources/presets/default/problem/sols/wa-overflow.cpp,sha256=Bj7tejPIlXG_JqUHWY1zi9TDbHdRZzgT_JDbCLRdhbQ,136
@@ -223,8 +223,8 @@ rbx/resources/templates/rbx.h,sha256=0AZds9R0PmuPgnlTENb33Y81LW0LlnmOJFaoN8oG3Yo
223
223
  rbx/resources/templates/template.cpp,sha256=xXWpWo7fa7HfmPNqkmHcmv3i46Wm0ZL-gPmkRfGvLn4,317
224
224
  rbx/testing_utils.py,sha256=vNNdaytowJfuopszVHeFzVtHWlPfipPW4zpqCOvdZKU,2908
225
225
  rbx/utils.py,sha256=AUIknhhED-ZIp6w-VcfPkaG1cYjQkovlX5WCvbVLNHg,9930
226
- rbx_cp-0.16.4.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
227
- rbx_cp-0.16.4.dist-info/METADATA,sha256=I7CFir9kxAZ--hAobuDQLIiFqd7l-xAkxLuzf_MTrNw,4799
228
- rbx_cp-0.16.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
229
- rbx_cp-0.16.4.dist-info/entry_points.txt,sha256=Gw2_BZ5Jon61biaH_ETbAQGXy8fR5On9gw2U4A1erpo,40
230
- rbx_cp-0.16.4.dist-info/RECORD,,
226
+ rbx_cp-0.17.0.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
227
+ rbx_cp-0.17.0.dist-info/METADATA,sha256=BXZ4rNbaGHUV5JRGNUBhskBdS5ZGd0a2Ea0K_vkHOiE,4799
228
+ rbx_cp-0.17.0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
229
+ rbx_cp-0.17.0.dist-info/entry_points.txt,sha256=Gw2_BZ5Jon61biaH_ETbAQGXy8fR5On9gw2U4A1erpo,40
230
+ rbx_cp-0.17.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any