K i dZddlmZddlmZddlmZddlmZddl m Z m Z m Z m Z mZmZddlmZedZedd Zedd Zedd Zd ZedZdZdZy )z Known facts in assumptions module. This module defines the facts between unary predicates in ``get_known_facts()``, and supports functions to generate the contents in ``sympy.assumptions.ask_generated`` file. )Q)AppliedPredicate)cacheit)Symbol)to_cnfAndNotImplies Equivalent Exclusive) satisfiablec~tjtjtjztjztj tj tjztjtjtjztjtjtjztjtjtjztjtjtjztjztjztjztjtjtjztjtjtjztj tjtjztjztjztj"tjtjztjztj$tjtjztjztj&tj(tj*zi SN)rrealnegativezeropositiveintegerevenodd nonpositivenonzero nonnegative extended_realnegative_infinitepositive_infiniteextended_positiveextended_negativeextended_nonzeroextended_nonpositiveextended_nonnegativecomplex algebraictranscendental]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/assumptions/facts.pyget_composite_predicatesr(sz aff$qzz1 AFFQUUN  QVV+ AJJ+ + !-- :QVVCajjPSTSfSff QZZ!*=*== QZZ!*=*== A//!**!,,q/1::a=1 1 q{{1~. !&&)QUU1X& ! ajjm,q 166!9%!++a.!''!*- A+QYYq\AJJqM-IJq AJJqM)QWWQZK7QH q 1;;q>* A 23q 1;;q>AOOA,>>? !**Q-!- ! ahhqk*##A&)<)E# DH Kr&c | td}tttj|tj |ttj|tj |ttj |tj|ztj|ttj |tj|ttj |tj|ttj|tj|ttj|tj|ttj |tj|ttj|tj|ttj|tj|ttj|tj|ttj|tj|ttj|tj|tj|zttj|tj|ztj|ttj|tj|ttj |tj|ttj|tj"|ttj|tj|ttj|tj|ttj"|tj|ztj|t%tj|tj&|ttj(|tj|ttj|tj*|}|S)z Facts between unary matrix predicates. Parameters ========== x : Symbol, optional Placeholder symbol for unary facts. Default is ``Symbol('x')``. Returns ======= fact : Known facts in conjugated normal form. r*)rrr r orthogonalpositive_definiteunitary real_elementsnormal invertiblesquarediagonalupper_triangularlower_triangular triangular symmetricunit_triangularfullrankr singularinteger_elementscomplex_elementsr-s r'r,r,|s" y 3K  Q!4!4Q!78 Q1. ! qq111<<?C ! ahhqk* ! all1o. QXXa[) 1 qxx{+##A& Q8 1 q11!45 1 q11!45""1%q||A7""1%q||A7 Q!3!3A!69K9KA9N!NO""1%(:(:1(==qzz!}M 1 q{{1~.!!!$all1o6 QA/ Q!- A , 1  +Q\\!_=1<<?QZZ]N3""1%qq'9:"A$6$6q$9:1 D4 Kr&ct|}t||}i}|jD]\}}t}t}|D]i} t | t r|j | j/t | ts@| jd} |j | jk||f||j<|S)a Computes and returns a dictionary which contains the relations between unary predicates. Each key is a predicate, and item is two groups of predicates. First group contains the predicates which are implied by the key, and second group contains the predicates which are rejected by the key. All predicates in *keys* and *fact* must be unary and have same placeholder symbol. Parameters ========== keys : list of AppliedPredicate instances. fact : Fact between predicates in conjugated normal form. Examples ======== >>> from sympy import Q, And, Implies >>> from sympy.assumptions.facts import generate_known_facts_dict >>> from sympy.abc import x >>> keys = [Q.even(x), Q.odd(x), Q.zero(x)] >>> fact = And(Implies(Q.even(x), ~Q.odd(x)), ... Implies(Q.zero(x), Q.even(x))) >>> generate_known_facts_dict(keys, fact) {Q.even: ({Q.even}, {Q.odd}), Q.odd: ({Q.odd}, {Q.even, Q.zero}), Q.zero: ({Q.even, Q.zero}, {Q.odd})} r) rsingle_fact_lookupitemsset isinstanceraddfunctionr args) keysr.fact_cnfmappingretkeyvalueimpliedrejectedexprpreds r'generate_known_facts_dictr_sBd|H x0G Cmmo 0 U%5 ,D$ 01 DMM*D#&yy| T]]+  , %h/CLL 0 Jr&cptjtjtjtjtj tj h}g}tjjD]:}|jdrtt|}||vr*|j|<|S)z Return every unary predicates registered to ``Q``. This function is used to generate the keys for ``generate_known_facts_dict``. __) reqnegtltgele __class____dict__ startswithgetattrappend)excluderesultattrr^s r'get_known_facts_keysrpsttQTT144qttQTT2G F $$ ??4 q$ 7?  d  Mr&ci}|D]Z}|h||<|D]M}||k7s t|||r||j|t|||s9||j|O\|Sr)ask_full_inferencerR)known_facts_keysknown_facts_cnfrWrY other_keys r'rNrNsG1u ) 1IC%ioFCL$$Y/%yj#GCL$$iZ0  11 Nr&c rtt|||sytt||t|syy)z9 Method for inferring properties about objects. FTN)r rr ) proposition assumptionsrts r'rrrrs4 s?KE F s?K[9IJ K r&r)__doc__sympy.assumptions.askrsympy.assumptions.assumersympy.core.cachersympy.core.symbolrsympy.logic.boolalgrrr r r r sympy.logic.inferencer r(r/r+r,r_rprNrrr%r&r'rs$5$$-  &  4 7 7t - -b/d  ,  r&