<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def push_supply(self, tokens):
 """ Adds OPF and CPF data to a Generator. """

        logger.debug("Pushing supply data: %s" % tokens)

        bus = self.case.buses[tokens["bus_no"] - 1]
        n_generators = len([g for g in self.case.generators if g.bus == bus])

        if n_generators == 0:
            logger.error("No generator at bus [%s] for matching supply" % bus)
            return
        elif n_generators > 1:
            g = [g for g in self.case.generators if g.bus == bus][0]
            logger.warning(
                "More than one generator at bus [%s] for demand. Using the "
                "first one [%s]." % (bus, g)
            )
        else:
            g = [g for g in self.case.generators if g.bus == bus][0]

        g.pcost_model = "poly"
        g.poly_coeffs = (
            tokens["p_fixed"],
            tokens["p_proportional"],
            tokens["p_quadratic"]
        )