rbx.cp 0.5.33__py3-none-any.whl → 0.5.34__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/code.py +1 -1
- rbx/box/contest/build_contest_statements.py +3 -2
- rbx/box/package.py +7 -0
- rbx/box/statements/build_statements.py +4 -1
- rbx/box/statements/builders.py +24 -5
- rbx/utils.py +8 -0
- {rbx_cp-0.5.33.dist-info → rbx_cp-0.5.34.dist-info}/METADATA +1 -1
- {rbx_cp-0.5.33.dist-info → rbx_cp-0.5.34.dist-info}/RECORD +11 -11
- {rbx_cp-0.5.33.dist-info → rbx_cp-0.5.34.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.33.dist-info → rbx_cp-0.5.34.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.33.dist-info → rbx_cp-0.5.34.dist-info}/entry_points.txt +0 -0
rbx/box/code.py
CHANGED
@@ -22,6 +22,7 @@ from rbx.box.statements.builders import (
|
|
22
22
|
StatementBuilderContest,
|
23
23
|
StatementBuilderContext,
|
24
24
|
StatementBuilderProblem,
|
25
|
+
StatementSample,
|
25
26
|
prepare_assets,
|
26
27
|
)
|
27
28
|
from rbx.box.statements.joiners import (
|
@@ -51,7 +52,7 @@ class ExtractedProblem:
|
|
51
52
|
return StatementBuilderProblem(
|
52
53
|
package=self.package,
|
53
54
|
statement=self.statement,
|
54
|
-
samples=self.samples,
|
55
|
+
samples=StatementSample.from_testcases(self.samples),
|
55
56
|
io_path=self.built_statement,
|
56
57
|
short_name=self.problem.short_name,
|
57
58
|
)
|
@@ -124,7 +125,7 @@ def get_builder_problems(
|
|
124
125
|
StatementBuilderProblem(
|
125
126
|
package=ex.package,
|
126
127
|
statement=ex.statement,
|
127
|
-
samples=ex.samples,
|
128
|
+
samples=StatementSample.from_testcases(ex.samples),
|
128
129
|
)
|
129
130
|
for ex in extracted_problems
|
130
131
|
]
|
rbx/box/package.py
CHANGED
@@ -364,6 +364,13 @@ def get_compilation_files(code: CodeItem) -> List[Tuple[pathlib.Path, pathlib.Pa
|
|
364
364
|
return res
|
365
365
|
|
366
366
|
|
367
|
+
@functools.cache
|
368
|
+
def get_empty_sentinel_path(root: pathlib.Path = pathlib.Path()) -> pathlib.Path:
|
369
|
+
path = get_problem_cache_dir(root) / '.empty'
|
370
|
+
path.write_text('')
|
371
|
+
return path
|
372
|
+
|
373
|
+
|
367
374
|
def clear_package_cache():
|
368
375
|
pkgs = [sys.modules[__name__]]
|
369
376
|
|
@@ -15,6 +15,7 @@ from rbx.box.statements.builders import (
|
|
15
15
|
StatementBuilderContext,
|
16
16
|
StatementBuilderProblem,
|
17
17
|
StatementCodeLanguage,
|
18
|
+
StatementSample,
|
18
19
|
prepare_assets,
|
19
20
|
)
|
20
21
|
from rbx.box.statements.schema import (
|
@@ -263,7 +264,9 @@ def build_statement_bytes(
|
|
263
264
|
item=StatementBuilderProblem(
|
264
265
|
package=pkg,
|
265
266
|
statement=statement,
|
266
|
-
samples=
|
267
|
+
samples=StatementSample.from_testcases(
|
268
|
+
get_samples() if use_samples else []
|
269
|
+
),
|
267
270
|
short_name=short_name,
|
268
271
|
),
|
269
272
|
verbose=False,
|
rbx/box/statements/builders.py
CHANGED
@@ -7,8 +7,9 @@ from abc import ABC, abstractmethod
|
|
7
7
|
from typing import Any, Dict, List, Optional, Tuple
|
8
8
|
|
9
9
|
import typer
|
10
|
+
from pydantic import BaseModel
|
10
11
|
|
11
|
-
from rbx import console
|
12
|
+
from rbx import console, utils
|
12
13
|
from rbx.box.schema import Package, Primitive, Testcase
|
13
14
|
from rbx.box.statements.latex import (
|
14
15
|
MAX_PDFLATEX_RUNS,
|
@@ -64,7 +65,25 @@ class StatementBuilderItem(ABC):
|
|
64
65
|
pass
|
65
66
|
|
66
67
|
|
67
|
-
class StatementSample(
|
68
|
+
class StatementSample(BaseModel):
|
69
|
+
inputPath: pathlib.Path
|
70
|
+
outputPath: pathlib.Path
|
71
|
+
hasOutput: bool = True
|
72
|
+
|
73
|
+
@staticmethod
|
74
|
+
def from_testcase(testcase: Testcase) -> 'StatementSample':
|
75
|
+
return StatementSample(
|
76
|
+
inputPath=testcase.inputPath,
|
77
|
+
outputPath=testcase.outputPath or utils.get_empty_sentinel_path(),
|
78
|
+
hasOutput=testcase.outputPath is not None,
|
79
|
+
)
|
80
|
+
|
81
|
+
@staticmethod
|
82
|
+
def from_testcases(testcases: List[Testcase]) -> List['StatementSample']:
|
83
|
+
return [StatementSample.from_testcase(testcase) for testcase in testcases]
|
84
|
+
|
85
|
+
|
86
|
+
class ExplainedStatementSample(StatementSample):
|
68
87
|
explanation: Optional[str] = None
|
69
88
|
|
70
89
|
|
@@ -72,7 +91,7 @@ class StatementSample(Testcase):
|
|
72
91
|
class StatementBuilderProblem(StatementBuilderItem):
|
73
92
|
package: Package
|
74
93
|
statement: Statement
|
75
|
-
samples: List[
|
94
|
+
samples: List[StatementSample] = dataclasses.field(default_factory=list)
|
76
95
|
short_name: Optional[str] = None
|
77
96
|
|
78
97
|
# Will only be filled by contests.
|
@@ -301,8 +320,8 @@ class rbxTeXBuilder(StatementBuilder):
|
|
301
320
|
problem_kwargs['problem']['blocks'] = blocks
|
302
321
|
if statement_blocks.explanations is not None:
|
303
322
|
problem_kwargs['problem']['samples'] = [
|
304
|
-
|
305
|
-
**typing.cast(
|
323
|
+
ExplainedStatementSample(
|
324
|
+
**typing.cast(StatementSample, sample).model_dump(),
|
306
325
|
explanation=statement_blocks.explanations.get(i),
|
307
326
|
)
|
308
327
|
for i, sample in enumerate(problem_kwargs['problem']['samples'])
|
rbx/utils.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import contextlib
|
2
2
|
import fcntl
|
3
|
+
import functools
|
3
4
|
import json
|
4
5
|
import os
|
5
6
|
import pathlib
|
@@ -98,6 +99,13 @@ def save_ruyaml(path: pathlib.Path, yml: ruyaml.YAML, data: ruyaml.Any):
|
|
98
99
|
yml.dump(data, f)
|
99
100
|
|
100
101
|
|
102
|
+
@functools.cache
|
103
|
+
def get_empty_sentinel_path() -> pathlib.Path:
|
104
|
+
path = get_app_path() / '.empty'
|
105
|
+
path.write_text('')
|
106
|
+
return path
|
107
|
+
|
108
|
+
|
101
109
|
@contextlib.contextmanager
|
102
110
|
def no_progress(status: Optional[rich.status.Status]):
|
103
111
|
if status:
|
@@ -5,11 +5,11 @@ rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
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=UFy7jOeTvxtIu9pdVUDv2-D6IW-beJGPC3uCanIKZh0,13412
|
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
|
12
|
-
rbx/box/contest/build_contest_statements.py,sha256=
|
12
|
+
rbx/box/contest/build_contest_statements.py,sha256=FjkO-TaT9YqkWySyQEaa69_ZwwyrsNvEBT5hE4qSFgk,11375
|
13
13
|
rbx/box/contest/contest_package.py,sha256=OaUbpBtkhkgOPzJ1ccI_Vq4FMSaJvZm3gMOKfVY8oy4,3032
|
14
14
|
rbx/box/contest/contest_utils.py,sha256=TDE7I6YQJlu4dQd68wzOp019bNgqiT0RlM-LMQMjL9w,301
|
15
15
|
rbx/box/contest/main.py,sha256=fFYeZn8KTLt9j-OFFkcBeQWw8RsTLUauFV6drM2hT48,7404
|
@@ -24,7 +24,7 @@ rbx/box/formatting.py,sha256=3phFRHzqVXj4Ok1yDhCq6Clbw6KlqwJNpMhs--oTWFI,405
|
|
24
24
|
rbx/box/generators.py,sha256=XJsWXNjtQXUDX2huAUsl-q7OWFyIPc42CyS557jLYxk,20594
|
25
25
|
rbx/box/generators_test.py,sha256=BqWf-A0u0ifZJZlvrMuOHOHQPfMox2Jy6540GmnTnkc,1753
|
26
26
|
rbx/box/main.py,sha256=9G21yVefrVLwM9NERozTe-w2xeEZROD2tDL82Gpc-AE,23722
|
27
|
-
rbx/box/package.py,sha256=
|
27
|
+
rbx/box/package.py,sha256=Z_voytvhDknhRKiLf1UsomvdRxlDxdXANNbUzL1HcD8,12042
|
28
28
|
rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
|
29
29
|
rbx/box/packaging/boca/packager.py,sha256=FOhSRg5K5Y4qNB0WyTR3DKgrpObf9I0JbyGpJHOtxpo,10673
|
30
30
|
rbx/box/packaging/contest_main.py,sha256=Hbxh7geNqrePs5tWhPgdg5W2qhaW5yoreK_VP0Sm19k,2727
|
@@ -45,8 +45,8 @@ rbx/box/solutions.py,sha256=oSlKeublgwSeaz_qt79d9OQqKuK6MINxa4kkiavutZo,43974
|
|
45
45
|
rbx/box/solutions_test.py,sha256=Cx7Goon_0sz_PaUcD8qa8gmjgzOVub6VHss3CB0GaA0,1524
|
46
46
|
rbx/box/state.py,sha256=yTpjfASpnSXkRB3JiDNvCg5b9JNnNxuYT4uMcbdr59s,109
|
47
47
|
rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
rbx/box/statements/build_statements.py,sha256=
|
49
|
-
rbx/box/statements/builders.py,sha256=
|
48
|
+
rbx/box/statements/build_statements.py,sha256=GyCI_aiQpWSqz_ihDq5XCYXVOiWFRLXqhOesSRlmU1E,12019
|
49
|
+
rbx/box/statements/builders.py,sha256=pKevMe3GwiXN_k0L2l155sY1rSLneSs0DLJ5T7WhxKQ,11152
|
50
50
|
rbx/box/statements/joiners.py,sha256=ZbxomnMjEFT8yf5WSWUB4tBa3DL3AhjGEuh8uqHyDdg,2837
|
51
51
|
rbx/box/statements/latex.py,sha256=LkcHwXjMFxbw--Gj9T1VkFKQFsXhY9dN7xZHpZycNW8,1346
|
52
52
|
rbx/box/statements/latex_jinja.py,sha256=7WBfn1h8DpqCAmSE6Av64HfURMnJ2AO4QX1CD72sz5E,7096
|
@@ -164,9 +164,9 @@ rbx/testdata/box1/wa.sol.cpp,sha256=qsHmvtLJOFI_sdvUT6ITqk7FJYqhrRTCmEIRdy4gSGE,
|
|
164
164
|
rbx/testdata/caching/executable.py,sha256=WKRHNf_fprFJd1Fq1ubmQtR3mZzTYVNwKPLWuZ4HrWg,10
|
165
165
|
rbx/testdata/compatible,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
166
166
|
rbx/testing_utils.py,sha256=ZZLKMUHlZ4HwsuNY50jqSBJ9HhpnFdba7opjDsvXE1U,2084
|
167
|
-
rbx/utils.py,sha256=
|
168
|
-
rbx_cp-0.5.
|
169
|
-
rbx_cp-0.5.
|
170
|
-
rbx_cp-0.5.
|
171
|
-
rbx_cp-0.5.
|
172
|
-
rbx_cp-0.5.
|
167
|
+
rbx/utils.py,sha256=AITbkWpWtSp-x3Xept_aObfj_jPL7XL0JJoz5-F9Fp8,4671
|
168
|
+
rbx_cp-0.5.34.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
169
|
+
rbx_cp-0.5.34.dist-info/METADATA,sha256=iLu8QtrjNShKSOL-kXyqAys7nYVTJDSKH6NY9EyZpJE,3263
|
170
|
+
rbx_cp-0.5.34.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
171
|
+
rbx_cp-0.5.34.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
|
172
|
+
rbx_cp-0.5.34.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|