code: def chebyshev_filter(A, k, symmetric=True):
      r"""
      Computes the Chebyshev filter from the given adjacency matrix, as described
      in [Defferrard et at. (2016)](https://arxiv.org/abs/1606.09375).
      :param A: rank 2 array or sparse matrix;
      :param k: integer, the order of the Chebyshev polynomial;
      :param symmetric: boolean, whether to normalize the matrix as
      \(\D^{-\frac{1}{2}}\A\D^{-\frac{1}{2}}\) or as \(\D^{-1}\A\);
      :return: a list of k + 1 arrays or sparse matrices with one element for each
      degree of the polynomial.
      """
      normalized_adj = normalized_adjacency(A, symmetric)
      if sp.issparse(A):
          I = sp.eye(A.shape[0], dtype=A.dtype)
      else:
          I = np.eye(A.shape[0], dtype=A.dtype)
      L = I - normalized_adj  # Compute Laplacian
  
      # Rescale Laplacian
      L_scaled = rescale_laplacian(L)
  
      # Compute Chebyshev polynomial approximation
      T_k = chebyshev_polynomial(L_scaled, k)
  
      # Sort indices
      if sp.issparse(T_k[0]):
          for i in range(len(T_k)):
              T_k[i].sort_indices()
  
      return T_k
  
imports: import copy
  import warnings
  from functools import partial
  import numpy
  import tensorflow
  from scipy import linalg
  from scipy import sparse
  from scipy.sparse.linalg import ArpackNoConvergence
label_desc: Use image node_id 13 for calling a global function with example usage: chebyshev_filter(A, k, symmetric) and returns: T_k