コード例 #1
0
def case_unselect_one_record():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_record(2)
    return (
        fit_data,
        [1] + list(range(3, NUMBER_OF_RECORDS + 1)),
    )
コード例 #2
0
def case_select_multiple_records():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_all_records()
    fit_data.select_record(2)
    fit_data.select_record(5)
    fit_data.select_record(3)
    fit_data.select_record(10)
    return fit_data, [2, 3, 5, 10]
コード例 #3
0
def case_select_all_records():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_all_records()
    fit_data.select_record(2)
    fit_data.select_record(5)
    fit_data.select_all_records()
    return fit_data, list(range(1, NUMBER_OF_RECORDS + 1))
コード例 #4
0
def case_unselect_multiple():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_record(2)
    fit_data.unselect_record(5)
    fit_data.unselect_record(3)
    fit_data.unselect_record(10)
    return fit_data, [1, 4, 6, 7, 8, 9] + list(range(11,
                                                     NUMBER_OF_RECORDS + 1))
コード例 #5
0
def case_fitting(case_path):
    with open(str(case_path), mode="r") as json_file:
        json_obj = json.load(json_file)
    func_name = json_obj["fit_function"]
    func = FitFunctionsRegistry.load(func_name)
    fix = json_obj.get("fix", None)
    if fix is not None:
        for index, value in fix:
            func.fix(index, value)
    data_dict = json_obj["data"]
    data = FitData(
        OrderedDict(
            [
                ("x", data_dict["x"]),
                ("xerr", data_dict["xerr"]),
                ("y", data_dict["y"]),
                ("yerr", data_dict["yerr"]),
            ]
        )
    )
    a0 = json_obj.get("a0", None)
    result = fit_to_data(data=data, func=func, a0=a0)
    decimal = json_obj.get("decimal", 2)
    inp = dict(actual_result=result, a0=a0, func=func, delta=np.power(10.0, -decimal))
    expected_result = json_obj["result"]
    return inp, expected_result
コード例 #6
0
def test_x_larger_than_size(column):
    with pytest.raises(
            FitDataColumnIndexError,
            match=
            "^No column number 11 in data. index should be between 1 and 10$",
    ):
        FitData(COLUMNS, **{column: 11})
コード例 #7
0
def test_x_zero_index(column):
    with pytest.raises(
            FitDataColumnIndexError,
            match=
            "^No column number 0 in data. index should be between 1 and 10$",
    ):
        FitData(COLUMNS, **{column: 0})
コード例 #8
0
def case_jumbled_columns():
    fit_data = FitData(COLUMNS,
                       x_column=3,
                       xerr_column=1,
                       y_column="b",
                       yerr_column=9)
    expected_columns = Columns(x="c", xerr="a", y="b", yerr="i")
    return fit_data, expected_columns
コード例 #9
0
def test_exception_risen_because_of_columns_length():
    data = deepcopy(COLUMNS)
    data["a"] = data["a"][:-2]
    with pytest.raises(
            FitDataColumnsLengthError,
            match="^All columns in FitData should have the same length$",
    ):
        FitData(data=data)
コード例 #10
0
def case_int_x_column():
    fit_data = FitData(COLUMNS, x_column=3)
    expected_columns = Columns(
        x="c",
        xerr="d",
        y="e",
        yerr="f",
    )
    return fit_data, expected_columns
コード例 #11
0
def case_string_xerr_column():
    fit_data = FitData(COLUMNS, xerr_column="d")
    expected_columns = Columns(
        x="a",
        xerr="d",
        y="e",
        yerr="f",
    )
    return fit_data, expected_columns
コード例 #12
0
    def read_csv(self, filepath):
        """
        Read data from csv file.

        :param filepath: path of the csv file
        """
        try:
            self.fit_data = FitData.read_from_csv(filepath)
        except FitDataError as error:
            self.window.error_dialog(title="Input data error", message=str(error))
            self.fit_data = None
コード例 #13
0
    def read_excel(self, filepath, sheet):
        """
        Read data from excel file.

        :param filepath: path of the excel file
        :param sheet: sheet from which to read the data.
        """
        try:
            self.fit_data = FitData.read_from_excel(filepath, sheet)
        except FitDataError as error:
            self.window.error_dialog(title="Input data error", message=str(error))
            self.fit_data = None
コード例 #14
0
def test_set_selection_with_different_size():
    fit_data = FitData(COLUMNS)

    def set_records_indices():
        fit_data.records_indices = [False, False, True]

    with pytest.raises(
            FitDataColumnsSelectionError,
            match=
            f"^Should select {NUMBER_OF_RECORDS} records, only 3 selected.$",
    ):
        set_records_indices()
コード例 #15
0
def test_set_selection_with_non_boolean_values():
    fit_data = FitData(COLUMNS)

    def set_records_indices():
        fit_data.records_indices = [False, False, "dummy"
                                    ] + [True] * (NUMBER_OF_RECORDS - 3)

    with pytest.raises(
            FitDataColumnsSelectionError,
            match=
            "^When setting record indices, all values should be booleans.$",
    ):
        set_records_indices()
コード例 #16
0
 def __init__(self, fit_data: FitData):
     """Initialize window."""
     super(RecordsChoiceWindow, self).__init__(size=RECORD_WINDOW_SIZE)
     main_box = toga.Box(style=Pack(direction=COLUMN))
     data_box = toga.Box()
     self.__checkboxes = [
         toga.Switch(
             label="",
             is_on=fit_data.is_selected(i),
             style=Pack(height=LINE_HEIGHT, ),
         ) for i in range(1, fit_data.length + 1)
     ]
     data_box.add(
         toga.Box(
             style=Pack(
                 flex=1,
                 direction=COLUMN,
                 padding_left=SMALL_PADDING,
                 padding_right=SMALL_PADDING,
             ),
             children=[
                 toga.Label(text="Chosen", style=Pack(height=LINE_HEIGHT))
             ] + self.__checkboxes,  # noqa: W503
         ))
     for header, column in fit_data.data.items():
         data_box.add(
             toga.Box(
                 style=Pack(
                     flex=1,
                     direction=COLUMN,
                     padding_left=SMALL_PADDING,
                     padding_right=SMALL_PADDING,
                 ),
                 children=[
                     toga.Label(text=header, style=Pack(height=LINE_HEIGHT))
                 ] + [  # noqa: W503
                     toga.Label(text=element,
                                style=Pack(height=LINE_HEIGHT))
                     for element in column
                 ],
             ))
     main_box.add(data_box)
     main_box.add(
         LineBox(children=[
             toga.Button(label="Save", on_press=self.save_action(fit_data))
         ], ))
     scroller = toga.ScrollContainer(content=main_box)
     self.content = scroller
コード例 #17
0
def random_fit_data(request, mocker, random_sigma_mock, random_error_mock):
    params = request.param
    random_array_mock = mocker.patch("eddington.fit_data.random_array")
    if "a" in params:
        random_array_mock.side_effect = [x]
    else:
        random_array_mock.side_effect = [a, x]
    return (
        FitData.random(dummy_func1, **params),
        dict(
            params=params,
            random_array=random_array_mock,
            random_sigma=random_sigma_mock,
            random_error=random_error_mock,
        ),
    )
コード例 #18
0
def function_cases(odr_mock, request):
    func, kwargs, model_extra_kwargs, fit_a0 = (
        request.param["func"],
        request.param.get("kwargs", {}),
        request.param.get("model_extra_kwargs", {}),
        request.param.get("a0", a0),
    )
    data = FitData.random(fit_func=func)
    result = fit_to_data(data=data, func=func, a0=fit_a0, **kwargs)
    return dict(
        func=func,
        data=data,
        result=result,
        model_extra_kwargs=model_extra_kwargs,
        a0=fit_a0,
        mocks=odr_mock,
    )
コード例 #19
0
def case_set_selected_records():
    fit_data = FitData(COLUMNS)
    fit_data.records_indices = [False, True, False, False, True
                                ] + [False] * (NUMBER_OF_RECORDS - 5)
    return fit_data, [2, 5]
コード例 #20
0
def case_int_y_column():
    fit_data = FitData(COLUMNS, y_column=5)
    expected_columns = Columns(x="a", xerr="b", y="e", yerr="f")
    return fit_data, expected_columns
コード例 #21
0
def test_x_not_existing(column):
    with pytest.raises(FitDataColumnExistenceError,
                       match='^Could not find column "r" in data$'):
        FitData(COLUMNS, **{column: "r"})
コード例 #22
0
def case_select_one_records():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_all_records()
    fit_data.select_record(2)
    return fit_data, [2]
コード例 #23
0
def case_select_two_records():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_all_records()
    fit_data.select_record(2)
    fit_data.select_record(5)
    return fit_data, [2, 5]
コード例 #24
0
def case_string_yerr_column():
    fit_data = FitData(COLUMNS, yerr_column="f")
    expected_columns = Columns(x="a", xerr="b", y="c", yerr="f")
    return fit_data, expected_columns
コード例 #25
0
def case_unselect_all():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_all_records()
    return fit_data, []
コード例 #26
0
def case_unselect_two_records():
    fit_data = FitData(COLUMNS)
    fit_data.unselect_record(2)
    fit_data.unselect_record(5)
    return fit_data, [1, 3, 4] + list(range(6, NUMBER_OF_RECORDS + 1))
コード例 #27
0
def case_x_and_y_column():
    fit_data = FitData(COLUMNS, x_column=3, y_column="h")
    expected_columns = Columns(x="c", xerr="d", y="h", yerr="i")
    return fit_data, expected_columns
コード例 #28
0
def case_default():
    fit_data = FitData(COLUMNS)
    expected_columns = Columns(x="a", xerr="b", y="c", yerr="d")
    return fit_data, expected_columns
コード例 #29
0
 def actual_read(**kwargs):
     with patch("eddington.fit_data.open", m_open):
         actual_fit_data = FitData.read_from_csv(filepath, **kwargs)
     return actual_fit_data
コード例 #30
0
 def actual_read(**kwargs):
     return FitData.read_from_excel(filepath, sheet_name, **kwargs)