Skip to content

Commit 701d812

Browse files
0.10.27
Documentation
1 parent 3576a17 commit 701d812

7 files changed

Lines changed: 331 additions & 205 deletions

File tree

gui/spotGUI.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import tkinter as tk
2+
from spotPython.hyperparameters.values import get_default_values
3+
4+
def create_gui(elements):
5+
# Create a tkinter window
6+
root = tk.Tk()
7+
8+
# Loop over the dictionary and create labels and entries for each key-value pair
9+
for i, (key, value) in enumerate(elements.items()):
10+
# Create a label with the key as text
11+
label = tk.Label(root, text=key)
12+
label.grid(row=i, column=0, sticky="W")
13+
14+
# Create an entry with the value as the default text
15+
entry = tk.Entry(root)
16+
entry.insert(0, value)
17+
entry.grid(row=i, column=1, sticky="W")
18+
19+
# Run the tkinter main loop
20+
root.mainloop()
21+
22+
# Create a dictionary with keys and default values
23+
# elements = {"A": "1", "B": "2", "C": "3"}
24+
d = {"core_model_hyper_dict":{
25+
"leaf_prediction": {
26+
"levels": ["mean", "model", "adaptive"],
27+
"type": "factor",
28+
"default": "mean",
29+
"core_model_parameter_type": "str"},
30+
"leaf_model": {
31+
"levels": ["linear_model.LinearRegression", "linear_model.PARegressor", "linear_model.Perceptron"],
32+
"type": "factor",
33+
"default": "LinearRegression",
34+
"core_model_parameter_type": "instance"},
35+
"splitter": {
36+
"levels": ["EBSTSplitter", "TEBSTSplitter", "QOSplitter"],
37+
"type": "factor",
38+
"default": "EBSTSplitter",
39+
"core_model_parameter_type": "instance()"},
40+
"binary_split": {
41+
"levels": [0, 1],
42+
"type": "factor",
43+
"default": 0,
44+
"core_model_parameter_type": "bool"},
45+
"stop_mem_management": {
46+
"levels": [0, 1],
47+
"type": "factor",
48+
"default": 0,
49+
"core_model_parameter_type": "bool"}}}
50+
elements = get_default_values(d)
51+
52+
53+
54+
# Call the function to create the GUI
55+
create_gui(elements)

gui/spotGUI_0.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import tkinter as tk
2+
import json
3+
4+
def get_default_values(elements):
5+
pass
6+
7+
def get_bound_values(elements):
8+
pass
9+
10+
def create_gui(dict_file):
11+
# Load the dictionary from the file
12+
with open(dict_file, 'r') as f:
13+
elements = json.load(f)
14+
15+
# Apply the functions to the dictionary
16+
default_values = get_default_values(elements)
17+
bound_values = get_bound_values(elements)
18+
19+
# Create a tkinter window
20+
root = tk.Tk()
21+
22+
# Loop over the dictionary and create labels and entries for each key-value pair
23+
for i, (key, value) in enumerate(default_values.items()):
24+
# Create a label with the key as text
25+
label = tk.Label(root, text=key)
26+
label.grid(row=i, column=0, sticky="W")
27+
28+
# Create an entry with the default value as the default text
29+
default_entry = tk.Entry(root)
30+
default_entry.insert(0, value)
31+
default_entry.grid(row=i, column=1, sticky="W")
32+
33+
# Create an entry with the bound value as the default text
34+
bound_entry = tk.Entry(root)
35+
bound_entry.insert(0, bound_values[key])
36+
bound_entry.grid(row=i, column=2, sticky="W")
37+
38+
# Run the tkinter main loop
39+
root.mainloop()
40+
41+
# Call the function to create the GUI
42+
create_gui("elements.json")
43+

gui/spotGUI_1.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import tkinter as tk
2+
import json
3+
from spotPython.hyperparameters.values import get_default_values, get_bound_values
4+
5+
def get_default_values(elements):
6+
pass
7+
8+
def get_bound_values(elements):
9+
pass
10+
11+
def create_gui(dict_file):
12+
# Load the dictionary from the file
13+
with open(dict_file, 'r') as f:
14+
elements = json.load(f)
15+
16+
# Apply the functions to the dictionary
17+
default_values = get_default_values(elements)
18+
bound_values = get_bound_values(elements)
19+
20+
# Create a tkinter window
21+
root = tk.Tk()
22+
23+
# Loop over the dictionary and create labels and entries for each key-value pair
24+
for i, (key, value) in enumerate(default_values.items()):
25+
# Create a label with the key as text
26+
label = tk.Label(root, text=key)
27+
label.grid(row=i, column=0, sticky="W")
28+
29+
# Create an entry with the default value as the default text
30+
default_entry = tk.Entry(root)
31+
default_entry.insert(0, value)
32+
default_entry.grid(row=i, column=1, sticky="W")
33+
34+
# Create an entry with the bound value as the default text
35+
bound_entry = tk.Entry(root)
36+
bound_entry.insert(0, bound_values[key])
37+
bound_entry.grid(row=i, column=2, sticky="W")
38+
39+
# Run the tkinter main loop
40+
root.mainloop()
41+
42+
# Call the function to create the GUI
43+
create_gui("elements.json")
44+

notebooks/00_spotPython_tests.ipynb

Lines changed: 133 additions & 194 deletions
Large diffs are not rendered by default.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
77

88
[project]
99
name = "spotPython"
10-
version = "0.10.26"
10+
version = "0.10.27"
1111
authors = [
1212
{ name="T. Bartz-Beielstein", email="tbb@bartzundbartz.de" }
1313
]

src/spotPython/data/lightdatamodule.py

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ class LightDataModule(L.LightningDataModule):
1616
It must implement three functions: __init__, __len__, and __getitem__.
1717
Required.
1818
test_size (float):
19-
The test size. Required.
19+
The test size. if test_size is float, then train_size is 1 - test_size.
20+
If test_size is int, then train_size is len(data_full) - test_size.
21+
Train size will be split into train and validation sets.
22+
So if test size is 0.7, the 0.7 train size will be split into 0.7 * 0.7 = 0.49 train set
23+
amd 0.7 * 0.3 = 0.21 validation set.
2024
test_seed (int):
2125
The test seed. Defaults to 42.
2226
num_workers (int):
@@ -47,13 +51,21 @@ class LightDataModule(L.LightningDataModule):
4751
Examples:
4852
>>> from spotPython.data.lightdatamodule import LightDataModule
4953
from spotPython.data.csvdataset import CSVDataset
50-
from spotPython.data.pkldataset import PKLDataset
5154
import torch
55+
# data.csv is simple csv file with 11 samples
5256
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
5357
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
5458
data_module.setup()
5559
print(f"Training set size: {len(data_module.data_train)}")
60+
print(f"Validation set size: {len(data_module.data_val)}")
61+
print(f"Test set size: {len(data_module.data_test)}")
62+
full_train_size: 0.5
63+
val_size: 0.25
64+
train_size: 0.25
65+
test_size: 0.5
5666
Training set size: 3
67+
Validation set size: 3
68+
Test set size: 6
5769
5870
References:
5971
See https://lightning.ai/docs/pytorch/stable/data/datamodule.html
@@ -109,17 +121,20 @@ def setup(self, stage: Optional[str] = None) -> None:
109121
val_size = int(full_train_size * test_size / len(self.data_full))
110122
train_size = full_train_size - val_size
111123

112-
print(f"full_train_size: {full_train_size}")
113-
print(f"val_size: {val_size}")
114-
print(f"train_size: {train_size}")
115-
print(f"test_size: {test_size}")
124+
print(f"LightDataModule: setup(). stage: {stage}")
125+
print(f"LightDataModule setup(): full_train_size: {full_train_size}")
126+
print(f"LightDataModule setup(): val_size: {val_size}")
127+
print(f"LightDataModule setup(): train_size: {train_size}")
128+
print(f"LightDataModule setup(): test_size: {test_size}")
116129

117130
# Assign train/val datasets for use in dataloaders
118131
if stage == "fit" or stage is None:
132+
print("LightDataModule: setup(). stage: fit")
119133
self.data_train, self.data_val, _ = random_split(self.data_full, [train_size, val_size, test_size])
120134

121135
# Assign test dataset for use in dataloader(s)
122136
if stage == "test" or stage is None:
137+
print("LightDataModule: setup(). stage: test")
123138
# get test data aset as test_abs percent of the full dataset
124139
generator_test = torch.Generator().manual_seed(self.test_seed)
125140
self.data_test, _ = random_split(self.data_full, [test_size, full_train_size], generator=generator_test)
@@ -135,6 +150,7 @@ def setup(self, stage: Optional[str] = None) -> None:
135150

136151
# Assign pred dataset for use in dataloader(s)
137152
if stage == "predict" or stage is None:
153+
print("LightDataModule: setup(). stage: predict")
138154
# get test data aset as test_abs percent of the full dataset
139155
generator_predict = torch.Generator().manual_seed(self.test_seed)
140156
self.data_predict, _ = random_split(
@@ -152,7 +168,6 @@ def train_dataloader(self) -> DataLoader:
152168
Examples:
153169
>>> from spotPython.data.lightdatamodule import LightDataModule
154170
from spotPython.data.csvdataset import CSVDataset
155-
from spotPython.data.pkldataset import PKLDataset
156171
import torch
157172
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
158173
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
@@ -177,15 +192,16 @@ def val_dataloader(self) -> DataLoader:
177192
Examples:
178193
>>> from spotPython.data.lightdatamodule import LightDataModule
179194
from spotPython.data.csvdataset import CSVDataset
180-
from spotPython.data.pkldataset import PKLDataset
181195
import torch
182196
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
183197
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
184198
data_module.setup()
185199
print(f"Training set size: {len(data_module.data_val)}")
186200
Training set size: 3
187-
188201
"""
202+
print(f"LightDataModule: val_dataloader(). Training set size: {len(self.data_val)}")
203+
print(f"LightDataModule: val_dataloader(). batch_size: {self.batch_size}")
204+
print(f"LightDataModule: val_dataloader(). num_workers: {self.num_workers}")
189205
return DataLoader(self.data_val, batch_size=self.batch_size, num_workers=self.num_workers)
190206

191207
def test_dataloader(self) -> DataLoader:
@@ -199,7 +215,6 @@ def test_dataloader(self) -> DataLoader:
199215
Examples:
200216
>>> from spotPython.data.lightdatamodule import LightDataModule
201217
from spotPython.data.csvdataset import CSVDataset
202-
from spotPython.data.pkldataset import PKLDataset
203218
import torch
204219
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
205220
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
@@ -214,6 +229,24 @@ def test_dataloader(self) -> DataLoader:
214229
return DataLoader(self.data_test, batch_size=self.batch_size, num_workers=self.num_workers)
215230

216231
def predict_dataloader(self) -> DataLoader:
232+
"""
233+
Returns the predict dataloader, i.e., a pytorch DataLoader instance
234+
using the predict dataset.
235+
236+
Returns:
237+
DataLoader: The predict dataloader.
238+
239+
Examples:
240+
>>> from spotPython.data.lightdatamodule import LightDataModule
241+
from spotPython.data.csvdataset import CSVDataset
242+
import torch
243+
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
244+
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
245+
data_module.setup()
246+
print(f"Predict set size: {len(data_module.data_predict)}")
247+
Predict set size: 6
248+
249+
"""
217250
print(f"LightDataModule: predict_dataloader(). Predict set size: {len(self.data_predict)}")
218251
print(f"LightDataModule: predict_dataloader(). batch_size: {self.batch_size}")
219252
print(f"LightDataModule: predict_dataloader(). num_workers: {self.num_workers}")

test/test_lightdatamodule.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,17 @@ def test_light_data_module_test_size():
3131
# Test the length of val and train: should be equal, because test_size=0.5
3232
assert len(data_module.data_test) == 7
3333

34+
def test_light_data_module_sizes():
35+
# data.csv is simple csv file with 11 samples
36+
dataset = CSVDataset(csv_file='data.csv', target_column='prognosis', feature_type=torch.long)
37+
data_module = LightDataModule(dataset=dataset, batch_size=5, test_size=0.5)
38+
data_module.setup()
39+
print(f"Training set size: {len(data_module.data_train)}")
40+
print(f"Validation set size: {len(data_module.data_val)}")
41+
print(f"Test set size: {len(data_module.data_test)}")
42+
assert len(data_module.data_train) == 3
43+
assert len(data_module.data_val) == 3
44+
assert len(data_module.data_test) == 6
45+
3446
if __name__ == "__main__":
3547
pytest.main(["-v", __file__])

0 commit comments

Comments
 (0)