docs: def _init_codebook(self):
          """Internal function to set the codebook or to indicate it to the C++
          code that it should be randomly initialized.
          """
          codebook_size = self._n_columns * self._n_rows * self.n_dim
          if self.codebook is None:
              if self._initialization == "random":
                  self.codebook = np.zeros(codebook_size, dtype=np.float32)
                  self.codebook[0:2] = [1000, 2000]
              else:
                  self._pca_init()
          elif self.codebook.size != codebook_size:
              raise Exception("Invalid size for initial codebook")
          else:
              if self.codebook.dtype != np.float32:
                  print("Warning: initialcodebook was not float32. A 32-bit "
                        "copy was made")
                  self.codebook = np.float32(self.codebook)
          self.codebook.shape = (codebook_size, )