diff --git a/Data/Calibration.py b/Data/Calibration.py index d14a1c2..4122516 100644 --- a/Data/Calibration.py +++ b/Data/Calibration.py @@ -3,6 +3,8 @@ class CalCurve(): def __init__(self): self.name = "None" self.formula = "y=x" + self.response = "" + self.units = "" def __call__(self, x): return x @@ -16,6 +18,8 @@ class AlSi7Mg(CalCurve): def __init__(self): self.name = "AlSi7Mg" self.formula = "N/A" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return x @@ -26,16 +30,20 @@ class Al6061(CalCurve): def __init__(self): self.name = "Al6061" self.formula = "T=(V+84.66)/1.45" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return (x + 84.661) / 1.4516 -class _15_5PH(CalCurve): +class SS15_5PH(CalCurve): def __init__(self): self.name = "15-5PH Stainless Steel" self.formula = "N/A" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return x @@ -46,6 +54,8 @@ class H13(CalCurve): def __init__(self): self.name = "H13 Tool Steel" self.formula = "N/A" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return x @@ -56,6 +66,8 @@ class Inconel625(CalCurve): def __init__(self): self.name = "Inconel 625" self.formula = "N/A" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return x @@ -66,6 +78,8 @@ class Inconel718(CalCurve): def __init__(self): self.name = "Inconel 718" self.formula = "N/A" + self.response = "Temperature" + self.units = "°C" def __call__(self, x): return x @@ -76,6 +90,8 @@ class Custom(CalCurve): def __init__(self): self.name = "Custom" self.formula = "y=mx+c" + self.response = "Response" + self.units = "U" def __call__(self, x): return x diff --git a/Data/ThresholdFunctions.py b/Data/ThresholdFunctions.py index 5cf91be..c3d21c7 100644 --- a/Data/ThresholdFunctions.py +++ b/Data/ThresholdFunctions.py @@ -1,4 +1,4 @@ -import operator as __op +import operator as _op class __Base(): @@ -16,7 +16,7 @@ class Greater(__Base): self.name = ">" def __call__(self, *args): - return __op.gt(*args) + return _op.gt(*args) class GreaterOrEqual(__Base): @@ -25,7 +25,7 @@ class GreaterOrEqual(__Base): self.name = "≥" def __call__(self, *args): - return __op.ge(*args) + return _op.ge(*args) class Equal(__Base): @@ -34,7 +34,7 @@ class Equal(__Base): self.name = "=" def __call__(self, *args): - return __op.eq(*args) + return _op.eq(*args) class NotEqual(__Base): @@ -43,7 +43,7 @@ class NotEqual(__Base): self.name = "≠" def __call__(self, *args): - return __op.ne(*args) + return _op.ne(*args) class LessOrEqual(__Base): @@ -52,7 +52,7 @@ class LessOrEqual(__Base): self.name = "≤" def __call__(self, *args): - return __op.le(*args) + return _op.le(*args) class Less(__Base): @@ -61,4 +61,4 @@ class Less(__Base): self.name = "<" def __call__(self, *args): - return __op.lt(*args) + return _op.lt(*args) diff --git a/Main/Main_Desktop.py b/Main/Main_Desktop.py index 86f0ff2..8f76014 100644 --- a/Main/Main_Desktop.py +++ b/Main/Main_Desktop.py @@ -42,12 +42,12 @@ class Main(Screen): self.mtpy.progress_bars["_layers_to_3dplot"] = self.ids.layers_to_3dplot_progbar # noqa self.mtpy.progress_bars["_layers_to_3dplot_interactive"] = self.ids.layers_to_3dplot_interactive_progbar # noqa self.mtpy.progress_bars["samples_to_figures"] = self.ids.samples_to_figures_progbar # noqa - self.mtpy.progress_bars["samples_to_3dplot"] = self.ids.samples_to_3dplot_progbar # noqa - self.mtpy.progress_bars["samples_to_3dplot_interactive"] = self.ids.samples_to_3dplot_interactive_progbar # noqa + self.mtpy.progress_bars["samples_to_3dplots"] = self.ids.samples_to_3dplots_progbar # noqa + self.mtpy.progress_bars["samples_to_3dplots_interactive"] = self.ids.samples_to_3dplots_interactive_progbar # noqa self.mtpy.progress_bars["separate_samples"] = self.ids.kmeans_separate_samples_progbar # noqa # self.mtpy.progress_bars["threshold_all_layers"] = self.ids.avgspeed_threshold_progbar # noqa # self.mtpy.progress_bars["threshold_all_layers"] = self.ids.avgtemp_threshold_progbar # noqa - self.mtpy.progress_bars["temp_data_to_csv"] = self.ids.kmeans_separate_samples_progbar # noqa + self.mtpy.progress_bars["temp_data_to_csv"] = self.ids.temp_data_to_csv_progbar # noqa # Starting items in cache starting_cache = { # Shared variables @@ -58,9 +58,9 @@ class Main(Screen): "calibration_curve": False, # last cal curve used # Dropdown population lists "printer_types": ("None", "3D Systems", "Aconity", "GE Additive", "Renishaw", "Stratasys"), - "calibration_curves": [v() for k, v in Calibration.__dict__.items() if "__" not in k], + "calibration_curves": [v() for k, v in Calibration.__dict__.items() if k[0] != "_"], "static_fileformats": ("png", "pdf", "ps", "eps", "svg"), # Allowed static formats - "thresh_functions": [v() for k, v in ThresholdFunctions.__dict__.items() if "__" not in k], + "thresh_functions": [v() for k, v in ThresholdFunctions.__dict__.items() if k[0] != "_"], # Progress Bars "progress_bars": self.mtpy.progress_bars } @@ -74,18 +74,18 @@ class Main(Screen): # The dropdown for selecting the printer type self.ids.printer_type_dropdown.populate_dropdown(self.cache.printer_types) # The dropdown for calibration curves - self.ids.calibration_curve_dropdown.populate_dropdown(self.cache.calibration_curves) + self.ids.calibration_curve_dropdown.populate_dropdown(self.cache.calibration_curves, default_selection=None) # The dropdowns for matplotlib filetype options static_filetype_dropdowns = ( self.ids.layers_to_figures_filetype_dropdown, self.ids.layers_to_3dplot_filetype_dropdown, self.ids.samples_to_figures_filetype_dropdown, - self.ids.samples_to_3dplot_filetype_dropdown, + self.ids.samples_to_3dplots_filetype_dropdown, ) for dropdown in static_filetype_dropdowns: dropdown.populate_dropdown(self.cache.static_fileformats) # The dropdowns for the thresholding functions - self.ids.avgtemp_thresh_function_dropdown.populate_dropdown(self.cache.thresh_functions) + self.ids.avgtemp_thresh_function_dropdown.populate_dropdown(self.cache.thresh_functions, default_selection=">") # Property returns a string summarising the status of data processing @property @@ -212,6 +212,7 @@ class Main(Screen): else: if cal_curve_selection is not self.cache.calibration_curve: self.mtpy.apply_calibration_curve(cal_curve_selection) + self.mtpy.wlabel = f"{cal_curve_selection.response} ({cal_curve_selection.units})" self.cache.calibration_curve = cal_curve_selection self.update_data_status() @@ -303,22 +304,22 @@ class Main(Screen): scatterparams=scatterparams) # A wrapper function translating application state into a call to the - # mtpy function samples_to_3dplot + # mtpy function samples_to_3dplots @run_in_thread - def samples_to_3dplot(self): + def samples_to_3dplots(self): # get filetype and if not allowed replace with default (png) - filetype = self.ids.samples_to_3dplot_filetype_dropdown.text + filetype = self.ids.samples_to_3dplots_filetype_dropdown.text if filetype not in self.cache.static_fileformats: filetype = "png" # get checkbox parameters - plot_w = self.ids.samples_to_3dplot_plot_w.active - colorbar = self.ids.samples_to_3dplot_colorbar.active + plot_w = self.ids.samples_to_3dplots_plot_w.active + colorbar = self.ids.samples_to_3dplots_colorbar.active # then parse kwarg params figureparams = self.parse_kwargs( - self.ids.samples_to_3dplot_figureparams.text) + self.ids.samples_to_3dplots_figureparams.text) plotparams = self.parse_kwargs( - self.ids.samples_to_3dplot_plotparams.text) - self.mtpy.samples_to_3dplot(self.cache.out_path, + self.ids.samples_to_3dplots_plotparams.text) + self.mtpy.samples_to_3dplots(self.cache.out_path, filetype=filetype, plot_w=plot_w, colorbar=colorbar, @@ -328,18 +329,18 @@ class Main(Screen): # A wrapper function translating application state into a call to the # mtpy function layers_to_3dplot_interactive @run_in_thread - def samples_to_3dplot_interactive(self): + def samples_to_3dplots_interactive(self): # get checkbox parameters - plot_w = self.ids.samples_to_3dplot_interactive_plot_w.active - sliceable = self.ids.samples_to_3dplot_interactive_sliceable.active - downsampling = self.ids.samples_to_3dplot_interactive_downsampling.text + plot_w = self.ids.samples_to_3dplots_interactive_plot_w.active + sliceable = self.ids.samples_to_3dplots_interactive_sliceable.active + downsampling = self.ids.samples_to_3dplots_interactive_downsampling.text if downsampling == "": downsampling = 1 else: downsampling = int(downsampling) # then parse kwarg params - plotparams = self.parse_kwargs(self.ids.samples_to_3dplot_interactive_plotparams.text) # noqa - self.mtpy.samples_to_3dplot_interactive(self.cache.out_path, + plotparams = self.parse_kwargs(self.ids.samples_to_3dplots_interactive_plotparams.text) # noqa + self.mtpy.samples_to_3dplots_interactive(self.cache.out_path, plot_w=plot_w, sliceable=sliceable, downsampling=downsampling, @@ -367,10 +368,7 @@ class Main(Screen): # mtpy module to threshold all layers based on temperature @run_in_thread def avgtemp_threshold(self): - # get filetype and if not allowed replace with default (png) - thresh_function = self.ids.avgtemp_thresh_function_dropdown.text - if thresh_function not in self.cache.thresh_functions.keys(): - thresh_function = ">" + # thresh_function = self.ids.avgtemp_thresh_function_dropdown.text # get threshold percentage thresh_percent = float(self.ids.avgtemp_thresh_thresh_percent.text) # Link to progress bar (at time of call since this bar is shared) @@ -380,7 +378,7 @@ class Main(Screen): self.mtpy.avgw_threshold, { "threshold_percent": thresh_percent, - "comparison_func": self.cache.thresh_functions[thresh_function] + "comparison_func": self.ids.avgtemp_thresh_function_dropdown.current_selection } ) @@ -407,7 +405,7 @@ class Main(Screen): # This function generates datasheets @run_in_thread def temp_data_to_csv(self): - confidence_interval = self.ids.temp_data_to_csv_confinterval + confidence_interval = str(self.ids.temp_data_to_csv_confinterval) confidence_interval = confidence_interval.strip() if confidence_interval.isdigit(): confidence_interval = float(confidence_interval) diff --git a/Templates/dropdown_button.py b/Templates/dropdown_button.py index 0d2652a..c8af58d 100644 --- a/Templates/dropdown_button.py +++ b/Templates/dropdown_button.py @@ -10,7 +10,7 @@ class DropdownButton(Button): def __init__(self, option_list=None, - default_selection=None, + default_selection="None", bound_textfields={}, **kwargs): # ensure "test" kwarg isnt present @@ -34,15 +34,10 @@ class DropdownButton(Button): super(DropdownButton, self).__init__(**self.kwargs) if option_list is not None: - self.populate_dropdown(option_list) - - if type(default_selection) == str: - self.current_selection = self.objects_dict[default_selection] - else: - self.current_selection = default_selection + self.populate_dropdown(option_list, default_selection) # Populates dropdown with contents of list given - def populate_dropdown(self, option_list): + def populate_dropdown(self, option_list, default_selection=None): kwargs = self.kwargs.copy() kwargs["size_hint_y"] = None if "height" not in kwargs: @@ -55,7 +50,7 @@ class DropdownButton(Button): self.objects_dict = {str(x): x for x in option_list} - for x in self.objects_dict.keys(): + for x in self.objects_dict: button = Button(text=x, **kwargs) button.bind(on_release=self._bind_button) self.dropdown_list.add_widget(button) @@ -63,6 +58,9 @@ class DropdownButton(Button): self.bind(on_release=self.dropdown_list.open) self.dropdown_list.bind(on_select=self._select_item) + if default_selection is not None: + self._select_item(self, default_selection) + # Function to bind button to dropdown def _bind_button(self, btn): self.dropdown_list.select(btn.text) diff --git a/Templates/melter_desktop.kv b/Templates/melter_desktop.kv index 23d13c4..ef96f64 100644 --- a/Templates/melter_desktop.kv +++ b/Templates/melter_desktop.kv @@ -672,7 +672,7 @@ size_hint_y: row_y_hint # This button will be a dropdown DropdownButton: - id: samples_to_3dplot_filetype_dropdown + id: samples_to_3dplots_filetype_dropdown text: "select file type (png)" size_hint_x: 0.25 size_hint_y: 0.5 @@ -682,7 +682,7 @@ size_hint_y: 0.5 # Checkboxes for toggling plot colouring and colourbars CheckBox: - id: samples_to_3dplot_plot_w + id: samples_to_3dplots_plot_w active: True size_hint_x: 0.1 size_hint_y: 0.5 @@ -694,7 +694,7 @@ halign: "left" valign: "middle" CheckBox: - id: samples_to_3dplot_colorbar + id: samples_to_3dplots_colorbar active: True size_hint_x: 0.1 size_hint_y: 0.5 @@ -707,23 +707,23 @@ valign: "middle" # Text input for layer/sample filters TextInput: - id: samples_to_3dplot_layerfilter + id: samples_to_3dplots_layerfilter size_hint_x: 0.25 size_hint_y: 0.5 hint_text: "Layer filter..." TextInput: - id: samples_to_3dplot_samplefilter + id: samples_to_3dplots_samplefilter size_hint_x: 0.25 size_hint_y: 0.5 hint_text: "Sample filter..." # And text input for other figure parameters TextInput: - id: samples_to_3dplot_figureparams + id: samples_to_3dplots_figureparams size_hint_x: 0.5 size_hint_y: 0.5 hint_text: "Figure parameters..." TextInput: - id: samples_to_3dplot_plotparams + id: samples_to_3dplots_plotparams size_hint_x: 0.5 size_hint_y: 0.5 hint_text: "Plot parameters..." @@ -733,9 +733,9 @@ text: "Generate static 3d\nsample figures" size_hint_x: 0.25 size_hint_y: row_y_hint - on_press: root.samples_to_3dplot() + on_press: root.samples_to_3dplots() ProgressBar: - id: samples_to_3dplot_progbar + id: samples_to_3dplots_progbar size_hint_x: 0.75 size_hint_y: row_y_hint value: 0 @@ -761,22 +761,22 @@ halign: "right" valign: "middle" TextInput: - id: samples_to_3dplot_interactive_downsampling + id: samples_to_3dplots_interactive_downsampling hint_text: "1" size_hint_x: 0.083 size_hint_y: 0.5 TextInput: - id: samples_to_3dplot_interactive_layerfilter + id: samples_to_3dplots_interactive_layerfilter size_hint_x: 0.375 size_hint_y: 0.5 hint_text: "Layer Filter..." TextInput: - id: samples_to_3dplot_interactive_samplefilter + id: samples_to_3dplots_interactive_samplefilter size_hint_x: 0.375 size_hint_y: 0.5 hint_text: "Sample Filter..." CheckBox: - id: samples_to_3dplot_interactive_plot_w + id: samples_to_3dplots_interactive_plot_w active: True size_hint_x: 0.025 size_hint_y: 0.5 @@ -788,7 +788,7 @@ halign: "left" valign: "middle" CheckBox: - id: samples_to_3dplot_interactive_sliceable + id: samples_to_3dplots_interactive_sliceable active: True size_hint_x: 0.025 size_hint_y: 0.5 @@ -800,7 +800,7 @@ halign: "left" valign: "middle" TextInput: - id: samples_to_3dplot_interactive_plotparams + id: samples_to_3dplots_interactive_plotparams size_hint_x: 0.75 size_hint_y: 0.5 hint_text: "Plot parameters..." @@ -810,9 +810,9 @@ text: "Generate interactive 3d\nsample figures" size_hint_x: 0.25 size_hint_y: row_y_hint - on_press: root.samples_to_3dplot_interactive() + on_press: root.samples_to_3dplots_interactive() ProgressBar: - id: samples_to_3dplot_interactive_progbar + id: samples_to_3dplots_interactive_progbar size_hint_x: 0.75 size_hint_y: row_y_hint value: 0 diff --git a/poetry.lock b/poetry.lock index 138f2c4..e618fac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -108,6 +108,14 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "joblib" +version = "1.1.0" +description = "Lightweight pipelining with Python functions" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "kivy" version = "2.0.0" @@ -446,6 +454,26 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +[[package]] +name = "scikit-learn" +version = "1.0.2" +description = "A set of python modules for machine learning and data mining" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +joblib = ">=0.11" +numpy = ">=1.14.6" +scipy = ">=1.1.0" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=2.2.3)", "pandas (>=0.25.0)", "memory-profiler (>=0.57.0)"] +docs = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.0.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)"] +tests = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "black (>=21.6b0)", "mypy (>=0.770)", "pyamg (>=4.0.0)"] + [[package]] name = "scipy" version = "1.8.0" @@ -492,6 +520,14 @@ python-versions = ">=3.6" [package.extras] doc = ["reno", "sphinx", "tornado (>=4.5)"] +[[package]] +name = "threadpoolctl" +version = "3.1.0" +description = "threadpoolctl" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "tomli" version = "2.0.1" @@ -540,7 +576,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "3.9.10" -content-hash = "5c3096aa86126e5494ad825be7e62c0138e33e076ff2fb09d0d2e7b1c0a1b198" +content-hash = "ff2c32b9689293a65aaf606d637beb00185917031f036baf242a1baf055b86f4" [metadata.files] altgraph = [ @@ -586,6 +622,10 @@ idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] +joblib = [ + {file = "joblib-1.1.0-py2.py3-none-any.whl", hash = "sha256:f21f109b3c7ff9d95f8387f752d0d9c34a02aa2f7060c2135f465da0e5160ff6"}, + {file = "joblib-1.1.0.tar.gz", hash = "sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35"}, +] kivy = [ {file = "Kivy-2.0.0-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:256846daa1a35b54b00426f7468423a962c3d8f909d7e8c713acab55c3281dee"}, {file = "Kivy-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bfb6b801599eac5aa9388308119d42a637a495945c79e2e2a3f6ef60c563c770"}, @@ -899,6 +939,40 @@ requests = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] +scikit-learn = [ + {file = "scikit-learn-1.0.2.tar.gz", hash = "sha256:b5870959a5484b614f26d31ca4c17524b1b0317522199dc985c3b4256e030767"}, + {file = "scikit_learn-1.0.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:da3c84694ff693b5b3194d8752ccf935a665b8b5edc33a283122f4273ca3e687"}, + {file = "scikit_learn-1.0.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:75307d9ea39236cad7eea87143155eea24d48f93f3a2f9389c817f7019f00705"}, + {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f14517e174bd7332f1cca2c959e704696a5e0ba246eb8763e6c24876d8710049"}, + {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9aac97e57c196206179f674f09bc6bffcd0284e2ba95b7fe0b402ac3f986023"}, + {file = "scikit_learn-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:d93d4c28370aea8a7cbf6015e8a669cd5d69f856cc2aa44e7a590fb805bb5583"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:85260fb430b795d806251dd3bb05e6f48cdc777ac31f2bcf2bc8bbed3270a8f5"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a053a6a527c87c5c4fa7bf1ab2556fa16d8345cf99b6c5a19030a4a7cd8fd2c0"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:245c9b5a67445f6f044411e16a93a554edc1efdcce94d3fc0bc6a4b9ac30b752"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158faf30684c92a78e12da19c73feff9641a928a8024b4fa5ec11d583f3d8a87"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08ef968f6b72033c16c479c966bf37ccd49b06ea91b765e1cc27afefe723920b"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16455ace947d8d9e5391435c2977178d0ff03a261571e67f627c8fee0f9d431a"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:2f3b453e0b149898577e301d27e098dfe1a36943f7bb0ad704d1e548efc3b448"}, + {file = "scikit_learn-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:46f431ec59dead665e1370314dbebc99ead05e1c0a9df42f22d6a0e00044820f"}, + {file = "scikit_learn-1.0.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:ff3fa8ea0e09e38677762afc6e14cad77b5e125b0ea70c9bba1992f02c93b028"}, + {file = "scikit_learn-1.0.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9369b030e155f8188743eb4893ac17a27f81d28a884af460870c7c072f114243"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7d6b2475f1c23a698b48515217eb26b45a6598c7b1840ba23b3c5acece658dbb"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:285db0352e635b9e3392b0b426bc48c3b485512d3b4ac3c7a44ec2a2ba061e66"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb33fe1dc6f73dc19e67b264dbb5dde2a0539b986435fdd78ed978c14654830"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1391d1a6e2268485a63c3073111fe3ba6ec5145fc957481cfd0652be571226d"}, + {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3744dabc56b50bec73624aeca02e0def06b03cb287de26836e730659c5d29c"}, + {file = "scikit_learn-1.0.2-cp38-cp38-win32.whl", hash = "sha256:a999c9f02ff9570c783069f1074f06fe7386ec65b84c983db5aeb8144356a355"}, + {file = "scikit_learn-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:7626a34eabbf370a638f32d1a3ad50526844ba58d63e3ab81ba91e2a7c6d037e"}, + {file = "scikit_learn-1.0.2-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:a90b60048f9ffdd962d2ad2fb16367a87ac34d76e02550968719eb7b5716fd10"}, + {file = "scikit_learn-1.0.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7a93c1292799620df90348800d5ac06f3794c1316ca247525fa31169f6d25855"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eabceab574f471de0b0eb3f2ecf2eee9f10b3106570481d007ed1c84ebf6d6a1"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:55f2f3a8414e14fbee03782f9fe16cca0f141d639d2b1c1a36779fa069e1db57"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80095a1e4b93bd33261ef03b9bc86d6db649f988ea4dbcf7110d0cded8d7213d"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa38a1b9b38ae1fad2863eff5e0d69608567453fdfc850c992e6e47eb764e846"}, + {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff746a69ff2ef25f62b36338c615dd15954ddc3ab8e73530237dd73235e76d62"}, + {file = "scikit_learn-1.0.2-cp39-cp39-win32.whl", hash = "sha256:e174242caecb11e4abf169342641778f68e1bfaba80cd18acd6bc84286b9a534"}, + {file = "scikit_learn-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:b54a62c6e318ddbfa7d22c383466d38d2ee770ebdb5ddb668d56a099f6eaf75f"}, +] scipy = [ {file = "scipy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87b01c7d5761e8a266a0fbdb9d88dcba0910d63c1c671bdb4d99d29f469e9e03"}, {file = "scipy-1.8.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ae3e327da323d82e918e593460e23babdce40d7ab21490ddf9fc06dec6b91a18"}, @@ -936,6 +1010,10 @@ tenacity = [ {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"}, {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"}, ] +threadpoolctl = [ + {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, + {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, +] tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, diff --git a/pyproject.toml b/pyproject.toml index 79d2ab7..3a2e0ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ scipy = "^1.8.0" tqdm = "^4.62.3" pyinstaller = "^4.9" PySDL2 = {version = "^0.9.11", platform = "win32"} +scikit-learn = "^1.0.2" [tool.poetry.dev-dependencies] pytest = "^5.2"