code: def equivalence_transform(compound, from_positions, to_positions, add_bond=True):
      
      warn('The `equivalence_transform` function is being phased out in favor of'
           ' `force_overlap`.', DeprecationWarning)
      from mbuild.port import Port
      T = None
      if isinstance(from_positions, (list, tuple)) and isinstance(to_positions, (list, tuple)):
          equivalence_pairs = zip(from_positions, to_positions)
      elif isinstance(from_positions, Port) and isinstance(to_positions, Port):
          equivalence_pairs, T = _choose_correct_port(from_positions, to_positions)
          from_positions.used = True
          to_positions.used = True
      else:
          equivalence_pairs = [(from_positions, to_positions)]
  
      if not T:
          T = _create_equivalence_transform(equivalence_pairs)
      atom_positions = compound.xyz_with_ports
      atom_positions = T.apply_to(atom_positions)
      compound.xyz_with_ports = atom_positions
  
      if add_bond:
          if isinstance(from_positions, Port) and isinstance(to_positions, Port):
              if not from_positions.anchor or not to_positions.anchor:
                  # TODO: I think warnings is undefined here
                  warn("Attempting to form bond from port that has no anchor")
              else:
                  from_positions.anchor.parent.add_bond((from_positions.anchor, to_positions.anchor))
                  to_positions.anchor.parent.add_bond((from_positions.anchor, to_positions.anchor))
docs: Computes an affine transformation that maps the from_positions to the
      respective to_positions, and applies this transformation to the compound.
  
      Parameters
      ----------
      compound : mb.Compound
          The Compound to be transformed.
      from_positions : np.ndarray, shape=(n, 3), dtype=float
          Original positions.
      to_positions : np.ndarray, shape=(n, 3), dtype=float
          New positions.