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
strategy:
matrix:
python-version: ["3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,7 @@
import math
import re
from decimal import Decimal, InvalidOperation
from enum import Enum
from fractions import Fraction
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)
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()