From e0f9bf297f4e9d4443c7138a7f324dba7ea30aa4 Mon Sep 17 00:00:00 2001 From: n-shevko Date: Sat, 8 Mar 2025 13:54:32 -0500 Subject: [PATCH 1/2] Lowering precision for old connections --- bindsnet/network/topology.py | 46 ++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/bindsnet/network/topology.py b/bindsnet/network/topology.py index cb5fafa1..31a8a5e1 100644 --- a/bindsnet/network/topology.py +++ b/bindsnet/network/topology.py @@ -141,6 +141,14 @@ def reset_state_variables(self) -> None: Contains resetting logic for the connection. """ + @abstractmethod + def cast_dtype_if_needed(self, w, w_dtype): + if w.dtype != w_dtype: + warnings.warn(f"Provided w has data type {w.dtype} but parameter w_dtype is {w_dtype}") + return w.to(dtype=w_dtype) + else: + return w + class AbstractMulticompartmentConnection(ABC, Module): # language=rst @@ -261,6 +269,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -275,6 +284,7 @@ def __init__( :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: @@ -296,9 +306,11 @@ def __init__( w = torch.clamp(torch.rand(source.n, target.n), self.wmin, self.wmax) else: w = self.wmin + torch.rand(source.n, target.n) * (self.wmax - self.wmin) + w = w.to(dtype=w_dtype) else: if (self.wmin != -np.inf).any() or (self.wmax != np.inf).any(): w = torch.clamp(torch.as_tensor(w), self.wmin, self.wmax) + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) @@ -525,6 +537,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -543,6 +556,7 @@ def __init__( :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: @@ -595,9 +609,11 @@ def __init__( self.out_channels, self.in_channels, self.kernel_size ) w += self.wmin + w = w.to(dtype=w_dtype) else: if (self.wmin == -inf).any() or (self.wmax == inf).any(): w = torch.clamp(w, self.wmin, self.wmax) + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) self.b = Parameter( @@ -667,6 +683,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -685,6 +702,7 @@ def __init__( :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: @@ -750,9 +768,11 @@ def __init__( self.out_channels, self.in_channels, *self.kernel_size ) w += self.wmin + w = w.to(dtype=w_dtype) else: if (self.wmin == -inf).any() or (self.wmax == inf).any(): w = torch.clamp(w, self.wmin, self.wmax) + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) self.b = Parameter( @@ -824,6 +844,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -842,6 +863,7 @@ def __init__( :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: @@ -926,9 +948,11 @@ def __init__( self.out_channels, self.in_channels, *self.kernel_size ) w += self.wmin + w = w.to(dtype=w_dtype) else: if (self.wmin == -inf).any() or (self.wmax == inf).any(): w = torch.clamp(w, self.wmin, self.wmax) + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) self.b = Parameter( @@ -1276,6 +1300,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -1299,6 +1324,7 @@ def __init__( :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: @@ -1378,10 +1404,11 @@ def __init__( w = torch.clamp(w, self.wmin, self.wmax) else: w = self.wmin + w * (self.wmax - self.wmin) - + w = w.to(dtype=w_dtype) else: if (self.wmin != -np.inf).any() or (self.wmax != np.inf).any(): w = torch.clamp(w, self.wmin, self.wmax) + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) @@ -1456,6 +1483,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: """ @@ -1474,6 +1502,7 @@ def __init__( In this case, their shape should be the same size as the connection weights. :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: :param LearningRule update_rule: Modifies connection parameters according to some rule. :param torch.Tensor w: Strengths of synapses. @@ -1507,12 +1536,14 @@ def __init__( w = torch.rand( self.in_channels, self.n_filters * self.conv_size, self.kernel_size ) + w = w.to(dtype=w_dtype) else: assert w.shape == ( self.in_channels, self.out_channels * self.conv_size, self.kernel_size, ), error + w = self.cast_dtype_if_needed(w, w_dtype) if self.wmin != -np.inf or self.wmax != np.inf: w = torch.clamp(w, self.wmin, self.wmax) @@ -1588,6 +1619,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: """ @@ -1606,6 +1638,7 @@ def __init__( In this case, their shape should be the same size as the connection weights. :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: :param LearningRule update_rule: Modifies connection parameters according to some rule. :param torch.Tensor w: Strengths of synapses. @@ -1649,12 +1682,14 @@ def __init__( w = torch.rand( self.in_channels, self.n_filters * self.conv_prod, self.kernel_prod ) + w = w.to(dtype=w_dtype) else: assert w.shape == ( self.in_channels, self.out_channels * self.conv_prod, self.kernel_prod, ), error + w = self.cast_dtype_if_needed(w, w_dtype) if self.wmin != -np.inf or self.wmax != np.inf: w = torch.clamp(w, self.wmin, self.wmax) @@ -1731,6 +1766,7 @@ def __init__( nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, reduction: Optional[callable] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: """ @@ -1749,6 +1785,7 @@ def __init__( In this case, their shape should be the same size as the connection weights. :param reduction: Method for reducing parameter updates along the minibatch dimension. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: :param LearningRule update_rule: Modifies connection parameters according to some rule. :param torch.Tensor w: Strengths of synapses. @@ -1794,12 +1831,14 @@ def __init__( w = torch.rand( self.in_channels, self.n_filters * self.conv_prod, self.kernel_prod ) + w = w.to(dtype=w_dtype) else: assert w.shape == ( self.in_channels, self.out_channels * self.conv_prod, self.kernel_prod, ), error + w = self.cast_dtype_if_needed(w, w_dtype) if self.wmin != -np.inf or self.wmax != np.inf: w = torch.clamp(w, self.wmin, self.wmax) @@ -1875,6 +1914,7 @@ def __init__( target: Nodes, nu: Optional[Union[float, Sequence[float], Sequence[torch.Tensor]]] = None, weight_decay: float = 0.0, + w_dtype: torch.dtype = torch.float32, **kwargs, ) -> None: # language=rst @@ -1886,6 +1926,7 @@ def __init__( accepts a pair of tensors to individualize learning rates of each neuron. In this case, their shape should be the same size as the connection weights. :param weight_decay: Constant multiple to decay weights by on each iteration. + :param w_dtype: Data type for :code:`w` tensor Keyword arguments: :param LearningRule update_rule: Modifies connection parameters according to some rule. @@ -1904,10 +1945,11 @@ def __init__( w = torch.clamp((torch.randn(1)[0] + 1) / 10, self.wmin, self.wmax) else: w = self.wmin + ((torch.randn(1)[0] + 1) / 10) * (self.wmax - self.wmin) + w = w.to(dtype=w_dtype) else: if (self.wmin == -np.inf).any() or (self.wmax == np.inf).any(): w = torch.clamp(w, self.wmin, self.wmax) - + w = self.cast_dtype_if_needed(w, w_dtype) self.w = Parameter(w, requires_grad=False) def compute(self, s: torch.Tensor) -> torch.Tensor: From e9dfcbf281cd95d101cfa94170d9f451cb01309c Mon Sep 17 00:00:00 2001 From: n-shevko Date: Sat, 8 Mar 2025 15:30:29 -0500 Subject: [PATCH 2/2] w_dtype for example --- .gitignore | 1 + bindsnet/__pycache__/__init__.cpython-310.pyc | Bin 590 -> 0 bytes bindsnet/__pycache__/utils.cpython-310.pyc | Bin 7785 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 308 -> 0 bytes .../pipeline_analysis.cpython-310.pyc | Bin 10199 -> 0 bytes .../__pycache__/plotting.cpython-310.pyc | Bin 19714 -> 0 bytes .../__pycache__/visualization.cpython-310.pyc | Bin 5801 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 501 -> 0 bytes .../__pycache__/conversion.cpython-310.pyc | Bin 8757 -> 0 bytes .../__pycache__/nodes.cpython-310.pyc | Bin 5192 -> 0 bytes .../__pycache__/topology.cpython-310.pyc | Bin 3945 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 1440 -> 0 bytes .../__pycache__/alov300.cpython-310.pyc | Bin 9609 -> 0 bytes .../__pycache__/collate.cpython-310.pyc | Bin 3203 -> 0 bytes .../__pycache__/dataloader.cpython-310.pyc | Bin 892 -> 0 bytes .../__pycache__/davis.cpython-310.pyc | Bin 9722 -> 0 bytes .../__pycache__/preprocess.cpython-310.pyc | Bin 12313 -> 0 bytes .../__pycache__/spoken_mnist.cpython-310.pyc | Bin 7661 -> 0 bytes .../torchvision_wrapper.cpython-310.pyc | Bin 3092 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 738 -> 0 bytes .../__pycache__/encoders.cpython-310.pyc | Bin 4765 -> 0 bytes .../__pycache__/encodings.cpython-310.pyc | Bin 5631 -> 0 bytes .../__pycache__/loaders.cpython-310.pyc | Bin 2436 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 295 -> 0 bytes .../__pycache__/environment.cpython-310.pyc | Bin 7451 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 442 -> 0 bytes .../__pycache__/evaluation.cpython-310.pyc | Bin 7135 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 427 -> 0 bytes .../__pycache__/learning.cpython-310.pyc | Bin 54397 -> 0 bytes .../__pycache__/reward.cpython-310.pyc | Bin 2598 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 404 -> 0 bytes .../models/__pycache__/models.cpython-310.pyc | Bin 15283 -> 0 bytes bindsnet/models/models.py | 57 ++++++++++++++---- .../__pycache__/__init__.cpython-310.pyc | Bin 370 -> 0 bytes .../__pycache__/monitors.cpython-310.pyc | Bin 8487 -> 0 bytes .../__pycache__/network.cpython-310.pyc | Bin 13483 -> 0 bytes .../network/__pycache__/nodes.cpython-310.pyc | Bin 40424 -> 0 bytes .../__pycache__/topology.cpython-310.pyc | Bin 51293 -> 0 bytes bindsnet/network/topology.py | 4 +- bindsnet/network/topology_features.py | 50 ++++++++++++--- .../__pycache__/__init__.cpython-310.pyc | Bin 531 -> 0 bytes .../__pycache__/action.cpython-310.pyc | Bin 4490 -> 0 bytes .../__pycache__/base_pipeline.cpython-310.pyc | Bin 7362 -> 0 bytes .../dataloader_pipeline.cpython-310.pyc | Bin 5226 -> 0 bytes .../environment_pipeline.cpython-310.pyc | Bin 8665 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 255 -> 0 bytes .../__pycache__/preprocessing.cpython-310.pyc | Bin 3181 -> 0 bytes examples/mnist/batch_eth_mnist.py | 10 ++- ...est_analyzers.cpython-310-pytest-7.4.4.pyc | Bin 2389 -> 0 bytes ...est_analyzers.cpython-310-pytest-8.1.1.pyc | Bin 2389 -> 0 bytes ...est_analyzers.cpython-310-pytest-8.2.2.pyc | Bin 2389 -> 0 bytes ...st_conversion.cpython-310-pytest-7.4.4.pyc | Bin 1726 -> 0 bytes ...st_conversion.cpython-310-pytest-8.1.1.pyc | Bin 1726 -> 0 bytes ...st_conversion.cpython-310-pytest-8.2.2.pyc | Bin 1726 -> 0 bytes ...test_encoding.cpython-310-pytest-7.4.4.pyc | Bin 4250 -> 0 bytes ...test_encoding.cpython-310-pytest-8.1.1.pyc | Bin 4250 -> 0 bytes ...test_encoding.cpython-310-pytest-8.2.2.pyc | Bin 4250 -> 0 bytes .../test_import.cpython-310-pytest-7.4.4.pyc | Bin 167 -> 0 bytes .../test_import.cpython-310-pytest-8.1.1.pyc | Bin 167 -> 0 bytes .../test_import.cpython-310-pytest-8.2.2.pyc | Bin 167 -> 0 bytes .../test_models.cpython-310-pytest-7.4.4.pyc | Bin 7996 -> 0 bytes .../test_models.cpython-310-pytest-8.1.1.pyc | Bin 7996 -> 0 bytes .../test_models.cpython-310-pytest-8.2.2.pyc | Bin 7996 -> 0 bytes ...t_connections.cpython-310-pytest-7.4.4.pyc | Bin 4906 -> 0 bytes ...t_connections.cpython-310-pytest-8.1.1.pyc | Bin 4906 -> 0 bytes ...t_connections.cpython-310-pytest-8.2.2.pyc | Bin 4906 -> 0 bytes ...test_learning.cpython-310-pytest-7.4.4.pyc | Bin 4580 -> 0 bytes ...test_learning.cpython-310-pytest-8.1.1.pyc | Bin 4580 -> 0 bytes ...test_learning.cpython-310-pytest-8.2.2.pyc | Bin 4580 -> 0 bytes ...test_monitors.cpython-310-pytest-7.4.4.pyc | Bin 6242 -> 0 bytes ...test_monitors.cpython-310-pytest-8.1.1.pyc | Bin 6242 -> 0 bytes ...test_monitors.cpython-310-pytest-8.2.2.pyc | Bin 6242 -> 0 bytes .../test_network.cpython-310-pytest-7.4.4.pyc | Bin 4639 -> 0 bytes .../test_network.cpython-310-pytest-8.1.1.pyc | Bin 4639 -> 0 bytes .../test_network.cpython-310-pytest-8.2.2.pyc | Bin 4639 -> 0 bytes .../test_nodes.cpython-310-pytest-7.4.4.pyc | Bin 8725 -> 0 bytes .../test_nodes.cpython-310-pytest-8.1.1.pyc | Bin 8725 -> 0 bytes .../test_nodes.cpython-310-pytest-8.2.2.pyc | Bin 8725 -> 0 bytes 78 files changed, 98 insertions(+), 24 deletions(-) delete mode 100644 bindsnet/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/__pycache__/utils.cpython-310.pyc delete mode 100644 bindsnet/analysis/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/analysis/__pycache__/pipeline_analysis.cpython-310.pyc delete mode 100644 bindsnet/analysis/__pycache__/plotting.cpython-310.pyc delete mode 100644 bindsnet/analysis/__pycache__/visualization.cpython-310.pyc delete mode 100644 bindsnet/conversion/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/conversion/__pycache__/conversion.cpython-310.pyc delete mode 100644 bindsnet/conversion/__pycache__/nodes.cpython-310.pyc delete mode 100644 bindsnet/conversion/__pycache__/topology.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/alov300.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/collate.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/dataloader.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/davis.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/preprocess.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/spoken_mnist.cpython-310.pyc delete mode 100644 bindsnet/datasets/__pycache__/torchvision_wrapper.cpython-310.pyc delete mode 100644 bindsnet/encoding/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/encoding/__pycache__/encoders.cpython-310.pyc delete mode 100644 bindsnet/encoding/__pycache__/encodings.cpython-310.pyc delete mode 100644 bindsnet/encoding/__pycache__/loaders.cpython-310.pyc delete mode 100644 bindsnet/environment/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/environment/__pycache__/environment.cpython-310.pyc delete mode 100644 bindsnet/evaluation/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/evaluation/__pycache__/evaluation.cpython-310.pyc delete mode 100644 bindsnet/learning/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/learning/__pycache__/learning.cpython-310.pyc delete mode 100644 bindsnet/learning/__pycache__/reward.cpython-310.pyc delete mode 100644 bindsnet/models/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/models/__pycache__/models.cpython-310.pyc delete mode 100644 bindsnet/network/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/network/__pycache__/monitors.cpython-310.pyc delete mode 100644 bindsnet/network/__pycache__/network.cpython-310.pyc delete mode 100644 bindsnet/network/__pycache__/nodes.cpython-310.pyc delete mode 100644 bindsnet/network/__pycache__/topology.cpython-310.pyc delete mode 100644 bindsnet/pipeline/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/pipeline/__pycache__/action.cpython-310.pyc delete mode 100644 bindsnet/pipeline/__pycache__/base_pipeline.cpython-310.pyc delete mode 100644 bindsnet/pipeline/__pycache__/dataloader_pipeline.cpython-310.pyc delete mode 100644 bindsnet/pipeline/__pycache__/environment_pipeline.cpython-310.pyc delete mode 100644 bindsnet/preprocessing/__pycache__/__init__.cpython-310.pyc delete mode 100644 bindsnet/preprocessing/__pycache__/preprocessing.cpython-310.pyc delete mode 100644 test/analysis/__pycache__/test_analyzers.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/conversion/__pycache__/test_conversion.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/encoding/__pycache__/test_encoding.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/import/__pycache__/test_import.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/import/__pycache__/test_import.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/import/__pycache__/test_import.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/models/__pycache__/test_models.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/models/__pycache__/test_models.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/models/__pycache__/test_models.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/network/__pycache__/test_connections.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/network/__pycache__/test_connections.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/network/__pycache__/test_connections.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/network/__pycache__/test_learning.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/network/__pycache__/test_learning.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/network/__pycache__/test_learning.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/network/__pycache__/test_monitors.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/network/__pycache__/test_monitors.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/network/__pycache__/test_monitors.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/network/__pycache__/test_network.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/network/__pycache__/test_network.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/network/__pycache__/test_network.cpython-310-pytest-8.2.2.pyc delete mode 100644 test/network/__pycache__/test_nodes.cpython-310-pytest-7.4.4.pyc delete mode 100644 test/network/__pycache__/test_nodes.cpython-310-pytest-8.1.1.pyc delete mode 100644 test/network/__pycache__/test_nodes.cpython-310-pytest-8.2.2.pyc diff --git a/.gitignore b/.gitignore index 197e3bb3..71aadef8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ test/models/__pycache__/* test/network/__pycache__/* test/analysis/__pycache__/* *.pyc +**/*.pyc dist/* logs/* .pytest_cache/* diff --git a/bindsnet/__pycache__/__init__.cpython-310.pyc b/bindsnet/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index b69fecbe7c20fef89857735c630110e9a6c40c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmYk4yN=W_6o&0gGVx@R8LkB#Z5q;2AcR)aAR!j*LgU8r#%3`164{=Csd*DRUdb&D zJOL6237@PGYssH{Ir`7y5J+H+45k>vy3mDL z(1j^!X)0QoC0&}D)`n1GR&-?=+L$$6o0hhwqn+8%4Mq~n?PvV{mOu~CHRZ>2Q6Y6m)U-9^^Zxi8`>r+r6HKVgf>4S1M5y2x5GKNH?9i32ipVrbIm3P)i z8&e~XTpxIxi?!t5LdnuNA$3T#mGPtV9}=0=B(<_Kb(5EqccTmeDyu_OI`p02WIKKh zfT;We&;csI63_xx00O81Wkw?`v3K^gFCHy9fSF}!di*KdOK zyPV;0<~}{VJlS#BtH^Q$ZusZy|AH}P^DTQcof3JHGdyVdH2)VAz+;OZ7x%Vp@fXpI BnL_{o diff --git a/bindsnet/__pycache__/utils.cpython-310.pyc b/bindsnet/__pycache__/utils.cpython-310.pyc deleted file mode 100644 index 29d33ba0459fb3b96cbecd2392727f39c26acc9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7785 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 diff --git a/bindsnet/analysis/__pycache__/pipeline_analysis.cpython-310.pyc b/bindsnet/analysis/__pycache__/pipeline_analysis.cpython-310.pyc deleted file mode 100644 index 8482a7455cafc14718ed2852584ee418cc26a172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10199 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 BxD5aR diff --git a/bindsnet/analysis/__pycache__/visualization.cpython-310.pyc b/bindsnet/analysis/__pycache__/visualization.cpython-310.pyc deleted file mode 100644 index 2f817c76a464369a6663b23783ef50196187f6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5801 zcmb_g&2JmW72nw}E-6ZuW%)yn>u#MUwo+Si(gbZ3$E_15Xc9*WV#h`0IP{7$lvY~q z(z8oTVo4yV97IN8phd3*D&1nB_ukuop}owhKri*RxjAXv-d1ZHJ@dv~3Mv9d`&evFsJ$jSj;5vCZO zGWbaGtm4V22YocJ!bkZS=8cyP{AlJBKTymZ<>TOf5Hl<>Dn=Woo;4v3>X}u3h)-hX z1b4-uhRF}}BX{kENp4;>rjI|w{)}l$*;m3eQ{FqREKK4cQqHw@D-!b$8HSa)ma1wR zG|^KNcZA$ft`u2Y#&wgX7nh4?8MlQy{VSR!;~vY5uCc;6n=&@pW#i_Fp4m0JCdcpN zqRpUP>YE}uYs%=dO{-x~89i%@ZJS+dhcV-JIkQ&mE%4#?eG^=rZFk4$*_pFa(!E3c z8sNbl?3|IN?>qMlPMTMTkk!Gr8I zcHhB>vpu?Fz_z5Z1D!usd|akqMd4lw`p9hh(P*OxeMDm?~#E$!hYNbkI3%E4$tdTFMLJ zu!$XUW#4IrF}1TQDFT-hfGUOC}&CZy8GrDr580 zOnIruYCOmSyt9=DrZU5(Diz9lU_5$nwi#!$eD+FG52E)|Auoe=_LXGazq%3EXO}{V zELzFzVi@x@7TNAg0Ds*`!*upen6`r`>;&Y)Gc9;&yM-0S_efS7%?akR&M7iitys9G z%{Fr(qE*w2Gx>yvk8y?ngd-y|+y)FNQssp)w0Z}zVJ}8uHa(^s8N^FMIoh7e4O%S` zb7jUYHBwLFI#!NxE2|Y{;1VvirBH6zOqY{2IRbH%S5KluE(TIr(7r0?CV=p2^!0XJ zzoacfpEk{zb|rgKk?OFQ>>;Z(b(RE z^$e@BG1If2W)=L#EZeo&ICCFYEjdH;-Lw_1LJKzeta7rXRa;dh*dnZpv`)(HUnC=m z_$uzS0e|TtY}-s8;%1lGK!;T(CjbfvrzvCANDseh{0hE8ZH9oSKm$OqwjnQct^CO? zZr=rv5GT&yWx6FVy9`(X46tpBJDR6EWgOAI7vCtjysx>i^mSSRkWg@Lw!{tax3Uk1nyS+_g8^qyZ2z0bOjn!VhQ=W7{Kqym+f>V4^5H7~F%hHC(()fTRuP zXEF%m)Ndrxht1Bd`mt!s1U=}W&a@@!VI!>jg(>&KR&I1ajW)iXki^1I!)80uQRd5b zJb*O4HeutfTW5x$Ev^-d=BPHk57mei=om%GS_&i+B&pvD>#P3Sa#&yX3yjpggN^Ae z?Ey#al5@V^`|dWg<)Ban2R;hGbeidX(5ijbd-xQJC^!xDQ*7b1)+?cHP|w0UVYUIy zrI`pgsX@z-bDP)5y9YZ7gef|%;{J>RZwWqqbEJnPxy|6)#;UoaBjC5@ZKRq9Oe6FI zOA>$qpykrqvH*sZ8c;sKg+O%Xy!-)1^KjQOufx4^AwoW{C(YJH9f!2^Nu%?uMgeWr zTJ9M&I6*%P?ZV*h?9P*9`#t+5w+W)ie~R~=Nz3_-Ta`Z~0iUPl1!{gwjTUtvube~Q z&v1W6`f-g3AdjR9O&&+{KXZPUIK71C8+HS;4eh3L{vG%@ta(bC^Av^3slqGt$6}H# z`^`2SX;Jv|2#6)H#`X7~Ah(S~VJspMFJ;T=qXSoWBjp+rdZ#+C!;hj(tWS^1?_!#K zlA7HCUXHDV2qll)D}Uiy~6)hJMOt zzzWG?me`)B=2>c!Iu;aMpS;tJuDpe-Q#;SBDiLwBh)9WLHvZ>sGEXz_L)kVBcwMqY? zL`8m~J^6BxQC1!45l*i7+QeGEj<{-ly*W(tqkW-$fViO}MFdJsi ziVqX!qv*7XY;?Y$1!DKbaSaNUB{K?IUPd-zeB{2ZWyuR!3;CiN{9#YND2$@PF#yEJOOYr7 z+)rX3UHw#10P@~cQB0rnuZb9LOFtt9Ad|tS}`09ysqWGv^P7p5A4i zUMSg6S}7QOO=5v-4zj^MECfmvi2+!UtqBq9EVC3MLVaBx>a+k3dxRSJ`9La)%e;m! zA|R*NNkqfzyoSPu8WdkfFsRb?Jc>GJ-xke9tR?zepe1vu2-OI#`ziD(-Z9UeQ_f-( z)K^j4mIkAJOAD_@kG`ZT)t% zSjz!+9qar?7n@hx&1N9Oj!2PF;pjNP;<%Lh!D7fBWrA@BLzUXz!$#E1hG5Sx?+J-&_nbRK+QFJ*QZueG}eG z<23Z=KmGrIl}?q|Um>N<`KKST)16WOjIJJo#Yjw7ItTqTF#vS9%fgI~{mZ$ty-s<6 zkQ&F@CklDB$S*z*nF}KbROpF+y5pSo7dQM)#ZNclpp}ZW(s_y`zz(6?eaad7taK(p z@j~-jk_AzJ(K(;QBSD7b>m18z`U~{`vjMS9YMd^k=*oacTGcgDH6amsjq)N9$QV{v z43$^za~do4p}%mZRI#<`in8E2YBVEx`bQvjH2)kZYcNpI6@N^8m99Tv!L=2O6ss$D zEtk#WVRJu3mQXb!Ha30@b*Ecs?6S@BpT|5@YZbKPz(bEs04Z_d%Y2OImt&UsZ__rv zupf_?sA{v>Nl=^kxdnwcpzunl_n7&S`7dvrDDeIm+`cqHVLvwA{XMoTZ$lV;9GJG| z=jW&GJjVfc4SXF|Znn{adL&vPXb6uUt>$E`r4@X|O{@FsY2F>L<_xpXc?Sbly{+- z@OC6F(gsq>W|Kx0g)k}kxMiLurPyECP>Tz-xKK+4sx_U;=jL-XhSASyloU@&8`Goa L=cZeEG;!`fU7{w9 diff --git a/bindsnet/conversion/__pycache__/__init__.cpython-310.pyc b/bindsnet/conversion/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index feacf5b7354366e55538ac46b77bd5cd28b3cf55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmYk3%}N6?6ooTC?M!P6byZj5(%E!CT#AT41wm@D>LQzvPC`2{NlKC_t&ii*mvG}V zxXIR)ui(lgRoV;rxHsgSoDk9Nwt=nZ&ky__0Py98-3sk+VV63!Abw8VuL()7kysmHk#^=v*8gesGasbsaLX8*6*(f23y)GNy+eV~f!+u=sk#+)N9 zkmB4N5UeqpVnqq!LNZ*HFW6n5rLtiI%E%#ch#i^^?)9?ekXnqgwmF=ZoG4E9pb&gX zrLqn??MC6Pyo-1CR^HjUct4XMgsTdnHy}H1)8XenXI$qbzY_(no)neWHgkR{R!5UH rFY;Nbk)#We|7X}X+b}soCASCBV6iso855+g=(+t`pj@J3(AoP1(;tnR diff --git a/bindsnet/conversion/__pycache__/conversion.cpython-310.pyc b/bindsnet/conversion/__pycache__/conversion.cpython-310.pyc deleted file mode 100644 index aa962d24c6c005f3b74aac7c24b6cb3600c3cad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8757 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 S=s(g;{ofr+|3oj;KK>6v-ZWtV diff --git a/bindsnet/conversion/__pycache__/nodes.cpython-310.pyc b/bindsnet/conversion/__pycache__/nodes.cpython-310.pyc deleted file mode 100644 index e9ce3a49d10439e2935a33267cfc8c35bd4eed9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5192 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 U9`+^$lTt006&ns}Nk1?C1MUq6MF0Q* diff --git a/bindsnet/conversion/__pycache__/topology.cpython-310.pyc b/bindsnet/conversion/__pycache__/topology.cpython-310.pyc deleted file mode 100644 index 179ac23366e0a00165afd679f94e22a6e66c2e73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3945 zcmeHKNpBQK6t1r6Sv_7bNx+0ag^rUq9TLjwOAHL^n z^Mw3}53|jMhfkpET^IxrPDmoB=R~weqe`z5xjomxc^X!GReP;PbxIr(HF{0^rV_TI zx!zpV?zJ8A1re^OJ|dzj+q?4*E4>Ansfjww)XSMgL2r}Q#?NpbS#|Tqbt4tu3T587 znVKMpd6-u>vlJ$(cVc+nSfzP2PK4BX!z5`ECfh?FH_tXO%{FU>Bt1uv9u-cn(xlCb zSQM^wcdMWjjx`Ai$+~RFrmV^43K`H9vO)wri>9E1_G2<|L`%#)n(wtlTh8saMH9z? zE9S+*BeysIn7E|30A?)ZCvHg;%#Pj;AN&w60v^2l-BRFC=ppGSrA)kIt}jO;#g*ihj1}_iMppd_T|P;V_)Po zon*?FdChROEluuw!e40%X) zosl!5BX?9CxB(f}zH`2H95SkmhzAY^7f`-fA;ju|W`iHJQJHVRMznKc($qoyey25A z-%YvV5i8X0vMVg)L#bFYU^eD#pujJCJAuDbIBM#}L@;m zoG@#87;{K^pUL|&Hpfq&4OzEvEsqU@)G+~62^=`Oi3ZscnMS^}_PKKSgHjHE@E_#F ziHbl@VxZoN6EWbd$SqrlpcyXWVX$9%7oCl5W3`f3bq4G6hUbAf#`9DgN@}&9yIO_= zg|Mu!((JTC08L$0;w9g?Rv*Q401i}f3c&%--fs!zG$>sONp z?DjDB*SFyWCDUYmD~N>#c$nTmZr_K%K=jwg_}NK^Y8eh&g07JQ&YW%0{WB%_Oe?iB z);)K$Phs7-;XPD6xdvUMl#z2lMgSI1oCErV04zBBUr!RClnYpvW@aV@$F<*O*NZoW z^Pr3ibn3Elrxu`J{hhqF30RUS^%l;}m%;XB7=oOs@~`7Iv_LgrK%F#VbAz~)wy5Ji zh3lVgh5kWZ`ulQ~{zhx`DQztLdXCv0J}f@cCR{0C`X#us^)FmG2V4oHKcFQ`E?Aaa zv@CfFa!MP(u3KDO64M0R-?K^bQe4^Z9}xyrd26_d4z;2tw8{RNGHrCHRS4uH+H}UQy;N%B-jpP*WBn)dyHz^#aYOREe`Q1^OC3 zT70x{X+aVJ_A2y(*3JQ~O}?8Te`m30LT;8Wj?o*^qNO*KXvhJ62a{d;gdS8%g1b9O zVvsy$sL9+5kXu<#B`uCC0)C2|&+`h@iSXJH-vKS6;<8T27FUVD= zFDTpr|5G(HOc92sTm;v^CGc6-@RvWCo#+0FV{EK`qkL_c+S+Lyoo?0Z zFvpT0oxbex=&*g@9K&7n6i2+9NadX& zB9M{mV_?h^_foNbpDS%O4w^gfU(|JBVAOS~5hT~K$ND_hc0+oy!TJft#=1h@9#6PO zzOK+JFj-RyEJP3OrytgZChKwP(sq-@XNbIMFE&Ns_0(3qhmh2K+0*5NkahX(3~z5D zb1mnjt&5}$!Qxow2QwdqQP34K(ZzRXGLgsfT;O_`>7eEL|G_;w&OIFE{#P=!<+@A=*Zpj$P0BFI_rqEkB{jd+k{%N$F;{d2YP<4k z#kr2WS~o~soEcfW-QS&YTaKFR1`)#C&HlA6yb7g%F8DV7Esb~^VjH%3`xY_<^Iu*& F^9y3^eU$(J diff --git a/bindsnet/datasets/__pycache__/alov300.cpython-310.pyc b/bindsnet/datasets/__pycache__/alov300.cpython-310.pyc deleted file mode 100644 index 0b98493414da9ac7f2dc2807bed5ea39a1f66bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9609 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 diff --git a/bindsnet/datasets/__pycache__/collate.cpython-310.pyc b/bindsnet/datasets/__pycache__/collate.cpython-310.pyc deleted file mode 100644 index 856bb9426d172a4ff0491f83b20e84f083e265c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3203 zcmai0&2JmW6`z@1lFJqKVOo~$=4+FQu!?y$03rG&e@ zazb`%yvl3v_Bh)iE${F@{{4QUf;i_QfHzO1h;=#+icy*h9`s~B40K-v#aQPu?gx*B zR7su%y?m7MAkrWDeqZZCec0*jCAvTAw&Q%*naw_bchkJv8AeJA*|B;$Bb}tG!y_Ga z!jg~kG>x=q7h~VQm-D2T#E}M5DiBW+r30M@{phg>eyfwA*bKUnj{BQI7T(?r+U+(l z`wxO70}~Ms@?I&20oc+|WY*`~ZT~BX6xnW3Q=6HKabWRRg^!QmQMZ5`)-@T>0XuW1 z5Zn>{HQ6E5{XWp7-2r9!;Wmu|wMr0jawdCthJHt$O zc<0kRj?!N$AwR|l|1^IR?2NM*Qxr;3 zeI{S$j5{YV`(tuUpOS2OCUZg7;*~`iuO2zNa!lk$8mjq10@__zRhyDCZ{kkrQ3by0 zlL~MSSoFaYcj9pGb7zN4*kFm*LHD15YjA(xnQ=?V&3(4A2F&`MULLHRtxo7*ZE$5u zd38kPW8H+&t7q#tI)%Ock?L!FdC?!RLkAmt1vEU>?Ckm}nbIASZQB^!fC&5z{JMEc zfPROseh!$llGi{oh4~=C`F8B}!5f1&Vf^oZB0b92_>~iHLNQh|`CB0SQU?>to5)QV zzslE7h<^K&d|_ky1r+PKrgvb@ze?Frm0v@jC)Js@`L0;Gr`ASv9nxqk_p^}(JVww6 zuwH^*B2o?@gHn$I4KT}PZ~$%K0(2^P_;3-ifl3Ymy@1#U4>vO(fb5Y8c~CoovOj}1J*9tPkFfdD7W)bp%LWi= zN$%rB96V!&wQn2xZCvsad!6+%0LFURD7}QDrJURZVD_L0X8tm})zVugmtl#iKqo4MTmk+if8`Yz z+k{7uYkVCTYrI+-pOVs`)d+E^WTT--ztzb5u-ryt9fRoPBW+g{W8*3< zLsJ6^H3Uq?BPpZtB~M;IMY`4UqLZ3|MD;$cr8RCoi(A7%h7PoQ7H0se?_D83fmmT!an*({AU z6%C72sF#vy>UZ}>oZh|v1Y#q@O}64Ru{lGUvtT~S5|)M+hVTJGx>ca=jXeP znN1QR$0n)uu5q!djGrjH{zO?U$}+9qw+-1i&@JsTZ5%ZkA|7%X?Fq9KX5wIWmoN_S z0B0S=`^FE$Va`XX2t(tAVHQD$2_;skxseqiqAKqWLJOv_h%~hC%v6<#;DRXMz-bQ5 zG4=c4*3YEOrFoN!UNlPeyhVjV%5bRm!d@Ie5ISrsq7f0E1A66i@LYs7*Zou1vXN}n?wCYgXADDPURTe zx2_KOVV?phl2J)ACaGkQ9~e{s9+ROA=E)72QyIzL^&ksxNJz2>*!n(sC7d{|g;eH_ zLXy`rgHt{N*ctj`7@(EdCjgFIktJn{2QLx6}_f&!Jk&`7QbNHZ3cc%Jj6(g??w1!Cs~>>d%kQ)>WQbF z=#M!6)Cj$a7zUX;9zWhn$(7cen+F)^;1Ind1iWx;kbMXc6Bhnk&(V)=*QDnoSDSp{ tAMMmmcOs|Td+E4+)VM-hA7ZpSy2sqnBeRd6ZR&rHkI`ZcF&VMr;5T5&-8}#R diff --git a/bindsnet/datasets/__pycache__/davis.cpython-310.pyc b/bindsnet/datasets/__pycache__/davis.cpython-310.pyc deleted file mode 100644 index 60c0ee116a78cd46335b7a1a0cbd144ca75c30f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9722 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 R`3EB<0Hr@uOJYa#{{y%K5MBTP diff --git a/bindsnet/datasets/__pycache__/preprocess.cpython-310.pyc b/bindsnet/datasets/__pycache__/preprocess.cpython-310.pyc deleted file mode 100644 index 432de202a0f08d0278c0172255d6597fb5b8d8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12313 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 bdD3)_gB4FX$DEUn=j4o1#ne7O^TPiEGcEEA diff --git a/bindsnet/datasets/__pycache__/spoken_mnist.cpython-310.pyc b/bindsnet/datasets/__pycache__/spoken_mnist.cpython-310.pyc deleted file mode 100644 index 274a50d701b9b9339521617cde46df15091b6ab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7661 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 b`8+3eR=S!y=^9c@Bem8@iPh*Dt2zGyNUdc& diff --git a/bindsnet/encoding/__pycache__/__init__.cpython-310.pyc b/bindsnet/encoding/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 27ae69a36ac4c6d3b341304fae9c4994eb57b915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmZvZKW^JF7{w{e5+&P`>tTkAQ3Htedi&~~8~8nQTS#+M!<4CR*%N|>uFPxKjpf>T_rxpw1x zjkg`^1DA6s@TN7X?=}et{9_Y?481tK;kO2Zm4W2oXX`9C)=a=FKxQBn$QYyqnR>ab zU%9u}onlt;{y3EGHuj&+4F?dpH!oBF=P`#+wyxdt>;N`Ufafr!tq_#{LgqC@Kz@H} zr0N^ieAJ6pe6`%1w|(23=^yXscWTiryPoZUsMu Q8@2Gy-l4SY761SM diff --git a/bindsnet/encoding/__pycache__/encoders.cpython-310.pyc b/bindsnet/encoding/__pycache__/encoders.cpython-310.pyc deleted file mode 100644 index 0b74cf42542954a84cd3f8468e94d829327dd4cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4765 zcmb_g&2JmW72hv@h!SP0b`$4&+PEJyTqL-Z#nh%W|vD+5+f(@06W?@JM-Smd%yR4 zLnX~-!$SM>XP@$qo0jz@35(5x@HQU(Av$3RJF-T0&$g{USi%wRKP=%sa(WIVPgEdP zr1Qw_xsa=(2DxTr4{}|sL0&U*1#&~ILtZy>74n8?LT(zl26NSKqHIIh43~W{Zn+(>e<5TIl}I_uunVmdS1S>UPZXjxt7&#kus^K zpEnrV4%dOn|XBT%rjrA`RIwI)}iOy_qIoIx-GWfO|a`f zX{p}fDc{~n9xGi&rtQ*YwYFQPlP4spVLobk~9kA24qX~g-j{jt4gsR}0GOfJl- zD&AEM-HD^>_>;NeXx|(x?>1-*d!mT={uU%n#$H_7QU0;*DB8nryGjdUK9atlHGF@R zh)G268@~Vd36F{|HQyIW;QNXWsz~#KS@NtR+lm55YBlYyZh20lw&9u400T>nrc%?t zM7Nj`A6Y}&PtTh>xXUP(l3D*<^Ix6bJ|?m z8HhLx4svFvX_^T+3}Yz(;ZjMzKjSB&c2jaX+MKW7&*`5~-Ni9DascP*vUg>?4|Ya& z0=VfVQTiOX{!FK7{Im+gh4NyO7IiH%aGQ#n2}appWsFWfjwNt1)f zuCbCD1;!}qu-8mIi<5jqI5BF{uW772E$sq?R!o>11ckkVI4Fj0w_Q=sl3=h$n9ZvB zK^5g3z7iuT%A5HjMRyEkptzh~6yC=a{O8v3N!K%$RPT059Of&+r(7b?cg~Xygp|347EYFY#qnH~_y3;Clx6#FvY}uVu|U zatz27z|Xf_x*>3LrKYC?(_;{R4KH(q3t&97kKOa|J^iYT)H&ep_m}MB8uCK{4&dM% zPXO?I;?oDX0nT|q%MBW!op`5#whCi!!oeowSJwz*OI|85c4FrNqiCE9o;E(bG1FAH zn5}4JC3qBpr(MfhJ5t373TgN~aiOl00+;{o0#57qPg{7x$am?|+dYTh2D2Ss%y6aY zr-y+O;(wG6j}j&3*W~UQ!Zk_HM*M+~%k!Yi-s2BIoFlqQ5BMOAP+1HQn=3p~FER8f zGF^qWwbBg+Zi*`5c?@?yXNWn^Yy@s#1XvQ{mB%OiQ#YMTY zRFqMmahI!^-#D8eB%#(xya>YEbCS-gd<>^OSXqY^-B5tW*DpZhvY8*uK;wM37Xz@c z_w?XLC6HQC(sQ?T*-nx~UED(@>SK!hz|DdUIm)uS!6J!EF%N=?qR}83;R2kO+&N%p z74)}o<2l4uD-OJ(gwm>&CG@ZK@l|xwXP3QSLa(Twx7+p8mq@CHifVA?4RFE>>gR7T z@h`OE7u1n-2BWjuS<>Gf9^ZRk;n(#d^5(!>Sr!ZWoBprlgL6vWY2{CZx0SqyANKcr zFpg9g&#tP(f!Z- z>NLM2%zet#MZ;hQB8pZoRMhhRm(_ol{{;R$I3@q*!-lo#wzgU=JeOLRuWbDv6`o;l diff --git a/bindsnet/encoding/__pycache__/encodings.cpython-310.pyc b/bindsnet/encoding/__pycache__/encodings.cpython-310.pyc deleted file mode 100644 index f7082471284a9317513aa5874d605f0d06e727f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5631 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 LR2v@8X?*fO{F(U^ diff --git a/bindsnet/encoding/__pycache__/loaders.cpython-310.pyc b/bindsnet/encoding/__pycache__/loaders.cpython-310.pyc deleted file mode 100644 index 5915414a7432117630649f04fc3617c5e4ee9a37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2436 zcmd5-L2nyH6rP>kwbxGUIHfHK1u+LMmQq_Bu@Imt7eok1p*!ih-ibe))XY3z30*z0-@>S^S6efYXjDK2-*anKFoO1I*W z3axlzL-^8@{ts2@pxh=$beo8hbmba+%W_==lFn8FQ4!Uj{B8}-H7+@~_S%^>u?}bI zS2|M@bvUyj=mBYN{ssP#rk4d@TB-RUlCzObbQXM*+AvW(%KWTi>&Go@2cxX-+M#32uA!UIoy{+mNc zmBF*ee+;7u3)M+7l7{vBgHQ>hq-{xcn21mfTjyT%`^+XRMCWaIBH>uRM>5Wgd@zQI zWXVx(79DC;^I<3Dn#T+^9rm46Ceg5qnPZ+x_}}-cXLy`O((EwR`*?@7S}h!n?)Uqx zWdj(U4%?GzXphmroq2GXNyCw3R`XD?RBCW09b0z7b%;q?F(Pb-9fa{X0uK_!&?Ylh zrn5~&+~+XO3QpYnI>Z$uw?$~I4hLf^MS;r9g7B4`JcOh(u7~4TDr-6`!8wW&ZduGv zd#O$a9riUp1&}er86SjEXeT+A+);FK;XM40M+JPn4z$ovqDWF70zQuQ8mdsA1#|QJ zu<8z_&3xeEP-boP^&KLxDZ*%)dZ9{SGc&M}dSZ#7!7w^;s@vRQU*W z&yg?maieh)iE;}jml8#9!D`dx`U=TkH0-x4|A>p_7s>6S4bNK68*GG^L4q!bOwij9 z{nhMa>hyakF64Q05%yWCKfzt^qxb+slkOLt&M7{PtYjxCTvwXn7Q8vNhXVUV=ED_z zc%0puH>AboHg8BK?|?ZQHG;}Y#Z{HLp@L4CH|V?xS6|Q%3msk7ZC%vWU;GEjexQf| diff --git a/bindsnet/environment/__pycache__/__init__.cpython-310.pyc b/bindsnet/environment/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 88a73cf6a5bd266f571527eb3d16db5b78275ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmd1j<>g`kg0QQH6U%_~V-N=!FabFZKwK;XBvKes7;_kM8KW3;nWC5&8B&;1nA4e} zm{VAS88lg60#z_*GTq{K%`3|+%FoM9%`3UZ=U$nM#4iGwSHuh?{4`l^DI{g)r4;9- zmguD-v>>w)%5Sm9$0z3G#K*5>C}IPd0U~|{=;!8@=%?uWTQgche3xg?e(>O19E zC_IS)EYy#W&&&g=jMpouyv1RYo1apelWNBZG{2YyNC+_S GFaZEQm{BJH diff --git a/bindsnet/environment/__pycache__/environment.cpython-310.pyc b/bindsnet/environment/__pycache__/environment.cpython-310.pyc deleted file mode 100644 index da3dc8b8163952277dadb025338ecd0268aafc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7451 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 vQR~xkBUh-Z4bi++Xy5q&{a;U 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 R=KW8p|8j0QIG#TJ{{iWnsO|s& diff --git a/bindsnet/learning/__pycache__/reward.cpython-310.pyc b/bindsnet/learning/__pycache__/reward.cpython-310.pyc deleted file mode 100644 index 06358553166d1fbd3eecf9f914bb5807516c2242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2598 zcmbtVOK%)S5T5CI?0Ef%aU3VcfLg#It3GpcUyy)(= zr`J_Js?y$H}hM zX}y9QtPUxitq0rX65Cf=vPh>wALe`~LS}PJAHEB_!W!7z8W3&|9O3eSyWD%>KDP&+ zp?uyll+PV_Xs%q^sxN;cj+x}+&)XEnWRvbQC1{i|rRYH}sWd_~%F|+`nU3?UYvfB` z3O$n9PGmO}Bd|vL5qy84lH7(j$@q>rgYRsci-hW>Igbxwq3Rc^TTx=?rS+1Ot`f;X z>HiEW4wY=dRc8A8Q7_GOkN3XGBbMwbA-`gp^&aHU=o+QzkpUXrxk`gkHSzo zcrSWPF5xr{%}fJ{kw>>E6bmeu5O={Q{<3X2Z=o4)+(hxuU}~b7w<|0UTuy}d)IT8H zpn1>&PQd40xP!o;dcItEoF74Ow~mHSzI`~Z95=z*1jL0DJdO~eKC!lyJDFXI}4D)v!;i zszKj`+DsA)C)VALEpLLk9Y@Z=Phz8y8#v7p3bWZ{S{D`ylPZ{Rlkw^$ufD53Vea8) zocb#)CQe1r!J4dF7xp>1u+E%n=iI>_bwMudGZ!51Y*=R=bSdxD-GC54Aly~xT1cIG ztJcj5u1!Ad)_hX)Jvil`w_x_pg9~^MI-(E3Y_Tt(LrlXmDV7*c2$<^9?aL*QPD|hP z%>N4|i=t6FN}xn@XcZWWY1A4lnnT)8U&Ouybz!CpZs4eq1EroSEeh4AyZD3J4*+HQ z$^!;uRHQ6ChDMbi_vsHY*M}5J3woleISAs4-GI+ZL&;kI(lc+D?b&^G75H@X6}ID@ z&YZjff4K%z>6yn%XDGCRpuB~wb!7RhC`86fH`XHU_zh@&fHEKA^bt<)LMpa{FX2-t z5iG9QD|Xz6QGH6(cr&Vi=O@RRT1g!Mq0KK4GY(1g;jQu04K z&?<@mchNMFWyIgnku(! K1!UP-UHcbbj(GC` diff --git a/bindsnet/models/__pycache__/__init__.cpython-310.pyc b/bindsnet/models/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 4b00cfdf56b395bf702ed981dd93df44f7efd515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmZ8dyG{c!5cIv0fQUd8P(VS+H8Dh@LkN;I5mA}|g&XT~wk}ruh zsrUsd>`MZOl|0@Z&+e?O+U;%N;^F-*>jeOO_~LJbuDEumJas?-2{;e|3PgxP5ur%L zC>9Ay0#E=Fz67X2q6tXjPp1ZHV)q7&&iIWaeWm8zv-1nP|DSp4+M}V&HO)#Ui=mvc zDKkvTF*Qr2=k{=<@{IGUucV~8p=9&0d$&}htfG2Nq={}gR~>oqd+XRk;$WOM?ZK2u zQc7w%LJ`W#^|eygJwNh#j%{M>d@+6nddm;;@O2A?G?2i0sr!=ZL1r@8Q_m-pO6IU& m25Y)daAWqHtXv_+Oga(nEGpZ&bmSwaSMKLQ>FtlfPU{;!pl(M1 diff --git a/bindsnet/models/__pycache__/models.cpython-310.pyc b/bindsnet/models/__pycache__/models.cpython-310.pyc deleted file mode 100644 index a5c96c2265a3ff177891c94cc0add2a2bcaf7937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15283 zcmeHONsJuVd9JFiuIYWcdwNz?y2djnQ5|m z;j8Ky&bS6pLL~wMFn}*c5*P@nOU#Q;fe$(9l0yyw0t5(xx+OUXLJpB^SyHT6%J=`T zy1Tk(MxqwLS=f#G>uvS6ddv5J@2^fipHc8ze#=<<<~J4P-^dgH>F}Jz<^3~+t=Ouo zwA7l~(rQ{OQA@P+n%+v*k}acVs1&cc6SWlI)3r422{+Tq*0LO@ySY}rmS=a;Ewmb&m=Yt?l^ z{X*08!_;$Kzu9S9ZkW30T6=hB3Zp+s)uPC}w%c9dN;pC;Q z&IN1R5mEbgb}}Y@=UeEXmeck<(`uV5E8M=76|>p)d<#8jHe~A@+w?o8g%tg!#}jQe z{SDLN4A*+DyM1i<)XK`RJ62W}In5h3TK~H2iZ{|__l*>uq zfYfZwPT2a5gq^gF8yeD5%mictF%$TwXwV}~_D0Ii$uxG}Pu)z@)0FO(R#A4zm+`ZZ zIU8@2?>XGlem*dQi9ipMLCP-NNTZybJ$WO6=~cv=ELrbrs6V|s`k`|@U!c7mVXon7 zxR&SPEsecx>iNMlr@NN0TBhvI)8=xowdx47vxb+B!EHvJyJ$XZ`Hc<7GyM(6JaNwS znmZ1qBCkwoTfQaVC{<;UZInSg=O_rz@#7<-sN3oGT#M$X(J zce;BLwtJMYz3!rh!lYSEHFX_Jv=M3w%SSt?f4agshLLWYUCj7n-geu*CVd(_c-{%%}mLNe^0XbB9O3NS9y{p+(3aR{ypt<}q0>MN7tmXKyD$ zwH+G1uo_sMQ+}h)&QSf%Z8g-}R?Cq|&p!WJ^vpM2dn1V~BHxQ=t10nC_{IGYp^kU% zhe=4sN3I)iY|#3#hWt5q+i6(a;x{O*`r_-S`1g-zZl^=T>+}RR9K*N7Iv!TH!mNDt zbQb-YR(^SYsnzzE>?PjtUho`o4r{^E*E-kCi`(tS(mLucoNi}nwb{14w&M>S zEo`K&wYVg|CBqpqiMQ?G}adL6aI+k-n-uV3w1ZWJ?7 zuiKplf)mX)#><-9v3x=BOH7cU0T!l!1YCkA+`up&^GC?nRFD z^L_-e5AI;pkxl`9q|=#nHa(HfrSrB4bfE)T=m2C%yM(KZYib`9Qi)K=G~#D)&ElHF zHIHinaT!Nvv~mdk!?^CTC)P|xDo5-uyqvFP8L8y3zug-aK zt*xy^ByIamM|jQlVn?hmSpxfl>v&5ijxU}%^~j@3Ywbp-wMb7d9zTBkQ3L?#Jibzw zs}qkaxv0GK(Amgw;;bBLa(wZ4qd^uyn%ffj{6o3%M6?>6drf==@xzH3CY);x8e|(h z`wv`2!VG%Ex9VND=Y<7Y1=-81RhS{vRQEQlu0!q(MDn_pLEe#Dd;!HaiV*!DEjt5% zw5bjNQgQ?!`KMx&i2-)F=EDKn(+)2r}urMW0}g4nM$CFv(yk5oCj$ zoxYLTE%_Oa&De&W4GMrgdBCW`jnr=0p7gUfb5VXe1E?tgrD9MDru+f}rc{s)GIsGs zdbfgfNu;M|ij?Cm^_B|AMNgE1axi6=D1}|Vk=&hz%g8GIl$=@{e|AoZo-R{)@(F_2 zczy=HQcwh7uS8(56qM}gn6GTl41DFFf|S$tEWtTESq`S*n~C{n;EUqzIZTIn>&IAE z2HWC6aBqCd{JQZThE~(Juq|yL1?Jmmt~SX%fR=;yM3@oDf!}=LwAZ0X0J%lTWdIU* zA`deqT_lz*Z*D`B5M_!4caUi;8)OM%Hk#J#9YMK1MqcsYDIInlz2ym6iC6WU2uAa?5G00;4&D;ZJIYT#Y*} zsU$wMkf!DC8Ooz8`f2kLDMEdCd~kV#tVaqQ6l3!Ku&1!$c7cMh(GD~dpmcwmN<;h6 zT+$WCCW$byZCnzBHg4;Ts{v?f<6(HsxLH&Y8SQt=uZiD;PaLK6nIR4r$0&4>#1e_) zBugkt5!{T*^KV!uSL7f29xmw=r%RYvXNx5@Q5 z34-Vh%|qR8TI-?SX*-^Hj6%;qRA?y&OdXaLeL4;X;eNvGC zCk7zEZ!%0{IgHc`Lj7SurlSO;QiM5jQ5xwZS3gcLkY!xUXqGzUd$_y+qEMBvo}j&< zYKfd`e5fVH;XR>U;~gzG9&Wr>$;FXy-)+1*2f$Bx8Hs{gRJ9NF4>i32e<4{=DWs@Y z)SdbGTx0+@&<6@qA9xN`6wi}j%^-%?*iWEM{0@n4K`e`lF50!#DO}44y}Q71|yxd4}+!D!BXnb8N-yLX&H*H6u3be~Rv4u5N>7YIQcD$Z&P#$~wSHa?>KZ3d*!=HAvrS`lh5?5!UDl zU?x9~g=k_*HX5O{QggnYoh59F}3=LA_CO_Ozj>;gn8Lf6{G;zoq}=^v9|+- z1iWpKm&|RD39?{sGrNSe(TG7&EjN-=(kttQQ0U#YqyU zNHEkU;LLbitiZKgEguY_$IvrlVusLT==m&VN$fTwW?_?y5Dnn@7kUl@N6NWF#$e`^avdnausbq^4oZ~ zm^HK^3YPRZu(oQvUzylBv=<}|S@E1i!FLXTnWel!eY_ufbrJFR)HYJo7`zw1LUePa-DfgP#Jp=E3ugL^L_}i4`Pi@*Kx`|#H{!1gIS5| z-h0wcc$H4tr+`yOu_|%hL%hnIH}L8a#;b?y!y|b0NOE`?`w9+sUq50Z-Nmsj^Db9?m#Ze-J~|k@%T>byWyp356B~u(sy_>kttQ4O>65-(@bH&UTe+EokPGlHQ7ho>q_d%aRp45Gi+&#VKm_@5AxYJg@%NI9A?k{V~MKqb%>tn}SN(gO~3`ApN|* zhS&!$_pL$_#PGsqBMW91cBo{_!M3P6tWkAGCrebi*cNp>Oj?hmfT&Zj9!Ucyr(g|| z8rZK+AuP-6Zwl;h3f3bjSdXNDsMC}R79=Tq!A?fjA`(sK*jgkHpl~FdWeX&C`^mnY zY9C3z&1m(Uv)066ifNfJ4>=~$bKg`1{OHz3v#~LLo@F*Y^FEg>dBGb;ik)NMM~BY) z@u^4Io{*T^5tbF13`Rcki7-4k*Flb^*W>$vM|j=K-NEA32xmX&%6CbLQ%79fzIZwb8zL<;8^$>#&$^m+j}U%R4-$AIRw zb#1o@eta^3IWJImg5;bM=yX4%Tvu&vR^eC-Y{WuxEbjf-HRRwE#)mmD>jQ}h=S~3g zBNw3GB0X185Kr{-B$7r^EP2!EQe zd@w_D%>au3>D8ZHef8>(g38TV^zB$H_J-WjP?I^dfb3fG5t^R|(OrPSvNVmJhu%^g z_!eM$Q()p++P^FS`4{_sTN2j`#vRzZ95CsD`b`)kk^yv_@93Yu`yHNWbn0$xcAB;c z%VNI?19&zj!(%w8W+P*=F^-N;MkjULR(X)u!0;JcA`F&4XM1Y7&+^p7c{~=e*m=Ck z!9)UZDp(L4Xi6QM)MP3xO}XV$Td>jWYK#&PFt(HE0J0UaY@V$1#a&b6q zUKkkeY;;6(2bOe}d(_-?$c7HKc`})4HADx->9SC-3zOYJk%PXZcXP+Z57wl3r|(&~ zv1IbX#cx*@E}V6;wC*?f)0K`j_zun7i+u4iyj4}2{|wJI_y~gz zE|#l@V)`9@R3r^^=&|vFhGz{20wlH-VTF&#OF<|}o@3AfN0{7kux5%aa_gH-XG_`& zv2MtwL6M3#OOJhY4Tg34rcnhsU6u$0nL>hR1%S_SoGO3SE65=T`1gJM$CDq}|ebaFs8Li?X6 zAnxsj$sBBgQf&P*2b&=1d%x0+GPFJYgMwb*GZI(@nFnBqp~jaHe@M-X>3O3_TE<+b zG;|))e!5dq7$O z8Tdk=j4uSr(H8<5&QtIu!Fy$#rx=-09g)scjJPEbl>@EH@VC1-pOCgnTzQ>p!L{WU zOu!o^+r1V(;P5GmhwF^jXm+<3vA44sqm9op=_5i(NzCw9DvRy*qWr4DTkQEw*Ap~_ z!czZ3k;VQ;Thbt|I0%olHj$;|GvmRFZTdb_@EqdVMCwI2zbBdB>2}=C`nH@$JljfC z{bdp^3DT6gyJPQx-w3^jF!h+M{Ns2Ribr$GRA?~MkjsIlsL-%W6wenoi)$74zX9Mw Be=`68 diff --git a/bindsnet/models/models.py b/bindsnet/models/models.py index 8ae3f136..96f13bba 100644 --- a/bindsnet/models/models.py +++ b/bindsnet/models/models.py @@ -6,9 +6,11 @@ from torch.nn.modules.utils import _pair from bindsnet.learning import PostPre +from bindsnet.learning.MCC_learning import PostPre as MMCPostPre from bindsnet.network import Network from bindsnet.network.nodes import DiehlAndCookNodes, Input, LIFNodes -from bindsnet.network.topology import Connection, LocalConnection +from bindsnet.network.topology import Connection, LocalConnection, MulticompartmentConnection +from bindsnet.network.topology_features import Weight class TwoLayerNetwork(Network): @@ -94,6 +96,7 @@ class DiehlAndCook2015(Network): def __init__( self, n_inpt: int, + device: str = "cpu", n_neurons: int = 100, exc: float = 22.5, inh: float = 17.5, @@ -102,6 +105,7 @@ def __init__( reduction: Optional[callable] = None, wmin: float = 0.0, wmax: float = 1.0, + w_dtype: torch.dtype = torch.float32, norm: float = 78.4, theta_plus: float = 0.05, tc_theta_decay: float = 1e7, @@ -124,6 +128,7 @@ def __init__( dimension. :param wmin: Minimum allowed weight on input to excitatory synapses. :param wmax: Maximum allowed weight on input to excitatory synapses. + :param w_dtype: Data type for :code:`w` tensor :param norm: Input to excitatory layer connection weights normalization constant. :param theta_plus: On-spike increment of ``DiehlAndCookNodes`` membrane @@ -170,27 +175,53 @@ def __init__( # Connections w = 0.3 * torch.rand(self.n_inpt, self.n_neurons) - input_exc_conn = Connection( + input_exc_conn = MulticompartmentConnection( source=input_layer, target=exc_layer, - w=w, - update_rule=PostPre, - nu=nu, - reduction=reduction, - wmin=wmin, - wmax=wmax, - norm=norm, + device=device, + pipeline=[ + Weight( + 'weight', + w, + value_dtype=w_dtype, + range=[wmin, wmax], + norm=norm, + reduction=reduction, + nu=nu, + learning_rule=MMCPostPre + ) + ] ) w = self.exc * torch.diag(torch.ones(self.n_neurons)) - exc_inh_conn = Connection( - source=exc_layer, target=inh_layer, w=w, wmin=0, wmax=self.exc + exc_inh_conn = MulticompartmentConnection( + source=exc_layer, + target=inh_layer, + device=device, + pipeline=[ + Weight( + 'weight', + w, + value_dtype=w_dtype, + range=[0, self.exc] + ) + ] ) w = -self.inh * ( torch.ones(self.n_neurons, self.n_neurons) - torch.diag(torch.ones(self.n_neurons)) ) - inh_exc_conn = Connection( - source=inh_layer, target=exc_layer, w=w, wmin=-self.inh, wmax=0 + inh_exc_conn = MulticompartmentConnection( + source=inh_layer, + target=exc_layer, + device=device, + pipeline=[ + Weight( + 'weight', + w, + value_dtype=w_dtype, + range=[-self.inh, 0] + ) + ] ) # Add to network diff --git a/bindsnet/network/__pycache__/__init__.cpython-310.pyc b/bindsnet/network/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d24bf0a93080bdca11bb23d4551595d71ea1d582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmZ8cy-oxn5C--)#!IfSu(aLg@Bxf5#`1E_MGG2&2ia@{W&;@A*Rj*r@EL4qt$YP5 z;o{vHCz%h1`MzO3n9Yt*io1_@@s`fdT>K4^imR0VJb^?KYh*CPhA?6ZR^a?bbZIJ9 znVQuY^+*;km^HFoqptc&D%2IRHDHGT&d17vR6e!=M$pht9f{3Kg(q+ivD6@BSGg*Q zT%DoFP-e)BthzSN?*}WrRbi1btG1m3F`oV>?1}ravEf{3&G{>G+5Q&3m(@yxb2$G{BquQv)3&74Fb$Qr#~t30 zNAB`wmr{@5p$4SZ3JNC(`c~wD*R&6MNr61{vFIPrrvQ1`J{3h#71yZVA{7e&+>8)H7_Ul1HD?pv+d>aoEIfLpTu*)E8@ARo>x6~TPrX9 z3LI*cGK=-=-@H-I#Kk)wzV}w`#&_Pj@!hv8-;Rx&&3Y7DZ%0D9TWt|r?{=eR;JfWO z^L-x`yqKv3o(NGXUEc~L>DHqgf$xhtjr$b?b#!GbBDx>Q-8#)SeNq3LxWg3`LaQ=Q zt8$N3b&rEPJzgHsd?)amQ6T&4wu5Wb>TJ28aO!P044pu(=rJemS%C)GAE5Zdg%)9p_rCN zj_358;jMZZVTg<{8~mK+nIbDJ{AWc@*!Z`EjlH)T_9t3{sl6`(Jq2N5#|y1u!|;~8 z<%dRf$vfq(cqdR>My=$XL~Z30&CseRAoJ64b|mXWY_~)`kY0F9wxJU=oTd+4h%id! zE9q3kdcE6=^1_sK^AcN8zXf4BIJx!kXXoTs}i0rn8(i&*P98pk! zH{3&DPT_%o1gHYDy?PWnuCuwBu6%RT0snyTnmr!5-gTwhq4ss>x}WwtQQ$}=pE>a~ zWYBTEo^1NtP6`PpY<7BWmkvfEG2$SlI}z2oGdgV~VsHlvAw=yp>v)x@0l-T9vuF<| z%*;_I;e&3&@q-A>G#afXVsRGdQ*XXPf#&;2vEBa?%GkaECWh z0K}RsMyv%5h&puOr~CkrzpX`V2(Y&@1BP?X4yjdZ0ptL@Lm;P~4UI;Y4fp0Wz;CH} zQ;-sRura+*$a!Rg&2{JYtO6a2GQk!tVG0Aun%12=!VjT*39UPBR{&ri5#X*ke(l98 z&f3}<)pqX^;_mMN3pC((m(v7(fuDo|NYO(wz3`I5H3r8>zfV}H1QDid;w{YUy!M)t zK>UicEh11Mz7@fCfTQI4o+CQlXnzK0mG*xSno-7zVEs19*+E? zts9$UrKBcXJEK#+l?a?CQY}ic*K6Vc*S4kW-GLKP@B_cL1#Pv9*DB?r+7P7);wR%FF{_ht#+=~ZtjYa+6cP)HMMuK-VM6x2FC1OYM7Od1cWJv|H2dUIx9oGHYi4mGR!(BBd8jj=Yk20{G3%?={0{ zb2Igb$o^Dj_#*v8I_Wm?MKEmw7k4uUY{0g)zv6q)FcWz^<}qLUy1a&Alg0$x_6E#V zR1Z4c*PH16HPJ0;{TC-9S)iELHpmpU!`Ig)Z_jZ@F2YINAssNqU6Hthm&_i*T_E{9 zP?AfyE%P}FBy+Vs@;OO+-Zc)ex*s1~U75>2!ho1H=NH$86xHI|7!lIqR|i%gy0- zbMK6&lafpv?{k`Rype;Dw3-#`wGe*ggsE;@k2g&3q__Go16Tblob}T)uKJharPO^&x3B+(QUbRYd!*3JaQ2+G zyDwy71?%HLZ4@HK+0<8+6pO@WGC0mpjhy&iGp;*rH*G$huJGs3Z}YA@^c#~)1MX)d zxaTe2GKQH$=r~v~V*ovd-scATxYr!_ngep~nY=PEe5M@ytaAI|+P5s#v#uQe9BtG? zvSj2fnP)W8prCH2<23mIwJa>lt!)-9<9~{m;mV=* zH|&=7!&z?rGUevt!8|v=oTE18^cb}fuRq`Wi^Ph!|A>tn8&S7)K2uIDwk}-J`Lw zAj!@qQ_pex{~noD;J=VXj#(J9`^u%7vw$ND|7+5v6ARy5VBu36xO>b7N-{-%ja$Bo zqW`s7Y>b1SMHan$LVk%}q-aXsKoJ{c1tmp5v9T-mL-`hUDTAg$yl>DWnYK8)jUt~vfe#41iQ3l=xUw!r3z0MQGa@1RYJ?;!%9%tN(3zK%P?Ud2#rsq!JWfDK{^vj84!?!MMo>q``8y1uS*D>Sh8eyHJPNYd;||D%A)6GpuqY>`-Bm? zRV0Z~kKoRdkEEjf^XcduMt^r|bP{*YkG5O+0c$YW5B+c14;d1yS>Tv^8NA<*3W&+z zOZ{jCxGD~ph^K*Zh;JVsV4MLIJkXOjUevUm7W0WMk~5N2$R~MFl653-kogIaifYz(RAo%NlYB3@JQX}o6k6(>V81{N z_#*8|6Hbu`FhjVz=Dh2x-p$Pm-DZ8aEiRC=B$4*IfQ`q)gs8lO9iGwpq!P)Grf4N3 zv@82uIzWUwgw7ix!o^8u+t6Q-De?n})*3~-F{?dcFCa2ET0zrK&V&jkdCY=E@gzYk zB;{&qoIihL9`!FD18wNu6N?P_9NQ+SD7NW1Dz=vswjV*UK7(NCx{#K>D9CJ7T-^ZZX6n_d=B8;=xX-bpFR>$2HcnA|o+@?X9 zsMp1(EVI`|dPhjgzQo+`#w)bYevRUKq@6B_{>eD96tySQM! zL1e+~f=7fx6qZf#LPl&H3Qf5AFy-bV3~s{xgqxo(pq6rajM|9TkN55nujNb{OOucD zxd}Cu4_-?W8R7KNp4l!s)wE>bwZ$Vl19NZH6pnaD_e8+ipPg{HWSGk&jw&&q;YY0Ki%qwmmbe)9Qw z&8M&ODiar|Hbco9LsISs0Po@}~TB%wytu(ealF#O^W1o`*xTO`~ UCt2KL1t>6sl$gGfUH#~P0CpSX`2YX_ diff --git a/bindsnet/network/__pycache__/network.cpython-310.pyc b/bindsnet/network/__pycache__/network.cpython-310.pyc deleted file mode 100644 index 8cd220a6d59d4eabf3afec19338116691f9312e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13483 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 SQJaUola)9X{l(n;iT?pd?Q-`3 diff --git a/bindsnet/network/__pycache__/nodes.cpython-310.pyc b/bindsnet/network/__pycache__/nodes.cpython-310.pyc deleted file mode 100644 index fa8f1b065a90bc632e9424b17d572d2d8dc4454b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40424 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 m None: Contains resetting logic for the connection. """ - @abstractmethod - def cast_dtype_if_needed(self, w, w_dtype): + @staticmethod + def cast_dtype_if_needed(w, w_dtype): if w.dtype != w_dtype: warnings.warn(f"Provided w has data type {w.dtype} but parameter w_dtype is {w_dtype}") return w.to(dtype=w_dtype) diff --git a/bindsnet/network/topology_features.py b/bindsnet/network/topology_features.py index f99cf39f..c7484a0e 100644 --- a/bindsnet/network/topology_features.py +++ b/bindsnet/network/topology_features.py @@ -4,6 +4,7 @@ import numpy as np import torch +import warnings from torch import device from torch.nn import Parameter import torch.nn.functional as F @@ -22,6 +23,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, range: Optional[Union[list, tuple]] = None, clamp_frequency: Optional[int] = 1, norm: Optional[Union[torch.Tensor, float, int]] = None, @@ -38,6 +40,7 @@ def __init__( Instantiates a :code:`Feature` object. Will assign all incoming arguments as class variables :param name: Name of the feature :param value: Core numeric object for the feature. This parameters function will vary depending on the feature + :param value_dtype: Data type for :code:`value` tensor :param range: Range of acceptable values for the :code:`value` parameter :param norm: Value which all values in :code:`value` will sum to. Normalization of values occurs after each sample and after the value has been updated by the learning rule (if there is one) @@ -119,6 +122,15 @@ def __init__( self.assert_valid_range() if value is not None: self.assert_feature_in_range() + self.value = self.cast_dtype_if_needed(self.value, value_dtype) + + @staticmethod + def cast_dtype_if_needed(value, value_dtype): + if value.dtype != value_dtype: + warnings.warn(f"Provided value has data type {value.dtype} but parameter w_dtype is {value_dtype}") + return value.to(dtype=value_dtype) + else: + return value @abstractmethod def reset_state_variables(self) -> None: @@ -312,6 +324,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, range: Optional[Sequence[float]] = None, norm: Optional[Union[torch.Tensor, float, int]] = None, learning_rule: Optional[bindsnet.learning.LearningRule] = None, @@ -327,6 +340,7 @@ def __init__( :param value: Number(s) in [0, 1] which represent the probability of a signal traversing a synapse. Tensor values assume that probabilities will be matched to adjacent synapses in the connection. Scalars will be applied to all synapses. + :param value_dtype: Data type for :code:`value` tensor :param range: Range of acceptable values for the :code:`value` parameter. Should be in [0, 1] :param norm: Value which all values in :code:`value` will sum to. Normalization of values occurs after each sample and after the value has been updated by the learning rule (if there is one) @@ -342,6 +356,7 @@ def __init__( super().__init__( name=name, value=value, + value_dtype=value_dtype, range=[0, 1] if range is None else range, norm=norm, learning_rule=learning_rule, @@ -419,6 +434,7 @@ def __init__( super().__init__( name=name, value=value, + value_dtype=torch.bool ) self.name = name @@ -497,6 +513,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, range: Optional[Sequence[float]] = None, norm: Optional[Union[torch.Tensor, float, int]] = None, norm_frequency: Optional[str] = "sample", @@ -511,6 +528,7 @@ def __init__( Multiplies signals by scalars :param name: Name of the feature :param value: Values to scale signals by + :param value_dtype: Data type for :code:`value` tensor :param range: Range of acceptable values for the :code:`value` parameter :param norm: Value which all values in :code:`value` will sum to. Normalization of values occurs after each sample and after the value has been updated by the learning rule (if there is one) @@ -530,6 +548,7 @@ def __init__( super().__init__( name=name, value=value, + value_dtype=value_dtype, range=[-torch.inf, +torch.inf] if range is None else range, norm=norm, learning_rule=learning_rule, @@ -587,6 +606,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, range: Optional[Sequence[float]] = None, norm: Optional[Union[torch.Tensor, float, int]] = None, ) -> None: @@ -595,6 +615,7 @@ def __init__( Adds scalars to signals :param name: Name of the feature :param value: Values to add to the signals + :param value_dtype: Data type for :code:`value` tensor :param range: Range of acceptable values for the :code:`value` parameter :param norm: Value which all values in :code:`value` will sum to. Normalization of values occurs after each sample and after the value has been updated by the learning rule (if there is one) @@ -603,6 +624,7 @@ def __init__( super().__init__( name=name, value=value, + value_dtype=value_dtype, range=[-torch.inf, +torch.inf] if range is None else range, norm=norm, ) @@ -628,6 +650,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, range: Optional[Sequence[float]] = None, ) -> None: # language=rst @@ -635,9 +658,10 @@ def __init__( Adds scalars to signals :param name: Name of the feature :param value: Values to scale signals by + :param value_dtype: Data type for :code:`value` tensor """ - super().__init__(name=name, value=value, range=range) + super().__init__(name=name, value=value, value_dtype=value_dtype, range=range) def reset_state_variables(self) -> None: pass @@ -664,6 +688,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, degrade_function: callable = None, parent_feature: Optional[AbstractFeature] = None, ) -> None: @@ -673,13 +698,14 @@ def __init__( Note: If :code:`parent_feature` is provided, it will override :code:`value`. :param name: Name of the feature :param value: Value used to degrade feature + :param value_dtype: Data type for :code:`value` tensor :param degrade_function: Callable function which takes a single argument (:code:`value`) and returns a tensor or constant to be *subtracted* from the propagating spikes. :param parent_feature: Parent feature with desired :code:`value` to inherit """ # Note: parent_feature will override value. See abstract constructor - super().__init__(name=name, value=value, parent_feature=parent_feature) + super().__init__(name=name, value=value, value_dtype=value_dtype, parent_feature=parent_feature) self.degrade_function = degrade_function @@ -695,6 +721,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, ann_values: Union[list, tuple] = None, const_update_rate: float = 0.1, const_decay: float = 0.001, @@ -710,6 +737,9 @@ def __init__( :param const_decay: The spontaneous activation of the synapses. """ + self.value_dtype = value_dtype + value = value.to(self.value_dtype) + # Define the ANN class ANN(nn.Module): def __init__(self, input_size, hidden_size, output_size): @@ -743,7 +773,7 @@ def forward(self, x): self.const_update_rate = const_update_rate self.const_decay = const_decay - super().__init__(name=name, value=value) + super().__init__(name=name, value=value, value_dtype=self.value_dtype) def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: @@ -758,7 +788,7 @@ def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: # Update the masks if self.counter % self.spike_buffer.shape[1] == 0: with torch.no_grad(): - ann_decision = self.ann(self.spike_buffer.to(torch.float32)) + ann_decision = self.ann(self.spike_buffer.to(self.value_dtype)) self.mask += ( ann_decision.view(self.mask.shape) * self.const_update_rate ) # update mask with learning rate fraction @@ -766,7 +796,7 @@ def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: self.mask = torch.clamp(self.mask, -1, 1) # cap the mask # self.mask = torch.clamp(self.mask, -1, 1) - self.value = (self.mask > 0).float() + self.value = (self.mask > 0).to(self.value_dtype) return conn_spikes * self.value @@ -785,6 +815,7 @@ def __init__( self, name: str, value: Union[torch.Tensor, float, int] = None, + value_dtype: torch.dtype = torch.float32, ann_values: Union[list, tuple] = None, const_update_rate: float = 0.1, const_decay: float = 0.01, @@ -796,9 +827,12 @@ def __init__( :param name: Name of the feature :param ann_values: Values to be use to build an ANN that will adapt the connectivity of the layer. :param value: Values to be use to build an initial mask for the synapses. + :param value_dtype: Data type for :code:`value` tensor :param const_update_rate: The mask upatate rate of the ANN decision. :param const_decay: The spontaneous activation of the synapses. """ + self.value_dtype = value_dtype + value = value.to(self.value_dtype) # Define the ANN class ANN(nn.Module): @@ -833,7 +867,7 @@ def forward(self, x): self.const_update_rate = const_update_rate self.const_decay = const_decay - super().__init__(name=name, value=value) + super().__init__(name=name, value=value, value_dtype=self.value_dtype) def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: @@ -848,7 +882,7 @@ def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: # Update the masks if self.counter % self.spike_buffer.shape[1] == 0: with torch.no_grad(): - ann_decision = self.ann(self.spike_buffer.to(torch.float32)) + ann_decision = self.ann(self.spike_buffer.to(self.value_dtype)) self.mask += ( ann_decision.view(self.mask.shape) * self.const_update_rate ) # update mask with learning rate fraction @@ -856,7 +890,7 @@ def compute(self, conn_spikes) -> Union[torch.Tensor, float, int]: self.mask = torch.clamp(self.mask, -1, 1) # cap the mask # self.mask = torch.clamp(self.mask, -1, 1) - self.value = (self.mask > 0).float() + self.value = (self.mask > 0).to(self.value_dtype) return conn_spikes * self.value diff --git a/bindsnet/pipeline/__pycache__/__init__.cpython-310.pyc b/bindsnet/pipeline/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 1316877fdc1c23815d095e96357f4e59078a34c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmZWn$w~t;7*1wuEmLs0dC`l)T$&dUk)pRMLbZpvgme;WAj^=9VxPsEw?2o@;3Zd2 zzJe!{!RZJMO$IWU3FRCi6@t4v+*$1BBDu6(e`BgPJFWTYZ0B z7D?40ie|bZ;?Xh_t^rN;>*;*0DzxGaHmugDBkGM#I>MMMUxp|3+6^zHrq6<1`X>iA O{D2(fa3AJL9{mE9j+$lw diff --git a/bindsnet/pipeline/__pycache__/action.cpython-310.pyc b/bindsnet/pipeline/__pycache__/action.cpython-310.pyc deleted file mode 100644 index bc066cb0c671828a98af7eb4388d68dc06714ba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4490 zcmd^C&2J<}6|buPnDKn=uCsAAUOoyd>}K*YlSo7&#w-a+4q=mkFcH#9;Iya8o*wtd zY*me&G2;sh%I2_0oH!t0EOD^}SN@p3Ax^8@gS1F7?^Snu#_M&oNU$8zqkhx<>UGtt z_wjqL(q^+p;QH&&f82ZT8AASnFY}iRFK@uD6%auLjmRzhXAzCrEk=oOBonT5wp`%} z|5xrUcaBpLRp5AYoCQ$>jz7n#iw1BibDXAV0jDbHI%!|H59^Zm+cbOX?PNDpX%frC z{3smCC`@El9hOhNl4him9!2@$s=$90?mFE1Ga&o^gbMmBIbc5}N!=xej4x4wKLcC3 zLw`y4$b<~&fK3=m!Lu`P51a`bcoS#fEx~qon11yKM7YTNJrR}<|Nb95{NDJb>{W7y zenQ}_@(I05r`1C;T{t8M?gR|9!_)_+HmD0HUt!=0Fx5RrIIyZW@zx29Ha;dF(=8^@ zWL49|_3zNPVAi{I&=U1~?7%m*>4k}p^G@8WWO`9F4ykA!GMs0630AXnwOhgOz$`Tm z*Sd^k&uAVbJm{G)P54lyo55xnh1!I@Ad1F(Gtg3S7}CRVCrq}jv97chP#xLt|A2&BL!;v{z zV}2tyyRBG5!81(y3|Ilu#7{q;|Zu>9rQ1c`; zT!g!!4mTsoH^(RHpmD)Exok!|NAx~UcI0GEls9$)l)(ci;^WfL8#3odRwFitjM}B5-m5t_-Rm zxqtvJd{Mc_rZoUU$5aOOiIZ~aw?1V9&jwU-LH`k~DsNR1xA*oRz8^BCw^ZtXFV^Az+yX~eYg{ou7CVhhb5 z6Dl8k?<`6d_y|A?r33KV^kKn*HG*Mk3 zSw-I-NeOUTDU74OiDTD+v^@(I3Nbs!354*hdC~=#uz+8S!8tgzPMi8Q_(F3atXTrX zvdgG@%p3#;1~72NZP7)lz70a>gTUWl^htxj6hL6&OdE$}he5C8L%#)JFs)7;e6xL7 zWzYne0B8_3=*U0op4Y?spycBPFZtf1QDp4T1zPQrW8Utwv^ z1FmecavO8R|1^%qr<#tkp8c1*sxKXAsFxw+R0jzrih2bJ_B-lTBv_sl9vajFkoJWy zPCtdU@uAdHm>Ze5*Oy9W4%7;@f6E7($hAQYbI9h_JElHpU%c z<{D-qKDX=Ybx<+~r*r-FkgHhkMdY@dkK;D$e(S7Ck|z67rJ1Mu!BFN7wO(68HLO== zt||MZtx#zL9UXM5zW_0P4aoWKSpqn`%v`tnIdn#Efaoa)VKa^0k?o8S=M5Y|1qFjL zJbnr|&H)g?u@#Kt?tf}eE$e5_aV2o%r=c@->q+3rqx*~##meKF?J>$TM+t4$;e=D1 z>ShPN+^e&U^ya*CQU+~RY_qw#_K?q-Mfu7V`4bpeqsf=+>P`4-FW5=5YvnPbQ>xUN zJE?AzOogASuOYz}*OoY&bJnkR#<`f81x|G>PQ@saHxO<#*6J#0utjIFyZH6R>r2o5 E8&~VWsQ>@~ diff --git a/bindsnet/pipeline/__pycache__/base_pipeline.cpython-310.pyc b/bindsnet/pipeline/__pycache__/base_pipeline.cpython-310.pyc deleted file mode 100644 index 4d1c2c36a07b7d285b28006775645ec40bc41778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7362 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 ITeBzr3z*}P3jhEB diff --git a/bindsnet/pipeline/__pycache__/dataloader_pipeline.cpython-310.pyc b/bindsnet/pipeline/__pycache__/dataloader_pipeline.cpython-310.pyc deleted file mode 100644 index 29a9039a4295322d992b5080e97f39f9f180286d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5226 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 diff --git a/examples/mnist/batch_eth_mnist.py b/examples/mnist/batch_eth_mnist.py index 8338af19..8e762339 100644 --- a/examples/mnist/batch_eth_mnist.py +++ b/examples/mnist/batch_eth_mnist.py @@ -40,6 +40,12 @@ parser.add_argument("--dt", type=int, default=1.0) parser.add_argument("--intensity", type=float, default=128) parser.add_argument("--progress_interval", type=int, default=10) +parser.add_argument( + "--w_dtype", + type=str, + default='float32', + help='Datatype to use for weights. Examples: float32, float16, bfloat16 etc' +) parser.add_argument("--train", dest="train", action="store_true") parser.add_argument("--test", dest="train", action="store_false") parser.add_argument("--plot", dest="plot", action="store_true") @@ -102,6 +108,8 @@ nu=(1e-4, 1e-2), theta_plus=theta_plus, inpt_shape=(1, 28, 28), + device=device, + w_dtype=getattr(torch, args.w_dtype) ) # Directs network to GPU @@ -271,7 +279,7 @@ image = batch["image"][:, 0].view(28, 28) inpt = inputs["X"][:, 0].view(time, 784).sum(0).view(28, 28) lable = batch["label"][0] - input_exc_weights = network.connections[("X", "Ae")].w + input_exc_weights = network.connections[("X", "Ae")].feature_index['weight'].value square_weights = get_square_weights( input_exc_weights.view(784, n_neurons), n_sqrt, 28 ) diff --git a/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-7.4.4.pyc b/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-7.4.4.pyc deleted file mode 100644 index 7bed29600e6e3b3e672c8431c65c5f6f805f8b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2389 zcma)7OOG2x5T5RNcsw3E&O-?yk+2AnG7_?rB?&=os@nGACnZ=z$+HWN%xVuZm`$_B2>bH~j^yCb7h5i)woNSmDc}Ec6dKgiC>Ori= zS)sCY^Ijfj2a`nT(~pu|7GkrA1z$P`xM208V5~!v9T15*MxS!hw>jnZGpp}#hr7_b z+}p6CnhqZ&QZ09z+zvYMZNz!14myMFWUwncah7#36_w`0&emQ&P-&6N&Q>8h@gg;8 zmJJAmTz+*>d}tp*lV@N=S%+3d6xpE_Eh*@BY0ImeaH{O7Gqd(Bc}}@gPmviB7eT9` zmg6|+C7lt|+cU!L=k{5va+D9Adg;u_A^8EG%dsk2*(!i5CzY!jJ0V8eX;$zMl~>xO z2mV@Flaj;fkE4D8yLhSrQNP9rs6kZEL|ch!Y;Tc84YH^`cOeUZk%hmS1!Q7F^B|hL z)0&>(KCkm&W)sWUZS&|B+<)WYPi$;+8$>rvY|V;iee4L^+}`K%Zj1wrSPVccqQ1a<<6iicK-kI$FbTD zDoBH;0>Wd?HzSEz&_YJ80G3&zh5|u=ncPHiOE)kNCI@jAiy;ib_wBks*d8 zbn~SH>TrF0z&7{N3_vKgmld#H>Hxe7;LBp6Ut@B+*vmK*$yl&qR&2%@%i~d^>rBR5 z3A%Obp1Etl@5e$Ez$gYN9>t0!PsbU68Idip7zl)~cJP$iHHXyR6OqD=>mcTQk-v5a zSs|0Ct{s_VTbhny-M~!ew|s5YcxP_ReP2vr@r@#B`!fSe|+8><*LVf zpW)fR1jyWvRowfqc-q-G$OpY4+$x;0=xwGsmwBRkcr!i2P?<_&v17h=#|OG@t`480 z1^deoghw`sPk*%Ac8g5Tu2zQb@#L3Sj*E_2{wo+umUG}Fu#c22Gu^vn8;zPg47yG|9rx&UT2U}n7p#sf3$X@Iu zpussz^*o3u6tAOx0mU02w7*1%wlRE&k&oln<{_mf`#M}iVmuuv-BQ~k0saB~jO{G~ z2c|bZ1LC=O3nR4*pynrmTg4P44tT^TA#IU>wCw=E7?4x8Pg*1-XQ2;BKwETj;Z2vGU@YdUYWY{N&sc03zvrlMAwg98ZXool{T!ImzY{iXcfYjccy~$f?l>JMS(+zviUZ;Q!Inu@+{J|e7C?ab?;~sf d_Wa83Ag1LR5N}!`^+}tyZ2uZO5Dkg*=idilmf8RS diff --git a/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.1.1.pyc b/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 7bed29600e6e3b3e672c8431c65c5f6f805f8b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2389 zcma)7OOG2x5T5RNcsw3E&O-?yk+2AnG7_?rB?&=os@nGACnZ=z$+HWN%xVuZm`$_B2>bH~j^yCb7h5i)woNSmDc}Ec6dKgiC>Ori= zS)sCY^Ijfj2a`nT(~pu|7GkrA1z$P`xM208V5~!v9T15*MxS!hw>jnZGpp}#hr7_b z+}p6CnhqZ&QZ09z+zvYMZNz!14myMFWUwncah7#36_w`0&emQ&P-&6N&Q>8h@gg;8 zmJJAmTz+*>d}tp*lV@N=S%+3d6xpE_Eh*@BY0ImeaH{O7Gqd(Bc}}@gPmviB7eT9` zmg6|+C7lt|+cU!L=k{5va+D9Adg;u_A^8EG%dsk2*(!i5CzY!jJ0V8eX;$zMl~>xO z2mV@Flaj;fkE4D8yLhSrQNP9rs6kZEL|ch!Y;Tc84YH^`cOeUZk%hmS1!Q7F^B|hL z)0&>(KCkm&W)sWUZS&|B+<)WYPi$;+8$>rvY|V;iee4L^+}`K%Zj1wrSPVccqQ1a<<6iicK-kI$FbTD zDoBH;0>Wd?HzSEz&_YJ80G3&zh5|u=ncPHiOE)kNCI@jAiy;ib_wBks*d8 zbn~SH>TrF0z&7{N3_vKgmld#H>Hxe7;LBp6Ut@B+*vmK*$yl&qR&2%@%i~d^>rBR5 z3A%Obp1Etl@5e$Ez$gYN9>t0!PsbU68Idip7zl)~cJP$iHHXyR6OqD=>mcTQk-v5a zSs|0Ct{s_VTbhny-M~!ew|s5YcxP_ReP2vr@r@#B`!fSe|+8><*LVf zpW)fR1jyWvRowfqc-q-G$OpY4+$x;0=xwGsmwBRkcr!i2P?<_&v17h=#|OG@t`480 z1^deoghw`sPk*%Ac8g5Tu2zQb@#L3Sj*E_2{wo+umUG}Fu#c22Gu^vn8;zPg47yG|9rx&UT2U}n7p#sf3$X@Iu zpussz^*o3u6tAOx0mU02w7*1%wlRE&k&oln<{_mf`#M}iVmuuv-BQ~k0saB~jO{G~ z2c|bZ1LC=O3nR4*pynrmTg4P44tT^TA#IU>wCw=E7?4x8Pg*1-XQ2;BKwETj;Z2vGU@YdUYWY{N&sc03zvrlMAwg98ZXool{T!ImzY{iXcfYjccy~$f?l>JMS(+zviUZ;Q!Inu@+{J|e7C?ab?;~sf d_Wa83Ag1LR5N}!`^+}tyZ2uZO5Dkg*=idilmf8RS diff --git a/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.2.2.pyc b/test/analysis/__pycache__/test_analyzers.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index b1a7536e8859c523f03d05c57c0a1a86334b6a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2389 zcma)7&5j#I5T5S&@pwFTHa|)TiG)Rnl#!5~EJ+9=BpV2V0|bc;5GSURrOC*cYj|^(QF15e2;$p zIsU=3tl!aC{cJEcpvegcZgG-XJz{z~vZ+O^k<)X@e8lT{W~4Uqd-a7c=mp@TSz{FT z!cnu=B-Te3x4HAo;?5!MwUQIu-KFB)q;+WZ){?d9$resxfMXdgh6XJABGhgL-t*`XCJDd=`-%d4Dls_dyVv-T}{PPtQ0kr@#e zL93yb<2dLgoe|U9Gs5lX_F1cPlnCDI>`3|1Tu_{{GDu62|m8%*%Ax7G1R`3v& zSK6fq{#sd+lEdkbqkay%c&Y(WzrqNpK~&E~TZw9HZ;?d}vZy_GAq#(zg}<5wWMV_} zAey_=nx5c3uk&DL6U*3Z=Fu&<|HgyK$FY=&Q0>cC#s}9U8GO4?+V2_H`qBl;!gV#0 zom8f|N<<8gv7ZFhl_;pRJkWa(iB1Xx zuW&)=<_ibZ;l}uY_4m>YKq$4B6|i3F0K5v|%VMElVRF0J%QzFsSg>JM^y7@>@hH)C zCgZIH-MV$p+%@3$Lm>)a6ay5GV#SiD;|#!z$QD=(1j1K4cuMV>Lu&7dNa4nH5OcoB zU%P{>kV#b6j!d#GO-HeAV5ak1zP4(-H8f5VR-}%WBmmrxxKkJTi z)#cq!@a$gzWbVf*?!I3+Z%95@N=BPHFU_pNWf1YXjq zsX^SH*_BfQ=aIR@GJXfDlgr(iQ@JqWmM)GAE$;nDkhxQ@1m-Q~)?hBwGT6thYTPet zDXDz!!#*`$pAoR?u);6>vOc3Pui?S2Qw6XtfSC=LSucU{z)X7@ATJ*`pk_3t;VMU$ z91?rEJVLAW#<^c)Djp`wIdYutg3;Vcp-`uj zgh>T7IESg82N8whRn#w_cnyU1mk7}|h7U3FaopNGq|{_zhl@yzrvs&1YFi}0KcJtn zy+z=_^u}jEJQr_Zq?Q5H{3LLzn1aLskN6~{EfSD5I{+{S0 gk+pw&er0zM)A9_6*R7EHWR13L{~A0H4TjGlv#_F7wv#p`-xA>o z|AGi#M!)Qzd&wOUi130W9nlaG^mj#5#L#!;f!KS^^fTE#hw}tIaeu$H1Vm)ir#4QN z;&sK1QW@HI8{Ek?^96L$VNaN#iT9R_sbIpph!S7;B7l>Ex5Ot&ctZN2z4v@t6tm+> zDVfz$jAVUU>DOmRaSz%_UQUWxZ;VU6%r6_{ zK-l3J2}Y3SDTtcXbWYCMCA)&j+Pm}xfV^UJ!ULxPV5fyn0|K4a5ClL6qh$v?Ez#}r zcks5v(Dox6nCV1nji=a%^IYXM=awmD!xy=dskYuYdyL`L9&tVoUF z{F?mp!?0BKPz+yGSz7#Lq<)sx>F}HCP48r;vfe3>g@fQ(@+O+5sDev{hd zm2x`Y>VwHlHv!Z>{3gNy-Dmr>OV1wM%Kl)3J!7zV({LQXe+<7FfT+nOka)@F^a{QO zUF+UPhdCd|3p$5fx~8LkVCi$~YgtTn3moV+3Pjas`VMrKzR_K@IdOoN#<;o9oS4OQV+*KoNGNY~ zO*JlrgxJf~WLk6cDxFAR1#?NGpFXo5l%MsW_;xTkj_zXocjC<-e*`-WdJKUr{SXH4 z0Yk4hp?m}ihHg~>0FMDkT0=IbLcj?{4&iII$v`YQ;p9TW)9A9-aoX_%V}QJxiYqOG@0=m?LME(koN&pt<*J? z-9XDzo!8PfZ%nqavBj|2g(=ngGk1m~YXH&2*TWuc)WLYFGIW;~Hr|dk7Jxn2l>A^@ z-7Y| diff --git a/test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.1.1.pyc b/test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 608608f044885be8ecd29d645105fa3f615b3d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1726 zcmZuxPmdcl6t_KpGMP=bX?BaK1SM2OkOPTYt`%CbRk@T1v2dA-H61&2=!_@W6Si3; z64I{J3;hne2M+s{eC0yE0tetdC)uRZdNj{|&-U}rzxST2b~`4}I{*Hi{pk_%7b?5W z2jvKU^9Kk)1T9EHUC&C75lTuw3FvAjOhPx)D5E4=+nQzMR>jGlv#_F7wv#p`-xA>o z|AGi#M!)Qzd&wOUi130W9nlaG^mj#5#L#!;f!KS^^fTE#hw}tIaeu$H1Vm)ir#4QN z;&sK1QW@HI8{Ek?^96L$VNaN#iT9R_sbIpph!S7;B7l>Ex5Ot&ctZN2z4v@t6tm+> zDVfz$jAVUU>DOmRaSz%_UQUWxZ;VU6%r6_{ zK-l3J2}Y3SDTtcXbWYCMCA)&j+Pm}xfV^UJ!ULxPV5fyn0|K4a5ClL6qh$v?Ez#}r zcks5v(Dox6nCV1nji=a%^IYXM=awmD!xy=dskYuYdyL`L9&tVoUF z{F?mp!?0BKPz+yGSz7#Lq<)sx>F}HCP48r;vfe3>g@fQ(@+O+5sDev{hd zm2x`Y>VwHlHv!Z>{3gNy-Dmr>OV1wM%Kl)3J!7zV({LQXe+<7FfT+nOka)@F^a{QO zUF+UPhdCd|3p$5fx~8LkVCi$~YgtTn3moV+3Pjas`VMrKzR_K@IdOoN#<;o9oS4OQV+*KoNGNY~ zO*JlrgxJf~WLk6cDxFAR1#?NGpFXo5l%MsW_;xTkj_zXocjC<-e*`-WdJKUr{SXH4 z0Yk4hp?m}ihHg~>0FMDkT0=IbLcj?{4&iII$v`YQ;p9TW)9A9-aoX_%V}QJxiYqOG@0=m?LME(koN&pt<*J? z-9XDzo!8PfZ%nqavBj|2g(=ngGk1m~YXH&2*TWuc)WLYFGIW;~Hr|dk7Jxn2l>A^@ z-7Y| diff --git a/test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.2.2.pyc b/test/conversion/__pycache__/test_conversion.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index e12e182236245fe8c00c816136035766ce25dbc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1726 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 diff --git a/test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.1.1.pyc b/test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 024727cb75656bcc561b980af0e1699d6f1fac2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4250 zcmbtXTaO$^74GW$b#{FrBqk)21cS%GuGhCXk~iKYHdu(P5Kbgm1+{voddK6;^vqQE zg4c9|gbhM~6^P&=5fZz+%}?O3^eZpfJfJ*V2=krlp3bbZ776ZAojP?n)zv*;ec$O( z5V#7i#s7TN{jsAc|D?wJrJ=Egl3s@43TFdlgUMPQYO2DNp}t|TYQ)?yF`^Evx0LTH zT;uvZh3j|K4V$wYO2^p83d(wimF#qv-1$pIV+|#}1QW|!Y^a=VXk6vmJ!M1ZIyX=o z+~gK&liS=uZE=@-sBP}!7C{-j6{p#?q&wpMq?g`Vb=$b8FKtJIK|9T&%|YCb>j~|x z?WCLaM+rs~-tNUoETU{A(j^(!W!TK@YQYIm-atuDV}!G-%1{1SFj@b;P`QfsZwf6_ zc3IB$*e-USYkO*;XIif3YK|9jUn`8D+6sK?}?!=s^T*3e1uTRx|dYStiW~%l+{D7{1Tys;jMyG12XZ>MZ+QaB} zI2NPLDSM!zk_e+8>ymC{Vd{deQEG=Pro&8bytDwg-cLsnZjbI_;!% z*Ty>;ARI=bJQ8++<50w7(H#xPk%&tl!{O$3e~|T)v@{1J%t*_p!}KPW;&N)(8;mxi zL6}5%xlWiyTQRLrwqBF_!vVM^#7LCKLfS}_h4Jn2AW9-S8l4t46A!jZmXs_j*|0Qt zlx+_M9f;DSn^#Y{GT%5i-*|bx@k+JfI_5yog=(nU!^*h>tqW5{T)-V4tS=9fY?&{A zpPut=yxyx(7A?O%y4}99lXRDR{fr)Yw7l6*c$&o7GQGOx*@>5}aMoHH@02b1YMVFj z;U4Kx7@N`WC~L8gRrTNML;c~MXNgD}a#=bU_;|8dlVrhJ4-~;wSdD8vbxQ+Xybt=& zQQrrB7^r`HfIiGe=)-y(ee^&$e`i0$u{(r9-os(FxGgEfX(+^P2;m0CD+>9MB!P-T zTn1^D8#QRB;c(tNFm223lmRL$in)*fq!M6)N2137@?D~ z$Pjl3n+*MXf>>IjQyw$1NX@6o$gmUeIxTSuRcWL*qj4-w)8IGBe2WYLTYQ_$5}9Q( zXUMFOIZNgone$`_la;v$ul%wE#c&&kk@tsT1FPd0l(0I{!0KN!Se-lsR-awr0KSf3 zIpPp0M%N|2fS$kAV)S7xMt>=^TBP(!lyY@XC0XJ+WXXUm84xCo8^D#B>5wFnwA=5f zg#}TvAx#bhNh$DO-!dUb5HZMBQ$g=E#{|9pTqCgowKmV+-8le!d`O zYB38iyOl4_$&>?Wa#30+BvpP9OioT(b5a$oKME{@-RDJDXQ9H}S19ILm~yd!KsXph zJQk%BC)-2HGh*=^O?#e9o6HMjUL^ApnXi#KN#^Thz5&xYQURBxqC z`MDXMe+N8MQuXUXolmMHdNrU|%fXuWkznOIQYs`?z^W-zDyvSZZ19~8tU9@wJHV=& zyXh~%Qx>r5O01&4#_BAkdV|<4*MU_^u7LWv1PRkB|m@rc&ki>r; z9s~svfrw9$YK=$zG#w@X2Py-J$_kQ_OrMxXeTlt#N5s`Bv2vxzzEouB@rgrVR)-uw z7byUROLSeHq3eShU4I5!k`})=)83jT@xjp~?;1COGXorHG#qIbR&L4k-3IO)$&oH$ z5*+D)13lml?3Vk$9g^kr4`3r3>=*!dNc3}G;?8Lp?*|z7a^OV}Tl(aIBP+%u^weC* z-6o<>5fXRAmNSlY8c)UW{!7mr6<-d{MF0quPG~%;gc! diff --git a/test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.2.2.pyc b/test/encoding/__pycache__/test_encoding.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index f03e5b6a838800b16b8c0594e7d650d05f1fc26e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4250 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 diff --git a/test/import/__pycache__/test_import.cpython-310-pytest-8.1.1.pyc b/test/import/__pycache__/test_import.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 067df56d4de2dfcc2136ac290d3ae308c66df1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmd1j<>g`kf{3e!6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HQer{fgeu}#AmJ%- diff --git a/test/import/__pycache__/test_import.cpython-310-pytest-8.2.2.pyc b/test/import/__pycache__/test_import.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index 067df56d4de2dfcc2136ac290d3ae308c66df1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmd1j<>g`kf{3e!6G8N25P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HQer{fgeu}#AmJ%- diff --git a/test/models/__pycache__/test_models.cpython-310-pytest-7.4.4.pyc b/test/models/__pycache__/test_models.cpython-310-pytest-7.4.4.pyc deleted file mode 100644 index 5ecf1176f9862deddfd11a027526be9582a794cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7996 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 UC$J3^D+RGf=~dHeR_`AA5Br)mp#T5? diff --git a/test/models/__pycache__/test_models.cpython-310-pytest-8.1.1.pyc b/test/models/__pycache__/test_models.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 5ecf1176f9862deddfd11a027526be9582a794cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7996 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 UC$J3^D+RGf=~dHeR_`AA5Br)mp#T5? diff --git a/test/models/__pycache__/test_models.cpython-310-pytest-8.2.2.pyc b/test/models/__pycache__/test_models.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index 8b9c2002962e580dcf4c8deb195ce21ef1af6dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7996 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 diff --git a/test/network/__pycache__/test_connections.cpython-310-pytest-8.1.1.pyc b/test/network/__pycache__/test_connections.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 2ed351515c93188b4d39807943073b66066b3946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4906 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 diff --git a/test/network/__pycache__/test_connections.cpython-310-pytest-8.2.2.pyc b/test/network/__pycache__/test_connections.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index dbdda8899a385e22938b3bfdb977e1f0644c485b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4906 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 diff --git a/test/network/__pycache__/test_learning.cpython-310-pytest-7.4.4.pyc b/test/network/__pycache__/test_learning.cpython-310-pytest-7.4.4.pyc deleted file mode 100644 index c7c83f1da0a644a6905b9af00138c5c166f7dfe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4580 zcmd5=&6C{36<2FC8ja>_XLokIYrsq#AP8JL#(XD$UD#lpvbS8`O{Gc~Sv%cc%jjch z^|0OrPWZrO{{s#fPIKX3;odij1KC@uNTnzzK;CQ3_s-yi6sgRXep0{p)Ou3?UiYsz zsZ?wYe)S*!(s}N*rhS8r$zKi{7vM-g0iYTsq2>~G)}x%R5iK&@Jjpz!Yl24)3z6ko zQPC|%wrfWvw-lA#a#V3EDlQjRqncY&*G9M$)!llu>@G(u?n=~f8_J#!SEHuej83>G zh;~_{CN134XyIesU87`6bF3rCM%#2unZLHRed)R^sMA~9vhWVu*$Mnu7Op3$xXzh0 zZbbfF+59sLc5jPItjl7`VlnVKL>4xg*h~1kjvY9@6oIMl=jxQWIjYm#JnAG^+kZ*n>WWv-@Mrp`(2i9sE#@WG9CUf{Sq7(;Yd${M*t0| zen>tdACfynz)Ro@9O{_uWo*ueYU@z?-Qw0aYUiL-Pa|Fr75`IL2d=eE$|z$A2Der zJpt`+KWKb;`Rjvw=lg~<)1=2c;1WLHWkTw4PnLRJ>I>%KQ1*3x3i{=b0~|d7fCreW z*HjuJh*&>&ghP0Q#m${8AfMj$yNsW}R_>?;ry~o1Z{QWyIe!|UZ;rc`rFR*RS?Hy~ z0VI_rxRO1;qEXPm2tB4cC~jh#`g@Cq7D6_s)W8#&&KWnLt_ zb6Xa7;Au%O3>y*%ypgAr9WpNLhGG7UHa0`x<`(><_NBqgb?Q`)bnh!#|~r zU-E_Delxk-+S-ph?cG3loOP4-P7u=+?rjUGk@lby)$oQzveDg_WpsPDvpHlH9+18b zVCzlNBnHum1%EpH8UNHxotWPn_DN#?Wam$klT&^b^FX&C=I=)36x?C|cyQ`i-EK@i zZmQ^TJVr(L>Hk;J=^yHI%O0(jV`Z=3!Lru}Wsm3iWv}1)UzC0I*C>0w1f%8DR3Y%^ z;d)#G`~_?x@A-=ed4!h`UPgEY;Z=m+BNP#k?@o@thS#qHNNYgXbBgjAoJU7R(WeUw zo!8|I>mj`b@KCxM{}r9f13EvxfX>5wruaOyh@Ada_)KB37);%jISWa3Y9XoOQZaWS z$(D=yoP}grEhOmq`GsT!GEvJKoEwM0YKWhoQ3)be>FUH{GRO-T6Q{Y!>oA;r8KD8N z&2dWNYY6KIk03k>aP$-W)coyC%-`dwS{i#%5F`3``DwiCw+K%l{0`w6gfj?j0LL0H z0{l6&obCQx1ZxrqTwk3X>zvbbE>%P5dJJW zMr>Af!Ox=Y-)AdMSigX+wqk3P3flbwdid@tfUP%3V@e*3<-?ki6Xp+gVU4U!#Z0kR zNeB=TKO8)|fS2l#3pvOyH_4zr0f9sGO^pJK=o9yden4W zo8{^@tkR0CD5+&FQ}-T7-arKJvk3}c0snZep5Zb7BY2(4tavEnJu~9LMBBnqnKyYB z6&*Ru`u~7?Q=IQ@eeEG^1eQIrfMwXzrejOX^KkFtdD8a0D50g3&n2zbvLSc_78)(Z4o_<>y=<+KC9<6R7hUl3O#lD@ diff --git a/test/network/__pycache__/test_learning.cpython-310-pytest-8.1.1.pyc b/test/network/__pycache__/test_learning.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index c7c83f1da0a644a6905b9af00138c5c166f7dfe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4580 zcmd5=&6C{36<2FC8ja>_XLokIYrsq#AP8JL#(XD$UD#lpvbS8`O{Gc~Sv%cc%jjch z^|0OrPWZrO{{s#fPIKX3;odij1KC@uNTnzzK;CQ3_s-yi6sgRXep0{p)Ou3?UiYsz zsZ?wYe)S*!(s}N*rhS8r$zKi{7vM-g0iYTsq2>~G)}x%R5iK&@Jjpz!Yl24)3z6ko zQPC|%wrfWvw-lA#a#V3EDlQjRqncY&*G9M$)!llu>@G(u?n=~f8_J#!SEHuej83>G zh;~_{CN134XyIesU87`6bF3rCM%#2unZLHRed)R^sMA~9vhWVu*$Mnu7Op3$xXzh0 zZbbfF+59sLc5jPItjl7`VlnVKL>4xg*h~1kjvY9@6oIMl=jxQWIjYm#JnAG^+kZ*n>WWv-@Mrp`(2i9sE#@WG9CUf{Sq7(;Yd${M*t0| zen>tdACfynz)Ro@9O{_uWo*ueYU@z?-Qw0aYUiL-Pa|Fr75`IL2d=eE$|z$A2Der zJpt`+KWKb;`Rjvw=lg~<)1=2c;1WLHWkTw4PnLRJ>I>%KQ1*3x3i{=b0~|d7fCreW z*HjuJh*&>&ghP0Q#m${8AfMj$yNsW}R_>?;ry~o1Z{QWyIe!|UZ;rc`rFR*RS?Hy~ z0VI_rxRO1;qEXPm2tB4cC~jh#`g@Cq7D6_s)W8#&&KWnLt_ zb6Xa7;Au%O3>y*%ypgAr9WpNLhGG7UHa0`x<`(><_NBqgb?Q`)bnh!#|~r zU-E_Delxk-+S-ph?cG3loOP4-P7u=+?rjUGk@lby)$oQzveDg_WpsPDvpHlH9+18b zVCzlNBnHum1%EpH8UNHxotWPn_DN#?Wam$klT&^b^FX&C=I=)36x?C|cyQ`i-EK@i zZmQ^TJVr(L>Hk;J=^yHI%O0(jV`Z=3!Lru}Wsm3iWv}1)UzC0I*C>0w1f%8DR3Y%^ z;d)#G`~_?x@A-=ed4!h`UPgEY;Z=m+BNP#k?@o@thS#qHNNYgXbBgjAoJU7R(WeUw zo!8|I>mj`b@KCxM{}r9f13EvxfX>5wruaOyh@Ada_)KB37);%jISWa3Y9XoOQZaWS z$(D=yoP}grEhOmq`GsT!GEvJKoEwM0YKWhoQ3)be>FUH{GRO-T6Q{Y!>oA;r8KD8N z&2dWNYY6KIk03k>aP$-W)coyC%-`dwS{i#%5F`3``DwiCw+K%l{0`w6gfj?j0LL0H z0{l6&obCQx1ZxrqTwk3X>zvbbE>%P5dJJW zMr>Af!Ox=Y-)AdMSigX+wqk3P3flbwdid@tfUP%3V@e*3<-?ki6Xp+gVU4U!#Z0kR zNeB=TKO8)|fS2l#3pvOyH_4zr0f9sGO^pJK=o9yden4W zo8{^@tkR0CD5+&FQ}-T7-arKJvk3}c0snZep5Zb7BY2(4tavEnJu~9LMBBnqnKyYB z6&*Ru`u~7?Q=IQ@eeEG^1eQIrfMwXzrejOX^KkFtdD8a0D50g3&n2zbvLSc_78)(Z4o_<>y=<+KC9<6R7hUl3O#lD@ diff --git a/test/network/__pycache__/test_learning.cpython-310-pytest-8.2.2.pyc b/test/network/__pycache__/test_learning.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index acf60e5049742babd51951e6cc1b6e391adc4651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4580 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 IP9n$u1CvT|6951J diff --git a/test/network/__pycache__/test_monitors.cpython-310-pytest-8.1.1.pyc b/test/network/__pycache__/test_monitors.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index c7d1c3fc0d8d6b36bc13608e4267d14803b5b9c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6242 zcmd5=&2JmW72nzA=aQl*S|6l7EK0E>(XmO9`g9u=N}D!t8w+UV6wO{1E6zwEP3|(Y zD?3t=qNv-W0jGzc0op=rPrmn1v}h0QrGLZp)Q^Kz6zHX=9E83%yQ`3vtt2ukguuLg z@6F7cd2e>e-;d6~fUdwNd;Fxnm{OE~pwau$z}SH1{uBgNC}}AMkx#X)sR~ir5hF_c zo|qAX9<>#3Cya#jX{}^iH}rPONJ%@=O1B4$fp*5oNITjZY-f!uQQlB!jK+Vg(D(z@ z7y>InlVBym%CSpSzpL^$*w6#T7-l(;Bb02xUbd7{>In9wY?g?KZ!+(`!|#?<5x?!& z4bR~s6ZirfyKa4B)1k~2(OY(B&x3jT*Bsksb+6&rb&S>f831Dgn!A!v6ecq_R7wnu zMPL_E7NhC|V#HarnP73M(a1xUC@e{%;MJv9hrE1mip81E(uV^q-pnw)ndz!D{!lXp zVO*9C!t5ALJk((R5X4IE5~@GM?4!*~EO!!ni0L#*Q@g6{9hSYrCu>BTBUFPmMsXdQ z#+ABimox}X(*e1+TyxCG)1*;gc~*d3j+D*WJRmpfhPOOV3-B%Q{Cn>ApMBHw zJvTl7Ic|FXtegHwb^i+WIej)KcO6E2Agc*?{E^B(l+`@-M!S$&(NRDs<05s3xn2N44rcTse9+UdcZ-3y z=xjFuf|O<7(YF9`2=cwhL_}<>&5jDvej99Z|FJ4!uCvGMOvF5k?=nvi7kYHpvpiQw1L6>Ll8@E(^%6Pw-PQTdes!Vb>faBw;(8I)wa^Dj;93b? zpaia3=mI5hL9jAxNPmAG!z`8DlKy_#Z5%N0fLdJl<5y1>KrNVCh2goV@i zylb$3bk`O(Mci!c-~x^RLeU-YOo@YgT{+;5Vve9h%F*@fTtpZqfzsL zDo0q(r*U8kdvK>v34R?t8sD=;a+`76*=w~LLc^CNwb9u({bZ}X#$vCrEFySZy{^?> z$Kh?utKRIjYE_YWO`b8}`>%5jq~Mb2 z4>Z|(ot9-=i2Ow&D53jU;dijOC_cVjY1>|fR^G&|yajK{>y~F#zUsVJ+}gM6mEDGi zyK*Yq4V$`f$Q8`45}dX)!lQA^oqY}@LPir-Q!1t159r#4HfzJuaGOiq6m3-xA;Cq?D?*adX>AM^} zfpq}Ohy$~jlPqISvW$6Ff>GDl{8KCg8O8*%3TVhOfLlR^u}{g+#~9DZ5O974);ULx zFf$D^WtPAYhGb4(-eD(q=_aZkzb$@g2JU{5k^TRKAo|-#<&O9|YdXlHc_5XjK66@wg4v}sDzitQf zeUP`mvk&=l{J)LkPZ)>)A{CCml{|xD5XBIPlE#NoA48EvF#BvHqgX`&*a|wTQZDx4(kg6Kx|cWk4NT=aFJoF26bmS-C=h9KnLeUSzKCK81;R_d zjN$}d@)a~!QLLf3i6R0*Xi!N0B{aW`;#Cyu*pcL{?r;jEr56z{@Yk@j2VK^BjV1p2 zQ{8KQkZ_^T>YKX4Z{gbCM6rniSrLB|#cdG17_Yk2XRYvW%uT*vLiO50^X&Gs3Mdk<`qbwu$SPgrN3%*=%>sZ;lZ=*`OU%WH IP9n$u1CvT|6951J diff --git a/test/network/__pycache__/test_monitors.cpython-310-pytest-8.2.2.pyc b/test/network/__pycache__/test_monitors.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index 27f2e7ab4a2275076eed16eeabe9f75d7fb42b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6242 zcmd5=&2JmW72nw2G5Y(VpV3W6$>G!>J`r`pm~g($6v z86`na%#1;g+SFTdGcJ8vGtn|kqm?w1(vCD!tpRhOl{VATjy4Bd88bta*A*J0`i~W= z-&4&Yu;MfURsyUnyFiWGDu0~~-BZkAmIXON$rkKoODQIgU|-5+kqCX0`FCA@yQm8N zrt8#wmy2}h3vKMW@y$(_GEYQrIPEBqx-F0dhtM@Yi#s)NRC9Wt;W^SsK zm>P?~E}|?()qBL$S+o&nI@M_8zDg99pi%G|(rZ9ofj7x?X0X)Z0Mi?3W;D_rmFo93 za}dU5*dWY~(fEB0<_|%v#4e%6eat@ExWKZEN7yhI1t><*zB^zW#h2pwXV4`1vkcNFjE&_Bnr9m0PF+B|9w zfqv9;9U`Ck@HrknC&TAdhtTYCq(90?DTws3oCO+0%1V7YoKXm$GcfbQFN{&eEYe{* z!iseQ`W5yPjK0dQbjUsOBSJ?bikX9!hc*sv6515BS!mPH3XtjW=d2K%;L|JgfOvOd z)srt+TcuEB^oHryc(2(QYFK!@zcr2d8K1krBEXiy)B_O^_0p0!GT=G*k_TB+Uu z?DzCq;pum4^=Fyg^VI5JGFnip|Hx?PQ>$p>8r9YnxUtu044&Ovo}+pA7I^kO5Bg8P z>A9Ypp8EnfJ$Kqof1rAQh5DR4o8!9%4k?Cjc>_l=UJ=M@BHbt zig-Hg_w-uf=?8aS@y1rf{2fw>K-`=k*6g}hnU9GTQKy|I_10{5= zbX}l?u4>l>O6Y=MCD@Sh{yc_RDtblZ{gPKdVBi6@upY#(94~-cIJW}B!<~TEbwcdY zRuDjL5|)QRA`WT!R?Brn6i{C6ouVPM_WlBjDvBi(D=5}P1hbT~D&>-tD^ji<4BDQ@ zxG(dr!v4`+UDy=5Ro}q{>i>nJJyiK9l#Wk;D3(OrvhY|eOBfc6p?gi#Q&+;R7s&AQO=B}s0y_pKn=O0TilYb=Wh9#^kx zwb!^VB6u1i)e~&7&sy%YR{N}qFkqe!Z@y)7F=W;3X4B%V&1-I}ZSyef_FlaSSHlyr zrVArHk+ZyaAQ38uTDwhm+iuDO5DCk(cNj(p*4c4+%l0eRd#!3kq+gL|4EX*VoC7Ji zU3oYq3JxJbe3!6k(~f9nE+lgX-)wz84P*JMc^G5ftO6P2{sM9q`(T^ z@7c`ZEHIJ+@RA|)BQF8p3zBu<6WInnCnU?bba+|vm7js{MFzhI{Fkz~`^$hMfsaVv z#qbHN16YO*%wkTmj5*0N=2;O&U19T2unc4v6UZu{ASnKLm-M8A4Yu)MFzzP2%(2R-$zw+Az%)M zO` z;;%i?z19Z_7y7KesVn>juKg_(n<$VK@i$Q11ksD}DocIV3jYp{`Ywts6vucj(B4Gf z_dsCnJQOFP7(%XDHLm_$eMBCSxS9>^M_~V($l1sPT6W#Btm3GMcVVmCrpQ|X&@Bas z8vtgBv%9?RGr;{_G%EDa7i3z1jfhMaNtQwo84!s4lkQR%t_Dm%9^L4PK@R@Y9h|>p z9w)>2Zrg3TyZgbbf%sJBCSNe2`YoaPPU~p}6!Dh>>hm>Zl^*h=StX@r0Kle5T1(Hx L=VHVlk;nf7(ByFo diff --git a/test/network/__pycache__/test_network.cpython-310-pytest-7.4.4.pyc b/test/network/__pycache__/test_network.cpython-310-pytest-7.4.4.pyc deleted file mode 100644 index e1e54af947c70cecfc87cf9cd07371a3f77eae33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4639 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 diff --git a/test/network/__pycache__/test_nodes.cpython-310-pytest-7.4.4.pyc b/test/network/__pycache__/test_nodes.cpython-310-pytest-7.4.4.pyc deleted file mode 100644 index 41cf3244c22157ac709c59c9492ca9bb6625358b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8725 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 diff --git a/test/network/__pycache__/test_nodes.cpython-310-pytest-8.1.1.pyc b/test/network/__pycache__/test_nodes.cpython-310-pytest-8.1.1.pyc deleted file mode 100644 index 41cf3244c22157ac709c59c9492ca9bb6625358b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8725 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 diff --git a/test/network/__pycache__/test_nodes.cpython-310-pytest-8.2.2.pyc b/test/network/__pycache__/test_nodes.cpython-310-pytest-8.2.2.pyc deleted file mode 100644 index 47d90be7784649c0d307ba6ba9af009bde546e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8725 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