From 54b53df8b9d691c486efc8190fa3a7e7f283646a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Sat, 30 Nov 2024 23:10:36 +0100 Subject: [PATCH 1/4] Update LanguageAlias --- src/judge0/base_types.py | 72 +++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/src/judge0/base_types.py b/src/judge0/base_types.py index 05a7a64..581c2bc 100644 --- a/src/judge0/base_types.py +++ b/src/judge0/base_types.py @@ -1,7 +1,7 @@ import copy from dataclasses import dataclass -from enum import IntEnum +from enum import IntEnum, auto from typing import Optional, Protocol, runtime_checkable, Sequence, Union from pydantic import BaseModel @@ -59,13 +59,69 @@ class Language(BaseModel): class LanguageAlias(IntEnum): """Language enumeration.""" - - PYTHON = 0 - CPP = 1 - JAVA = 2 - CPP_GCC = 3 - CPP_CLANG = 4 - PYTHON_FOR_ML = 5 + ASSEMBLY = auto() + BASH = auto() + BASIC = auto() + BOSQUE = auto() + C = auto() + C3 = auto() + CLOJURE = auto() + COBOL = auto() + COMMON_LISP = auto() + CPP = auto() + CPP_CLANG = auto() + CPP_GCC = auto() + CPP_TEST = auto() + CSHARP = auto() + CSHARP_MONO = auto() + CSHARP_NET_CORE = auto() + CSHARP_TEST = auto() + C_CLANG = auto() + C_GCC = auto() + D = auto() + DART = auto() + ELIXIR = auto() + ERLANG = auto() + EXECUTABLE = auto() + FORTRAN = auto() + FSHARP = auto() + GO = auto() + GROOVY = auto() + HASKELL = auto() + JAVA = auto() + JAVAFX = auto() + JAVASCRIPT = auto() + JAVA_OPENJDK = auto() + JAVA_TEST = auto() + KOTLIN = auto() + LUA = auto() + MPI_C = auto() + MPI_CPP = auto() + MPI_PYTHON = auto() + MULTI_FILE = auto() + NIM = auto() + OBJECTIVE_C = auto() + OCAML = auto() + OCTAVE = auto() + PASCAL = auto() + PERL = auto() + PHP = auto() + PLAIN_TEXT = auto() + PYTHON = auto() + PYTHON2 = auto() + PYTHON2_PYPY = auto() + PYTHON3 = auto() + PYTHON3_PYPY = auto() + PYTHON_FOR_ML = auto() + PYTHON_PYPY = auto() + R = auto() + RUBY = auto() + RUST = auto() + SCALA = auto() + SQLITE = auto() + SWIFT = auto() + TYPESCRIPT = auto() + VISUAL_BASIC = auto() class Flavor(IntEnum): From 889fc6e85735ecc520c77c5c2b03e3d6e212e236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 09:05:04 +0100 Subject: [PATCH 2/4] Add more LanguageAlias --- src/judge0/base_types.py | 6 +- src/judge0/data.py | 156 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 150 insertions(+), 12 deletions(-) diff --git a/src/judge0/base_types.py b/src/judge0/base_types.py index 581c2bc..8b892ba 100644 --- a/src/judge0/base_types.py +++ b/src/judge0/base_types.py @@ -72,9 +72,11 @@ class LanguageAlias(IntEnum): CPP_CLANG = auto() CPP_GCC = auto() CPP_TEST = auto() + CPP_TEST_CLANG = auto() + CPP_TEST_GCC = auto() CSHARP = auto() + CSHARP_DOTNET = auto() CSHARP_MONO = auto() - CSHARP_NET_CORE = auto() CSHARP_TEST = auto() C_CLANG = auto() C_GCC = auto() @@ -91,6 +93,7 @@ class LanguageAlias(IntEnum): JAVA = auto() JAVAFX = auto() JAVASCRIPT = auto() + JAVA_JDK = auto() JAVA_OPENJDK = auto() JAVA_TEST = auto() KOTLIN = auto() @@ -107,6 +110,7 @@ class LanguageAlias(IntEnum): PERL = auto() PHP = auto() PLAIN_TEXT = auto() + PROLOG = auto() PYTHON = auto() PYTHON2 = auto() PYTHON2_PYPY = auto() diff --git a/src/judge0/data.py b/src/judge0/data.py index 1e759c2..39ad1b3 100644 --- a/src/judge0/data.py +++ b/src/judge0/data.py @@ -2,31 +2,165 @@ LANGUAGE_TO_LANGUAGE_ID = { "1.13.1": { - LanguageAlias.PYTHON: 71, - LanguageAlias.CPP: 54, - LanguageAlias.JAVA: 62, - LanguageAlias.CPP_GCC: 54, + LanguageAlias.ASSEMBLY: 45, + LanguageAlias.BASH: 46, + LanguageAlias.BASIC: 47, + LanguageAlias.C: 50, + LanguageAlias.CLOJURE: 86, + LanguageAlias.COBOL: 77, + LanguageAlias.COMMON_LISP: 55, + LanguageAlias.CPP: 52, LanguageAlias.CPP_CLANG: 76, + LanguageAlias.CPP_GCC: 52, + LanguageAlias.CSHARP: 51, + LanguageAlias.CSHARP_MONO: 51, + LanguageAlias.C_CLANG: 75, + LanguageAlias.C_GCC: 50, + LanguageAlias.D: 56, + LanguageAlias.ELIXIR: 57, + LanguageAlias.ERLANG: 58, + LanguageAlias.EXECUTABLE: 44, + LanguageAlias.FORTRAN: 59, + LanguageAlias.FSHARP: 87, + LanguageAlias.GO: 60, + LanguageAlias.GROOVY: 88, + LanguageAlias.HASKELL: 61, + LanguageAlias.JAVA: 62, + LanguageAlias.JAVASCRIPT: 63, + LanguageAlias.JAVA_OPENJDK: 62, + LanguageAlias.KOTLIN: 78, + LanguageAlias.LUA: 64, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.OBJECTIVE_C: 79, + LanguageAlias.OCAML: 65, + LanguageAlias.OCTAVE: 66, + LanguageAlias.PASCAL: 67, + LanguageAlias.PERL: 85, + LanguageAlias.PHP: 68, + LanguageAlias.PLAIN_TEXT: 43, + LanguageAlias.PROLOG: 69, + LanguageAlias.PYTHON: 71, + LanguageAlias.PYTHON2: 70, + LanguageAlias.PYTHON3: 71, + LanguageAlias.R: 80, + LanguageAlias.RUBY: 72, + LanguageAlias.RUST: 73, + LanguageAlias.SCALA: 81, + LanguageAlias.SQLITE: 82, + LanguageAlias.SWIFT: 83, + LanguageAlias.TYPESCRIPT: 74, + LanguageAlias.VISUAL_BASIC: 84, }, "1.13.1-extra": { - LanguageAlias.PYTHON: 10, + LanguageAlias.BOSQUE: 11, + LanguageAlias.C: 1, + LanguageAlias.C3: 3, LanguageAlias.CPP: 2, - LanguageAlias.JAVA: 4, LanguageAlias.CPP_CLANG: 2, + LanguageAlias.CPP_TEST: 12, + LanguageAlias.CPP_TEST_CLANG: 15, + LanguageAlias.CPP_TEST_GCC: 12, + LanguageAlias.CSHARP: 22, + LanguageAlias.CSHARP_MONO: 22, + LanguageAlias.CSHARP_DOTNET: 21, + LanguageAlias.CSHARP_TEST: 23, + LanguageAlias.C_CLANG: 1, + LanguageAlias.FSHARP: 24, + LanguageAlias.JAVA: 4, + LanguageAlias.JAVA_OPENJDK: 4, + LanguageAlias.JAVA_TEST: 5, + LanguageAlias.MPI_C: 6, + LanguageAlias.MPI_CPP: 7, + LanguageAlias.MPI_PYTHON: 8, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.NIM: 9, + LanguageAlias.PYTHON: 10, + LanguageAlias.PYTHON3: 10, LanguageAlias.PYTHON_FOR_ML: 10, + LanguageAlias.VISUAL_BASIC: 20, }, "1.14.0": { - LanguageAlias.PYTHON: 100, + LanguageAlias.ASSEMBLY: 45, + LanguageAlias.BASH: 46, + LanguageAlias.BASIC: 47, + LanguageAlias.C: 103, + LanguageAlias.CLOJURE: 86, + LanguageAlias.COBOL: 77, + LanguageAlias.COMMON_LISP: 55, LanguageAlias.CPP: 105, - LanguageAlias.JAVA: 91, - LanguageAlias.CPP_GCC: 105, LanguageAlias.CPP_CLANG: 76, + LanguageAlias.CPP_GCC: 105, + LanguageAlias.CSHARP: 51, + LanguageAlias.CSHARP_MONO: 51, + LanguageAlias.C_CLANG: 104, + LanguageAlias.C_GCC: 103, + LanguageAlias.D: 56, + LanguageAlias.DART: 90, + LanguageAlias.ELIXIR: 57, + LanguageAlias.ERLANG: 58, + LanguageAlias.EXECUTABLE: 44, + LanguageAlias.FORTRAN: 59, + LanguageAlias.FSHARP: 87, + LanguageAlias.GO: 95, + LanguageAlias.GROOVY: 88, + LanguageAlias.HASKELL: 61, + LanguageAlias.JAVA: 62, + LanguageAlias.JAVAFX: 96, + LanguageAlias.JAVASCRIPT: 102, + LanguageAlias.JAVA_JDK: 91, + LanguageAlias.JAVA_OPENJDK: 62, + LanguageAlias.KOTLIN: 78, + LanguageAlias.LUA: 64, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.OBJECTIVE_C: 79, + LanguageAlias.OCAML: 65, + LanguageAlias.OCTAVE: 66, + LanguageAlias.PASCAL: 67, + LanguageAlias.PERL: 85, + LanguageAlias.PHP: 98, + LanguageAlias.PLAIN_TEXT: 43, + LanguageAlias.PROLOG: 69, + LanguageAlias.PYTHON: 100, + LanguageAlias.PYTHON2: 70, + LanguageAlias.PYTHON3: 100, + LanguageAlias.R: 99, + LanguageAlias.RUBY: 72, + LanguageAlias.RUST: 73, + LanguageAlias.SCALA: 81, + LanguageAlias.SQLITE: 82, + LanguageAlias.SWIFT: 83, + LanguageAlias.TYPESCRIPT: 101, + LanguageAlias.VISUAL_BASIC: 84, }, "1.14.0-extra": { - LanguageAlias.PYTHON: 25, + LanguageAlias.BOSQUE: 11, + LanguageAlias.C: 1, + LanguageAlias.C3: 3, LanguageAlias.CPP: 2, - LanguageAlias.JAVA: 4, LanguageAlias.CPP_CLANG: 2, + LanguageAlias.CPP_TEST: 12, + LanguageAlias.CPP_TEST_CLANG: 15, + LanguageAlias.CPP_TEST_GCC: 12, + LanguageAlias.CSHARP: 29, + LanguageAlias.CSHARP_MONO: 22, + LanguageAlias.CSHARP_DOTNET: 29, + LanguageAlias.CSHARP_TEST: 23, + LanguageAlias.C_CLANG: 1, + LanguageAlias.FSHARP: 24, + LanguageAlias.JAVA: 4, + LanguageAlias.JAVA_OPENJDK: 4, + LanguageAlias.JAVA_TEST: 5, + LanguageAlias.MPI_C: 6, + LanguageAlias.MPI_CPP: 7, + LanguageAlias.MPI_PYTHON: 8, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.NIM: 9, + LanguageAlias.PYTHON: 25, + LanguageAlias.PYTHON2: 26, + LanguageAlias.PYTHON2_PYPY: 26, + LanguageAlias.PYTHON3: 25, + LanguageAlias.PYTHON3_PYPY: 28, LanguageAlias.PYTHON_FOR_ML: 25, + LanguageAlias.VISUAL_BASIC: 20, }, } From 4502d3cd4ae28e346b2eb75d72b2c211a717f3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 09:07:01 +0100 Subject: [PATCH 3/4] Update __init__.py --- src/judge0/__init__.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/judge0/__init__.py b/src/judge0/__init__.py index 5ccf40b..66dfd90 100644 --- a/src/judge0/__init__.py +++ b/src/judge0/__init__.py @@ -113,11 +113,8 @@ def _get_implicit_client(flavor: Flavor) -> Client: CE = Flavor.CE EXTRA_CE = Flavor.EXTRA_CE -# TODO: Let's use getattr and setattr for this language ALIASES and raise an -# exception if a value already exists. -PYTHON = LanguageAlias.PYTHON -CPP = LanguageAlias.CPP -JAVA = LanguageAlias.JAVA -CPP_GCC = LanguageAlias.CPP_GCC -CPP_CLANG = LanguageAlias.CPP_CLANG -PYTHON_FOR_ML = LanguageAlias.PYTHON_FOR_ML +for lang in LanguageAlias: + if lang.name in globals(): + raise ValueError(f"Language alias {lang.name} already exists in globals.") + globals()[lang.name] = lang + __all__.append(lang.name) From 2c7db89caf6d861b37192402ff8dd7d4335949bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 10:05:31 +0100 Subject: [PATCH 4/4] Revert back to explicit assignment of language aliases. --- pyproject.toml | 12 ++++++- src/judge0/__init__.py | 72 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3568054..257ab80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,5 +49,15 @@ docs = ["sphinx==7.4.7"] [tool.flake8] docstring-convention = "numpy" -extend-ignore = ["D205", "D400", "D105", "D100", "D101", "D102", "D103", "F821"] +extend-ignore = [ + 'D100', + 'D101', + 'D102', + 'D103', + 'D104', + 'D105', + 'D205', + 'D400', + 'F821', +] max-line-length = 88 diff --git a/src/judge0/__init__.py b/src/judge0/__init__.py index 66dfd90..df0f78a 100644 --- a/src/judge0/__init__.py +++ b/src/judge0/__init__.py @@ -113,8 +113,70 @@ def _get_implicit_client(flavor: Flavor) -> Client: CE = Flavor.CE EXTRA_CE = Flavor.EXTRA_CE -for lang in LanguageAlias: - if lang.name in globals(): - raise ValueError(f"Language alias {lang.name} already exists in globals.") - globals()[lang.name] = lang - __all__.append(lang.name) +ASSEMBLY = LanguageAlias.ASSEMBLY +BASH = LanguageAlias.BASH +BASIC = LanguageAlias.BASIC +BOSQUE = LanguageAlias.BOSQUE +C = LanguageAlias.C +C3 = LanguageAlias.C3 +CLOJURE = LanguageAlias.CLOJURE +COBOL = LanguageAlias.COBOL +COMMON_LISP = LanguageAlias.COMMON_LISP +CPP = LanguageAlias.CPP +CPP_CLANG = LanguageAlias.CPP_CLANG +CPP_GCC = LanguageAlias.CPP_GCC +CPP_TEST = LanguageAlias.CPP_TEST +CPP_TEST_CLANG = LanguageAlias.CPP_TEST_CLANG +CPP_TEST_GCC = LanguageAlias.CPP_TEST_GCC +CSHARP = LanguageAlias.CSHARP +CSHARP_DOTNET = LanguageAlias.CSHARP_DOTNET +CSHARP_MONO = LanguageAlias.CSHARP_MONO +CSHARP_TEST = LanguageAlias.CSHARP_TEST +C_CLANG = LanguageAlias.C_CLANG +C_GCC = LanguageAlias.C_GCC +D = LanguageAlias.D +DART = LanguageAlias.DART +ELIXIR = LanguageAlias.ELIXIR +ERLANG = LanguageAlias.ERLANG +EXECUTABLE = LanguageAlias.EXECUTABLE +FORTRAN = LanguageAlias.FORTRAN +FSHARP = LanguageAlias.FSHARP +GO = LanguageAlias.GO +GROOVY = LanguageAlias.GROOVY +HASKELL = LanguageAlias.HASKELL +JAVA = LanguageAlias.JAVA +JAVAFX = LanguageAlias.JAVAFX +JAVASCRIPT = LanguageAlias.JAVASCRIPT +JAVA_JDK = LanguageAlias.JAVA_JDK +JAVA_OPENJDK = LanguageAlias.JAVA_OPENJDK +JAVA_TEST = LanguageAlias.JAVA_TEST +KOTLIN = LanguageAlias.KOTLIN +LUA = LanguageAlias.LUA +MPI_C = LanguageAlias.MPI_C +MPI_CPP = LanguageAlias.MPI_CPP +MPI_PYTHON = LanguageAlias.MPI_PYTHON +MULTI_FILE = LanguageAlias.MULTI_FILE +NIM = LanguageAlias.NIM +OBJECTIVE_C = LanguageAlias.OBJECTIVE_C +OCAML = LanguageAlias.OCAML +OCTAVE = LanguageAlias.OCTAVE +PASCAL = LanguageAlias.PASCAL +PERL = LanguageAlias.PERL +PHP = LanguageAlias.PHP +PLAIN_TEXT = LanguageAlias.PLAIN_TEXT +PROLOG = LanguageAlias.PROLOG +PYTHON = LanguageAlias.PYTHON +PYTHON2 = LanguageAlias.PYTHON2 +PYTHON2_PYPY = LanguageAlias.PYTHON2_PYPY +PYTHON3 = LanguageAlias.PYTHON3 +PYTHON3_PYPY = LanguageAlias.PYTHON3_PYPY +PYTHON_FOR_ML = LanguageAlias.PYTHON_FOR_ML +PYTHON_PYPY = LanguageAlias.PYTHON_PYPY +R = LanguageAlias.R +RUBY = LanguageAlias.RUBY +RUST = LanguageAlias.RUST +SCALA = LanguageAlias.SCALA +SQLITE = LanguageAlias.SQLITE +SWIFT = LanguageAlias.SWIFT +TYPESCRIPT = LanguageAlias.TYPESCRIPT +VISUAL_BASIC = LanguageAlias.VISUAL_BASIC