45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from __future__ import annotations
|
|
from typing import TYPE_CHECKING
|
|
|
|
from pydantic import BaseModel
|
|
from typing import List, TypeVar, Type
|
|
|
|
from helpers import irt_helper
|
|
|
|
from models.item import Item
|
|
from models.targets.tif_target import TifTarget
|
|
from models.targets.tcc_target import TccTarget
|
|
|
|
from lib.irt.test_response_function import TestResponseFunction
|
|
|
|
if TYPE_CHECKING:
|
|
from models.solver_run import SolverRun
|
|
|
|
_T = TypeVar("_T")
|
|
|
|
class Form(BaseModel):
|
|
items: List[Item]
|
|
cut_score: float
|
|
tif_results: List[TifTarget]
|
|
tcc_results: List[TccTarget]
|
|
status: str = 'Not Optimized'
|
|
solver_variables: List[str]
|
|
|
|
@classmethod
|
|
def create(cls: Type[_T], items: list, solver_run: SolverRun, status: str, solver_variables: list) -> _T:
|
|
return cls(
|
|
items=items,
|
|
cut_score=TestResponseFunction(solver_run.irt_model).calculate(
|
|
items, theta=solver_run.theta_cut_score),
|
|
tif_results=irt_helper.generate_tif_results(items, solver_run),
|
|
tcc_results=irt_helper.generate_tcc_results(items, solver_run),
|
|
status=status,
|
|
solver_variables=solver_variables)
|
|
|
|
def has_item(self, item: Item) -> bool:
|
|
for i in self.items:
|
|
if item == i:
|
|
return True
|
|
|
|
return False
|