From c1b4214a0fa2f22d3c9863b79df18aac6d183089 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 10 Sep 2024 13:12:11 +0200 Subject: [PATCH 01/43] engines to minimizers, uid to unique_name, raw_value to value --- EasyReflectometryApp/Logic/Proxies/Calculator.py | 2 +- EasyReflectometryApp/Logic/Proxies/Minimizer.py | 15 +++++++-------- EasyReflectometryApp/Logic/Proxies/Model.py | 8 ++++---- EasyReflectometryApp/Logic/Proxies/Parameter.py | 6 +++--- EasyReflectometryApp/Logic/Proxies/Project.py | 8 ++++---- EasyReflectometryApp/Logic/Proxies/Simulation.py | 10 +++++----- EasyReflectometryApp/Logic/Proxies/State.py | 4 ++-- pyproject.toml | 6 +++--- 8 files changed, 29 insertions(+), 30 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Calculator.py b/EasyReflectometryApp/Logic/Proxies/Calculator.py index d0421344..b3fa77a7 100644 --- a/EasyReflectometryApp/Logic/Proxies/Calculator.py +++ b/EasyReflectometryApp/Logic/Proxies/Calculator.py @@ -4,7 +4,7 @@ from PySide2.QtCore import Signal from PySide2.QtCore import Property -from easyscience.Utils.UndoRedo import property_stack_deco +from easyscience.global_object.undo_redo import property_stack_deco class CalculatorProxy(QObject): diff --git a/EasyReflectometryApp/Logic/Proxies/Minimizer.py b/EasyReflectometryApp/Logic/Proxies/Minimizer.py index 26ff60f3..f47a6023 100644 --- a/EasyReflectometryApp/Logic/Proxies/Minimizer.py +++ b/EasyReflectometryApp/Logic/Proxies/Minimizer.py @@ -4,7 +4,7 @@ from PySide2.QtCore import Signal from PySide2.QtCore import Property -from easyscience.Utils.UndoRedo import property_stack_deco +from easyscience.global_object.undo_redo import property_stack_deco class MinimizerProxy(QObject): @@ -18,8 +18,7 @@ def __init__(self, parent=None): self.parent = parent self._current_minimizer_method_index = 0 - self._current_minimizer_method_name = self.parent._fitter_proxy.eFitter.easy_f.available_methods( - )[0] + self._current_minimizer_method_name = self.parent._fitter_proxy.eFitter.easy_f.available_minimizers[0] self.currentMinimizerChanged.connect(self._onCurrentMinimizerChanged) # # # @@ -28,11 +27,11 @@ def __init__(self, parent=None): @Property('QVariant', notify=dummySignal) def minimizerNames(self): - return self.parent._fitter_proxy.eFitter.easy_f.available_engines + return self.parent._fitter_proxy.eFitter.easy_f.available_minimizers @Property(int, notify=currentMinimizerChanged) def currentMinimizerIndex(self): - current_name = self.parent._fitter_proxy.eFitter.easy_f.current_engine.name + current_name = self.parent._fitter_proxy.eFitter.easy_f.minimizer.name return self.minimizerNames.index(current_name) @currentMinimizerIndex.setter @@ -59,13 +58,13 @@ def currentMinimizerMethodIndex(self, new_index: int): @Property('QVariant', notify=currentMinimizerChanged) def minimizerMethodNames(self): - current_minimizer = self.minimizerNames[self.currentMinimizerIndex] + current_package = self.parent._fitter_proxy.eFitter.easy_f.minimizer.package tested_methods = { 'lmfit': ['leastsq', 'powell', 'cobyla'], 'bumps': ['newton', 'lm', 'de'], - 'DFO_LS': ['leastsq'] + 'dfo': ['leastsq'] } - return tested_methods[current_minimizer] + return tested_methods[current_package] # # # # Actions diff --git a/EasyReflectometryApp/Logic/Proxies/Model.py b/EasyReflectometryApp/Logic/Proxies/Model.py index 71175dfa..57e5f8f1 100644 --- a/EasyReflectometryApp/Logic/Proxies/Model.py +++ b/EasyReflectometryApp/Logic/Proxies/Model.py @@ -8,7 +8,7 @@ import numpy as np from easyscience import borg from easyscience.Utils.io.xml import XMLSerializer -from easyscience.Utils.UndoRedo import property_stack_deco +from easyscience.global_object.undo_redo import property_stack_deco from easyreflectometry.sample import Layer from easyreflectometry.sample import LayerAreaPerMolecule @@ -395,7 +395,7 @@ def _onLayersChanged(self): else: j.name = j.material.name + ' Layer' sample = self._model[self.currentModelIndex].sample - structure_dict = sample.as_dict() + structure_dict = sample.as_dict(skip=['unique_name']) self._pure = Model( sample=Sample.from_dict(structure_dict), @@ -928,10 +928,10 @@ def currentSurfactantSolventRoughness(self, x): # # # def getPureModelReflectometry(self, x): - return self._pure.interface.fit_func(x, self._pure.uid) + return self._pure.interface.fit_func(x, self._pure.unique_name) def getPureModelSld(self): - return self._pure.interface.sld_profile(self._pure.uid) + return self._pure.interface.sld_profile(self._pure.unique_name) def resetModel(self): self._structure = self._defaultStructure() diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index cc1b6d8d..46b61163 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -7,9 +7,9 @@ from PySide2.QtCore import Property from PySide2.QtCore import Slot import numpy as np -from easyscience.Fitting.Constraints import ObjConstraint -from easyscience.Fitting.Constraints import NumericConstraint -from easyscience.Fitting.Constraints import FunctionalConstraint +from easyscience.fitting.Constraints import ObjConstraint +from easyscience.fitting.Constraints import NumericConstraint +from easyscience.fitting.Constraints import FunctionalConstraint from easyscience.Utils.io.xml import XMLSerializer from easyscience import borg from easyscience.Utils.classTools import generatePath diff --git a/EasyReflectometryApp/Logic/Proxies/Project.py b/EasyReflectometryApp/Logic/Proxies/Project.py index 3fa8662f..ba799220 100644 --- a/EasyReflectometryApp/Logic/Proxies/Project.py +++ b/EasyReflectometryApp/Logic/Proxies/Project.py @@ -374,7 +374,7 @@ def make_plot(self, filename: str, figsize_x: float, figsize_y: float): for i, d in enumerate(data): model_index = self.parent._model_proxy._model.index(d.model) color = self.parent._model_proxy._colors[model_index] - y = self.parent._interface.fit_func(d.x, d.model.uid) + y = self.parent._interface.fit_func(d.x, d.model.unique_name) if self.parent._simulation_proxy._plot_rq4: ax1.errorbar(d.x, (d.y * d.x ** 4) * 10 ** i, (d.ye * d.x ** 4) * 10 ** i, marker='', ls='', color=color, alpha=0.5) @@ -382,7 +382,7 @@ def make_plot(self, filename: str, figsize_x: float, figsize_y: float): else: ax1.errorbar(d.x, d.y * 10 ** i, d.ye * 10 ** i, marker='', ls='', color=color, alpha=0.5) ax1.plot(d.x, y * 10 ** i, ls='-', color=color, zorder=10, label=d.name) - sld_profile = self.parent._interface.sld_profile(d.model.uid) + sld_profile = self.parent._interface.sld_profile(d.model.unique_name) ax2.plot(sld_profile[0], sld_profile[1] + 10 * i, color=color, ls='-') ax1.set_yscale('log') else: @@ -393,12 +393,12 @@ def make_plot(self, filename: str, figsize_x: float, figsize_y: float): model = self.parent._model_proxy._model for i, m in enumerate(model): color = self.parent._model_proxy._colors[i] - y = self.parent._interface.fit_func(x, m.uid) + y = self.parent._interface.fit_func(x, m.unique_name) if self.parent._simulation_proxy._plot_rq4: ax1.plot(x, (y * d.x ** 4) * 10 ** i, ls='-', color=color, zorder=10, label=m.name) else: ax1.plot(x, y * 10 ** i, ls='-', color=color, zorder=10, label=m.name) - sld_profile = self.parent._interface.sld_profile(m.uid) + sld_profile = self.parent._interface.sld_profile(m.unique_name) ax2.plot(sld_profile[0], sld_profile[1] + 10 * i, color=color, ls='-') ax1.set_yscale('log') ax1.legend() diff --git a/EasyReflectometryApp/Logic/Proxies/Simulation.py b/EasyReflectometryApp/Logic/Proxies/Simulation.py index fa84edf8..756ac01d 100644 --- a/EasyReflectometryApp/Logic/Proxies/Simulation.py +++ b/EasyReflectometryApp/Logic/Proxies/Simulation.py @@ -175,7 +175,7 @@ def _updateCalculatedData(self): self.parent._plotting_1d_proxy.setPureData(x, self.parent._model_proxy.getPureModelReflectometry(x) * x ** 4) else: self.parent._plotting_1d_proxy.setPureData(x, self.parent._model_proxy.getPureModelReflectometry(x)) - sld_profile = self.parent._model_proxy._pure.interface.sld_profile(self.parent._model_proxy._pure.uid) + sld_profile = self.parent._model_proxy._pure.interface.sld_profile(self.parent._model_proxy._pure.unique_name) self.parent._plotting_1d_proxy.setSampleSldData(*sld_profile) to_use = self.parent._model_proxy._model[self.parent._model_proxy.currentModelIndex] @@ -184,17 +184,17 @@ def _updateCalculatedData(self): x = exp.x to_use = self.parent._data_proxy._data[self.parent._data_proxy.currentDataIndex].model - y = self.parent._interface.fit_func(x, to_use.uid) + y = self.parent._interface.fit_func(x, to_use.unique_name) if self._plot_rq4: y *= (x ** 4) - sld_profile = self.parent._interface.sld_profile(to_use.uid) + sld_profile = self.parent._interface.sld_profile(to_use.unique_name) self.parent._plotting_1d_proxy.setCalculatedData(x, y) bkg = np.empty(x.size) - bkg.fill(to_use.background.raw_value) + bkg.fill(to_use.background.value) self.parent._plotting_1d_proxy.setBackgroundData(x, bkg) scale = np.empty(x.size) - scale.fill(to_use.scale.raw_value) + scale.fill(to_use.scale.value) self.parent._plotting_1d_proxy.setScaleData(x, scale) self.parent._plotting_1d_proxy.setAnalysisSldData(*sld_profile) diff --git a/EasyReflectometryApp/Logic/Proxies/State.py b/EasyReflectometryApp/Logic/Proxies/State.py index 0a7444fe..b40919bc 100644 --- a/EasyReflectometryApp/Logic/Proxies/State.py +++ b/EasyReflectometryApp/Logic/Proxies/State.py @@ -49,7 +49,7 @@ def statusModelAsObj(self): "calculation": self.parent._interface.current_interface_name, "minimization": - f'{self.parent._fitter_proxy.eFitter.easy_f.current_engine.name} ({self.parent._minimizer_proxy._current_minimizer_method_name})' + f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method} ({self.parent._minimizer_proxy._current_minimizer_method_name})' } self._status_model = obj return obj @@ -63,7 +63,7 @@ def statusModelAsXml(self): "label": "Minimization", "value": - f'{self.parent._fitter_proxy.eFitter.easy_f.current_engine.name} ({self.parent._minimizer_proxy._current_minimizer_method_name})' + f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method} ({self.parent._minimizer_proxy._current_minimizer_method_name})' }] xml = XMLSerializer().encode({"item":model}, data_only=True) return xml diff --git a/pyproject.toml b/pyproject.toml index a1e45f53..ce3b94ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,10 +30,10 @@ classifiers = [ ] requires-python = ">=3.9, <3.10" dependencies = [ + 'easyscience @ git+https://github.com/EasyScience/EasyScience.git@adjustments-to-fit-app', 'darkdetect>=0.3.1', - 'easyscience==0.6.1', - 'easyreflectometry==1.0.2', - 'easyApp @ git+https://github.com/EasyScience/EasyApp.git@develop', + 'easyreflectometry==1.1.0', + 'easyApp @ git+https://github.com/easyScience/easyApp.git@pyside2', 'matplotlib>=3.4.2', 'toml>=0.10.2', 'pyobjc-core>=7.1; platform_system == "Darwin"', From 35235f62eacf8049d7bf273f3e2a96a56d780bd7 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Thu, 12 Sep 2024 15:18:45 +0200 Subject: [PATCH 02/43] raw_value to value --- EasyReflectometryApp/Logic/Proxies/Data.py | 10 ++++---- .../Logic/Proxies/Material.py | 12 +++++----- EasyReflectometryApp/Logic/Proxies/Model.py | 24 +++++++++---------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Data.py b/EasyReflectometryApp/Logic/Proxies/Data.py index a07f9f3b..b569e617 100644 --- a/EasyReflectometryApp/Logic/Proxies/Data.py +++ b/EasyReflectometryApp/Logic/Proxies/Data.py @@ -98,7 +98,7 @@ def experimentDataAsObj(self): dictionary['model_index'] = self.parent._model_proxy._model.index(experiment.model) dictionary['color'] = self.parent._model_proxy._colors[dictionary['model_index']] dictionary['model_name'] = self.parent._model_proxy._model[dictionary['model_index']].name - dictionary['background'] = self.parent._model_proxy._model[dictionary['model_index']].background.raw_value + dictionary['background'] = self.parent._model_proxy._model[dictionary['model_index']].background.value experiment_data_as_obj.append(dictionary) return experiment_data_as_obj @@ -110,7 +110,7 @@ def setScaling(self, new_scaling: float): :param new_scaling: New scaling value """ model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model) - if self.parent._model_proxy._model[model_index].scale.raw_value == new_scaling: + if self.parent._model_proxy._model[model_index].scale.value == new_scaling: return self.parent._model_proxy._model[model_index].scale = new_scaling self.parent.layersChanged.emit() @@ -137,7 +137,7 @@ def setBackground(self, new_background: float): :param new_background: New background value """ model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model) - if self.parent._model_proxy._model[model_index].background.raw_value == new_background: + if self.parent._model_proxy._model[model_index].background.value == new_background: return self.parent._model_proxy._model[model_index].background = new_background self.parent.layersChanged.emit() @@ -146,7 +146,7 @@ def setBackground(self, new_background: float): def currentScaling(self): try: model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model) - return self.parent._model_proxy._model[model_index].scale.raw_value + return self.parent._model_proxy._model[model_index].scale.value except IndexError: return 1 @@ -154,7 +154,7 @@ def currentScaling(self): def currentBackground(self): try: model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model) - return self.parent._model_proxy._model[model_index].background.raw_value + return self.parent._model_proxy._model[model_index].background.value except IndexError: return 0 diff --git a/EasyReflectometryApp/Logic/Proxies/Material.py b/EasyReflectometryApp/Logic/Proxies/Material.py index 7a02ea41..ca3052c7 100644 --- a/EasyReflectometryApp/Logic/Proxies/Material.py +++ b/EasyReflectometryApp/Logic/Proxies/Material.py @@ -142,8 +142,8 @@ def duplicateSelectedMaterials(self): to_dup = self._materials[self.currentMaterialsIndex] self._materials.append( Material( - sld=to_dup.sld.raw_value, - isld=to_dup.isld.raw_value, + sld=to_dup.sld.value, + isld=to_dup.isld.value, name=to_dup.name, interface=self.parent._interface ) @@ -203,9 +203,9 @@ def setCurrentMaterialsSld(self, sld: float): :param sld: New SLD value """ - if self._materials[self.currentMaterialsIndex].sld.raw_value == sld: + if self._materials[self.currentMaterialsIndex].sld.value == sld: return - self._materials[self.currentMaterialsIndex].sld = sld + self._materials[self.currentMaterialsIndex].sld.value = sld self.materialsChanged.emit() self.parent.layersChanged.emit() @@ -216,9 +216,9 @@ def setCurrentMaterialsISld(self, isld: float): :param isld: New iSLD value """ - if self._materials[self.currentMaterialsIndex].isld.raw_value == isld: + if self._materials[self.currentMaterialsIndex].isld.value == isld: return - self._materials[self.currentMaterialsIndex].isld = isld + self._materials[self.currentMaterialsIndex].isld.value = isld self.materialsChanged.emit() self.parent.layersChanged.emit() diff --git a/EasyReflectometryApp/Logic/Proxies/Model.py b/EasyReflectometryApp/Logic/Proxies/Model.py index 57e5f8f1..e7a76378 100644 --- a/EasyReflectometryApp/Logic/Proxies/Model.py +++ b/EasyReflectometryApp/Logic/Proxies/Model.py @@ -208,7 +208,7 @@ def currentItemsRepetitions(self): if self._model[self.currentModelIndex].sample[ self.currentItemsIndex].type != 'Repeating Multi-layer': return 1 - return self._model[self.currentModelIndex].sample[self.currentItemsIndex].repetitions.raw_value + return self._model[self.currentModelIndex].sample[self.currentItemsIndex].repetitions.value @currentItemsRepetitions.setter def currentItemsRepetitions(self, new_repetitions: int): @@ -217,7 +217,7 @@ def currentItemsRepetitions(self, new_repetitions: int): return if self._model[self.currentModelIndex].sample[ self. - currentItemsIndex].repetitions.raw_value == new_repetitions or new_repetitions == -1: + currentItemsIndex].repetitions.value == new_repetitions or new_repetitions == -1: return self._model[self.currentModelIndex].sample[self.currentItemsIndex].repetitions = new_repetitions self.parent.layersChanged.emit() @@ -552,15 +552,15 @@ def duplicateSelectedItems(self): to_dup_layers.append( Layer( material=i.material, - thickness=i.thickness.raw_value, - roughness=i.roughness.raw_value, + thickness=i.thickness.value, + roughness=i.roughness.value, name=i.name, interface=self.parent._interface ) ) dup_item = RepeatingMultilayer( *to_dup_layers, - repetitions=to_dup.repetitions.raw_value, + repetitions=to_dup.repetitions.value, name=to_dup.name ) elif isinstance(to_dup, SurfactantLayer): @@ -573,8 +573,8 @@ def duplicateSelectedItems(self): to_dup_layers.append( Layer( material=i.material, - thickness=i.thickness.raw_value, - roughness=i.roughness.raw_value, + thickness=i.thickness.value, + roughness=i.roughness.value, name=i.name, interface=self.parent._interface ) @@ -725,8 +725,8 @@ def duplicateSelectedLayers(self): self._model[self.currentModelIndex].sample[self.currentItemsIndex].add_layer( Layer( material=to_dup.material, - thickness=to_dup.thickness.raw_value, - roughness=to_dup.roughness.raw_value, + thickness=to_dup.thickness.value, + roughness=to_dup.roughness.value, name=to_dup.name ) ) @@ -839,7 +839,7 @@ def setCurrentLayersThickness(self, thickness: float): :param sld: New thickness value """ if self._model[self.currentModelIndex].sample[self.currentItemsIndex].layers[ - self.currentLayersIndex].thickness.raw_value == thickness: + self.currentLayersIndex].thickness.value == thickness: return self._model[self.currentModelIndex].sample[self.currentItemsIndex].layers[ self.currentLayersIndex].thickness = thickness @@ -853,7 +853,7 @@ def setCurrentLayersRoughness(self, roughness: float): :param sld: New roughness value """ layer = self._model[self.currentModelIndex].sample[self.currentItemsIndex].layers[self.currentLayersIndex] - if layer.roughness.raw_value == roughness: + if layer.roughness.value == roughness: return layer.roughness = roughness self.parent.layersChanged.emit() @@ -879,7 +879,7 @@ def setCurrentLayersSolvation(self, solvation: float): :param solvation: New solvation value """ layer = self._model[self.currentModelIndex].sample[self.currentItemsIndex].layers[self.currentLayersIndex] - if layer.material.fraction.raw_value == solvation: + if layer.material.fraction.value == solvation: return layer.material.fraction = solvation self.parent.layersChanged.emit() From 92090e20617d04dbba69457087f0d5f98260a4f5 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Thu, 12 Sep 2024 15:19:22 +0200 Subject: [PATCH 03/43] raw_value to value --- EasyReflectometryApp/Logic/Proxies/Parameter.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index 46b61163..ee7bb48a 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -52,7 +52,7 @@ def _setParametersAsObj(self): par_ids, par_paths = generatePath(self.parent._model_proxy._model, True) pids = [] - labels = [] +# labels = [] self._n_fit = False for par_index, par_path in enumerate(par_paths): par_id = par_ids[par_index] @@ -61,11 +61,11 @@ def _setParametersAsObj(self): pids.append(par_id) par = borg.map.get_item_by_key(par_id) path_split = par_path.split('.') - if path_split[-1] == 'repetitions' and par.raw_value == 1: + if path_split[-1] == 'repetitions' and par.value == 1: continue if not par.enabled: continue - unit = '{:~P}'.format(par.unit) + unit = par.unit #'{:~P}'.format(par.unit) label = get_label(par_path) if label is None: continue @@ -77,7 +77,7 @@ def _setParametersAsObj(self): "id": str(par_id), "number": par_index + 1, "label": label, - "value": par.raw_value, + "value": par.value, "unit": unit, "error": float(par.error), "fit": int(not par.fixed), @@ -134,7 +134,7 @@ def editParameter(self, obj_id: str, self.parent._undoredo_proxy.undoRedoChanged.emit() else: - if obj.raw_value == new_value: + if obj.value == new_value: return obj.value = new_value @@ -216,7 +216,7 @@ def addConstraint(self, dependent_par_idx, relational_operator, pids.append(par_id) par = borg.map.get_item_by_key(par_id) path_split = par_path.split('.') - if path_split[-1] == 'repetitions' and par.raw_value == 1: + if path_split[-1] == 'repetitions' and par.value == 1: continue if not par.enabled: continue From 3cceecfa897ecd0d00a603e39f312f46a0206ff9 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Thu, 12 Sep 2024 15:19:52 +0200 Subject: [PATCH 04/43] minimizer --- EasyReflectometryApp/Logic/Proxies/Minimizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Minimizer.py b/EasyReflectometryApp/Logic/Proxies/Minimizer.py index f47a6023..e134c408 100644 --- a/EasyReflectometryApp/Logic/Proxies/Minimizer.py +++ b/EasyReflectometryApp/Logic/Proxies/Minimizer.py @@ -72,7 +72,7 @@ def minimizerMethodNames(self): def _onCurrentMinimizerChanged(self): idx = 0 - minimizer_name = self.parent._fitter_proxy.eFitter.easy_f.current_engine.name + minimizer_name = self.parent._fitter_proxy.eFitter.easy_f.minimizer.name if minimizer_name == 'lmfit': idx = self.minimizerMethodNames.index('leastsq') elif minimizer_name == 'bumps': From 767bcba6b25bb34c688f415488564e4517caa86c Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Fri, 13 Sep 2024 09:14:53 +0200 Subject: [PATCH 05/43] able to load project --- .../Logic/Proxies/Minimizer.py | 2 +- .../Logic/Proxies/Parameter.py | 19 ++++---- EasyReflectometryApp/Logic/Proxies/Project.py | 47 ++++++++++++++++--- pyproject.toml | 3 +- 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Minimizer.py b/EasyReflectometryApp/Logic/Proxies/Minimizer.py index e134c408..513a8072 100644 --- a/EasyReflectometryApp/Logic/Proxies/Minimizer.py +++ b/EasyReflectometryApp/Logic/Proxies/Minimizer.py @@ -40,7 +40,7 @@ def currentMinimizerIndex(self, new_index: int): if self.currentMinimizerIndex == new_index: return new_name = self.minimizerNames[new_index] - self.parent._fitter_proxy.eFitter.easy_f.switch_engine(new_name) + self.parent._fitter_proxy.eFitter.easy_f.switch_minimizer(new_name) self.currentMinimizerChanged.emit() @Property(int, notify=currentMinimizerMethodChanged) diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index ee7bb48a..9a8d6206 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -11,7 +11,7 @@ from easyscience.fitting.Constraints import NumericConstraint from easyscience.fitting.Constraints import FunctionalConstraint from easyscience.Utils.io.xml import XMLSerializer -from easyscience import borg +from easyscience import global_object from easyscience.Utils.classTools import generatePath @@ -59,7 +59,7 @@ def _setParametersAsObj(self): if par_id in pids: continue pids.append(par_id) - par = borg.map.get_item_by_key(par_id) + par = global_object.map.get_item_by_key(par_id) path_split = par_path.split('.') if path_split[-1] == 'repetitions' and par.value == 1: continue @@ -191,8 +191,8 @@ def editParameterMax(self, obj_id: str, new_value: Union[float, str]): def _parameterObj(self, obj_id: str): if not obj_id: return - obj_id = int(obj_id) - obj = borg.map.get_item_by_key(obj_id) +# obj_id = int(obj_id) + obj = global_object.map.get_item_by_key(obj_id) return obj # Constraints @@ -214,7 +214,7 @@ def addConstraint(self, dependent_par_idx, relational_operator, if par_id in pids: continue pids.append(par_id) - par = borg.map.get_item_by_key(par_id) + par = global_object.map.get_item_by_key(par_id) path_split = par_path.split('.') if path_split[-1] == 'repetitions' and par.value == 1: continue @@ -350,9 +350,10 @@ def get_label(par_path: str) -> str: return label def get_par_path(par, model): - model_id = borg.map.convert_id(model) - elem = borg.map.convert_id(par) - route = borg.map.reverse_route(elem, model_id) - objs = [getattr(borg.map.get_item_by_key(r), "name") for r in route] +# model_id = global_object.map.convert_id(model) +# elem = global_object.map.convert_id(par) +# route = global_object.map.reverse_route(elem, model_id) + route = global_object.map.reverse_route(par.unique_name, model.unique_name) + objs = [getattr(global_object.map.get_item_by_key(r), "name") for r in route] objs.reverse() return ".".join(objs[1:]) \ No newline at end of file diff --git a/EasyReflectometryApp/Logic/Proxies/Project.py b/EasyReflectometryApp/Logic/Proxies/Project.py index ba799220..4bc81f1f 100644 --- a/EasyReflectometryApp/Logic/Proxies/Project.py +++ b/EasyReflectometryApp/Logic/Proxies/Project.py @@ -15,8 +15,12 @@ import numpy as np from easyApp.Logic.Utils.Utils import generalizePath +from easyscience import global_object + from EasyReflectometryApp.Logic.DataStore import DataSet1D from easyreflectometry.sample import MaterialCollection +from easyreflectometry.sample import Material + from easyreflectometry.experiment.model_collection import ModelCollection @@ -189,7 +193,7 @@ def _saveProject(self): descr['colors'] = self.parent._model_proxy._colors descr['minimizer'] = { - 'engine': self.parent._fitter_proxy.eFitter.easy_f.current_engine.name, + 'engine': self.parent._fitter_proxy.eFitter.easy_f.minimizer.name, 'method': self.parent._minimizer_proxy._current_minimizer_method_name } @@ -223,6 +227,13 @@ def _loadProject(self): with open(path, 'r') as xml_file: descr: dict = json.load(xml_file) + self.parent._model_proxy._model = None + self.parent._material_proxy._materials = None + self.parent._model_proxy._colors = None + materials_in_model = [] + + global_object.map._clear() + interface_name = descr.get('interface', None) for i, inter in enumerate(interface_name): if inter is not None: @@ -230,18 +241,42 @@ def _loadProject(self): if old_interface_name != inter: self.parent._interface.switch(inter) + #self.parent._material_proxy._materials = MaterialCollection([]) # Should be initialized with empty list to enforce no elements in collection + # mats = descr['materials_not_in_model'] + # mats['populate_if_none'] = False + # if not mats['data']: + # mats['data'] = () + # self.parent._material_proxy._materials = MaterialCollection.from_dict(mats) + + # self.parent._material_proxy._materials = MaterialCollection([]) +# for material in MaterialCollection.from_dict(mats): +# self.parent._material_proxy._materials.append(material) + self.parent._model_proxy._colors = descr['colors'] + self.parent._model_proxy._model = ModelCollection.from_dict(descr['model']) - self.parent._material_proxy._materials = MaterialCollection([]) # Should be initialized with empty list to enforce no elements in collection for model in self.parent._model_proxy._model: for sample in model.sample: for layer in sample.layers: - self.parent._material_proxy._materials.append(layer.material) + materials_in_model.append(layer.material) model.interface = self.parent._interface + + mats = descr['materials_not_in_model'] - if mats['data']: - for material in MaterialCollection.from_dict(mats): - self.parent._material_proxy._materials.append(material) + mats['populate_if_none'] = False + if not mats['data']: + mats['data'] = None + material_collection = MaterialCollection.from_dict(mats) + for material in materials_in_model: + if material not in material_collection: + material_collection.append(material) + self.parent._material_proxy._materials = material_collection + + + # mats = descr['materials_not_in_model'] + # if mats['data']: + # for material in MaterialCollection.from_dict(mats): + # self.parent._material_proxy._materials.append(material) # experiment if 'experiments' in descr: diff --git a/pyproject.toml b/pyproject.toml index ce3b94ec..8bff13e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,9 +30,8 @@ classifiers = [ ] requires-python = ">=3.9, <3.10" dependencies = [ - 'easyscience @ git+https://github.com/EasyScience/EasyScience.git@adjustments-to-fit-app', 'darkdetect>=0.3.1', - 'easyreflectometry==1.1.0', + 'easyreflectometry @ git+https://github.com/EasyScience/EasyReflectometryLib.git@adjustments-to-fit-app', 'easyApp @ git+https://github.com/easyScience/easyApp.git@pyside2', 'matplotlib>=3.4.2', 'toml>=0.10.2', From 022ba765629ca648e48d1710813ce1cf83e62090 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Fri, 13 Sep 2024 13:33:24 +0200 Subject: [PATCH 06/43] seems to work, some warnings --- .../Gui/Pages/Analysis/SideBarAdvanced.qml | 23 ------------- EasyReflectometryApp/Logic/Proxies/Fitter.py | 6 ++-- .../Logic/Proxies/Material.py | 14 ++++---- .../Logic/Proxies/Minimizer.py | 32 ++++++------------- EasyReflectometryApp/Logic/Proxies/Model.py | 24 +++++++------- EasyReflectometryApp/Logic/Proxies/Project.py | 4 +-- EasyReflectometryApp/Logic/Proxies/State.py | 4 +-- .../Logic/Proxies/UndoRedo.py | 30 ++++++++--------- 8 files changed, 50 insertions(+), 87 deletions(-) diff --git a/EasyReflectometryApp/Gui/Pages/Analysis/SideBarAdvanced.qml b/EasyReflectometryApp/Gui/Pages/Analysis/SideBarAdvanced.qml index 7ffe971d..c3d9eaad 100644 --- a/EasyReflectometryApp/Gui/Pages/Analysis/SideBarAdvanced.qml +++ b/EasyReflectometryApp/Gui/Pages/Analysis/SideBarAdvanced.qml @@ -54,8 +54,6 @@ EaComponents.SideBarColumn { EaElements.ComboBox { id: minimizerSelector - width: (EaStyle.Sizes.sideBarContentWidth - minimizerLabel.width * 2 - EaStyle.Sizes.fontPixelSize * 4) / 2 - model: ExGlobals.Constants.proxy.minimizer.minimizerNames currentIndex: ExGlobals.Constants.proxy.minimizer.currentMinimizerIndex @@ -63,28 +61,7 @@ EaComponents.SideBarColumn { ExGlobals.Constants.proxy.minimizer.currentMinimizerIndex = currentIndex } } - - // Spacer - Item {} - - // Method - EaComponents.TableViewLabel{ - horizontalAlignment: Text.AlignRight - width: minimizerLabel.width - text: qsTr("Method:") - } - EaElements.ComboBox { - id: methodSelector - - width: minimizerSelector.width - model: ExGlobals.Constants.proxy.minimizer.minimizerMethodNames - currentIndex: ExGlobals.Constants.proxy.minimizer.currentMinimizerMethodIndex - onCurrentIndexChanged: { - ExGlobals.Constants.proxy.currentMinimizerMethodIndex = currentIndex - } - } } - } /* diff --git a/EasyReflectometryApp/Logic/Proxies/Fitter.py b/EasyReflectometryApp/Logic/Proxies/Fitter.py index fd1d9f2c..5d657089 100644 --- a/EasyReflectometryApp/Logic/Proxies/Fitter.py +++ b/EasyReflectometryApp/Logic/Proxies/Fitter.py @@ -6,7 +6,7 @@ from PySide2.QtCore import Property from PySide2.QtCore import Slot -from easyscience import borg +from easyscience import global_object from easyreflectometry.fitting import Fitter as easyFitter @@ -126,7 +126,7 @@ def fit(self): # if running, stop the thread if not self.isFitFinished: self.onStopFit() - borg.stack.endMacro() # need this to close the undo stack properly + global_object.stack.endMacro() # need this to close the undo stack properly return # macos is possibly problematic with MT, skip on this platform # if 'darwin' in sys.platform: @@ -146,7 +146,7 @@ def nonthreaded_fit(self): x = [i.x for i in exp_data] y = [i.y for i in exp_data] weights = [1 / i.ye for i in exp_data] - method = self.parent.minimizer._current_minimizer_method_name + method = self.parent.minimizer._current_minimizer.method res = self.eFitter.easy_f.fit(x, y, weights=weights, method=method) self._setFitResults(res) diff --git a/EasyReflectometryApp/Logic/Proxies/Material.py b/EasyReflectometryApp/Logic/Proxies/Material.py index ca3052c7..1338a9dd 100644 --- a/EasyReflectometryApp/Logic/Proxies/Material.py +++ b/EasyReflectometryApp/Logic/Proxies/Material.py @@ -8,7 +8,7 @@ from PySide2.QtCore import Property from PySide2.QtCore import Slot -from easyscience import borg +from easyscience import global_object from easyscience.Utils.io.xml import XMLSerializer from easyreflectometry.sample import Material @@ -116,7 +116,7 @@ def addNewMaterials(self): """ Add a new material. """ - borg.stack.enabled = False + global_object.stack.enabled = False self._materials.append( Material( sld=2.074, @@ -125,7 +125,7 @@ def addNewMaterials(self): interface=self.parent._interface ) ) - borg.stack.enabled = True + global_object.stack.enabled = True self.materialsChanged.emit() self.parent.layersMaterialsChanged.emit() @@ -134,9 +134,9 @@ def duplicateSelectedMaterials(self): """ Duplicate the currently selected material. """ - # if borg.stack.enabled: - # borg.stack.beginMacro('Loaded default material') - borg.stack.enabled = False + # if global_object.stack.enabled: + # global_object.stack.beginMacro('Loaded default material') + global_object.stack.enabled = False # This is a fix until deepcopy is worked out # Manual duplication instead of creating a copy to_dup = self._materials[self.currentMaterialsIndex] @@ -148,7 +148,7 @@ def duplicateSelectedMaterials(self): interface=self.parent._interface ) ) - borg.stack.enabled = True + global_object.stack.enabled = True self.materialsChanged.emit() self.parent.layersMaterialsChanged.emit() diff --git a/EasyReflectometryApp/Logic/Proxies/Minimizer.py b/EasyReflectometryApp/Logic/Proxies/Minimizer.py index 513a8072..ebf9ffec 100644 --- a/EasyReflectometryApp/Logic/Proxies/Minimizer.py +++ b/EasyReflectometryApp/Logic/Proxies/Minimizer.py @@ -5,7 +5,7 @@ from PySide2.QtCore import Property from easyscience.global_object.undo_redo import property_stack_deco - +from easyscience.fitting import AvailableMinimizers class MinimizerProxy(QObject): @@ -17,9 +17,10 @@ def __init__(self, parent=None): super().__init__(parent) self.parent = parent - self._current_minimizer_method_index = 0 - self._current_minimizer_method_name = self.parent._fitter_proxy.eFitter.easy_f.available_minimizers[0] + self._current_minimizer = AvailableMinimizers.LMFit_leastsq self.currentMinimizerChanged.connect(self._onCurrentMinimizerChanged) + self._current_minimizer_method_index = self.currentMinimizerIndex + self._current_minimizer_method_name = self._current_minimizer.name # # # # Setters and getters @@ -27,7 +28,7 @@ def __init__(self, parent=None): @Property('QVariant', notify=dummySignal) def minimizerNames(self): - return self.parent._fitter_proxy.eFitter.easy_f.available_minimizers + return [minimizer.name for minimizer in AvailableMinimizers] @Property(int, notify=currentMinimizerChanged) def currentMinimizerIndex(self): @@ -56,29 +57,14 @@ def currentMinimizerMethodIndex(self, new_index: int): self._current_minimizer_method_name = self.minimizerMethodNames[new_index] self.currentMinimizerMethodChanged.emit() - @Property('QVariant', notify=currentMinimizerChanged) - def minimizerMethodNames(self): - current_package = self.parent._fitter_proxy.eFitter.easy_f.minimizer.package - tested_methods = { - 'lmfit': ['leastsq', 'powell', 'cobyla'], - 'bumps': ['newton', 'lm', 'de'], - 'dfo': ['leastsq'] - } - return tested_methods[current_package] - # # # # Actions # # # def _onCurrentMinimizerChanged(self): - idx = 0 - minimizer_name = self.parent._fitter_proxy.eFitter.easy_f.minimizer.name - if minimizer_name == 'lmfit': - idx = self.minimizerMethodNames.index('leastsq') - elif minimizer_name == 'bumps': - idx = self.minimizerMethodNames.index('lm') - if -1 < idx != self._current_minimizer_method_index: + idx = self.currentMinimizerIndex + if idx != self._current_minimizer_method_index: # Bypass the property as it would be added to the stack. self._current_minimizer_method_index = idx - self._current_minimizer_method_name = self.minimizerMethodNames[idx] - self.currentMinimizerMethodChanged.emit() + self._current_minimizer_method_name = self._current_minimizer.name + self.currentMinimizerMethodChanged.emit() \ No newline at end of file diff --git a/EasyReflectometryApp/Logic/Proxies/Model.py b/EasyReflectometryApp/Logic/Proxies/Model.py index e7a76378..908f4ea0 100644 --- a/EasyReflectometryApp/Logic/Proxies/Model.py +++ b/EasyReflectometryApp/Logic/Proxies/Model.py @@ -6,7 +6,7 @@ from PySide2.QtCore import Slot import numpy as np -from easyscience import borg +from easyscience import global_object from easyscience.Utils.io.xml import XMLSerializer from easyscience.global_object.undo_redo import property_stack_deco @@ -303,7 +303,7 @@ def currentItemsType(self, type: str): self._model[self.currentModelIndex].remove_item(0) for i in range(len(new_items_list)): self._model[self.currentModelIndex].add_item(new_items_list[i]) - borg.stack.enabled = True + global_object.stack.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = False self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = False @@ -592,9 +592,9 @@ def duplicateSelectedItems(self): @Slot() def moveSelectedItemsUp(self): - # if borg.stack.enabled: - # borg.stack.beginMacro('Loaded default item') - borg.stack.enabled = False + # if global_object.stack.enabled: + # global_object.stack.beginMacro('Loaded default item') + global_object.stack.enabled = False # This convoluted approach is necessary as currently the BaseCollection # does not allow insertion or popping. In future, this could be # replaced with the approach for moving items around @@ -615,7 +615,7 @@ def moveSelectedItemsUp(self): self._model[self.currentModelIndex].remove_item(0) for i in range(len(new_items_list)): self._model[self.currentModelIndex].add_item(new_items_list[i]) - borg.stack.enabled = True + global_object.stack.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = False self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = False @@ -630,7 +630,7 @@ def moveSelectedItemsDown(self): old_index = self.currentItemsIndex new_items_list = [] if old_index != len(self._model[self.currentModelIndex].sample): - borg.stack.enabled = False + global_object.stack.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = True self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = True @@ -645,7 +645,7 @@ def moveSelectedItemsDown(self): self._model[self.currentModelIndex].remove_item(0) for i in range(len(new_items_list)): self._model[self.currentModelIndex].add_item(new_items_list[i]) - borg.stack.enabled = True + global_object.stack.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = False self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = False @@ -745,7 +745,7 @@ def moveSelectedLayersUp(self): # not allow insertion or popping. In future, this could be replaced with the # approach for moving items around if old_index != 0: - borg.stack.enabled = False + global_object.stack.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = True self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = True @@ -760,7 +760,7 @@ def moveSelectedLayersUp(self): item.remove_layer(0) for i in range(len(new_layers_list)): item.add_layer(new_layers_list[i]) - borg.stack.enabled = True + global_object.stack.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = False self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = False @@ -779,7 +779,7 @@ def moveSelectedLayersDown(self): self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = True self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = True - borg.stack.enabled = False + global_object.stack.enabled = False for i, l in enumerate(layers): if i == old_index: new_layers_list.append(layers[old_index + 1]) @@ -791,7 +791,7 @@ def moveSelectedLayersDown(self): item.remove_layer(0) for i in range(len(new_layers_list)): item.add_layer(new_layers_list[i]) - borg.stack.enabled = True + global_object.stack.enabled = True self._model[self.currentModelIndex].sample[0].layers[0].thickness.enabled = False self._model[self.currentModelIndex].sample[0].layers[0].roughness.enabled = False self._model[self.currentModelIndex].sample[-1].layers[-1].thickness.enabled = False diff --git a/EasyReflectometryApp/Logic/Proxies/Project.py b/EasyReflectometryApp/Logic/Proxies/Project.py index 4bc81f1f..a94b1f39 100644 --- a/EasyReflectometryApp/Logic/Proxies/Project.py +++ b/EasyReflectometryApp/Logic/Proxies/Project.py @@ -332,9 +332,9 @@ def _loadProject(self): new_engine_index = self.parent._minimizer_proxy.minimizerNames.index(new_engine) self.currentMinimizerIndex = new_engine_index try: - new_method_index = self.parent._minimizer_proxy.minimizerMethodNames.index(new_method) + new_method_index = self.parent._minimizer_proxy.minimizerNames.index(new_method) except ValueError: - new_method_index = self.parent._minimizer_proxy.minimizerMethodNames[0] + new_method_index = self.parent._minimizer_proxy.minimizerNames[0] self.currentMinimizerMethodIndex = new_method_index self.parent._undoredo_proxy.resetUndoRedoStack() diff --git a/EasyReflectometryApp/Logic/Proxies/State.py b/EasyReflectometryApp/Logic/Proxies/State.py index b40919bc..b838fe3a 100644 --- a/EasyReflectometryApp/Logic/Proxies/State.py +++ b/EasyReflectometryApp/Logic/Proxies/State.py @@ -49,7 +49,7 @@ def statusModelAsObj(self): "calculation": self.parent._interface.current_interface_name, "minimization": - f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method} ({self.parent._minimizer_proxy._current_minimizer_method_name})' + f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method}' } self._status_model = obj return obj @@ -63,7 +63,7 @@ def statusModelAsXml(self): "label": "Minimization", "value": - f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method} ({self.parent._minimizer_proxy._current_minimizer_method_name})' + f'{self.parent._fitter_proxy.eFitter.easy_f.minimizer._method}' }] xml = XMLSerializer().encode({"item":model}, data_only=True) return xml diff --git a/EasyReflectometryApp/Logic/Proxies/UndoRedo.py b/EasyReflectometryApp/Logic/Proxies/UndoRedo.py index 53969f8b..a374d47e 100644 --- a/EasyReflectometryApp/Logic/Proxies/UndoRedo.py +++ b/EasyReflectometryApp/Logic/Proxies/UndoRedo.py @@ -7,7 +7,7 @@ from PySide2.QtCore import Property from PySide2.QtCore import Slot -from easyscience import borg +from easyscience import global_object from easyscience.Objects.Groups import BaseCollection from easyscience.Objects.ObjectClasses import BaseObj @@ -20,8 +20,8 @@ def __init__(self, parent=None): super().__init__(parent) self.parent = parent - borg.stack.enabled = True - borg.stack.clear() + global_object.stack.enabled = True + global_object.stack.clear() self.parent._simulation_proxy.simulationParametersChanged.connect( self.undoRedoChanged) @@ -35,20 +35,20 @@ def __init__(self, parent=None): @Property(bool, notify=undoRedoChanged) def canUndo(self) -> bool: - return borg.stack.canUndo() + return global_object.stack.canUndo() @Property(bool, notify=undoRedoChanged) def canRedo(self) -> bool: - return borg.stack.canRedo() + return global_object.stack.canRedo() @Slot() def undo(self): if self.canUndo: callback = [self.parent.sampleChanged] - if len(borg.stack.history[0]) > 1: + if len(global_object.stack.history[0]) > 1: callback = [self.parent.sampleChanged] else: - old = borg.stack.history[0].current._parent + old = global_object.stack.history[0].current._parent if isinstance(old, (BaseObj, BaseCollection)): callback = [self.parent.sampleChanged] elif old is self: @@ -58,17 +58,17 @@ def undo(self): callback = [] else: print(f'Unknown undo thing: {old}') - borg.stack.undo() + global_object.stack.undo() _ = [call.emit() for call in callback] @Slot() def redo(self): if self.canRedo: callback = [self.parent.sampleChanged] - if len(borg.stack.future[0]) > 1: + if len(global_object.stack.future[0]) > 1: callback = [self.parent.sampleChanged] else: - new = borg.stack.future[0].current._parent + new = global_object.stack.future[0].current._parent if isinstance(new, (BaseObj, BaseCollection)): callback = [self.parent.sampleChanged, self.undoRedoChanged] elif new is self: @@ -78,16 +78,16 @@ def redo(self): callback = [] else: print(f'Unknown redo thing: {new}') - borg.stack.redo() + global_object.stack.redo() _ = [call.emit() for call in callback] @Property(str, notify=undoRedoChanged) def undoText(self): - return self.tooltip(borg.stack.undoText()) + return self.tooltip(global_object.stack.undoText()) @Property(str, notify=undoRedoChanged) def redoText(self): - return self.tooltip(borg.stack.redoText()) + return self.tooltip(global_object.stack.redoText()) def tooltip(self, orig_tooltip=""): if 'Parameter' not in orig_tooltip: @@ -116,6 +116,6 @@ def tooltip(self, orig_tooltip=""): @Slot() def resetUndoRedoStack(self): - if borg.stack.enabled: - borg.stack.clear() + if global_object.stack.enabled: + global_object.stack.clear() self.undoRedoChanged.emit() From 246aec2c5ead77880b52e324867095d7ef3eb1bb Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Fri, 13 Sep 2024 14:23:17 +0200 Subject: [PATCH 07/43] sort imports --- EasyReflectometryApp/Logic/DataStore.py | 4 ++-- EasyReflectometryApp/Logic/Proxies/Data.py | 6 +++--- EasyReflectometryApp/Logic/Proxies/Model.py | 2 +- EasyReflectometryApp/Logic/Proxies/Parameter.py | 1 + EasyReflectometryApp/Logic/Proxies/Plotting1d.py | 8 +++++--- EasyReflectometryApp/Logic/Proxies/Project.py | 8 ++------ 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/EasyReflectometryApp/Logic/DataStore.py b/EasyReflectometryApp/Logic/DataStore.py index f629fc01..bfd4b9f9 100644 --- a/EasyReflectometryApp/Logic/DataStore.py +++ b/EasyReflectometryApp/Logic/DataStore.py @@ -4,10 +4,10 @@ from typing import TypeVar import numpy as np -from easyscience.Objects.core import ComponentSerializer -from easyscience.Utils.io.dict import DictSerializer from collections.abc import Sequence +from easyscience.Objects.core import ComponentSerializer +from easyscience.Utils.io.dict import DictSerializer from easyreflectometry.experiment.model import Model T = TypeVar('T') diff --git a/EasyReflectometryApp/Logic/Proxies/Data.py b/EasyReflectometryApp/Logic/Proxies/Data.py index b569e617..9866c337 100644 --- a/EasyReflectometryApp/Logic/Proxies/Data.py +++ b/EasyReflectometryApp/Logic/Proxies/Data.py @@ -11,12 +11,12 @@ import numpy as np from easyApp.Logic.Utils.Utils import generalizePath -from EasyReflectometryApp.Logic.DataStore import DataSet1D -from EasyReflectometryApp.Logic.DataStore import DataStore - from easyreflectometry.data import load from easyreflectometry.experiment import PercentageFhwm +from ..DataStore import DataSet1D +from ..DataStore import DataStore + class DataProxy(QObject): experimentSkippedChanged = Signal() diff --git a/EasyReflectometryApp/Logic/Proxies/Model.py b/EasyReflectometryApp/Logic/Proxies/Model.py index 908f4ea0..da2db401 100644 --- a/EasyReflectometryApp/Logic/Proxies/Model.py +++ b/EasyReflectometryApp/Logic/Proxies/Model.py @@ -6,10 +6,10 @@ from PySide2.QtCore import Slot import numpy as np + from easyscience import global_object from easyscience.Utils.io.xml import XMLSerializer from easyscience.global_object.undo_redo import property_stack_deco - from easyreflectometry.sample import Layer from easyreflectometry.sample import LayerAreaPerMolecule from easyreflectometry.sample import Multilayer diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index 9a8d6206..66f44edc 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -7,6 +7,7 @@ from PySide2.QtCore import Property from PySide2.QtCore import Slot import numpy as np + from easyscience.fitting.Constraints import ObjConstraint from easyscience.fitting.Constraints import NumericConstraint from easyscience.fitting.Constraints import FunctionalConstraint diff --git a/EasyReflectometryApp/Logic/Proxies/Plotting1d.py b/EasyReflectometryApp/Logic/Proxies/Plotting1d.py index 001fb632..ec7d93f5 100644 --- a/EasyReflectometryApp/Logic/Proxies/Plotting1d.py +++ b/EasyReflectometryApp/Logic/Proxies/Plotting1d.py @@ -2,9 +2,11 @@ import numpy as np -from PySide2.QtCore import QObject, Qt, QPointF, Signal, Slot, Property -from PySide2.QtGui import QImage, QBrush -from PySide2.QtQml import QJSValue +from PySide2.QtCore import QObject +from PySide2.QtCore import QPointF +from PySide2.QtCore import Signal +from PySide2.QtCore import Slot +from PySide2.QtCore import Property class Plotting1dProxy(QObject): diff --git a/EasyReflectometryApp/Logic/Proxies/Project.py b/EasyReflectometryApp/Logic/Proxies/Project.py index a94b1f39..a4883756 100644 --- a/EasyReflectometryApp/Logic/Proxies/Project.py +++ b/EasyReflectometryApp/Logic/Proxies/Project.py @@ -11,18 +11,14 @@ import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec - import numpy as np -from easyApp.Logic.Utils.Utils import generalizePath from easyscience import global_object - -from EasyReflectometryApp.Logic.DataStore import DataSet1D +from easyApp.Logic.Utils.Utils import generalizePath from easyreflectometry.sample import MaterialCollection -from easyreflectometry.sample import Material - from easyreflectometry.experiment.model_collection import ModelCollection +from ..DataStore import DataSet1D class ProjectProxy(QObject): dummySignal = Signal() From 6bbfef19c45428d6e4dbd29e3542584482e64303 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 07:17:58 +0200 Subject: [PATCH 08/43] code cleaning --- EasyReflectometryApp/Logic/Proxies/Material.py | 2 -- EasyReflectometryApp/Logic/Proxies/Parameter.py | 4 ---- EasyReflectometryApp/Logic/Proxies/Project.py | 17 ----------------- 3 files changed, 23 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Material.py b/EasyReflectometryApp/Logic/Proxies/Material.py index 1338a9dd..04b0d262 100644 --- a/EasyReflectometryApp/Logic/Proxies/Material.py +++ b/EasyReflectometryApp/Logic/Proxies/Material.py @@ -134,8 +134,6 @@ def duplicateSelectedMaterials(self): """ Duplicate the currently selected material. """ - # if global_object.stack.enabled: - # global_object.stack.beginMacro('Loaded default material') global_object.stack.enabled = False # This is a fix until deepcopy is worked out # Manual duplication instead of creating a copy diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index 66f44edc..64c48bd2 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -53,7 +53,6 @@ def _setParametersAsObj(self): par_ids, par_paths = generatePath(self.parent._model_proxy._model, True) pids = [] -# labels = [] self._n_fit = False for par_index, par_path in enumerate(par_paths): par_id = par_ids[par_index] @@ -351,9 +350,6 @@ def get_label(par_path: str) -> str: return label def get_par_path(par, model): -# model_id = global_object.map.convert_id(model) -# elem = global_object.map.convert_id(par) -# route = global_object.map.reverse_route(elem, model_id) route = global_object.map.reverse_route(par.unique_name, model.unique_name) objs = [getattr(global_object.map.get_item_by_key(r), "name") for r in route] objs.reverse() diff --git a/EasyReflectometryApp/Logic/Proxies/Project.py b/EasyReflectometryApp/Logic/Proxies/Project.py index a4883756..d95fa9cf 100644 --- a/EasyReflectometryApp/Logic/Proxies/Project.py +++ b/EasyReflectometryApp/Logic/Proxies/Project.py @@ -237,17 +237,6 @@ def _loadProject(self): if old_interface_name != inter: self.parent._interface.switch(inter) - #self.parent._material_proxy._materials = MaterialCollection([]) # Should be initialized with empty list to enforce no elements in collection - # mats = descr['materials_not_in_model'] - # mats['populate_if_none'] = False - # if not mats['data']: - # mats['data'] = () - # self.parent._material_proxy._materials = MaterialCollection.from_dict(mats) - - # self.parent._material_proxy._materials = MaterialCollection([]) -# for material in MaterialCollection.from_dict(mats): -# self.parent._material_proxy._materials.append(material) - self.parent._model_proxy._colors = descr['colors'] self.parent._model_proxy._model = ModelCollection.from_dict(descr['model']) @@ -268,12 +257,6 @@ def _loadProject(self): material_collection.append(material) self.parent._material_proxy._materials = material_collection - - # mats = descr['materials_not_in_model'] - # if mats['data']: - # for material in MaterialCollection.from_dict(mats): - # self.parent._material_proxy._materials.append(material) - # experiment if 'experiments' in descr: #self.parent._data_proxy.experimentLoaded = True From bd585d2543d40f0b42998809389d29808f0111d4 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 07:23:35 +0200 Subject: [PATCH 09/43] code cleaning --- EasyReflectometryApp/Logic/Proxies/Model.py | 2 -- EasyReflectometryApp/Logic/Proxies/Parameter.py | 1 - 2 files changed, 3 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Model.py b/EasyReflectometryApp/Logic/Proxies/Model.py index da2db401..d0b38d58 100644 --- a/EasyReflectometryApp/Logic/Proxies/Model.py +++ b/EasyReflectometryApp/Logic/Proxies/Model.py @@ -592,8 +592,6 @@ def duplicateSelectedItems(self): @Slot() def moveSelectedItemsUp(self): - # if global_object.stack.enabled: - # global_object.stack.beginMacro('Loaded default item') global_object.stack.enabled = False # This convoluted approach is necessary as currently the BaseCollection # does not allow insertion or popping. In future, this could be diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index 64c48bd2..b78e5ac1 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -191,7 +191,6 @@ def editParameterMax(self, obj_id: str, new_value: Union[float, str]): def _parameterObj(self, obj_id: str): if not obj_id: return -# obj_id = int(obj_id) obj = global_object.map.get_item_by_key(obj_id) return obj From f49fa6a9b1a6541586c224e3e14f58b471eec843 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 08:20:20 +0200 Subject: [PATCH 10/43] code cleaning --- EasyReflectometryApp/Logic/Proxies/Parameter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index b78e5ac1..d28e5d14 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -65,7 +65,7 @@ def _setParametersAsObj(self): continue if not par.enabled: continue - unit = par.unit #'{:~P}'.format(par.unit) + unit = par.unit label = get_label(par_path) if label is None: continue From a0d77e1819ec9631893b35fb82d93f2a6d016b18 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 10:49:40 +0200 Subject: [PATCH 11/43] try to fix problem with missing enum element in AvailableMinimzers --- EasyReflectometryApp/main.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 569bc5d5..808571d0 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -8,8 +8,9 @@ # PySide from PySide2.QtCore import QUrl from PySide2.QtWidgets import QApplication -from PySide2.QtGui import Qt, QIcon -from PySide2.QtQml import QQmlApplicationEngine, qmlRegisterType +from PySide2.QtGui import Qt +from PySide2.QtGui import QIcon +from PySide2.QtQml import QQmlApplicationEngine from PySide2.QtWebEngine import QtWebEngine from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py @@ -17,6 +18,7 @@ import EasyReflectometryApp import toml import easyApp +import easyreflectometry # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy From 77cdffdcd5fa51b1516d94c13cf0d2088e6bce95 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:04:08 +0200 Subject: [PATCH 12/43] lmfit not available --- EasyReflectometryApp/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 808571d0..28f64375 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -18,7 +18,7 @@ import EasyReflectometryApp import toml import easyApp -import easyreflectometry +from easyscience.fitting import AvailableMinimizers # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy From db8504df49b5828994e10e205a6f5efc7ad06a34 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:06:50 +0200 Subject: [PATCH 13/43] print installed packages --- EasyReflectometryApp/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 28f64375..431f498e 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -18,7 +18,7 @@ import EasyReflectometryApp import toml import easyApp -from easyscience.fitting import AvailableMinimizers +from easyscience.fitting import available_minimizers # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy @@ -42,6 +42,7 @@ def __init__(self, sys_argv): super(App, self).__init__(sys_argv) def main(): + print(available_minimizers.installed_packages) # Arguments parser = argparse.ArgumentParser() parser.add_argument('-l', '--logtofile', action='store_true', From 64cc15298dbcbe959896e59ca082d890f878c6b6 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:26:28 +0200 Subject: [PATCH 14/43] try to list installed pip packages --- .github/workflows/macos-windows-build.yml | 1 + EasyReflectometryApp/main.py | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index f196b96a..a25b5ec6 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,6 +66,7 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV + pip list >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 431f498e..569bc5d5 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -8,9 +8,8 @@ # PySide from PySide2.QtCore import QUrl from PySide2.QtWidgets import QApplication -from PySide2.QtGui import Qt -from PySide2.QtGui import QIcon -from PySide2.QtQml import QQmlApplicationEngine +from PySide2.QtGui import Qt, QIcon +from PySide2.QtQml import QQmlApplicationEngine, qmlRegisterType from PySide2.QtWebEngine import QtWebEngine from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py @@ -18,7 +17,6 @@ import EasyReflectometryApp import toml import easyApp -from easyscience.fitting import available_minimizers # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy @@ -42,7 +40,6 @@ def __init__(self, sys_argv): super(App, self).__init__(sys_argv) def main(): - print(available_minimizers.installed_packages) # Arguments parser = argparse.ArgumentParser() parser.add_argument('-l', '--logtofile', action='store_true', From d55851c011d8253619251515a40ac5adf7b303d4 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:26:55 +0200 Subject: [PATCH 15/43] clean main --- EasyReflectometryApp/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 569bc5d5..4775af59 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -8,8 +8,9 @@ # PySide from PySide2.QtCore import QUrl from PySide2.QtWidgets import QApplication -from PySide2.QtGui import Qt, QIcon -from PySide2.QtQml import QQmlApplicationEngine, qmlRegisterType +from PySide2.QtGui import Qt +from PySide2.QtGui import QIcon +from PySide2.QtQml import QQmlApplicationEngine from PySide2.QtWebEngine import QtWebEngine from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py From b3c894a77531202f7f1514070c34ea86a018f09e Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:29:27 +0200 Subject: [PATCH 16/43] try to print pip packages --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index a25b5ec6..8219635b 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,7 +66,7 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV - pip list >> $GITHUB_ENV + echo "PIP_PACKAGES=$(pip list)"" >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py From 80c8dc14200ac8b31f02ba8dee5d18b6f3ab08b2 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:30:07 +0200 Subject: [PATCH 17/43] fix pipline --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index 8219635b..ae914625 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,7 +66,7 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV - echo "PIP_PACKAGES=$(pip list)"" >> $GITHUB_ENV + echo "PIP_PACKAGES=$(pip list)" >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py From 772b1acceb06445c3b487a97532eb9f53c31760d Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:33:20 +0200 Subject: [PATCH 18/43] pipline syntax --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index ae914625..73b72afb 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,7 +66,7 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV - echo "PIP_PACKAGES=$(pip list)" >> $GITHUB_ENV + echo "PIP_PACKAGES=pip list >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py From 35a21041034da31125364a8e581a83355dc8b802 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 11:37:02 +0200 Subject: [PATCH 19/43] pip list --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index 73b72afb..f18a3a36 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,7 +66,7 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV - echo "PIP_PACKAGES=pip list >> $GITHUB_ENV + echo "PIP_PACKAGES=pip list" >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py From a1c6117f2c8eca9a4a9a411c22dba49c4a7c2ea5 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 12:06:35 +0200 Subject: [PATCH 20/43] try to make installer macox installer work --- .github/workflows/macos-windows-build.yml | 1 - tools/Scripts/FreezeApp.py | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index f18a3a36..f196b96a 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -66,7 +66,6 @@ jobs: echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.installation_path.${{ runner.os }})" >> $GITHUB_ENV echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.paths.python_packages_path)" >> $GITHUB_ENV echo "GIT_INSTALL_URL=git+ssh://git@github.com/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV - echo "PIP_PACKAGES=pip list" >> $GITHUB_ENV - name: Create frozen python app bundle run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py diff --git a/tools/Scripts/FreezeApp.py b/tools/Scripts/FreezeApp.py index 52644066..b784506d 100755 --- a/tools/Scripts/FreezeApp.py +++ b/tools/Scripts/FreezeApp.py @@ -9,6 +9,9 @@ import shiboken2 import refnx import refl1d +import bumps +import lmfit +import dfols import periodictable import easyscience import easyreflectometry @@ -43,6 +46,10 @@ def addedData() -> List[str]: #{'from': importlib.import_module(lib).__path__[0], 'to': lib}, {'from': refnx.__path__[0], 'to': 'refnx'}, {'from': refl1d.__path__[0], 'to': 'refl1d'}, + {'from': lmfit.__path__[0], 'to': 'lmfit'}, + {'from': bumps.__path__[0], 'to': 'bumps'}, + {'from': dfols.__path__[0], 'to': 'dfols'}, + {'from': refl1d.__path__[0], 'to': 'refl1d'}, {'from': periodictable.__path__[0], 'to': 'periodictable'}, {'from': easyscience.__path__[0], 'to': 'easyscience'}, {'from': easyreflectometry.__path__[0], 'to': 'easyreflectometryLib'}, From dd098aef26dc0bf1dda83032b71f6b2d119f53f4 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 13:19:58 +0200 Subject: [PATCH 21/43] print available modules --- EasyReflectometryApp/main.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 4775af59..be2eccd2 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -1,3 +1,7 @@ +from pip._internal.operations.freeze import freeze +for line in freeze(): + print(line.split('==')) + import os import sys import pathlib From 8d8901f5a2474dd47a0aed7987f844b45b9f8d73 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 14:27:55 +0200 Subject: [PATCH 22/43] more recent version of pyinstaller --- EasyReflectometryApp/main.py | 4 ---- pyproject.toml | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index be2eccd2..4775af59 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -1,7 +1,3 @@ -from pip._internal.operations.freeze import freeze -for line in freeze(): - print(line.split('==')) - import os import sys import pathlib diff --git a/pyproject.toml b/pyproject.toml index 8bff13e4..e7fda080 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ dependencies = [ # These optional dependencies are for building the # application as a part of a Github Action. ci = [ - 'pyinstaller==6.5.*', + 'pyinstaller==6.10.*', 'scipy==1.12.*', 'dephell_licenses>=0.1.7', 'pywin32-ctypes>=0.2.0; platform_system == "win32"', From 08781e6e21e636aab10e38e695029974c76eb190 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 15:19:10 +0200 Subject: [PATCH 23/43] use python 3.10 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e7fda080..3bc6754c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ classifiers = [ "Topic :: Scientific/Engineering", "Development Status :: 3 - Alpha" ] -requires-python = ">=3.9, <3.10" +requires-python = ">=3.10, <3.11" dependencies = [ 'darkdetect>=0.3.1', 'easyreflectometry @ git+https://github.com/EasyScience/EasyReflectometryLib.git@adjustments-to-fit-app', From 4f7e80208ce04754219f5672ecb3785582125960 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 15:24:54 +0200 Subject: [PATCH 24/43] python 3.10 in gh action --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index f196b96a..c4e1e2f8 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -32,7 +32,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: 3.10 - name: Upgrade Pip run: python -m pip install --upgrade pip From 589fc9bd2bb25cc9b5afd802564ee939d9d04039 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Mon, 16 Sep 2024 15:27:52 +0200 Subject: [PATCH 25/43] python v 3.10 --- .github/workflows/macos-windows-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos-windows-build.yml b/.github/workflows/macos-windows-build.yml index c4e1e2f8..4dec797c 100644 --- a/.github/workflows/macos-windows-build.yml +++ b/.github/workflows/macos-windows-build.yml @@ -32,7 +32,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: 3.10 + python-version: '3.10' - name: Upgrade Pip run: python -m pip install --upgrade pip From 6ceea7c4e9d9a7367494c64cede3828c4803f29b Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 08:48:54 +0200 Subject: [PATCH 26/43] split out imports --- EasyReflectometryApp/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 4775af59..82edcf99 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -12,7 +12,8 @@ from PySide2.QtGui import QIcon from PySide2.QtQml import QQmlApplicationEngine from PySide2.QtWebEngine import QtWebEngine -from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py +from PySide2.QtWebEngineWidgets import QWebEnginePage # to call hook-PySide2.QtWebEngineWidgets.py +from PySide2.QtWebEngineWidgets import QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py # easyScience import EasyReflectometryApp From 0fa1b529fb7033dfca96ceb74a4414d6406a17c2 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 09:37:56 +0200 Subject: [PATCH 27/43] snap to python3.10 --- .github/workflows/documentation-build.yml | 2 +- snap/snapcraft.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/documentation-build.yml b/.github/workflows/documentation-build.yml index b9145af6..3b3c5e2b 100644 --- a/.github/workflows/documentation-build.yml +++ b/.github/workflows/documentation-build.yml @@ -28,7 +28,7 @@ jobs: - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: '3.10' - name: Install EasyReflectometry and dependencies run: | sudo apt install pandoc diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 8f6019db..e6b37e8c 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -12,7 +12,7 @@ architectures: - build-on: [amd64] environment: - PYTHONPATH: $SNAP:$SNAP/usr/bin/python3.9:$PYTHONPATH + PYTHONPATH: $SNAP:$SNAP/usr/bin/python3.10:$PYTHONPATH DISABLE_WAYLAND: 1 apps: @@ -35,7 +35,7 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: - - python3.9-venv + - python3.10-venv - libfreetype6 - libgomp1 - libpng16-16 @@ -56,36 +56,36 @@ parts: - libxcb-keysyms1 - libxcb-util1 build-packages: - - python3.9-venv - - python3.9-dev + - python3.10-venv + - python3.10-dev - git-all - pipenv build-environment: - - SNAPCRAFT_PYTHON_INTERPRETER: python3.9 + - SNAPCRAFT_PYTHON_INTERPRETER: python3.10 - PATH: $SNAPCRAFT_PART_INSTALL/bin:$PATH - PYTHONPATH: '' override-build: | # Work around a bug in snapcraft python plugin / gnome 3.38 extension # https://forum.snapcraft.io/t/build-a-snap-with-any-version-of-python-i-want/10420/8 - rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.9/distutils - cp -r /usr/lib/python3.9/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.9/distutils + rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils + cp -r /usr/lib/python3.10/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils mkdir -p $SNAPCRAFT_PART_INSTALL/usr/include/ - cp -r /usr/include/python3.9 $SNAPCRAFT_PART_INSTALL/usr/include/python3.9 + cp -r /usr/include/python3.10 $SNAPCRAFT_PART_INSTALL/usr/include/python3.10 snapcraftctl build pip install . #mkdir -p $SNAPCRAFT_PART_INSTALL/bin - echo "\$SNAP/bin/python3.9 \$SNAP/EasyReflectometryApp/main.py" > $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper + echo "\$SNAP/bin/python3.10 \$SNAP/EasyReflectometryApp/main.py" > $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper chmod +x $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper # Apply shebang rewrite as done by snapcraft find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec \ sed -i \ - "s|^#!${SNAPCRAFT_PART_INSTALL}/bin/python3.9$|#!/usr/bin/env python3|" {} \; + "s|^#!${SNAPCRAFT_PART_INSTALL}/bin/python3.10$|#!/usr/bin/env python3|" {} \; # debug #find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec head -n 1 {} \; From feafea04a9e3712c21368db9122e1d5060d1f3de Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 09:58:39 +0200 Subject: [PATCH 28/43] trying to strip snapcraft.yaml --- snap/snapcraft.yaml | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index e6b37e8c..d8442857 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -12,7 +12,7 @@ architectures: - build-on: [amd64] environment: - PYTHONPATH: $SNAP:$SNAP/usr/bin/python3.10:$PYTHONPATH + PYTHONPATH: $SNAP:$PYTHONPATH DISABLE_WAYLAND: 1 apps: @@ -35,7 +35,6 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: - - python3.10-venv - libfreetype6 - libgomp1 - libpng16-16 @@ -56,39 +55,12 @@ parts: - libxcb-keysyms1 - libxcb-util1 build-packages: - - python3.10-venv - - python3.10-dev - git-all - pipenv build-environment: - SNAPCRAFT_PYTHON_INTERPRETER: python3.10 - PATH: $SNAPCRAFT_PART_INSTALL/bin:$PATH - PYTHONPATH: '' - override-build: | - # Work around a bug in snapcraft python plugin / gnome 3.38 extension - # https://forum.snapcraft.io/t/build-a-snap-with-any-version-of-python-i-want/10420/8 - - rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils - cp -r /usr/lib/python3.10/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils - mkdir -p $SNAPCRAFT_PART_INSTALL/usr/include/ - cp -r /usr/include/python3.10 $SNAPCRAFT_PART_INSTALL/usr/include/python3.10 - - snapcraftctl build - - pip install . - - #mkdir -p $SNAPCRAFT_PART_INSTALL/bin - echo "\$SNAP/bin/python3.10 \$SNAP/EasyReflectometryApp/main.py" > $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper - chmod +x $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper - - # Apply shebang rewrite as done by snapcraft - - find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec \ - sed -i \ - "s|^#!${SNAPCRAFT_PART_INSTALL}/bin/python3.10$|#!/usr/bin/env python3|" {} \; - - # debug - #find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec head -n 1 {} \; plugs: shmem: From 6722a6e9157192a385ee0c43ada51084cce9e210 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 10:07:38 +0200 Subject: [PATCH 29/43] added python3.10 to stage and build packages --- snap/snapcraft.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index d8442857..08fe7216 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -35,6 +35,7 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: + - python3.10 - libfreetype6 - libgomp1 - libpng16-16 @@ -55,6 +56,7 @@ parts: - libxcb-keysyms1 - libxcb-util1 build-packages: + - python3.10 - git-all - pipenv build-environment: From 6808ef1d9dd1682dd52c5c4c7a5c4dd461c0214d Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 10:14:19 +0200 Subject: [PATCH 30/43] copy code from internet (python3.10) --- snap/snapcraft.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 08fe7216..3f0edc21 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -35,7 +35,8 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: - - python3.10 + - python3.10-minimal + - python3.10-venv - libfreetype6 - libgomp1 - libpng16-16 From 9735e2af221b32bd199a030506ccb696223e42cc Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 10:20:35 +0200 Subject: [PATCH 31/43] just trying something --- snap/snapcraft.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 3f0edc21..e29b6420 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -60,10 +60,6 @@ parts: - python3.10 - git-all - pipenv - build-environment: - - SNAPCRAFT_PYTHON_INTERPRETER: python3.10 - - PATH: $SNAPCRAFT_PART_INSTALL/bin:$PATH - - PYTHONPATH: '' plugs: shmem: From 9cc3271030189cbb5ec321f7ffb94530564cec78 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 10:39:12 +0200 Subject: [PATCH 32/43] back to main but python3.9 replaced with python3.10 --- snap/snapcraft.yaml | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index e29b6420..4b11c04d 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -12,7 +12,7 @@ architectures: - build-on: [amd64] environment: - PYTHONPATH: $SNAP:$PYTHONPATH + PYTHONPATH: $SNAP:$SNAP/usr/bin/python3.9:$PYTHONPATH DISABLE_WAYLAND: 1 apps: @@ -35,7 +35,6 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: - - python3.10-minimal - python3.10-venv - libfreetype6 - libgomp1 @@ -57,9 +56,39 @@ parts: - libxcb-keysyms1 - libxcb-util1 build-packages: - - python3.10 + - python3.10-venv + - python3.10-dev - git-all - pipenv + build-environment: + - SNAPCRAFT_PYTHON_INTERPRETER: python3.10 + - PATH: $SNAPCRAFT_PART_INSTALL/bin:$PATH + - PYTHONPATH: '' + override-build: | + # Work around a bug in snapcraft python plugin / gnome 3.38 extension + # https://forum.snapcraft.io/t/build-a-snap-with-any-version-of-python-i-want/10420/8 + + rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils + cp -r /usr/lib/python3.10/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils + mkdir -p $SNAPCRAFT_PART_INSTALL/usr/include/ + cp -r /usr/include/python3.10 $SNAPCRAFT_PART_INSTALL/usr/include/python3.10 + + snapcraftctl build + + pip install . + + #mkdir -p $SNAPCRAFT_PART_INSTALL/bin + echo "\$SNAP/bin/python3.9 \$SNAP/EasyReflectometryApp/main.py" > $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper + chmod +x $SNAPCRAFT_PART_INSTALL/easy-reflectometry-wrapper + + # Apply shebang rewrite as done by snapcraft + + find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec \ + sed -i \ + "s|^#!${SNAPCRAFT_PART_INSTALL}/bin/python3.9$|#!/usr/bin/env python3|" {} \; + + # debug + #find $SNAPCRAFT_PART_INSTALL/bin/ -maxdepth 1 -mindepth 1 -type f -executable -exec head -n 1 {} \; plugs: shmem: From 0434a293e67904693cbb80aeb108defb0cf549b9 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 10:45:38 +0200 Subject: [PATCH 33/43] removed python3.10-dev --- snap/snapcraft.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 4b11c04d..2097fa45 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -57,7 +57,6 @@ parts: - libxcb-util1 build-packages: - python3.10-venv - - python3.10-dev - git-all - pipenv build-environment: From ee7f2445a024efe0e81a2b579f068f7d48d0c060 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 12:09:41 +0200 Subject: [PATCH 34/43] snapcraft back to main --- snap/snapcraft.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 2097fa45..8f6019db 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -35,7 +35,7 @@ parts: snapcraftctl set-version "$(cat pyproject.toml | grep version | head -n 1 | awk -F'"' '$0=$2' | sed 's/ //g')" stage-packages: - - python3.10-venv + - python3.9-venv - libfreetype6 - libgomp1 - libpng16-16 @@ -56,21 +56,22 @@ parts: - libxcb-keysyms1 - libxcb-util1 build-packages: - - python3.10-venv + - python3.9-venv + - python3.9-dev - git-all - pipenv build-environment: - - SNAPCRAFT_PYTHON_INTERPRETER: python3.10 + - SNAPCRAFT_PYTHON_INTERPRETER: python3.9 - PATH: $SNAPCRAFT_PART_INSTALL/bin:$PATH - PYTHONPATH: '' override-build: | # Work around a bug in snapcraft python plugin / gnome 3.38 extension # https://forum.snapcraft.io/t/build-a-snap-with-any-version-of-python-i-want/10420/8 - rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils - cp -r /usr/lib/python3.10/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.10/distutils + rm -rf $SNAPCRAFT_PART_INSTALL/usr/lib/python3.9/distutils + cp -r /usr/lib/python3.9/distutils $SNAPCRAFT_PART_INSTALL/usr/lib/python3.9/distutils mkdir -p $SNAPCRAFT_PART_INSTALL/usr/include/ - cp -r /usr/include/python3.10 $SNAPCRAFT_PART_INSTALL/usr/include/python3.10 + cp -r /usr/include/python3.9 $SNAPCRAFT_PART_INSTALL/usr/include/python3.9 snapcraftctl build From 589bb237e61b386c77a728ac8483002178f350c2 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 12:10:41 +0200 Subject: [PATCH 35/43] python3.9 also accepted --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3bc6754c..8ad3481a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ classifiers = [ "Topic :: Scientific/Engineering", "Development Status :: 3 - Alpha" ] -requires-python = ">=3.10, <3.11" +requires-python = ">=3.9, <3.11" dependencies = [ 'darkdetect>=0.3.1', 'easyreflectometry @ git+https://github.com/EasyScience/EasyReflectometryLib.git@adjustments-to-fit-app', From 8a3eb630599394305ed302bde9b81ce9a532561b Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 13:31:02 +0200 Subject: [PATCH 36/43] adjustment for Constraint path --- EasyReflectometryApp/Logic/Proxies/Parameter.py | 6 +++--- EasyReflectometryApp/main.py | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/EasyReflectometryApp/Logic/Proxies/Parameter.py b/EasyReflectometryApp/Logic/Proxies/Parameter.py index d28e5d14..e1722a86 100644 --- a/EasyReflectometryApp/Logic/Proxies/Parameter.py +++ b/EasyReflectometryApp/Logic/Proxies/Parameter.py @@ -8,9 +8,9 @@ from PySide2.QtCore import Slot import numpy as np -from easyscience.fitting.Constraints import ObjConstraint -from easyscience.fitting.Constraints import NumericConstraint -from easyscience.fitting.Constraints import FunctionalConstraint +from easyscience.Constraints import ObjConstraint +from easyscience.Constraints import NumericConstraint +from easyscience.Constraints import FunctionalConstraint from easyscience.Utils.io.xml import XMLSerializer from easyscience import global_object from easyscience.Utils.classTools import generatePath diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 82edcf99..8d6f625a 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -21,6 +21,8 @@ import easyApp # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator +from easyscience import AvailableMinimizers +print ([minimizer.name for minimizer in AvailableMinimizers]) from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy # Global vars From bfc387fe11689d6b995f5787d93069464106ed67 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 13:49:58 +0200 Subject: [PATCH 37/43] AvailableMinimizers in main --- EasyReflectometryApp/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 8d6f625a..b7fb32c9 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -23,6 +23,8 @@ # from easyApp.Logic.Translate import Translator from easyscience import AvailableMinimizers print ([minimizer.name for minimizer in AvailableMinimizers]) +print (AvailableMinimizers.LMFit_leastsq.name) + from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy # Global vars From ec5a448a99365d46c19a0f18c6df78f0acc151b1 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 14:05:09 +0200 Subject: [PATCH 38/43] try to import minimizers directly in main --- EasyReflectometryApp/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index b7fb32c9..53a83b2e 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -21,9 +21,13 @@ import easyApp # from easyApp.Logic.Maintenance import Updater # from easyApp.Logic.Translate import Translator -from easyscience import AvailableMinimizers -print ([minimizer.name for minimizer in AvailableMinimizers]) -print (AvailableMinimizers.LMFit_leastsq.name) +#from easyscience import AvailableMinimizers +#print ([minimizer.name for minimizer in AvailableMinimizers]) +#print (AvailableMinimizers.LMFit_leastsq.name) + +import lmfit +import dfols +import bumps from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy From 86d8262df3bf4e50b9cc9f2693b63957ffd74e9c Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Tue, 17 Sep 2024 14:55:15 +0200 Subject: [PATCH 39/43] remove copied line --- tools/Scripts/FreezeApp.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/Scripts/FreezeApp.py b/tools/Scripts/FreezeApp.py index b784506d..9551de19 100755 --- a/tools/Scripts/FreezeApp.py +++ b/tools/Scripts/FreezeApp.py @@ -49,7 +49,6 @@ def addedData() -> List[str]: {'from': lmfit.__path__[0], 'to': 'lmfit'}, {'from': bumps.__path__[0], 'to': 'bumps'}, {'from': dfols.__path__[0], 'to': 'dfols'}, - {'from': refl1d.__path__[0], 'to': 'refl1d'}, {'from': periodictable.__path__[0], 'to': 'periodictable'}, {'from': easyscience.__path__[0], 'to': 'easyscience'}, {'from': easyreflectometry.__path__[0], 'to': 'easyreflectometryLib'}, From d557cfa861caa49fa6d5e713174d036dfb67028f Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Wed, 18 Sep 2024 06:05:15 +0200 Subject: [PATCH 40/43] try to determine if it is enough to just lower --- EasyReflectometryApp/main.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index 53a83b2e..f8d1bd7e 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -19,15 +19,15 @@ import EasyReflectometryApp import toml import easyApp -# from easyApp.Logic.Maintenance import Updater -# from easyApp.Logic.Translate import Translator -#from easyscience import AvailableMinimizers -#print ([minimizer.name for minimizer in AvailableMinimizers]) -#print (AvailableMinimizers.LMFit_leastsq.name) - -import lmfit -import dfols -import bumps + +import pkg_resources +installed_packages = {pkg.key for pkg in pkg_resources.working_set} +if 'lmfit' in installed_packages: + exit('LMFit.') +installed_packages = {pkg.key.lower() for pkg in pkg_resources.working_set} +if 'lmfit' in installed_packages: + exit('LMFit lower.') + from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy From ed855f0b2213a8713b858994a88c6a98d02087e8 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Wed, 18 Sep 2024 06:27:03 +0200 Subject: [PATCH 41/43] code cleaning --- EasyReflectometryApp/main.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/EasyReflectometryApp/main.py b/EasyReflectometryApp/main.py index f8d1bd7e..5dbd2e1e 100644 --- a/EasyReflectometryApp/main.py +++ b/EasyReflectometryApp/main.py @@ -4,8 +4,8 @@ import platform import argparse import darkdetect +import toml -# PySide from PySide2.QtCore import QUrl from PySide2.QtWidgets import QApplication from PySide2.QtGui import Qt @@ -15,20 +15,9 @@ from PySide2.QtWebEngineWidgets import QWebEnginePage # to call hook-PySide2.QtWebEngineWidgets.py from PySide2.QtWebEngineWidgets import QWebEngineView # to call hook-PySide2.QtWebEngineWidgets.py -# easyScience import EasyReflectometryApp -import toml import easyApp -import pkg_resources -installed_packages = {pkg.key for pkg in pkg_resources.working_set} -if 'lmfit' in installed_packages: - exit('LMFit.') -installed_packages = {pkg.key.lower() for pkg in pkg_resources.working_set} -if 'lmfit' in installed_packages: - exit('LMFit lower.') - - from EasyReflectometryApp.Logic.PyQmlProxy import PyQmlProxy # Global vars From b49d2995ddea33a913a9e24de0eae5d2dbc5ea46 Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Wed, 18 Sep 2024 06:39:37 +0200 Subject: [PATCH 42/43] reverting FreezeApp --- tools/Scripts/FreezeApp.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tools/Scripts/FreezeApp.py b/tools/Scripts/FreezeApp.py index 9551de19..52644066 100755 --- a/tools/Scripts/FreezeApp.py +++ b/tools/Scripts/FreezeApp.py @@ -9,9 +9,6 @@ import shiboken2 import refnx import refl1d -import bumps -import lmfit -import dfols import periodictable import easyscience import easyreflectometry @@ -46,9 +43,6 @@ def addedData() -> List[str]: #{'from': importlib.import_module(lib).__path__[0], 'to': lib}, {'from': refnx.__path__[0], 'to': 'refnx'}, {'from': refl1d.__path__[0], 'to': 'refl1d'}, - {'from': lmfit.__path__[0], 'to': 'lmfit'}, - {'from': bumps.__path__[0], 'to': 'bumps'}, - {'from': dfols.__path__[0], 'to': 'dfols'}, {'from': periodictable.__path__[0], 'to': 'periodictable'}, {'from': easyscience.__path__[0], 'to': 'easyscience'}, {'from': easyreflectometry.__path__[0], 'to': 'easyreflectometryLib'}, From 54854166f7fbfbfb5ee587a68894030626637e5e Mon Sep 17 00:00:00 2001 From: Andreas Pedersen Date: Thu, 19 Sep 2024 07:21:43 +0200 Subject: [PATCH 43/43] pyproject --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8ad3481a..4215aca1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "hatchling.build" # Note that while the project is called EasyReflectometryApp # the application itself is EasyReflectometry. name = "EasyReflectometryApp" -version = "0.0.10" +version = "0.0.11" description = "Making reflectometry data analysis and modelling easy." authors = [ {name = "Andrew R. McCluskey", email = "andrew.mccluskey@ess.eu"}, @@ -31,7 +31,7 @@ classifiers = [ requires-python = ">=3.9, <3.11" dependencies = [ 'darkdetect>=0.3.1', - 'easyreflectometry @ git+https://github.com/EasyScience/EasyReflectometryLib.git@adjustments-to-fit-app', + 'easyreflectometry>=1.1.1', 'easyApp @ git+https://github.com/easyScience/easyApp.git@pyside2', 'matplotlib>=3.4.2', 'toml>=0.10.2',