Ficed bugs introduced by previous changes and added Scikit-Learn dpndncy

This commit is contained in:
Cian Hughes
2022-03-04 16:52:40 +00:00
parent caae863be5
commit 07a0842a68
7 changed files with 154 additions and 63 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

80
poetry.lock generated
View File

@@ -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"},

View File

@@ -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"