proper typing and bundle first ordering

This commit is contained in:
Josh Burman 2022-04-27 15:46:23 +00:00
parent c7da2862b2
commit a919530cab
4 changed files with 19 additions and 8 deletions

View File

@ -105,6 +105,8 @@ def key_to_uuid(key):
def solution_items(variables: list, solver_run: SolverRun) -> Tuple[list]:
form_items = []
form_bundles = []
final_items = []
solver_variables = []
for v in variables:
@ -120,9 +122,14 @@ def solution_items(variables: list, solver_run: SolverRun) -> Tuple[list]:
bundle_id = v.name.replace('Bundle_', '')
bundle = solver_run.get_bundle(int(bundle_id))
if bundle:
for item in bundle.items:
if item: form_items.append(item)
if bundle: form_bundles.append(bundle)
for bundle in form_bundles:
for item in bundle.ordered_items:
final_items.append(item)
for item in form_items:
final_items.append(item)
return form_items, solver_variables

View File

@ -46,3 +46,6 @@ class Bundle(BaseModel):
total += self.trf(solver_run.irt_model, target.theta)
return total
def ordered_items(self) -> List[Item]:
return sorted(self.items, key=lambda x: x.position)

View File

@ -8,6 +8,7 @@ from lib.irt.item_information_function import ItemInformationFunction
class Item(BaseModel):
id: int
position: Optional[int]
passage_id: Optional[int]
workflow_state: Optional[str]
attributes: List[Attribute]

View File

@ -14,7 +14,7 @@ from models.advanced_options import AdvancedOptions
class SolverRun(BaseModel):
items: List[Item] = []
bundles: list[Bundle] = []
bundles: List[Bundle] = []
constraints: List[Constraint]
irt_model: IRTModel
objective_function: ObjectiveFunction
@ -40,7 +40,7 @@ class SolverRun(BaseModel):
if type == constraint.reference_attribute.type:
return constraint
def remove_items(self, items: list[Item]) -> bool:
def remove_items(self, items: List[Item]) -> bool:
self.items = [item for item in self.items if item not in items]
return True
@ -100,7 +100,7 @@ class SolverRun(BaseModel):
return next((constraint for constraint in self.constraints
if constraint.reference_attribute.id == name), None)
def unbundled_items(self) -> list:
def unbundled_items(self) -> List[Item]:
# since the only bundles are based on passage id currently
# in the future when we have more than just passage based bundles
# we'll need to develop a more sophisticated way of handling this concern
@ -113,7 +113,7 @@ class SolverRun(BaseModel):
else:
return self.items
def select_items_by_percent(self, percent: int) -> list[Item]:
def select_items_by_percent(self, percent: int) -> List[Item]:
items = self.unbundled_items()
total_items = len(items)
selected_items_amount = round(total_items - (total_items *
@ -121,7 +121,7 @@ class SolverRun(BaseModel):
return random.sample(items, selected_items_amount)
def select_bundles_by_percent(self, percent: int) -> list[Bundle]:
def select_bundles_by_percent(self, percent: int) -> List[Bundle]:
total_bundles = len(self.bundles)
selected_bundles_amount = round(total_bundles - (total_bundles *
(percent / 100)))