Hodi se dodat, ze sympy umi konvertovat vyrazy na jejich odpovidajici reprezentaci v kodu ruznych programovacich jazyku jako treba C, C++, Fortran, Rust, Latex.
sp.printing_ccode(x**2 - y**2) # pow(x, 2) - pow(y, 2)
Pri praci s polynomy a funkcemi expand a factor je dobre si uvedomit, ze operator == neprovadi porovnani na symbolicke urovni, ale na urovni konkretni "instance" vyrazu.
x**2 - y**2 == (x + y)*(x - y) # False
V clanku se pise:
"To je důležité, protože v Pythonu je možné (...) přetížit všechny operátory a umožnit tak zápis výrazů, které již nebudou přímo vyhodnoceny interpretrem (...), ale knihovnou Sympy."
Tohle nemuze byt dobre. Operatory vzdycky vyhodnocuje interpret. A dela to tak, ze se podiva na to, jak je dany operator definovany pro konkretni operandy. Napr. pro "+" se podiva na implementaci funkce __add__ pro konkretni operandy. Jestli jsou operandy cisla, stringy nebo dodane nejakou knihovnou je irelevantni.
no ono je to este trocha zlozitejsie, int je ako kazdy iny typ v pythone regulerny objekt. Cize ak napisem a+b tak intretpret tomu rozumie ako a.__add__(b), pripadne ako b.__radd__(a). Cize interpret za vyhodnotenie zodpovedny nie je, za to je zodpovedny konkretny objekt implementujuci dany typ.
24. 5. 2022, 23:31 editováno autorem komentáře
jj je to slozitejsi. Maji tam nekdy "rychlou" cestu bez volani __add__, treba tady https://github.com/python/cpython/blob/3fd86100022103f41ada043f5bb5a7201e80ac27/Python/ceval.c#L2155
Ale popravde - ta evaluace se nejak znecitelnila, pred par lety zrovna ceval.c byl dost dobre citelny zdrojak, ted je tam hodne vyjimek a spec. casu :)