Skip to content

Commit

Permalink
Finished iterate of metahandlers
Browse files Browse the repository at this point in the history
  • Loading branch information
alcides committed Nov 2, 2024
1 parent 0fd3f33 commit 56bb331
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 34 deletions.
4 changes: 0 additions & 4 deletions docs/source/metahandlers/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ Here are a few MetaHandlers provided by GeneticEngine
.. autoapiclass:: geneticengine.grammar.metahandlers.floats.FloatRange
```

```{eval-rst}
.. autoapiclass:: geneticengine.grammar.metahandlers.floats.FloatList
```

#### Lists

```{eval-rst}
Expand Down
35 changes: 7 additions & 28 deletions geneticengine/grammar/metahandlers/floats.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any, Callable, TypeVar
from typing import Any, Callable, Generator, TypeVar

from geneticengine.grammar.grammar import Grammar
from geneticengine.random.sources import RandomSource
Expand Down Expand Up @@ -46,33 +46,12 @@ def __class_getitem__(cls, args):
def __repr__(self):
return f"[{self.min},{self.max}]"


class FloatList(MetaHandlerGenerator):
"""FloatList([a_1, .., a_n]) restricts floats to be an element from the
list [a_1, .., a_n].
The range can be dynamically altered before the grammar extraction
Float.__init__.__annotations__["value"] = Annotated[float, FloatList[a_1, .., a_n]]
"""

def __init__(self, elements):
self.elements = elements

def generate(
def iterate(
self,
random: RandomSource,
grammar: Grammar,
base_type: type,
rec: Callable[[type[T]], T],
dependent_values: dict[str, Any],
combine_lists: Callable[[list[type]], Generator[Any, Any, Any]],
):
return random.choice(self.elements)

def __class_getitem__(cls, args):
return FloatList(*args)

def __repr__(self):
return f"[{self.elements}]"

def validate(self, v) -> bool:
return v in self.elements
v = self.min
while v <= self.max:
yield v
v += 0.0001

Check warning on line 57 in geneticengine/grammar/metahandlers/floats.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/floats.py#L54-L57

Added lines #L54 - L57 were not covered by tests
24 changes: 23 additions & 1 deletion geneticengine/grammar/metahandlers/strings.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from __future__ import annotations
import copy
import itertools
import string
from typing import Any, Callable, TypeVar
from typing import Any, Callable, Generator, TypeVar

from geneticengine.grammar.grammar import Grammar
from geneticengine.random.sources import RandomSource
Expand Down Expand Up @@ -92,6 +93,17 @@ def __class_getitem__(cls, args):
def __repr__(self):
return f"StringSizeBetween[{self.min}...{self.max}]"

def iterate(
self,
base_type: type,
combine_lists: Callable[[list[type]], Generator[Any, Any, Any]],
):
def generate_letter():
yield from self.options

Check warning on line 102 in geneticengine/grammar/metahandlers/strings.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/strings.py#L101-L102

Added lines #L101 - L102 were not covered by tests

for length in range(self.min, self.max + 1):
yield from itertools.product(*(generate_letter() for _ in range(length)))

Check warning on line 105 in geneticengine/grammar/metahandlers/strings.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/strings.py#L104-L105

Added lines #L104 - L105 were not covered by tests


class WeightedStringHandler(MetaHandlerGenerator):
"""This metahandler restricts the creation of string nodes so that the
Expand Down Expand Up @@ -136,3 +148,13 @@ def __repr__(self):

def __class_getitem__(cls, args):
return WeightedStringHandler(*args)

def iterate(
self,
base_type: type,
combine_lists: Callable[[list[type]], Generator[Any, Any, Any]],
):
def generate_letter():
yield from self.options

Check warning on line 158 in geneticengine/grammar/metahandlers/strings.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/strings.py#L157-L158

Added lines #L157 - L158 were not covered by tests

yield from itertools.product(*(generate_letter() for _ in range(self.probability_matrix.shape[0])))

Check warning on line 160 in geneticengine/grammar/metahandlers/strings.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/strings.py#L160

Added line #L160 was not covered by tests
9 changes: 8 additions & 1 deletion geneticengine/grammar/metahandlers/vars.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any, Callable, TypeVar
from typing import Any, Callable, Generator, TypeVar

from geneticengine.grammar.grammar import Grammar
from geneticengine.random.sources import RandomSource
Expand Down Expand Up @@ -42,3 +42,10 @@ def __repr__(self):

def __class_getitem__(cls, args):
return VarRange(*args)

def iterate(
self,
base_type: type,
combine_lists: Callable[[list[type]], Generator[Any, Any, Any]],
):
yield from self.options

Check warning on line 51 in geneticengine/grammar/metahandlers/vars.py

View check run for this annotation

Codecov / codecov/patch

geneticengine/grammar/metahandlers/vars.py#L51

Added line #L51 was not covered by tests

0 comments on commit 56bb331

Please sign in to comment.