code: def test_mobius_transform_i8():
      EPS = 1e-6
      vectors = np.array(
          [
              [12, 13, 14, 15],
              [125, 125, 125, 125],
              [1, 0, 0, 0],
              [-1, -1, -1, -1],
          ],
          np.int8,
      )
      expected_vectors = [
          [0.0163487738, 0.0177111717, 0.0190735695, 0.0204359673],
          [0.002, 0.002, 0.002, 0.002],
          [1, 0, 0, 0],
          [-0.25, -0.25, -0.25, -0.25],
      ]
      vector_bytes = vectors.tobytes()
      pool = Pool.from_bytes(vector_bytes, EVectorComponentType.I8, 4)
      transformed_pool = transform_mobius(pool)
      for i in range(transformed_pool.get_num_items()):
          for j in range(transformed_pool.dimension):
              assert (
                  abs(
                      transformed_pool.get_item(i)[j]
                      - expected_vectors[i][j]
                  )
                  < EPS
              )
              assert pool.get_item(i)[j] == vectors[i][j]
      assert transformed_pool.dimension == 4
      assert transformed_pool.get_num_items() == 4
      assert transformed_pool.dtype == EVectorComponentType.Float
      assert pool.dtype == EVectorComponentType.I8
  
imports: from __future__ import print_function
  import pytest
  import os
  import numpy
  import yatest.common
  import struct
  from hnsw import EVectorComponentType, EDistance, Pool, Hnsw, HnswException, transform_mobius, HnswEstimator, OnlineHnsw
label_desc: Use image node_id 11 for calling a global function with example usage: test_mobius_transform_i8() without return types