Skip to content

Commit 6b6d756

Browse files
authored
chore: move validation.py into api directory properly (#448)
1 parent 822df89 commit 6b6d756

13 files changed

Lines changed: 40 additions & 40 deletions

File tree

api/ai/interfaces/team_generation_options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from schema import Schema
55

66
from api.dataclasses.team import TeamShell
7-
from utils.validation import is_unique
7+
from api.utils.validation import is_unique
88

99

1010
@dataclass

api/api/validators/evaluate_team_set_validator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from api.api.validators.interface import Validator
66
from api.dataclasses.enums import RequirementOperator, Relationship
77
from api.api.utils.relationship import get_relationship_str
8-
from utils.validation import is_unique
8+
from api.utils.validation import is_unique
99

1010

1111
class EvaluateTeamSetValidator(Validator):

api/utils/validation.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from typing import Any, List
2+
3+
4+
def is_unique(items: List[Any], attr: str = None) -> bool:
5+
"""
6+
Checks if a list of anything contains unique elements (within the list).
7+
If attr is given, checks if they each have unique 'attr', where attr is an attribute of item's type.
8+
9+
NOTE: Assumes that if attr is given, all dicts/objects in items have that 'attr' defined.
10+
"""
11+
types_of_items = set([type(item) for item in items])
12+
if len(types_of_items) > 1:
13+
raise ValueError("All items should be of the same type.")
14+
15+
if not attr:
16+
return len(set(items)) == len(items)
17+
18+
# cast back to list to access by index
19+
if list(types_of_items)[0] == dict:
20+
item_attrs = [item[attr] for item in items if item[attr]]
21+
else:
22+
item_attrs = [getattr(item, attr) for item in items if getattr(item, attr)]
23+
24+
return len(set(item_attrs)) == len(item_attrs)

benchmarking/data/simulated_data/mock_initial_teams_provider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
from benchmarking.data.interfaces import InitialTeamsProvider
66
from api.dataclasses.project import Project
7-
from api.dataclasses.team import Team, TeamShell
8-
from utils.validation import is_unique
7+
from api.dataclasses.team import TeamShell
8+
from api.utils.validation import is_unique
99

1010

1111
@dataclass

benchmarking/data/simulated_data/mock_student_provider.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22
import random
33
from abc import ABC, abstractmethod
44
from dataclasses import dataclass, field
5-
from typing import Literal, List, Dict, Optional
5+
from typing import Literal, List, Dict
66

77
import numpy as np
88
from numpy.random import Generator
99

10-
from api.dataclasses.enums import Relationship, AttributeValueEnum, ScenarioAttribute
10+
from api.dataclasses.enums import Relationship, AttributeValueEnum
1111
from api.dataclasses.student import Student
1212
from benchmarking.data.interfaces import (
1313
StudentProvider,
1414
AttributeRangeConfig,
1515
NumValuesConfig,
1616
)
17-
from utils.validation import is_non_negative_integer, is_unique
17+
from utils.validation import is_non_negative_integer
18+
from api.utils.validation import is_unique
1819

1920

2021
@dataclass

benchmarking/simulation/insight.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import statistics
22
from typing import List, Dict
33

4-
from api.dataclasses.enums import AlgorithmType
54
from api.dataclasses.team_set import TeamSet
65
from benchmarking.evaluations.interfaces import TeamSetMetric
7-
from benchmarking.simulation.basic_simulation_set import BasicSimulationSetArtifact
86
from benchmarking.simulation.simulation_set import SimulationSetArtifact
9-
from utils.validation import is_unique
7+
from api.utils.validation import is_unique
108

119
InsightOutput = Dict[str, List[float]]
1210

benchmarking/simulation/simulation_set.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from api.dataclasses.enums import AlgorithmType
88
from benchmarking.simulation.simulation import SimulationArtifact, Simulation
99
from benchmarking.simulation.simulation_settings import SimulationSettings
10-
from utils.validation import is_unique
10+
from api.utils.validation import is_unique
1111

1212
SimulationSetArtifact = Dict[str, SimulationArtifact]
1313

tests/test_api/test_ai/test_interfaces/test_algorithm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from api.ai.interfaces.algorithm import Algorithm
44
from api.ai.interfaces.team_generation_options import TeamGenerationOptions
55
from api.dataclasses.team import TeamShell
6-
from utils.validation import is_unique
6+
from api.utils.validation import is_unique
77

88

99
class TestAlgorithm(unittest.TestCase):

tests/test_benchmarking/test_data/test_simulated_data/test_mock_student_provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
ProbabilisticAttributeValuesMaker,
1616
ExactAttributeRatiosMaker,
1717
)
18-
from utils.validation import is_unique
18+
from api.utils.validation import is_unique
1919

2020

2121
class TestMockStudentProvider(unittest.TestCase):

tests/test_benchmarking/test_simulation/test_basic_simulation_set.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from benchmarking.simulation.basic_simulation_set import BasicSimulationSet
99
from benchmarking.simulation.simulation_settings import SimulationSettings
1010
from tests.test_benchmarking.test_simulation._data import TestScenario
11-
from utils.validation import is_unique
11+
from api.utils.validation import is_unique
1212

1313

1414
class TestBasicSimulationSet(unittest.TestCase):

0 commit comments

Comments
 (0)