code: def test_set_perplexities_respects_symmetrization(self):
      # Apply symmetrization
      symmetrize = True
      aff = Multiscale(
          self.x, perplexities=[10, 20], symmetrize=symmetrize
      )
      self.assertAlmostEqual(np.sum(aff.P - aff.P.T), 0, delta=1e-16)
  
      aff.set_perplexities([5, 10])
      self.assertAlmostEqual(np.sum(aff.P - aff.P.T), 0, delta=1e-16)
  
      # Skip symmetrization
      symmetrize = False
      aff = Multiscale(
          self.x, perplexities=[10, 20], symmetrize=symmetrize
      )
      self.assertAlmostEqual(np.sum(aff.P - aff.P.T), 0, delta=1e-16)
  
      aff.set_perplexities([5, 10])
      self.assertAlmostEqual(np.sum(aff.P - aff.P.T), 0, delta=1e-16)
  
imports: import logging
  import unittest
  from functools import partial
  import numpy
  from scipy.spatial.distance import squareform, pdist
  from sklearn import datasets
  from sklearn.model_selection import train_test_split
  from openTSNE import affinity, nearest_neighbors
label_desc: Use image node_id 4 for calling the TestMultiscale obj's underlying member method code with example usage: obj.test_set_perplexities_respects_symmetrization() without return types