docs: def _get_entry_energy(pd, composition):
          """
          Finds the lowest entry energy for entries matching the composition.
          Entries with non-negative formation energies are excluded. If no
          entry is found, use the convex hull energy for the composition.
  
          Args:
              pd (PhaseDiagram): PhaseDiagram object.
              composition (Composition): Composition object that the target
              entry should match.
  
          Returns:
              The lowest entry energy among entries matching the composition.
          """
          candidate = [i.energy_per_atom for i in pd.qhull_entries if
                       i.composition.fractional_composition ==
                       composition.fractional_composition]
  
          if not candidate:
              warnings.warn("The reactant " + composition.reduced_formula +
                            " has no matching entry with negative formation"
                            " energy, instead convex hull energy for this"
                            " composition will be used for reaction energy "
                            "calculation. ")
              return pd.get_hull_energy(composition)
          else:
              min_entry_energy = min(candidate)
              return min_entry_energy * composition.num_atoms