from pydantic import BaseModel from typing import List, Optional from models.attribute import Attribute from lib.irt.item_response_function import ItemResponseFunction from lib.irt.item_information_function import ItemInformationFunction class Item(BaseModel): id: int passage: Optional[int] attributes: List[Attribute] b_param: float = 0.00 def iif(self, solver_run, theta): return ItemInformationFunction(solver_run.irt_model).calculate(b_param=self.b_param,theta=theta) def irf(self, solver_run, theta): return ItemResponseFunction(solver_run.irt_model).calculate(b_param=self.b_param,theta=theta) def get_attribute(self, ref_attribute): for attribute in self.attributes: if attribute.id == ref_attribute.id and attribute.value == ref_attribute.value: return attribute.value return False def attribute_exists(self, ref_attribute): for attribute in self.attributes: if attribute.id == ref_attribute.id and attribute.value == ref_attribute.value: return True return False