added tcc and tif results to form
This commit is contained in:
parent
3b83aad6bd
commit
5bd3eb7b90
22
app/helpers/irt_helper.py
Normal file
22
app/helpers/irt_helper.py
Normal file
@ -0,0 +1,22 @@
|
||||
from lib.irt.test_response_function import TestResponseFunction
|
||||
from lib.irt.test_information_function import TestInformationFunction
|
||||
|
||||
from models.target import Target
|
||||
|
||||
def generate_tif_results(items, solver_run):
|
||||
targets = []
|
||||
|
||||
for target in solver_run.objective_function.tif_targets:
|
||||
tif = TestInformationFunction(solver_run.irt_model).calculate(items, theta=target.theta)
|
||||
targets.append(Target(theta=target.theta, value=target.value, result=tif))
|
||||
|
||||
return targets
|
||||
|
||||
def generate_tcc_results(items, solver_run):
|
||||
targets = []
|
||||
|
||||
for target in solver_run.objective_function.tcc_targets:
|
||||
tcc = TestResponseFunction(solver_run.irt_model).calculate(items, theta=target.theta)
|
||||
targets.append(Target(theta=target.theta, value=target.value, result=tcc))
|
||||
|
||||
return targets
|
@ -1,8 +1,24 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import List
|
||||
|
||||
from helpers import irt_helper
|
||||
|
||||
from models.item import Item
|
||||
from models.target import Target
|
||||
|
||||
from lib.irt.test_response_function import TestResponseFunction
|
||||
|
||||
class Form(BaseModel):
|
||||
items: List[Item]
|
||||
cut_score: float
|
||||
tif_results: List[Target]
|
||||
tcc_results: List[Target]
|
||||
|
||||
@classmethod
|
||||
def create(cls, items, solver_run):
|
||||
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)
|
||||
)
|
||||
|
@ -1,5 +1,7 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
|
||||
class Target(BaseModel):
|
||||
theta: float
|
||||
value: float
|
||||
result: Optional[float]
|
||||
|
@ -3,15 +3,12 @@ import json
|
||||
import random
|
||||
import io
|
||||
|
||||
from helpers import aws_helper, tar_helper, csv_helper, service_helper
|
||||
from helpers import aws_helper, tar_helper, csv_helper, service_helper, irt_helper
|
||||
|
||||
from models.solver_run import SolverRun
|
||||
from models.solution import Solution
|
||||
from models.form import Form
|
||||
|
||||
from lib.irt.test_response_function import TestResponseFunction
|
||||
from lib.irt.test_information_function import TestInformationFunction
|
||||
|
||||
from services.base import Base
|
||||
|
||||
class LoftService(Base):
|
||||
@ -48,7 +45,7 @@ class LoftService(Base):
|
||||
# real solver will return N forms and process a cut score, this is for mock purposes
|
||||
return Solution(
|
||||
response_id=random.randint(100,5000),
|
||||
forms=[self.generate_forms(random.sample(self.solver_run.items, self.solver_run.total_form_items)) for x in range(form_count)]
|
||||
forms=[Form.create(random.sample(self.solver_run.items, self.solver_run.total_form_items), self.solver_run) for x in range(form_count)]
|
||||
)
|
||||
|
||||
def stream_to_s3_bucket(self):
|
||||
@ -58,9 +55,3 @@ class LoftService(Base):
|
||||
|
||||
# upload generated file to s3 and return result
|
||||
return aws_helper.file_stream_upload(solution_file, f'{service_helper.key_to_uuid(self.key)}.csv', os.environ['MEASURE_PROCESSED_BUCKET'])
|
||||
|
||||
def generate_forms(self, items):
|
||||
return Form(
|
||||
items=items,
|
||||
cut_score=TestResponseFunction(self.solver_run.irt_model).calculate(items, theta=self.solver_run.theta_cut_score)
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user