From e576d0b5dfccf4cf9aa52b1d2fc9379efded5496 Mon Sep 17 00:00:00 2001 From: Arjun Guha Date: Sun, 4 Jan 2026 20:19:31 -0500 Subject: [PATCH 1/2] Fixes #66 (Perl-only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - revert the boolean-assert routing change in the shared translator\n- treat Perl boolean-false literals as a dedicated false expression and assert via Perl truthiness\n\n✨ Made with Codex --- dataset_builder/generic_translator.py | 30 +++++++-------------------- dataset_builder/humaneval_to_pl.py | 15 +++++++++++++- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/dataset_builder/generic_translator.py b/dataset_builder/generic_translator.py index 324faee6ea..a4d4121e8d 100644 --- a/dataset_builder/generic_translator.py +++ b/dataset_builder/generic_translator.py @@ -216,7 +216,6 @@ def check(): return None prefix_lines = translator.test_suite_prefix_lines(entry_point) test_cases = prefix_lines.copy() - seen_tests = {} match tests_ast: case ast.Module(body=[ast.FunctionDef(body=body)]): body_ast = body @@ -236,14 +235,6 @@ def check(): if hasattr(translator, "finalize"): left = translator.finalize(left, "lhs") right = translator.finalize(right, "rhs") - if left in seen_tests and seen_tests[left] != right: - print( - f"Conflicting tests for {filename}: {left} == {seen_tests[left]} vs {right}" - ) - if panic_on_test_fail: - return None - continue - seen_tests.setdefault(left, right) test_cases.append(translator.deep_equality(left, right)) except Exception as e: print( @@ -305,20 +296,13 @@ def translate_terms(language, fields, prompt): language = "go" target_dict = lang_dict[language] for f in fields: - if target_dict[f] != 'Q': - variants = [f] - lower_variant = f.lower() - if lower_variant != f: - variants.append(lower_variant) - article = "an" if vowel(target_dict[f][0]) else "a" - for variant in variants: - if variant in prompt: - prompt = re.sub( - rf"\b(a|an)\s+{re.escape(variant)}\b", - f"{article} {target_dict[f]}", - prompt, - ) - prompt = re.sub(rf"\b{re.escape(variant)}\b", target_dict[f], prompt) + if f in prompt and target_dict[f] != 'Q': + if 'an '+f in prompt and consonant(target_dict[f][0]): + prompt = prompt.replace('an '+f, 'a '+target_dict[f]) + elif 'a '+f in prompt and vowel(target_dict[f][0]): + prompt = prompt.replace('a '+f, 'an '+target_dict[f]) + # can't be an else: need to catch 2nd occurences of term that don't have article + prompt = prompt.replace(f, target_dict[f]) return prompt diff --git a/dataset_builder/humaneval_to_pl.py b/dataset_builder/humaneval_to_pl.py index c98e872e7a..9224d361a2 100644 --- a/dataset_builder/humaneval_to_pl.py +++ b/dataset_builder/humaneval_to_pl.py @@ -46,7 +46,20 @@ def deep_equality(self, left: str, right: str) -> str: == is the wrong operator for Java and OCaml. """ arr_prefix = f" " + " ".join(array_list) + if right == "0+0": + return ( + arr_prefix + + f" my $got = {left};\n" + + " if(!$got) " + + "{\n print \"ok!\" }else{\n exit 1;\n }" + ) return arr_prefix+f" if(eq_deeply({left},{right})) "+"{\n print \"ok!\" }else{\n exit 1;\n }" + return ( + arr_prefix + + f" my $got = {left};\n" + + f" if({condition}) " + + "{\n print \"ok!\" }else{\n exit 1;\n }" + ) def gen_literal(self, c: bool | str | int | float): """Translate a literal expression @@ -55,7 +68,7 @@ def gen_literal(self, c: bool | str | int | float): if c is True: return 1 elif c is False: - return "\"\"" + return "0+0" elif type(c) == str: return f'"{c}"' elif c is None: From 4f4507879cb36f0b4b74b4766de5e06f096aac3b Mon Sep 17 00:00:00 2001 From: Arjun Guha Date: Sun, 4 Jan 2026 20:34:59 -0500 Subject: [PATCH 2/2] Fixes #66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - revert generic translator changes so only the Perl translator handles false comparisons\n- keep Perl-specific boolean handling unchanged\n\n✨ Made with Codex --- dataset_builder/generic_translator.py | 30 ++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/dataset_builder/generic_translator.py b/dataset_builder/generic_translator.py index a4d4121e8d..324faee6ea 100644 --- a/dataset_builder/generic_translator.py +++ b/dataset_builder/generic_translator.py @@ -216,6 +216,7 @@ def check(): return None prefix_lines = translator.test_suite_prefix_lines(entry_point) test_cases = prefix_lines.copy() + seen_tests = {} match tests_ast: case ast.Module(body=[ast.FunctionDef(body=body)]): body_ast = body @@ -235,6 +236,14 @@ def check(): if hasattr(translator, "finalize"): left = translator.finalize(left, "lhs") right = translator.finalize(right, "rhs") + if left in seen_tests and seen_tests[left] != right: + print( + f"Conflicting tests for {filename}: {left} == {seen_tests[left]} vs {right}" + ) + if panic_on_test_fail: + return None + continue + seen_tests.setdefault(left, right) test_cases.append(translator.deep_equality(left, right)) except Exception as e: print( @@ -296,13 +305,20 @@ def translate_terms(language, fields, prompt): language = "go" target_dict = lang_dict[language] for f in fields: - if f in prompt and target_dict[f] != 'Q': - if 'an '+f in prompt and consonant(target_dict[f][0]): - prompt = prompt.replace('an '+f, 'a '+target_dict[f]) - elif 'a '+f in prompt and vowel(target_dict[f][0]): - prompt = prompt.replace('a '+f, 'an '+target_dict[f]) - # can't be an else: need to catch 2nd occurences of term that don't have article - prompt = prompt.replace(f, target_dict[f]) + if target_dict[f] != 'Q': + variants = [f] + lower_variant = f.lower() + if lower_variant != f: + variants.append(lower_variant) + article = "an" if vowel(target_dict[f][0]) else "a" + for variant in variants: + if variant in prompt: + prompt = re.sub( + rf"\b(a|an)\s+{re.escape(variant)}\b", + f"{article} {target_dict[f]}", + prompt, + ) + prompt = re.sub(rf"\b{re.escape(variant)}\b", target_dict[f], prompt) return prompt