def test_facts(self): for n in (1, 2, 3): yield Fact(something=n)
class Test(KnowledgeEngine): @Rule(Fact(a=W('X'), b=W('X'))) def rule1(self, X): nonlocal result result.append(X)
def test_prepare_rule__rule_starting_with_not(): from pyknow import Rule, InitialFact, NOT, Fact rule = Rule(NOT(Fact(1)))(lambda: None) assert list(utils.prepare_rule(rule)) == [InitialFact(), NOT(Fact(1))]
class KE(KnowledgeEngine): @Rule(EXISTS(OR(Fact(), Fact()))) def r1(self): pass
class KE(KnowledgeEngine): @Rule(Fact(1), OR(Fact('a'), Fact('b')), OR(Fact('x'), Fact('y'))) def r1(self): pass
class Test(KnowledgeEngine): @Rule(Fact("a" << W()), Fact("b" << W()), TEST(lambda a, b: a > b), Fact("c" << W()), TEST(lambda b, c: b > c)) def is_greater(self, a, b, c): nonlocal executed executed[(a, b, c)] += 1
class Test(KnowledgeEngine): @Rule(EXISTS(Fact())) def any_fact_once(self): nonlocal executed executed += 1
def start(self, being, number): # noqa """Define facts.""" yield Fact(being=being) yield Fact(number=number) yield Fact(touched=being.touched)
def mygenerator(): yield Fact()
class TestRule(KnowledgeEngine): @Rule(AS.fact << Fact(MATCH.value)) def myrule(self): nonlocal called called = True
class TestRule(KnowledgeEngine): @Rule(Fact(MATCH.value1, MATCH.value2)) def myrule(self, value1=None): assert value1 == "SOMETHING1" nonlocal called called = True
class KE(KnowledgeEngine): result = False @Rule(Fact(operator)) def istrue(self): self.result = True
def test_extract_facts(): from pyknow import Rule, NOT, AND, OR, Fact rule = Rule(OR(AND(Fact(1), NOT(Fact(2))), Fact(3))) assert utils.extract_facts(rule) == {Fact(1), Fact(2), Fact(3)}
def test_prepare_rule__and_inside_rule(): from pyknow import Rule, AND, Fact rule = Rule(AND(Fact(1), Fact(2)))(lambda: None) assert list(utils.prepare_rule(rule)) == [Fact(1), Fact(2)]
def some_facts(self): yield Fact(other=1) yield Fact(other=2)
def mygenerator(): return Fact()
class Test(KnowledgeEngine): """ Test KE """ @Rule(OR(Fact(something=L(1)), Fact(something=L(2)))) def rule1(self): """ First rule, something=1 and something=2""" pass
def mygenerator(self): yield Fact()
class Test(KnowledgeEngine): @Rule(Fact("a" << W()), TEST(lambda a: isinstance(a, int))) def is_number(self, a): nonlocal executed executed += 1
def on_wgt_btn_calculate_press(instance, value): engine = SeguroDeVida() engine.reset() engine.declare(Fact(cpf=instance.wgt_cpf_negativado.active)) engine.declare( Fact(esportesRadicais=instance.wgt_radical_sports.active)) engine.declare(Fact(pilotoCorrida=instance.wgt_racing_driver.active)) engine.declare(Fact(drogas=instance.wgt_use_drugs.active)) engine.declare( Fact(doencasGraves=instance.wgt_serious_diseases.active)) engine.declare( Fact(doencasGraves=instance.wgt_serious_diseases.active)) engine.declare( Fact(acompanhamentoMedico=instance.wgt_medical_monitoring.active)) engine.declare( Fact(acompanhamento=instance.wgt_medical_monitoring.active)) engine.declare(Fact(indenizacao=instance.wgt_invalidity.active)) engine.declare(Fact(fuma=instance.wgt_smoker.active)) engine.declare(Fact(bebe=instance.wgt_alcohol.active)) engine.declare(Fact(cep=instance.wgt_dangerous_neighbour.active)) engine.declare(Fact(aeronaves=instance.wgt_airline_crew.active)) engine.declare(Fact(idade=convertStrToFloat(instance.wgt_age.text))) engine.declare(Fact(diabetes=instance.wgt_diabetes.active)) engine.declare(Fact(profissao=instance.wgt_profession.text)) engine.declare(Fact(sedentario_=instance.wgt_sports_practice.active)) engine.declare( Fact(serasa=convertStrToFloat(instance.wgt_serasa_score.text))) engine.declare( Fact(quantosFilhos=convertStrToInt(instance.wgt_children.text))) engine.declare(Fact(casado=instance.wgt_marital_status.text)) engine.declare( Fact(viagens=convertStrToInt(instance.wgt_travels.text))) engine.declare(Fact(neuro=instance.wgt_neurological_disease.active)) engine.declare(Fact(cirurgia=instance.wgt_surgery.active)) engine.declare(Fact(marcapasso=instance.wgt_pacemaker.active)) engine.declare( Fact(problemaCardiaco=instance.wgt_heart_disease.active)) engine.declare(Fact(cancerNaFamilia=instance.wgt_cancer.active)) engine.declare(Fact(sangue=instance.wgt_blood_type.text)) engine.declare(Fact(celiaco_=instance.wgt_celia.active)) engine.declare( Fact(hipolactasia_=instance.wgt_lactose_intolerance.active)) engine.declare(Fact(terminal=instance.wgt_terminal_disease.active)) engine.declare(Fact(autoImune=instance.wgt_auto_immune_disease.active)) engine.declare(Fact(vacinaPolio=instance.wgt_vaccine_polio.active)) engine.declare( Fact(vacinaMeningite=instance.wgt_vaccine_meningite.active)) engine.declare(Fact(viagemAfrica=instance.wgt_africa_travel.active)) engine.declare(Fact(viagemGuerra=instance.wgt_war_travel.active)) engine.declare(Fact(desempregado_=instance.wgt_unemployed.active)) engine.declare(Fact(esportesTiro=instance.wgt_shoot_practice.active)) engine.declare(Fact(transplante=instance.wgt_transplant.active)) engine.declare(Fact(abs_ou_air=instance.wgt_airbags.active)) engine.declare(Fact(contraTerceiros=instance.wgt_third.active)) engine.declare(Fact(franquia_reduzida=instance.wgt_reduced.active)) engine.declare(Fact(roubo=instance.wgt_theft.active)) engine.declare(Fact(incendio=instance.wgt_fire.active)) engine.declare( Fact(idadeCarro=convertStrToInt(instance.wgt_year.text))) # engine.declare(Fact(um_condutor=<to_be_defined>)) engine.declare(Fact(garagem=instance.wgt_garage.active)) engine.declare(Fact(carro_reserva=instance.wgt_backup_car.active)) engine.declare( Fact(acidentesPessoais=instance.wgt_personal_passenger.active)) engine.declare(Fact(condutorAcidente=instance.wgt_accident.active)) engine.declare(Fact(indenizacaoFipe=instance.wgt_extra_fipe.active)) engine.declare(Fact(sexo_=instance.wgt_gender.text)) engine.declare(Fact(possuiRastreador=instance.wgt_tracker.active)) engine.declare( Fact( indice_roubo=convertStrToFloat(instance.wgt_theft_index.text))) engine.declare(Fact(veiculo_viagens=instance.wgt_for_travel.active)) engine.declare(Fact(cobertura_=instance.wgt_car_coverage_type.text)) engine.declare(Fact(brand=instance.wgt_brand.text)) engine.declare( Fact(numero_motoristas=convertStrToInt(instance.wgt_drivers.text))) engine.declare(Fact(areaRiscoNatural=instance.wgt_natural_risk.active)) engine.declare( Fact(emConstrucao=instance.wgt_under_construction.active)) engine.declare( Fact(sistemaMonitoramento=instance.wgt_medical_monitoring.active)) engine.declare(Fact(tombado=instance.wgt_historical.active)) engine.declare(Fact(moradiaColetiva=instance.wgt_shared.active)) engine.declare(Fact(moradia=instance.wgt_residence_type.text)) engine.declare( Fact(utilizaMateriaisCombustiveis=instance. wgt_combustible_materials.active)) engine.declare( Fact(numeroAparelhosEletronicos_=convertStrToInt( instance.wgt_number_of_electronics.text))) engine.declare( Fact(valor_Dos_Bens=convertStrToFloat( instance.wgt_value_of_goods.text))) engine.declare(Fact(cofre=instance.wgt_has_safe_box.active)) engine.declare( Fact(servicosEmergenciais=instance.wgt_needs_emergencial_services. active)) engine.declare( Fact(jaHouveSinistro=instance.wgt_insurance_claim.active)) engine.declare(Fact(cancer_=instance.wgt_cancer.active)) engine.declare(Fact(infarto_=instance.wgt_heart_attack.active)) engine.declare(Fact(AVC=instance.wgt_stroke.active)) engine.declare(Fact(deficiencia=instance.wgt_deficiencies.active)) # engine.declare(Fact(obeso=<to_be_defined>)) engine.declare(Fact(cardiopatia=instance.wgt_heart_congenital.active)) engine.declare(Fact(artrose=instance.wgt_osteoarthritis.active)) engine.declare( Fact(medicamentoControlado=instance.wgt_controlled_medication. active)) engine.declare(Fact(dst=instance.wgt_sexual_disease.active)) engine.declare(Fact(hepatite=instance.wgt_hepatitis.active)) engine.declare(Fact(gravida_=instance.wgt_pregnant.active)) engine.declare(Fact(planoDeSaude=instance.wgt_health_plan.active)) engine.run() print(engine.facts) if (engine.seguroNaoPossivel == True): popup = Popup( title='Resultado da Análise', content=Label( text= 'Caro cliente. De acordo com nossos critérios internos,\nnão é possível realizarmos seu seguro' ), size_hint=(None, None), size=(400, 200)) else: popup = Popup( title='Resultado da Análise', content=Label(text='Caro cliente. Seu score de risco é de ' + str(engine.insuranceScore)), size_hint=(None, None), size=(400, 200)) popup.open()
class KE(KnowledgeEngine): @Rule('myfact' << Fact()) def r1(self, myfact): nonlocal executed executed = myfact
class Test(KnowledgeEngine): @Rule(Fact(a=1), Fact(b=1), Fact(c=1)) def test(self): pass
class KE(KnowledgeEngine): @Rule(Fact(x='x' << W()), NOT(Fact(y='x' << W()))) def r1(self): pass
def some_facts(self): yield Fact(foo=1)
class Test(KnowledgeEngine): @Rule(~Fact(a=1) | ~Fact(a=2) | ~Fact(a=3)) def test(self): nonlocal executions executions += 1
def tested_deffacts(self): for i in to_declare: yield Fact(something=i)
def test_deffacts(self): yield Fact(a=1)
def test_multiple_or_inside_rule(): from pyknow import Fact, OR, Rule, AND from pyknow.matchers.rete.dnf import dnf input_ = Rule(Fact(a=1), OR(Fact(b=1), Fact(b=2)), OR(Fact(c=1), Fact(c=2))) output_ = Rule(OR(AND(Fact(a=1), Fact(b=1), Fact(c=1)), AND(Fact(a=1), Fact(b=1), Fact(c=2)), AND(Fact(a=1), Fact(b=2), Fact(c=1)), AND(Fact(a=1), Fact(b=2), Fact(c=2)))) result = dnf(input_) assert result == output_