|
20 | 20 |
|
21 | 21 | import numpy as np
|
22 | 22 | import pytest
|
| 23 | +import copy |
23 | 24 |
|
24 | 25 | from bittensor.core import settings
|
25 | 26 | from bittensor.core.metagraph import Metagraph
|
@@ -174,3 +175,97 @@ def test_sync_warning_cases(block, test_id, metagraph_instance, mock_subtensor,
|
174 | 175 | assert (
|
175 | 176 | expected_message in caplog.text
|
176 | 177 | ), f"Test ID: {test_id} - Expected warning message not found in Loguru sink."
|
| 178 | + |
| 179 | + |
| 180 | +def test_deepcopy(mock_environment): |
| 181 | + subtensor, neurons = mock_environment |
| 182 | + metagraph = Metagraph(1, sync=False) |
| 183 | + metagraph.neurons = neurons |
| 184 | + metagraph.subtensor = subtensor |
| 185 | + |
| 186 | + # Do a deep copy |
| 187 | + copied_metagraph = copy.deepcopy(metagraph) |
| 188 | + |
| 189 | + # Check that the subtensor attribute is None |
| 190 | + assert copied_metagraph.subtensor is None |
| 191 | + |
| 192 | + # Check that other attributes are copied correctly |
| 193 | + assert copied_metagraph.n == metagraph.n |
| 194 | + assert copied_metagraph.block == metagraph.block |
| 195 | + assert np.array_equal(copied_metagraph.uids, metagraph.uids) |
| 196 | + assert np.array_equal(copied_metagraph.stake, metagraph.stake) |
| 197 | + assert np.array_equal(copied_metagraph.total_stake, metagraph.total_stake) |
| 198 | + assert np.array_equal(copied_metagraph.ranks, metagraph.ranks) |
| 199 | + assert np.array_equal(copied_metagraph.trust, metagraph.trust) |
| 200 | + assert np.array_equal(copied_metagraph.consensus, metagraph.consensus) |
| 201 | + assert np.array_equal(copied_metagraph.validator_trust, metagraph.validator_trust) |
| 202 | + assert np.array_equal(copied_metagraph.incentive, metagraph.incentive) |
| 203 | + assert np.array_equal(copied_metagraph.emission, metagraph.emission) |
| 204 | + assert np.array_equal(copied_metagraph.dividends, metagraph.dividends) |
| 205 | + assert np.array_equal(copied_metagraph.active, metagraph.active) |
| 206 | + assert np.array_equal(copied_metagraph.last_update, metagraph.last_update) |
| 207 | + assert np.array_equal(copied_metagraph.validator_permit, metagraph.validator_permit) |
| 208 | + assert np.array_equal(copied_metagraph.weights, metagraph.weights) |
| 209 | + assert np.array_equal(copied_metagraph.bonds, metagraph.bonds) |
| 210 | + |
| 211 | + # Check that the neurons are different objects in the original and copied metagraphs |
| 212 | + for original_neuron, copied_neuron in zip( |
| 213 | + metagraph.neurons, copied_metagraph.neurons |
| 214 | + ): |
| 215 | + assert original_neuron is not copied_neuron |
| 216 | + assert original_neuron.uid == copied_neuron.uid |
| 217 | + assert original_neuron.trust == copied_neuron.trust |
| 218 | + assert original_neuron.consensus == copied_neuron.consensus |
| 219 | + assert original_neuron.incentive == copied_neuron.incentive |
| 220 | + assert original_neuron.dividends == copied_neuron.dividends |
| 221 | + assert original_neuron.rank == copied_neuron.rank |
| 222 | + assert original_neuron.emission == copied_neuron.emission |
| 223 | + assert original_neuron.active == copied_neuron.active |
| 224 | + assert original_neuron.last_update == copied_neuron.last_update |
| 225 | + assert original_neuron.validator_permit == copied_neuron.validator_permit |
| 226 | + assert original_neuron.validator_trust == copied_neuron.validator_trust |
| 227 | + assert original_neuron.total_stake.tao == copied_neuron.total_stake.tao |
| 228 | + assert original_neuron.stake == copied_neuron.stake |
| 229 | + assert original_neuron.axon_info == copied_neuron.axon_info |
| 230 | + assert original_neuron.weights == copied_neuron.weights |
| 231 | + assert original_neuron.bonds == copied_neuron.bonds |
| 232 | + |
| 233 | + |
| 234 | +def test_copy(mock_environment): |
| 235 | + subtensor, neurons = mock_environment |
| 236 | + metagraph = Metagraph(1, sync=False) |
| 237 | + metagraph.neurons = neurons |
| 238 | + metagraph.subtensor = subtensor |
| 239 | + |
| 240 | + # Do a shallow copy |
| 241 | + copied_metagraph = copy.copy(metagraph) |
| 242 | + |
| 243 | + # Check that the subtensor attribute is None in the copied object |
| 244 | + assert copied_metagraph.subtensor is None |
| 245 | + |
| 246 | + # Check that other attributes are copied correctly |
| 247 | + assert copied_metagraph.n == metagraph.n |
| 248 | + assert copied_metagraph.block == metagraph.block |
| 249 | + assert np.array_equal(copied_metagraph.uids, metagraph.uids) |
| 250 | + assert np.array_equal(copied_metagraph.stake, metagraph.stake) |
| 251 | + assert np.array_equal(copied_metagraph.total_stake, metagraph.total_stake) |
| 252 | + assert np.array_equal(copied_metagraph.ranks, metagraph.ranks) |
| 253 | + assert np.array_equal(copied_metagraph.trust, metagraph.trust) |
| 254 | + assert np.array_equal(copied_metagraph.consensus, metagraph.consensus) |
| 255 | + assert np.array_equal(copied_metagraph.validator_trust, metagraph.validator_trust) |
| 256 | + assert np.array_equal(copied_metagraph.incentive, metagraph.incentive) |
| 257 | + assert np.array_equal(copied_metagraph.emission, metagraph.emission) |
| 258 | + assert np.array_equal(copied_metagraph.dividends, metagraph.dividends) |
| 259 | + assert np.array_equal(copied_metagraph.active, metagraph.active) |
| 260 | + assert np.array_equal(copied_metagraph.last_update, metagraph.last_update) |
| 261 | + assert np.array_equal(copied_metagraph.validator_permit, metagraph.validator_permit) |
| 262 | + assert copied_metagraph.axons == metagraph.axons |
| 263 | + assert copied_metagraph.neurons == metagraph.neurons |
| 264 | + assert np.array_equal(copied_metagraph.weights, metagraph.weights) |
| 265 | + assert np.array_equal(copied_metagraph.bonds, metagraph.bonds) |
| 266 | + |
| 267 | + # Check that the neurons are the same objects in the original and copied metagraphs |
| 268 | + for original_neuron, copied_neuron in zip( |
| 269 | + metagraph.neurons, copied_metagraph.neurons |
| 270 | + ): |
| 271 | + assert original_neuron is copied_neuron |
0 commit comments