code: def assortativity_bin(CIJ, flag=0):
      '''
      The assortativity coefficient is a correlation coefficient between the
      degrees of all nodes on two opposite ends of a link. A positive
      assortativity coefficient indicates that nodes tend to link to other
      nodes with the same or similar degree.
      Parameters
      ----------
      CIJ : NxN np.ndarray
          binary directed/undirected connection matrix
      flag : int
          0 : undirected graph; degree/degree correlation
          1 : directed graph; out-degree/in-degree correlation
          2 : directed graph; in-degree/out-degree correlation
          3 : directed graph; out-degree/out-degree correlation
          4 : directed graph; in-degree/in-degreen correlation
      Returns
      -------
      r : float
          assortativity coefficient
      Notes
      -----
      The function accepts weighted networks, but all connection
      weights are ignored. The main diagonal should be empty. For flag 1
      the function computes the directed assortativity described in Rubinov
      and Sporns (2010) NeuroImage.
      '''
      if flag == 0:
          deg = degrees_und(CIJ)
          i, j = np.where(np.triu(CIJ, 1) > 0)
          K = len(i)
          degi = deg[i]
          degj = deg[j]
      else:
          id, od, deg = degrees_dir(CIJ)
          i, j = np.where(CIJ > 0)
          K = len(i)
          if flag == 1:
              degi = od[i]
              degj = id[j]
          elif flag == 2:
              degi = id[i]
              degj = od[j]
          elif flag == 3:
              degi = od[i]
              degj = od[j]
          elif flag == 4:
              degi = id[i]
              degj = id[j]
          else:
              raise ValueError('Flag must be 0-4')
      term1 = np.sum(degi * degj) / K
      term2 = np.square(np.sum(.5 * (degi + degj)) / K)
      term3 = np.sum(.5 * (degi * degi + degj * degj)) / K
      r = (term1 - term2) / (term3 - term2)
      return r