import csv import io import re def items_csv_to_dict(items_csv_reader): items = [] headers = [] # get headers and items for key, row in enumerate(items_csv_reader): if key == 0: headers = row else: item = { 'attributes': [] } # ensure that the b param is formatted correctly if len(re.findall(".", row[len(headers) - 1])) >= 3: for key, col in enumerate(headers): if key == 0: item[col] = row[key] if key == 2: # make sure passage id exists if row[key]: item['passage_id'] = row[key] # b param - tmep fix! use irt model b param for proper reference elif key == len(headers) - 1: item['b_param'] = row[key] elif key > 2 and key < len(headers) - 1: item['attributes'].append({ 'id': col, 'value': row[key], 'type': 'metadata' }) items.append(item) return items def solution_to_file(buffer, total_form_items, forms): wr = csv.writer(buffer, dialect='excel', delimiter=',') # write header row for first row utilizing the total items all forms will have # fill the rows with the targets and cut score then the items header = ['status'] for result in forms[0].tif_results: header += [f'tif @ {round(result.theta, 2)}'] for result in forms[0].tcc_results: header += [f'tcc @ {round(result.theta, 2)}'] header += ['cut score'] + [x + 1 for x in range(total_form_items)] wr.writerow(header) # add each form as row to processed csv for form in forms: row = [form.status] for result in form.tif_results + form.tcc_results: row += [f'target - {result.value}\nresult - {round(result.result, 2)}'] # provide generated items and cut score row += [round(form.cut_score, 2)] + [item.id for item in form.items] wr.writerow(row) buff2 = io.BytesIO(buffer.getvalue().encode()) return buff2 def error_to_file(buffer, error): wr = csv.writer(buffer, dialect='excel', delimiter=',') wr.writerow(['status']) wr.writerow([error.args[0]]) return io.BytesIO(buffer.getvalue().encode()) def key_to_uuid(key): return re.split("_", key)[0] def solution_items(variables, solver_run): form_items = [] for v in variables: if v.varValue > 0: item_id = v.name.replace('Item_', '') item = solver_run.get_item(item_id) # add item to list and then remove from master item list form_items.append(item) return form_items