Example #1
0
def pick(subset, weighted=False):
    if weighted:
        d = {(name, weight): weight for name, weight in subset}
        picked = weighted_lottery(d)
    else:
        picked = random.choice(subset)
    return picked
Example #2
0
def pick(subset, weighted=False):
    if weighted:
        d = {(name, weight): weight for name, weight in subset}
        picked = weighted_lottery(d)
    else:
        picked = random.choice(subset)
    return picked
Example #3
0
def lottery_promoted_links(user, site, n=10):
    """Run weighted_lottery to order and choose a subset of promoted links."""
    promo_tuples = get_promotion_list(user, site)
    weights = {p: p.weight for p in promo_tuples}
    selected = []
    while weights and len(selected) < n:
        s = weighted_lottery(weights)
        del weights[s]
        selected.append(s)
    return selected
Example #4
0
def lottery_promoted_links(srids, n=10):
    """Run weighted_lottery to order and choose a subset of promoted links."""
    promo_tuples = get_promotion_list(srids)
    weights = {p: p.weight for p in promo_tuples if p.weight}
    selected = []
    while weights and len(selected) < n:
        s = weighted_lottery(weights)
        del weights[s]
        selected.append(s)
    return selected
Example #5
0
def choose_random_item(keep_fn=None):
    item_class = weighted_lottery(g.live_config["f2p_rarity_weights"])
    items_in_class = [i["kind"] for i in g.f2pitems.itervalues() if i.get("rarity", "common") == item_class]

    if keep_fn:
        available_items = [i for i in items_in_class if keep_fn(i)]
    else:
        available_items = items_in_class

    return random.choice(available_items)
Example #6
0
def lottery_promoted_links(sr_names, n=10):
    """Run weighted_lottery to order and choose a subset of promoted links."""
    promo_tuples = get_live_promotions(sr_names)

    # house priority campaigns have weight of 0, use some small value
    # so they'll show if there are no other campaigns
    weights = {p: p.weight or 0.001 for p in promo_tuples}
    selected = []
    while weights and len(selected) < n:
        s = weighted_lottery(weights)
        del weights[s]
        selected.append(s)
    return selected
Example #7
0
def lottery_promoted_links(sr_names, n=10):
    """Run weighted_lottery to order and choose a subset of promoted links."""
    promo_tuples = get_live_promotions(sr_names)

    # house priority campaigns have weight of 0, use some small value
    # so they'll show if there are no other campaigns
    weights = {p: p.weight or 0.001 for p in promo_tuples}
    selected = []
    while weights and len(selected) < n:
        s = weighted_lottery(weights)
        del weights[s]
        selected.append(s)
    return selected
Example #8
0
    def generate(self):
        """Generate a string similar to samples previously fed in."""

        start = weighted_lottery(self.starts)
        desired_length = weighted_lottery(self.start_lengths[start])
        desired_length = max(desired_length, self.order)

        generated = []
        generated.extend(start)
        while len(generated) < desired_length:
            # try each model, from highest order down, til we find
            # something
            for order, model in reversed(list(enumerate(self.models, 1))):
                current_prefix = "".join(generated[-order:])
                frequencies = model[current_prefix]
                if frequencies:
                    generated.append(weighted_lottery(frequencies))
                    break
            else:
                generated.append(random.choice(string.lowercase))

        return "".join(generated)
    def generate(self):
        """Generate a string similar to samples previously fed in."""

        start = weighted_lottery(self.starts)
        desired_length = weighted_lottery(self.start_lengths[start])
        desired_length = max(desired_length, self.order)

        generated = []
        generated.extend(start)
        while len(generated) < desired_length:
            # try each model, from highest order down, til we find
            # something
            for order, model in reversed(list(enumerate(self.models, 1))):
                current_prefix = "".join(generated[-order:])
                frequencies = model[current_prefix]
                if frequencies:
                    generated.append(weighted_lottery(frequencies))
                    break
            else:
                generated.append(random.choice(string.lowercase))

        return "".join(generated)
Example #10
0
def choose_random_item(keep_fn=None):
    item_class = weighted_lottery(g.live_config["f2p_rarity_weights"])
    items_in_class = [
        i["kind"] for i in g.f2pitems.itervalues()
        if i.get("rarity", "common") == item_class
    ]

    if keep_fn:
        available_items = [i for i in items_in_class if keep_fn(i)]
    else:
        available_items = items_in_class

    return random.choice(available_items)
Example #11
0
def select_subset(n, weighted=False):
    promos = copy(PROMOS)
    selected = []

    if weighted:
        d = {(name, weight): weight for name, weight in promos}
        while len(selected) < n and d:
            i = weighted_lottery(d)
            del d[i]
            selected.append(i)
    else:
        # Sample without replacement
        if n > len(promos):
            return promos
        else:
            return random.sample(promos, n)
    return selected
Example #12
0
def select_subset(n, weighted=False):
    promos = copy(PROMOS)
    selected = []

    if weighted:
        d = {(name, weight): weight for name, weight in promos}
        while len(selected) < n and d:
            i = weighted_lottery(d)
            del d[i]
            selected.append(i)
    else:
        # Sample without replacement
        if n > len(promos):
            return promos
        else:
            return random.sample(promos, n)
    return selected
Example #13
0
 def expect(result, random_value):
     scaled_r = float(random_value) / sum(weights.itervalues())
     self.assertEquals(
         result,
         utils.weighted_lottery(weights, _random=lambda: scaled_r))
Example #14
0
 def expect(result, random_value):
     scaled_r = float(random_value) / sum(weights.itervalues())
     self.assertEquals(
         result,
         utils.weighted_lottery(weights, _random=lambda: scaled_r))