code: def mutual_info(rho: Density,
                  qubits0: Qubits,
                  qubits1: Qubits = None,
                  base: float = None) -> float:
      
      if qubits1 is None:
          qubits1 = tuple(set(rho.qubits) - set(qubits0))
  
      rho0 = rho.partial_trace(qubits1)
      rho1 = rho.partial_trace(qubits0)
  
      ent = entropy(rho, base)
      ent0 = entropy(rho0, base)
      ent1 = entropy(rho1, base)
  
      return ent0 + ent1 - ent
docs: Compute the bipartite von-Neumann mutual information of a mixed
      quantum state.
  
      Args:
          rho:    A density matrix of the complete system
          qubits0: Qubits of system 0
          qubits1: Qubits of system 1. If none, taken to be all remaining qubits
          base:   Optional logarithm base. Default is base e
  
      Returns:
          The bipartite von-Neumann mutual information.