support python 3.10 (#450)

* support python 3.10

* add 3.10 to tests

* new StrEnum
This commit is contained in:
Oliver Stanley
2025-06-04 10:34:01 +01:00
committed by GitHub
parent 84958baa69
commit 1a727ecf4e
12 changed files with 49 additions and 12 deletions

View File

@@ -15,7 +15,7 @@ jobs:
pull-requests: write pull-requests: write
strategy: strategy:
matrix: matrix:
python-version: ["3.11", "3.12"] python-version: ["3.10", "3.11", "3.12"]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4

View File

@@ -10,7 +10,7 @@ authors = [
] ]
description = "A library of procedural dataset generators for training reasoning models" description = "A library of procedural dataset generators for training reasoning models"
readme = "README.md" readme = "README.md"
requires-python = ">=3.11" requires-python = ">=3.10"
dependencies = [ dependencies = [
"bfi==1.0.4", "bfi==1.0.4",
"cellpylib==2.4.0", "cellpylib==2.4.0",

View File

@@ -2,13 +2,13 @@
import re import re
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum
from random import Random from random import Random
from typing import Any, Optional from typing import Any, Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition from ..coaching import BaseCurriculum, RangeAttributeDefinition
from ..data import read_data_file from ..data import read_data_file
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
class TextTransformation(StrEnum): class TextTransformation(StrEnum):

View File

@@ -3,11 +3,12 @@ import math
import random import random
from dataclasses import dataclass from dataclasses import dataclass
from datetime import date, timedelta from datetime import date, timedelta
from enum import Enum, StrEnum, auto from enum import Enum, auto
from typing import Any, Optional from typing import Any, Optional
from ..coaching import BaseCurriculum, ScalarAttributeDefinition from ..coaching import BaseCurriculum, ScalarAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "calendar_arithmetic" DATASET_NAME = "calendar_arithmetic"

View File

@@ -1,8 +1,8 @@
import abc import abc
from collections.abc import Iterable from collections.abc import Iterable
from enum import StrEnum
from typing import Any, Optional, TypeVar from typing import Any, Optional, TypeVar
from ..utils import StrEnum
from .attributes import AttributeDefinition, RangeAttributeDefinition, ScalarAttributeDefinition from .attributes import AttributeDefinition, RangeAttributeDefinition, ScalarAttributeDefinition
ConfigT = TypeVar("ConfigT") ConfigT = TypeVar("ConfigT")

View File

@@ -1,10 +1,10 @@
import random import random
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum
from typing import Any, Optional from typing import Any, Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition from ..coaching import BaseCurriculum, RangeAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
class Color(StrEnum): class Color(StrEnum):

View File

@@ -1,10 +1,10 @@
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum
from random import Random from random import Random
from typing import Optional from typing import Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition, ScalarAttributeDefinition from ..coaching import BaseCurriculum, RangeAttributeDefinition, ScalarAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "number_sequence" DATASET_NAME = "number_sequence"

View File

@@ -1,11 +1,11 @@
import random import random
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import StrEnum
from itertools import count from itertools import count
from typing import Any, Optional from typing import Any, Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition from ..coaching import BaseCurriculum, RangeAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "family_relationships" DATASET_NAME = "family_relationships"

View File

@@ -1,11 +1,11 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import StrEnum
from random import Random from random import Random
from string import Template from string import Template
from typing import Optional from typing import Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition, ScalarAttributeDefinition from ..coaching import BaseCurriculum, ScalarAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "aiw" DATASET_NAME = "aiw"

View File

@@ -2,12 +2,12 @@
import re import re
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum
from random import Random from random import Random
from typing import Any, Optional from typing import Any, Optional
from ..coaching import BaseCurriculum, RangeAttributeDefinition from ..coaching import BaseCurriculum, RangeAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "propositional_logic" DATASET_NAME = "propositional_logic"

View File

@@ -1,12 +1,12 @@
"""Syllogism reasoning task generator""" """Syllogism reasoning task generator"""
from dataclasses import dataclass from dataclasses import dataclass
from enum import StrEnum
from random import Random from random import Random
from typing import Optional from typing import Optional
from ..coaching import BaseCurriculum, ScalarAttributeDefinition from ..coaching import BaseCurriculum, ScalarAttributeDefinition
from ..factory import ProceduralDataset, register_dataset from ..factory import ProceduralDataset, register_dataset
from ..utils import StrEnum
DATASET_NAME = "syllogism" DATASET_NAME = "syllogism"

View File

@@ -1,6 +1,7 @@
import math import math
import re import re
from decimal import Decimal, InvalidOperation from decimal import Decimal, InvalidOperation
from enum import Enum
from fractions import Fraction from fractions import Fraction
from typing import Any, Optional, Union from typing import Any, Optional, Union
@@ -117,3 +118,38 @@ def compute_decimal_reward(answer: Optional[str], oracle_answer: str, strip_comm
reward = len(oracle_answer) / len(answer) reward = len(oracle_answer) / len(answer)
return reward return reward
class StrEnum(str, Enum):
"""
Taken from Python 3.11 StrEnum implementation, moved here to support Python 3.10.
Enum where members are also (and must be) strings
"""
def __new__(cls, *values):
"values must already be of type `str`"
if len(values) > 3:
raise TypeError("too many arguments for str(): %r" % (values,))
if len(values) == 1:
# it must be a string
if not isinstance(values[0], str):
raise TypeError("%r is not a string" % (values[0],))
if len(values) >= 2:
# check that encoding argument is a string
if not isinstance(values[1], str):
raise TypeError("encoding must be a string, not %r" % (values[1],))
if len(values) == 3:
# check that errors argument is a string
if not isinstance(values[2], str):
raise TypeError("errors must be a string, not %r" % (values[2]))
value = str(*values)
member = str.__new__(cls, value)
member._value_ = value
return member
@staticmethod
def _generate_next_value_(name, start, count, last_values):
"""
Return the lower-cased version of the member name.
"""
return name.lower()