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 pydantic import BaseModel
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from helpers import irt_helper
|
||||||
|
|
||||||
from models.item import Item
|
from models.item import Item
|
||||||
|
from models.target import Target
|
||||||
|
|
||||||
|
from lib.irt.test_response_function import TestResponseFunction
|
||||||
|
|
||||||
class Form(BaseModel):
|
class Form(BaseModel):
|
||||||
items: List[Item]
|
items: List[Item]
|
||||||
cut_score: float
|
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 pydantic import BaseModel
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
class Target(BaseModel):
|
class Target(BaseModel):
|
||||||
theta: float
|
theta: float
|
||||||
value: float
|
value: float
|
||||||
|
result: Optional[float]
|
||||||
|
@ -3,15 +3,12 @@ import json
|
|||||||
import random
|
import random
|
||||||
import io
|
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.solver_run import SolverRun
|
||||||
from models.solution import Solution
|
from models.solution import Solution
|
||||||
from models.form import Form
|
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
|
from services.base import Base
|
||||||
|
|
||||||
class LoftService(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
|
# real solver will return N forms and process a cut score, this is for mock purposes
|
||||||
return Solution(
|
return Solution(
|
||||||
response_id=random.randint(100,5000),
|
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):
|
def stream_to_s3_bucket(self):
|
||||||
@ -58,9 +55,3 @@ class LoftService(Base):
|
|||||||
|
|
||||||
# upload generated file to s3 and return result
|
# 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'])
|
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