From 1f0b9af37115fb7951f6b8ae3a48708ef4ce1cb6 Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 2 Oct 2023 09:17:21 -0700 Subject: [PATCH 1/2] fixes for root=True --- bittensor/metagraph.py | 5 +++-- bittensor/utils/weight_utils.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/bittensor/metagraph.py b/bittensor/metagraph.py index f15912bff9..2c31ccf6b1 100644 --- a/bittensor/metagraph.py +++ b/bittensor/metagraph.py @@ -552,6 +552,7 @@ def _process_root_weights( """ data_array = [] n_subnets = subtensor.get_total_subnets() + subnets = subtensor.get_subnets() for item in data: if len(item) == 0: data_array.append(torch.zeros(n_subnets)) @@ -559,8 +560,8 @@ def _process_root_weights( uids, values = zip(*item) # TODO: Validate and test the conversion of uids and values to tensor data_array.append( - bittensor.utils.weight_utils.convert_weight_uids_and_vals_to_tensor( - n_subnets, uids, values + bittensor.utils.weight_utils.convert_root_weight_uids_and_vals_to_tensor( + n_subnets, uids, values, subnets ) ) diff --git a/bittensor/utils/weight_utils.py b/bittensor/utils/weight_utils.py index cc80b975c1..fdb56f894a 100644 --- a/bittensor/utils/weight_utils.py +++ b/bittensor/utils/weight_utils.py @@ -99,6 +99,37 @@ def convert_weight_uids_and_vals_to_tensor( row_weights /= row_sum # normalize return row_weights +def convert_root_weight_uids_and_vals_to_tensor( + n: int, uids: List[int], weights: List[int], subnets: List[int] +) -> "torch.FloatTensor": + r"""Converts root weights and uids from chain representation into a torch tensor (inverse operation from convert_weights_and_uids_for_emit) + Args: + n: int: + number of neurons on network. + uids (:obj:`List[int],`): + Tensor of uids as destinations for passed weights. + weights (:obj:`List[int],`): + Tensor of weights. + subnets (:obj:`List[int],`): + list of subnets on the network + Returns: + row_weights ( torch.FloatTensor ): + Converted row weights. + """ + + row_weights = torch.zeros([n], dtype=torch.float32) + for uid_j, wij in list(zip(uids, weights)): + if uid_j in subnets: + index_s = subnets.index(uid_j) + else: + raise Exception('Incorrect Subnet {uid_j} in {subnets}') + row_weights[index_s] = float( + wij + ) # assumes max-upscaled values (w_max = U16_MAX). + row_sum = row_weights.sum() + if row_sum > 0: + row_weights /= row_sum # normalize + return row_weights def convert_bond_uids_and_vals_to_tensor( n: int, uids: List[int], bonds: List[int] From 05fb46c3e23ffe6024dc85051a3eb80eb0fdacff Mon Sep 17 00:00:00 2001 From: ifrit98 Date: Mon, 2 Oct 2023 16:26:45 +0000 Subject: [PATCH 2/2] run black --- bittensor/utils/weight_utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bittensor/utils/weight_utils.py b/bittensor/utils/weight_utils.py index fdb56f894a..d07caf22aa 100644 --- a/bittensor/utils/weight_utils.py +++ b/bittensor/utils/weight_utils.py @@ -99,6 +99,7 @@ def convert_weight_uids_and_vals_to_tensor( row_weights /= row_sum # normalize return row_weights + def convert_root_weight_uids_and_vals_to_tensor( n: int, uids: List[int], weights: List[int], subnets: List[int] ) -> "torch.FloatTensor": @@ -122,7 +123,7 @@ def convert_root_weight_uids_and_vals_to_tensor( if uid_j in subnets: index_s = subnets.index(uid_j) else: - raise Exception('Incorrect Subnet {uid_j} in {subnets}') + raise Exception("Incorrect Subnet {uid_j} in {subnets}") row_weights[index_s] = float( wij ) # assumes max-upscaled values (w_max = U16_MAX). @@ -131,6 +132,7 @@ def convert_root_weight_uids_and_vals_to_tensor( row_weights /= row_sum # normalize return row_weights + def convert_bond_uids_and_vals_to_tensor( n: int, uids: List[int], bonds: List[int] ) -> "torch.LongTensor":