Coverage for src / competitive_verifier / oj / languages / __init__.py: 100%
48 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-06-05 08:59 +0900
« prev ^ index » next coverage.py v7.13.1, created at 2026-06-05 08:59 +0900
1import importlib
2import sys
3from collections.abc import Callable
4from typing import Any, BinaryIO, Protocol, cast
6from pydantic import BaseModel, ConfigDict, Field
8from .base import (
9 Language,
10 LanguageEnvironment,
11 OjVerifyLanguageConfig,
12 OjVerifyUserDefinedConfig,
13)
14from .cplusplus import (
15 CPlusPlusLanguage,
16 OjVerifyCPlusPlusConfig,
17)
18from .go import GoLanguage, OjVerifyGoConfig
19from .haskell import (
20 HaskellLanguage,
21 OjVerifyHaskellConfig,
22)
23from .java import (
24 JavaLanguage,
25 OjVerifyJavaConfig,
26)
27from .nim import NimLanguage, OjVerifyNimConfig
28from .python import PythonLanguage
29from .ruby import (
30 OjVerifyRubyConfig,
31 RubyLanguage,
32)
33from .rust import (
34 OjVerifyRustConfig,
35 OjVerifyRustListDependenciesBackend,
36 RustLanguage,
37)
38from .user_defined import UserDefinedLanguage
41class _TomlModule(Protocol):
42 def load(
43 self, fp: BinaryIO, /, *, parse_float: Callable[[str], Any] = float
44 ) -> dict[str, Any]: ...
47if sys.version_info >= (3, 11): # pragma: no cover
48 import tomllib
50 _tomli = cast("_TomlModule", tomllib)
51else: # pragma: no cover
52 _tomli = cast("_TomlModule", importlib.import_module("tomli"))
55class OjVerifyLanguageConfigDict(BaseModel):
56 model_config = ConfigDict(extra="allow")
57 __pydantic_extra__: dict[str, OjVerifyUserDefinedConfig] = Field( # pyright: ignore[reportIncompatibleVariableOverride]
58 default_factory=dict[str, OjVerifyUserDefinedConfig]
59 )
61 cpp: OjVerifyCPlusPlusConfig = Field(default_factory=OjVerifyCPlusPlusConfig)
62 go: OjVerifyGoConfig = Field(default_factory=OjVerifyGoConfig)
63 haskell: OjVerifyHaskellConfig = Field(default_factory=OjVerifyHaskellConfig)
64 java: OjVerifyJavaConfig = Field(default_factory=OjVerifyJavaConfig)
65 nim: OjVerifyNimConfig = Field(default_factory=OjVerifyNimConfig)
66 ruby: OjVerifyRubyConfig = Field(default_factory=OjVerifyRubyConfig)
67 rust: OjVerifyRustConfig = Field(default_factory=OjVerifyRustConfig)
70class VerificationConfig(BaseModel):
71 languages: OjVerifyLanguageConfigDict = Field(
72 default_factory=OjVerifyLanguageConfigDict,
73 )
75 @classmethod
76 def load(cls, fp: BinaryIO) -> "VerificationConfig":
77 return VerificationConfig.model_validate(_tomli.load(fp))
79 def get_dict(self) -> dict[str, Language]:
80 languages = self.languages
81 d: dict[str, Language] = {}
82 d[".cpp"] = CPlusPlusLanguage(config=languages.cpp)
83 d[".hpp"] = d[".cpp"]
84 d[".cc"] = d[".cpp"]
85 d[".h"] = d[".cpp"]
86 d[".nim"] = NimLanguage(config=languages.nim)
87 d[".py"] = PythonLanguage()
88 d[".hs"] = HaskellLanguage(config=languages.haskell)
89 d[".ruby"] = RubyLanguage(config=languages.ruby)
90 d[".go"] = GoLanguage(config=languages.go)
91 d[".java"] = JavaLanguage(config=languages.java)
92 d[".rs"] = RustLanguage(config=languages.rust)
94 for ext, lang_config in languages.__pydantic_extra__.items():
95 d["." + ext] = UserDefinedLanguage(extension=ext, config=lang_config)
97 return d
100__all__ = [
101 "CPlusPlusLanguage",
102 "GoLanguage",
103 "HaskellLanguage",
104 "JavaLanguage",
105 "Language",
106 "LanguageEnvironment",
107 "NimLanguage",
108 "OjVerifyCPlusPlusConfig",
109 "OjVerifyGoConfig",
110 "OjVerifyHaskellConfig",
111 "OjVerifyJavaConfig",
112 "OjVerifyLanguageConfig",
113 "OjVerifyNimConfig",
114 "OjVerifyRubyConfig",
115 "OjVerifyRustConfig",
116 "OjVerifyRustListDependenciesBackend",
117 "OjVerifyUserDefinedConfig",
118 "PythonLanguage",
119 "RubyLanguage",
120 "RustLanguage",
121 "UserDefinedLanguage",
122 "VerificationConfig",
123]