sgptools 1.1.7__tar.gz → 1.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. {sgptools-1.1.7 → sgptools-1.2.0}/PKG-INFO +11 -2
  2. {sgptools-1.1.7 → sgptools-1.2.0}/README.md +14 -3
  3. {sgptools-1.1.7 → sgptools-1.2.0}/setup.py +2 -1
  4. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/__init__.py +1 -1
  5. sgptools-1.2.0/sgptools/kernels/__init__.py +9 -0
  6. sgptools-1.2.0/sgptools/kernels/attentive_kernel.py +119 -0
  7. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/kernels/neural_kernel.py +13 -15
  8. sgptools-1.2.0/sgptools/kernels/neural_network.py +58 -0
  9. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/core/augmented_sgpr.py +3 -2
  10. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/core/osgpr.py +6 -3
  11. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools.egg-info/PKG-INFO +11 -2
  12. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools.egg-info/SOURCES.txt +2 -0
  13. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools.egg-info/requires.txt +3 -0
  14. sgptools-1.1.7/sgptools/kernels/__init__.py +0 -7
  15. {sgptools-1.1.7 → sgptools-1.2.0}/LICENSE.txt +0 -0
  16. {sgptools-1.1.7 → sgptools-1.2.0}/setup.cfg +0 -0
  17. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/__init__.py +0 -0
  18. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/bo.py +0 -0
  19. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/cma_es.py +0 -0
  20. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/continuous_sgp.py +0 -0
  21. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/core/__init__.py +0 -0
  22. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/core/augmented_gpr.py +0 -0
  23. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/core/transformations.py +0 -0
  24. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/greedy_mi.py +0 -0
  25. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/models/greedy_sgp.py +0 -0
  26. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/__init__.py +0 -0
  27. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/data.py +0 -0
  28. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/gpflow.py +0 -0
  29. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/metrics.py +0 -0
  30. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/misc.py +0 -0
  31. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools/utils/tsp.py +0 -0
  32. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools.egg-info/dependency_links.txt +0 -0
  33. {sgptools-1.1.7 → sgptools-1.2.0}/sgptools.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sgptools
3
- Version: 1.1.7
3
+ Version: 1.2.0
4
4
  Summary: Software Suite for Sensor Placement and Informative Path Planning
5
5
  Home-page: https://www.itskalvik.com/sgp-tools
6
6
  Author: Kalvik
@@ -23,8 +23,17 @@ Requires-Dist: hkb_diamondsquare
23
23
  Requires-Dist: tensorflow-probability[tf]>=0.21.0
24
24
  Requires-Dist: tensorflow>=2.13.0; platform_machine != "arm64"
25
25
  Requires-Dist: tensorflow-aarch64>=2.13.0; platform_machine == "arm64"
26
+ Requires-Dist: tensorflow-macos>=2.13.0; platform_system == "Darwin" and platform_machine == "arm64"
26
27
  Requires-Dist: typing_extensions
27
28
  Requires-Dist: gpflow>=2.7.0
28
29
  Requires-Dist: pillow
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: description
33
+ Dynamic: home-page
34
+ Dynamic: license
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
29
38
 
30
39
  Software Suite for Sensor Placement and Informative Path Planning
@@ -3,7 +3,7 @@
3
3
  </div>
4
4
 
5
5
  # SGP-based Optimization Tools
6
- Software Suite for [Sensor Placement](https://itskalvik.com/publication/sgp-sp) (SP) and [Informative Path Planning](https://itskalvik.com/publication/sgp-ipp) (IPP).
6
+ Software Suite for [Sensor Placement](https://www.itskalvik.com/research/publication/sgp-sp/) (SP) and [Informative Path Planning](https://www.itskalvik.com/research/publication/sgp-ipp/) (IPP).
7
7
 
8
8
  The library includes python code for the following:
9
9
  - Greedy algorithm-based approaches
@@ -56,7 +56,9 @@ Please refer to the [examples](https://www.itskalvik.com/sgp-tools/examples/IPP.
56
56
  - `obstacles.ipynb`: SP in an environment with obstacles
57
57
  - `sgptools/`: SGP-Tools library
58
58
  - `kernels/`: Kernel functions
59
+ - `attentive_kernel.py`: Attentive Kernel (Non-Stationary Kernel)
59
60
  - `neural_kernel.py`: Neural Non-Stationary Spectral Kernel
61
+ - `neural_network.py`: GPFlow compatible Neural Network
60
62
  - `models/`: Sensor placement and IPP methods
61
63
  - `core/`: GP/SGP models used for sensor placement and IPP
62
64
  - `augmented_gpr.py`: GPflow's GP that supports transforms (expansion and aggregation)
@@ -91,7 +93,7 @@ AUTHOR={Kalvik Jakkala and Srinivas Akella},
91
93
  TITLE={Efficient Sensor Placement from Regression with Sparse Gaussian Processes in Continuous and Discrete Spaces},
92
94
  NOTE= {Preprint},
93
95
  YEAR={2023},
94
- URL={https://itskalvik.github.io/publication/sgp-sp},
96
+ URL={https://www.itskalvik.com/research/publication/sgp-sp/},
95
97
  }
96
98
 
97
99
  @inproceedings{JakkalaA24IPP,
@@ -100,7 +102,16 @@ TITLE={Multi-Robot Informative Path Planning from Regression with Sparse Gaussia
100
102
  booktitle={IEEE International Conference on Robotics and Automation, {ICRA}},
101
103
  YEAR={2024},
102
104
  PUBLISHER = {{IEEE}},
103
- URL={https://itskalvik.github.io/publication/sgp-ipp}
105
+ URL={https://www.itskalvik.com/research/publication/sgp-ipp/}
106
+ }
107
+
108
+ @inproceedings{JakkalaA25AIPP,
109
+ AUTHOR={Kalvik Jakkala and Srinivas Akella},
110
+ TITLE={Fully Differentiable Adaptive Informative Path Planning},
111
+ booktitle={IEEE International Conference on Robotics and Automation, {ICRA}},
112
+ YEAR={2025},
113
+ PUBLISHER = {{IEEE}},
114
+ URL={https://www.itskalvik.com/research/publication/sgp-aipp/}
104
115
  }
105
116
  ```
106
117
 
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- __version__ = "1.1.7"
3
+ __version__ = "1.2.0"
4
4
 
5
5
  setup(
6
6
  name='sgptools',
@@ -28,6 +28,7 @@ setup(
28
28
  'tensorflow-probability[tf]>=0.21.0',
29
29
  'tensorflow>=2.13.0; platform_machine!="arm64"',
30
30
  'tensorflow-aarch64>=2.13.0; platform_machine=="arm64"',
31
+ 'tensorflow-macos>=2.13.0; platform_system=="Darwin" and platform_machine=="arm64"',
31
32
  'typing_extensions',
32
33
  'gpflow>=2.7.0',
33
34
  'pillow'
@@ -12,7 +12,7 @@ The library includes python code for the following:
12
12
 
13
13
  """
14
14
 
15
- __version__ = "1.1.7"
15
+ __version__ = "1.2.0"
16
16
  __author__ = 'Kalvik'
17
17
 
18
18
  from .models.core import *
@@ -0,0 +1,9 @@
1
+ # sgptools/kernels/__init__.py
2
+
3
+ """Special non-stationary kernel functions in this package:
4
+
5
+ - `neural_kernel`: Provides the neural spectral kernel that uses a mixture of multilayer perceptrons
6
+ - `attentive_kernel`: Provides the attentive kernel that uses a multilayer perceptron to get a mixture of RBF kernels
7
+ - `neural_network`: Helper class that provides a multilayer perceptron compatible with GPFlow
8
+
9
+ """
@@ -0,0 +1,119 @@
1
+ # Copyright 2024 The SGP-Tools Contributors. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Attentive Kernel function
16
+ """
17
+
18
+ import numpy as np
19
+ import tensorflow as tf
20
+
21
+ import gpflow
22
+ from gpflow.config import default_float
23
+ float_type = default_float()
24
+
25
+ from .neural_network import NN
26
+
27
+
28
+ class AttentiveKernel(gpflow.kernels.Kernel):
29
+ """Attentive Kernel function (non-stationary kernel function).
30
+ Based on the implementation from this [repo](https://github.com/Weizhe-Chen/attentive_kernels)
31
+
32
+ Refer to the following papers for more details:
33
+ - AK: Attentive Kernel for Information Gathering [Chen et al., 2022]
34
+
35
+ Args:
36
+ lengthscales (List): List of lengthscales to use in the mixture components. The lengthscales are not trained.
37
+ amplitude (int): Initial amplitude of the kernel function
38
+ dim_hidden (int): Number of MLP hidden layer nodes (The NN will have two of these layers)
39
+ num_dim (int): Number of dimensions of the data points
40
+ """
41
+ def __init__(self,
42
+ lengthscales,
43
+ dim_hidden=10,
44
+ amplitude=1.0,
45
+ num_dim=2):
46
+ super().__init__()
47
+ with self.name_scope:
48
+ self.num_lengthscales = len(lengthscales)
49
+ self._free_amplitude = tf.Variable(amplitude,
50
+ shape=[],
51
+ trainable=True,
52
+ dtype=float_type)
53
+ self.lengthscales = tf.Variable(lengthscales,
54
+ shape=[self.num_lengthscales],
55
+ trainable=False,
56
+ dtype=float_type)
57
+
58
+ self.nn = NN([num_dim, dim_hidden, dim_hidden, self.num_lengthscales])
59
+
60
+ def get_representations(self, X):
61
+ Z = self.nn(X)
62
+ representations = Z / tf.norm(Z, axis=1, keepdims=True)
63
+ return representations
64
+
65
+ def K(self, X, X2=None):
66
+ """Computes the covariances between/amongst the input variables
67
+
68
+ Args:
69
+ X (ndarray): Variables to compute the covariance matrix
70
+ X2 (ndarray): If passed, the covariance between X and X2 is computed. Otherwise,
71
+ the covariance between X and X is computed.
72
+
73
+ Returns:
74
+ cov (ndarray): covariance matrix
75
+ """
76
+ if X2 is None:
77
+ X2 = X
78
+
79
+ dist = cdist(X, X2)
80
+ repre1 = self.get_representations(X)
81
+ repre2 = self.get_representations(X2)
82
+
83
+ def get_mixture_component(i):
84
+ attention_lengthscales = tf.tensordot(repre1[:, i], repre2[:, i], axes=0)
85
+ cov_mat = rbf(dist, self.lengthscales[i]) * attention_lengthscales
86
+ return cov_mat
87
+
88
+ cov_mat = tf.map_fn(fn=get_mixture_component,
89
+ elems=tf.range(self.num_lengthscales, dtype=tf.int64),
90
+ fn_output_signature=dist.dtype)
91
+ cov_mat = tf.math.reduce_sum(cov_mat, axis=0)
92
+ attention_inputs = repre1 @ tf.transpose(repre2)
93
+ cov_mat *= self._free_amplitude * attention_inputs
94
+
95
+ return cov_mat
96
+
97
+ def K_diag(self, X):
98
+ return self._free_amplitude * tf.ones((X.shape[0]), dtype=X.dtype)
99
+
100
+ '''
101
+ Helper functions
102
+ '''
103
+ def rbf(dist, lengthscale):
104
+ '''
105
+ RBF kernel function
106
+ '''
107
+ return tf.math.exp(-0.5 * tf.math.square(dist / lengthscale))
108
+
109
+ def cdist(x, y):
110
+ '''
111
+ Calculate the pairwise euclidean distances
112
+ '''
113
+ # Calculate distance for a single row of x.
114
+ per_x_dist = lambda i : tf.norm(x[i:(i+1),:] - y, axis=1)
115
+ # Compute and stack distances for all rows of x.
116
+ dist = tf.map_fn(fn=per_x_dist,
117
+ elems=tf.range(tf.shape(x)[0], dtype=tf.int64),
118
+ fn_output_signature=x.dtype)
119
+ return dist
@@ -15,25 +15,23 @@
15
15
  """Provides a neural spectral kernel function along with an initialization function
16
16
  """
17
17
 
18
+ import tensorflow as tf
18
19
  import numpy as np
19
20
  import gc
20
21
 
21
- import tensorflow as tf
22
- from tensorflow import keras
23
- from tensorflow.keras import layers
24
22
 
25
23
  import gpflow
26
24
  from gpflow.config import default_jitter, default_float
27
25
  from gpflow.models import SGPR
28
26
  from gpflow.models.util import data_input_to_tensor
29
-
30
- gpflow.config.set_default_float(np.float32)
31
27
  float_type = default_float()
32
28
 
29
+ from .neural_network import NN
30
+
33
31
 
34
32
  class NeuralSpectralKernel(gpflow.kernels.Kernel):
35
33
  """Neural Spectral Kernel function (non-stationary kernel function).
36
- Based on the implementation from the following [repo](https://github.com/sremes/nssm-gp/tree/master?tab=readme-ov-file)
34
+ Based on the implementation from this [repo](https://github.com/sremes/nssm-gp/tree/master?tab=readme-ov-file)
37
35
 
38
36
  Refer to the following papers for more details:
39
37
  - Neural Non-Stationary Spectral Kernel [Remes et al., 2018]
@@ -55,12 +53,12 @@ class NeuralSpectralKernel(gpflow.kernels.Kernel):
55
53
  self.length = []
56
54
  self.var = []
57
55
  for q in range(self.Q):
58
- freq = keras.Sequential([layers.Dense(hidden_sizes[i], activation='selu') for i in range(self.num_hidden)] +
59
- [layers.Dense(input_dim, activation='softplus')])
60
- length = keras.Sequential([layers.Dense(hidden_sizes[i], activation='selu') for i in range(self.num_hidden)] +
61
- [layers.Dense(input_dim, activation='softplus')])
62
- var = keras.Sequential([layers.Dense(hidden_sizes[i], activation='selu') for i in range(self.num_hidden)] +
63
- [layers.Dense(1, activation='softplus')])
56
+ freq = NN([input_dim]+[hidden_sizes[i] for i in range(self.num_hidden)]+[input_dim],
57
+ output_activation_fn='softplus')
58
+ length = NN([input_dim]+[hidden_sizes[i] for i in range(self.num_hidden)]+[input_dim],
59
+ output_activation_fn='softplus')
60
+ var = NN([input_dim]+[hidden_sizes[i] for i in range(self.num_hidden)]+[1],
61
+ output_activation_fn='softplus')
64
62
  self.freq.append(freq)
65
63
  self.length.append(length)
66
64
  self.var.append(var)
@@ -132,7 +130,7 @@ def robust_kernel(kern, shape_X):
132
130
 
133
131
  def init_neural_kernel(x, y, inducing_variable, Q, n_inits=1, hidden_sizes=None):
134
132
  """Helper function to initialize a Neural Spectral Kernel function (non-stationary kernel function).
135
- Based on the implementation from the following [repo](https://github.com/sremes/nssm-gp/tree/master?tab=readme-ov-file)
133
+ Based on the implementation from this [repo](https://github.com/sremes/nssm-gp/tree/master?tab=readme-ov-file)
136
134
 
137
135
  Refer to the following papers for more details:
138
136
  - Neural Non-Stationary Spectral Kernel [Remes et al., 2018]
@@ -155,9 +153,9 @@ def init_neural_kernel(x, y, inducing_variable, Q, n_inits=1, hidden_sizes=None)
155
153
  for k in range(n_inits):
156
154
  # gpflow.reset_default_graph_and_session()
157
155
  k = NeuralSpectralKernel(input_dim=input_dim, Q=Q,
158
- hidden_sizes=hidden_sizes)
156
+ hidden_sizes=hidden_sizes)
159
157
  model = SGPR((x, y), inducing_variable=inducing_variable,
160
- kernel=k)
158
+ kernel=k)
161
159
  loglik = model.elbo()
162
160
  if loglik > best_loglik:
163
161
  best_loglik = loglik
@@ -0,0 +1,58 @@
1
+ # Copyright 2024 The SGP-Tools Contributors. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Multi Layer Perceptron Model
16
+ """
17
+
18
+ import numpy as np
19
+ import tensorflow as tf
20
+
21
+ import gpflow
22
+ from gpflow.config import default_float
23
+ float_type = default_float()
24
+
25
+ def xavier(dim_in, dim_out):
26
+ return np.random.randn(dim_in, dim_out)*(2./(dim_in+dim_out))**0.5
27
+
28
+ class NN(gpflow.base.Module):
29
+ """Multi Layer Perceptron Model that is compatible with GPFlow
30
+
31
+ Args:
32
+ dims (List): List of each layer's size, needs input layer dimensions as well
33
+ activation_fn (str): Activation function for each layer
34
+ output_activation_fn (str): Activation function for the last layer
35
+ """
36
+ def __init__(self, dims,
37
+ activation_fn='selu',
38
+ output_activation_fn='softmax'):
39
+ super().__init__()
40
+ self.dims = dims
41
+ self.activation_fn = tf.keras.activations.get(activation_fn)
42
+ self.output_activation_fn = tf.keras.activations.get(output_activation_fn)
43
+ for i, (dim_in, dim_out) in enumerate(zip(dims[:-1], dims[1:])):
44
+ setattr(self, 'W_{}'.format(i), tf.Variable(xavier(dim_in, dim_out),
45
+ dtype=float_type))
46
+ setattr(self, 'b_{}'.format(i), tf.Variable(np.zeros(dim_out),
47
+ dtype=float_type))
48
+
49
+ def __call__(self, X):
50
+ if X is not None:
51
+ for i in range(len(self.dims) - 2):
52
+ W = getattr(self, 'W_{}'.format(i))
53
+ b = getattr(self, 'b_{}'.format(i))
54
+ X = self.activation_fn(tf.matmul(X, W) + b)
55
+ W = getattr(self, 'W_{}'.format(i+1))
56
+ b = getattr(self, 'b_{}'.format(i+1))
57
+ X = self.output_activation_fn(tf.matmul(X, W) + b)
58
+ return X
@@ -79,8 +79,9 @@ class AugmentedSGPR(SGPR):
79
79
  kernel (gpflow.kernels.Kernel): gpflow kernel function
80
80
  """
81
81
  self.likelihood.variance.assign(noise_variance)
82
- self.kernel.lengthscales.assign(kernel.lengthscales)
83
- self.kernel.variance.assign(kernel.variance)
82
+ for self_var, var in zip(self.kernel.trainable_variables,
83
+ kernel.trainable_variables):
84
+ self_var.assign(var)
84
85
 
85
86
  def _common_calculation(self) -> "SGPR.CommonTensors":
86
87
  """
@@ -66,21 +66,24 @@ class OSGPR_VFE(GPModel, InternalDataTrainingLossMixin):
66
66
  Z = np.vstack((old_Z, new_Z))
67
67
  return Z
68
68
 
69
- def update(self, data, inducing_variable=None):
69
+ def update(self, data, inducing_variable=None, update_inducing=True):
70
70
  """Configure the OSGPR to adapt to a new batch of data.
71
71
  Note: The OSGPR needs to be trained using gradient-based approaches after update.
72
72
 
73
73
  Args:
74
74
  data (tuple): (X, y) ndarrays with new batch of inputs (n, d) and labels (n, ndim)
75
+ inducing_variable (ndarray): (m_new, d): New initial inducing points
76
+ update_inducing (bool): Whether to update the inducing points
75
77
  """
76
78
  self.X, self.Y = self.data = gpflow.models.util.data_input_to_tensor(data)
77
79
  self.num_data = self.X.shape[0]
78
80
 
79
81
  # Update the inducing points
80
82
  self.Z_old.assign(self.inducing_variable.Z.numpy())
81
- if inducing_variable is None:
83
+ if inducing_variable is None and update_inducing:
82
84
  inducing_variable = self.init_Z()
83
- self.inducing_variable.Z.assign(inducing_variable)
85
+ if inducing_variable is not None:
86
+ self.inducing_variable.Z.assign(inducing_variable)
84
87
 
85
88
  # Get posterior mean and covariance for the old inducing points
86
89
  mu_old, Su_old = self.predict_f(self.Z_old, full_cov=True)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sgptools
3
- Version: 1.1.7
3
+ Version: 1.2.0
4
4
  Summary: Software Suite for Sensor Placement and Informative Path Planning
5
5
  Home-page: https://www.itskalvik.com/sgp-tools
6
6
  Author: Kalvik
@@ -23,8 +23,17 @@ Requires-Dist: hkb_diamondsquare
23
23
  Requires-Dist: tensorflow-probability[tf]>=0.21.0
24
24
  Requires-Dist: tensorflow>=2.13.0; platform_machine != "arm64"
25
25
  Requires-Dist: tensorflow-aarch64>=2.13.0; platform_machine == "arm64"
26
+ Requires-Dist: tensorflow-macos>=2.13.0; platform_system == "Darwin" and platform_machine == "arm64"
26
27
  Requires-Dist: typing_extensions
27
28
  Requires-Dist: gpflow>=2.7.0
28
29
  Requires-Dist: pillow
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: description
33
+ Dynamic: home-page
34
+ Dynamic: license
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
29
38
 
30
39
  Software Suite for Sensor Placement and Informative Path Planning
@@ -8,7 +8,9 @@ sgptools.egg-info/dependency_links.txt
8
8
  sgptools.egg-info/requires.txt
9
9
  sgptools.egg-info/top_level.txt
10
10
  sgptools/kernels/__init__.py
11
+ sgptools/kernels/attentive_kernel.py
11
12
  sgptools/kernels/neural_kernel.py
13
+ sgptools/kernels/neural_network.py
12
14
  sgptools/models/__init__.py
13
15
  sgptools/models/bo.py
14
16
  sgptools/models/cma_es.py
@@ -20,3 +20,6 @@ tensorflow>=2.13.0
20
20
 
21
21
  [:platform_machine == "arm64"]
22
22
  tensorflow-aarch64>=2.13.0
23
+
24
+ [:platform_system == "Darwin" and platform_machine == "arm64"]
25
+ tensorflow-macos>=2.13.0
@@ -1,7 +0,0 @@
1
- # sgptools/kernels/__init__.py
2
-
3
- """Special kernel functions in this package:
4
-
5
- - `neural_kernel`: Provides a neural spectral kernel function that uses a mixture of multilayer perceptrons
6
-
7
- """
File without changes
File without changes
File without changes
File without changes