def check_transitive_assumptions(self, pot, variant):
        assumptions = variant.generate_transitive_assumptions()
        for assumption in assumptions:
            result_pots = list()
            linear_variations_variations = assumption_ratio_to_linear(assumption, pot)
            has_good_variaton = False
            for linear_assumptions in linear_variations_variations:
                bad_variation = False
                for linear_assumption in linear_assumptions:
                    if not pot.linear_assumption_basic_test_on_possibility(linear_assumption):
                        bad_variation = True
                        break
                if not bad_variation:
                    has_good_variaton = True
                    break

            if not has_good_variaton:
                return False

        return True
    def _filter_decomposed_ratio_to_linear(self, pot, decomposed):
        ret = decomposed_assumption()
        for decompose_variant_group in decomposed.variant_groups:
            ret.new_variant_group()
            for decomposed_variant in decompose_variant_group:
                all_variants = [ [ ] ]
                for assumption in decomposed_variant.assumptions:
                    linear_assumptions_groups = assumption_ratio_to_linear(assumption, pot)
                    new_all_variants = list()
                    for linear_assumptions in linear_assumptions_groups:
                        for current_variant in all_variants:
                            new_all_variants.append( current_variant + linear_assumptions )
                    all_variants = new_all_variants

                for variant in all_variants:
                    ret.new_variant()
                    ret.variant.symbol_assumptions = deepcopy(decomposed_variant.symbol_assumptions)
                    ret.variant.assumptions = variant
        ret.new_variant_group()
        return ret