marta-marta commited on
Commit
0d09ea1
·
1 Parent(s): ef08db2

Adding type hints to the functions in these scripts

Browse files
Data_Generation/Dataset_Generation_Functions.py CHANGED
@@ -1,11 +1,10 @@
1
  import numpy as np
2
- import pandas as pd
3
- import json
4
- # from Data_Generation.Shape_Generation_Functions import basic_box, diagonal_box_split, horizontal_vertical_box_split, \
5
- # back_slash_box, forward_slash_box, back_slash_plus_box, forward_slash_plus_box, hot_dog_box, hamburger_box, \
6
- # x_hamburger_box, x_hot_dog_box, x_plus_box
7
  from Data_Generation.Piecewise_Box_Functions import basic_box_array, back_slash_array, forward_slash_array, hamburger_array, hot_dog_array
 
 
8
  # from Piecewise_Box_Functions import basic_box_array, back_slash_array, forward_slash_array, hamburger_array, hot_dog_array
 
 
9
  import matplotlib.pyplot as plt
10
  from json import JSONEncoder
11
 
@@ -13,10 +12,10 @@ from json import JSONEncoder
13
 
14
  ########################################################################################################################
15
  # Make the data using all the code in Shape_Generation_Functions.py
16
- def make_boxes(image_size, densities):
17
  """
18
  :param image_size: [int] - the pixel height and width of the generated arrays
19
- :param densities: [list] - of the values of each of the active pixels in each shape
20
  :return: [list[tuple]] - [Array, Density, Thickness of each strut type]
21
  """
22
 
 
1
  import numpy as np
 
 
 
 
 
2
  from Data_Generation.Piecewise_Box_Functions import basic_box_array, back_slash_array, forward_slash_array, hamburger_array, hot_dog_array
3
+
4
+ # For Internal Testing
5
  # from Piecewise_Box_Functions import basic_box_array, back_slash_array, forward_slash_array, hamburger_array, hot_dog_array
6
+ import pandas as pd
7
+ import json
8
  import matplotlib.pyplot as plt
9
  from json import JSONEncoder
10
 
 
12
 
13
  ########################################################################################################################
14
  # Make the data using all the code in Shape_Generation_Functions.py
15
+ def make_boxes(image_size: int, densities: list[float]) -> list[tuple]:
16
  """
17
  :param image_size: [int] - the pixel height and width of the generated arrays
18
+ :param densities: [list[float]] - of the desired pixel values to apply to active pixels - Recommend values (0,1]
19
  :return: [list[tuple]] - [Array, Density, Thickness of each strut type]
20
  """
21
 
Data_Generation/Piecewise_Box_Functions.py CHANGED
@@ -2,28 +2,52 @@ import numpy as np
2
  from scipy import signal
3
 
4
 
5
- def basic_box_array(image_size, thickness):
 
 
 
 
 
 
6
  A = np.ones((int(image_size), int(image_size))) # Initializes A matrix with 0 values
7
  A[1:-1, 1:-1] = 0 # replaces all internal rows/columns with 0's
8
  A = add_thickness(A, thickness)
9
  return A
10
 
11
 
12
- def back_slash_array(image_size, thickness):
 
 
 
 
 
 
13
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
14
  np.fill_diagonal(A, 1) # fills the diagonal with 1 values
15
  A = add_thickness(A, thickness)
16
  return A
17
 
18
 
19
- def forward_slash_array(image_size, thickness):
 
 
 
 
 
 
20
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
21
  np.fill_diagonal(np.fliplr(A), 1) # Flips the array to then fill the diagonal the opposite direction
22
  A = add_thickness(A, thickness)
23
  return A
24
 
25
 
26
- def hot_dog_array(image_size, thickness):
 
 
 
 
 
 
27
  # Places pixels down the vertical axis to split the box
28
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
29
  A[:, np.floor((image_size - 1) / 2).astype(int)] = 1 # accounts for even and odd values of image_size
@@ -32,7 +56,13 @@ def hot_dog_array(image_size, thickness):
32
  return A
33
 
34
 
35
- def hamburger_array(image_size, thickness):
 
 
 
 
 
 
36
  # Places pixels across the horizontal axis to split the box
37
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
38
  A[np.floor((image_size - 1) / 2).astype(int), :] = 1 # accounts for even and odd values of image_size
@@ -43,7 +73,13 @@ def hamburger_array(image_size, thickness):
43
 
44
  ########################################################################################################################
45
  # The function to add thickness to struts in an array
46
- def add_thickness(array_original, thickness):
 
 
 
 
 
 
47
  A = array_original
48
  if thickness == 0: # want an array of all 0's for thickness = 0
49
  A[A > 0] = 0
@@ -52,13 +88,14 @@ def add_thickness(array_original, thickness):
52
  filter = np.zeros((filter_size, filter_size))
53
  filter[np.floor((filter_size - 1) / 2).astype(int), :] = filter[:, np.floor((filter_size - 1) / 2).astype(int)] =1
54
  filter[np.ceil((filter_size - 1) / 2).astype(int), :] = filter[:, np.ceil((filter_size - 1) / 2).astype(int)] = 1
 
55
  convolution = signal.convolve2d(A, filter, mode='same')
56
  A = np.where(convolution <= 1, convolution, 1)
57
  return A
58
 
59
 
60
  # The function to efficiently combine arrays in a list
61
- def combine_arrays(arrays):
62
  output_array = np.sum(arrays, axis=0) # Add the list of arrays
63
  output_array = np.array(output_array > 0, dtype=int) # Convert all values in array to 1
64
  return output_array
 
2
  from scipy import signal
3
 
4
 
5
+ def basic_box_array(image_size: int, thickness: int) -> np.ndarray:
6
+ """
7
+ :param image_size: [int] - the size of the image that will be produced
8
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
9
+ :return: [ndarray] - the output is a unit cell with outer pixels activated based on the desired thickness.
10
+ The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
11
+ """
12
  A = np.ones((int(image_size), int(image_size))) # Initializes A matrix with 0 values
13
  A[1:-1, 1:-1] = 0 # replaces all internal rows/columns with 0's
14
  A = add_thickness(A, thickness)
15
  return A
16
 
17
 
18
+ def back_slash_array(image_size: int, thickness: int) -> np.ndarray:
19
+ """
20
+ :param image_size: [int] - the size of the image that will be produced
21
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
22
+ :return: [ndarray] - the output is a unit cell with pixels activated along the downward diagonal based
23
+ on the desired thickness. The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
24
+ """
25
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
26
  np.fill_diagonal(A, 1) # fills the diagonal with 1 values
27
  A = add_thickness(A, thickness)
28
  return A
29
 
30
 
31
+ def forward_slash_array(image_size: int, thickness: int) -> np.ndarray:
32
+ """
33
+ :param image_size: [int] - the size of the image that will be produced
34
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
35
+ :return: [ndarray] - the output is a unit cell with pixels activated along the upward diagonal based on the desired
36
+ thickness. The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
37
+ """
38
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
39
  np.fill_diagonal(np.fliplr(A), 1) # Flips the array to then fill the diagonal the opposite direction
40
  A = add_thickness(A, thickness)
41
  return A
42
 
43
 
44
+ def hot_dog_array(image_size: int, thickness: int) -> np.ndarray:
45
+ """
46
+ :param image_size: [int] - the size of the image that will be produced
47
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
48
+ :return: [ndarray] - the output is a unit cell with outer pixel activated from the vertical center based on the
49
+ desired thickness. The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
50
+ """
51
  # Places pixels down the vertical axis to split the box
52
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
53
  A[:, np.floor((image_size - 1) / 2).astype(int)] = 1 # accounts for even and odd values of image_size
 
56
  return A
57
 
58
 
59
+ def hamburger_array(image_size: int, thickness: int) -> np.ndarray:
60
+ """
61
+ :param image_size: [int] - the size of the image that will be produced
62
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
63
+ :return: [ndarray] - the output is a unit cell with outer pixel activated from the horizontal center based on the
64
+ desired thickness. The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
65
+ """
66
  # Places pixels across the horizontal axis to split the box
67
  A = np.zeros((int(image_size), int(image_size))) # Initializes A matrix with 0 values
68
  A[np.floor((image_size - 1) / 2).astype(int), :] = 1 # accounts for even and odd values of image_size
 
73
 
74
  ########################################################################################################################
75
  # The function to add thickness to struts in an array
76
+ def add_thickness(array_original, thickness: int) -> np.ndarray:
77
+ """
78
+ :param array_original: [ndarray] - an array with thickness 1 of any shape type
79
+ :param thickness: [int] - the number of pixels to be activated surrounding the base shape
80
+ :return: [ndarray] - the output is a unit cell that has been convolved to expand the number of pixels activated
81
+ based on the desired thickness. The activated pixels are 1 (white) and the deactivated pixels are 0 (black)
82
+ """
83
  A = array_original
84
  if thickness == 0: # want an array of all 0's for thickness = 0
85
  A[A > 0] = 0
 
88
  filter = np.zeros((filter_size, filter_size))
89
  filter[np.floor((filter_size - 1) / 2).astype(int), :] = filter[:, np.floor((filter_size - 1) / 2).astype(int)] =1
90
  filter[np.ceil((filter_size - 1) / 2).astype(int), :] = filter[:, np.ceil((filter_size - 1) / 2).astype(int)] = 1
91
+ # The filter is made into a '+' shape using these functions
92
  convolution = signal.convolve2d(A, filter, mode='same')
93
  A = np.where(convolution <= 1, convolution, 1)
94
  return A
95
 
96
 
97
  # The function to efficiently combine arrays in a list
98
+ def combine_arrays(arrays: list[np.ndarray]) -> np.ndarray:
99
  output_array = np.sum(arrays, axis=0) # Add the list of arrays
100
  output_array = np.array(output_array > 0, dtype=int) # Convert all values in array to 1
101
  return output_array
Data_Plotting/Plot_TSNE.py CHANGED
@@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
3
  import numpy as np
4
 
5
  # Latent Feature Cluster for Training Data using T-SNE
6
- def TSNE_reduction(latent_points, perplexity=30, learning_rate=20):
7
  latent_dimensionality = len(latent_points[0])
8
  model = TSNE(n_components=2, random_state=0, perplexity=perplexity,
9
  learning_rate=learning_rate) # Perplexity(5-50) | learning_rate(10-1000)
@@ -25,11 +25,14 @@ def TSNE_reduction(latent_points, perplexity=30, learning_rate=20):
25
 
26
  def plot_dimensionality_reduction(x, y, label_set, title):
27
  plt.title(title)
 
28
  if label_set[0].dtype == float:
29
  plt.scatter(x, y, c=label_set)
30
  cbar = plt.colorbar()
31
  cbar.set_label('Average Density', fontsize=12)
32
  print("using scatter")
 
 
33
  else:
34
  for label in set(label_set):
35
  cond = np.where(np.array(label_set) == str(label))
 
3
  import numpy as np
4
 
5
  # Latent Feature Cluster for Training Data using T-SNE
6
+ def TSNE_reduction(latent_points: list, perplexity=30, learning_rate=20):
7
  latent_dimensionality = len(latent_points[0])
8
  model = TSNE(n_components=2, random_state=0, perplexity=perplexity,
9
  learning_rate=learning_rate) # Perplexity(5-50) | learning_rate(10-1000)
 
25
 
26
  def plot_dimensionality_reduction(x, y, label_set, title):
27
  plt.title(title)
28
+ # Color points based on their density
29
  if label_set[0].dtype == float:
30
  plt.scatter(x, y, c=label_set)
31
  cbar = plt.colorbar()
32
  cbar.set_label('Average Density', fontsize=12)
33
  print("using scatter")
34
+
35
+ # Color points based on a discrete label
36
  else:
37
  for label in set(label_set):
38
  cond = np.where(np.array(label_set) == str(label))
app.py CHANGED
@@ -69,7 +69,7 @@ if st.button('Generate Samples'): # Generate the samples
69
  # Output Entire Dataset
70
  st.write("Click 'Generate Dataset' to generate the dataset based on the conditions set previously:")
71
  if st.button('Generate Dataset'): # Generate the dataset
72
- boxes = make_boxes(image_size, densities) # Create all of the data points
73
  # Unpack all of the data
74
  box_arrays, box_density, basic_box_thickness, forward_slash_box_thickness, back_slash_box_thickness,hot_dog_box_thickness, hamburger_box_thickness\
75
  = list(zip(*boxes))[0], list(zip(*boxes))[1], list(zip(*boxes))[2], list(zip(*boxes))[3], list(zip(*boxes))[4], list(zip(*boxes))[5], list(zip(*boxes))[6]
 
69
  # Output Entire Dataset
70
  st.write("Click 'Generate Dataset' to generate the dataset based on the conditions set previously:")
71
  if st.button('Generate Dataset'): # Generate the dataset
72
+ boxes = make_boxes(image_size, densities) # Create all the data points
73
  # Unpack all of the data
74
  box_arrays, box_density, basic_box_thickness, forward_slash_box_thickness, back_slash_box_thickness,hot_dog_box_thickness, hamburger_box_thickness\
75
  = list(zip(*boxes))[0], list(zip(*boxes))[1], list(zip(*boxes))[2], list(zip(*boxes))[3], list(zip(*boxes))[4], list(zip(*boxes))[5], list(zip(*boxes))[6]