def test_dict_read_and_parse(self): input_dict = { "B4": 0.95, "B2": 1000, "B19": 0.001, "B20": 4, # B21 "B22": 1, "B23": 2, "B24": 3, "B25": "=B2*B4", "B26": 5, "B27": 6, "B28": "=B19*B20*B22", "C22": "=SUM(B22:B28)", } model_compiler = ModelCompiler() my_model = model_compiler.read_and_parse_dict(input_dict) evaluator = Evaluator(my_model) # cells need a sheet and Sheet1 is default. evaluator.set_cell_value("Sheet1!B22", 100) self.assertEqual(0.4, evaluator.evaluate("Sheet1!B28")) self.assertEqual(1066.4, evaluator.evaluate("Sheet1!C22"))
def test_extract(self): model_compiler = ModelCompiler() reader_model = model_compiler.read_and_parse_archive( testing.get_resource("reader.xlsm"), ignore_sheets=['Eleventh']) extracted_model = ModelCompiler.extract(reader_model, focus=[ 'First!A2', 'First!B2', 'First!C2', 'Fourth!A2', 'Hundred', 'My_Range' ]) reference_model = Model() reference_model.set_cell_value('First!A2', 0.1) reference_model.set_cell_value('First!B2', 0.2) reference_model.set_cell_value('First!C2', 0.3) reference_model.set_cell_value('Eighth!B1', 100) reference_model.set_cell_value('Eighth!A1', 1) reference_model.set_cell_value('Eighth!A2', 2) reference_model.set_cell_value('Eighth!A3', 3) reference_model.set_cell_value('Eighth!A4', 4) reference_model.set_cell_value('Eighth!A5', 5) reference_model.set_cell_value('Eighth!A6', 6) reference_model.set_cell_value('Eighth!A7', 7) reference_model.set_cell_value('Eighth!A8', 8) reference_model.set_cell_value('Eighth!A9', 9) reference_model.set_cell_value('Eighth!A10', 10) reference_model.defined_names['Hundred'] = deepcopy( reader_model.defined_names['Hundred']) reference_model.defined_names['My_Range'] = deepcopy( reader_model.defined_names['My_Range']) reference_model.cells['Fourth!A2'] = reader_model.cells['Fourth!A2'] self.assertEqual(reference_model.cells, extracted_model.cells) self.assertEqual(reference_model.defined_names, extracted_model.defined_names)
def workbook_test_cases(filename: str) -> MarkDecorator: compiler = ModelCompiler() resolved_filename = get_resource(filename) model = compiler.read_and_parse_archive(resolved_filename) evaluator = Evaluator(model) cases = [ Case(f"{filename} {address}", sheet_value=evaluator.get_cell_value(address), calculated_value=evaluator.evaluate(address)) for address in model.formulae ] return parametrize_cases(*cases)
def test_extract_and_evaluate(self): model_compiler = ModelCompiler() reader_model = model_compiler.read_and_parse_archive( testing.get_resource("model_compiler_and_evaluate.xlsx")) extracted_model = ModelCompiler.extract(reader_model, focus=['add_one']) self.assertEqual(1, extracted_model.get_cell_value('Sheet1!A1')) self.assertEqual(2, extracted_model.get_cell_value('Sheet1!B1')) extracted_model.set_cell_value('Sheet1!A1', 2) evaluator = Evaluator(extracted_model) evaluator.evaluate('add_one') self.assertEqual(3, extracted_model.get_cell_value('Sheet1!B1'))
def test_extract_cells(self): model_compiler = ModelCompiler() reader_model = model_compiler.read_and_parse_archive( testing.get_resource("reader.xlsm"), ignore_sheets=['Eleventh']) extracted_model = ModelCompiler.extract( reader_model, focus=['First!A2', 'First!B2', 'First!C2']) reference_model = Model() reference_model.set_cell_value('First!A2', 0.1) reference_model.set_cell_value('First!B2', 0.2) reference_model.set_cell_value('First!C2', 0.3) self.assertEqual(reference_model.cells, extracted_model.cells)
def test_build_ranges(self): model_compiler = ModelCompiler() archive = model_compiler.read_excel_file( testing.get_resource("reader.xlsm")) (model_compiler.model.cells, model_compiler.model.formulae, model_compiler.model.ranges) = archive.read_cells( ignore_sheets=['Eleventh']) model_compiler.defined_names = archive.read_defined_names() model_compiler.build_defined_names() model_compiler.build_ranges() self.assertEqual(self.model.ranges, model_compiler.model.ranges)
def setUp(self): compiler = ModelCompiler() self.model = compiler.read_and_parse_archive( get_resource(self.filename)) self.evaluator = Evaluator(self.model)
def test_read_and_parse_archive(self): model_compiler = ModelCompiler() new_model = model_compiler.read_and_parse_archive( testing.get_resource("reader.xlsm"), ignore_sheets=['Eleventh']) self.assertEqual(self.model, new_model)