Beispiel #1
0
    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"))
Beispiel #2
0
    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)
Beispiel #3
0
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)
Beispiel #4
0
    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'))
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
 def setUp(self):
     compiler = ModelCompiler()
     self.model = compiler.read_and_parse_archive(
         get_resource(self.filename))
     self.evaluator = Evaluator(self.model)
Beispiel #8
0
 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)