1 puan yazan GN⁺ 2024-03-01 | 1 yorum | WhatsApp'ta paylaş
  • Formül manipülasyonu ve hesaplamalarını doğrudan Python kodu içinde ele almak istediğinizde, SymPy hem etkileşimli kullanımı hem de uygulamalara gömülü kullanımı destekler
  • BSD lisansıyla sunulan özgür bir yazılımdır; hem uygulama dili hem de kullanıcıya dönük dil Python’dır
  • Tek bağımlılığı, keyfi duyarlıkta kayan nokta işlemleri için saf Python kütüphanesi mpmath olduğundan kurulum ve kullanım yükü düşüktür
  • Cadabra, ChemPy, devito, EinsteinPy, SageMath, Spyder, PyTorch TorchInductor gibi birçok bilim, matematik ve geliştirme aracı SymPy kullanır
  • Kullanım alanları tensör cebiri, kimya, genel görelilik, devre analizi, optimizasyon, dinamikler, kod üretimi, dinamik shape ve stride desteğine kadar genişler

Python tabanlı sembolik matematik kütüphanesi

  • SymPy, Python’da sembolik matematikle çalışmak için bir kütüphanedir
  • BSD lisansıyla sunulur ve özgürce kullanılabilir
  • Tamamı Python ile yazılmıştır; SymPy’de kullanılan dil de Python’dır
  • Tek bağımlılığı mpmath’dır
    • mpmath, keyfi duyarlıkta kayan nokta işlemleri için saf Python kütüphanesidir
  • Etkileşimli bir araç olarak kullanılabilir; başka uygulamalara gömülebilir veya kullanıcı tanımlı fonksiyonlarla genişletilebilir
  • Özellik listesine SymPy's features üzerinden bakılabilir

SymPy’yi benimseyen projeler

  • Yayımlanan liste, SymPy kullanan projelerin eksik bir listesidir; kullanan projeler posta listesi üzerinden ekleme talep edebilir
  • Bilimsel ve matematiksel hesaplama alanı

    • Cadabra: Tensör cebiri ve kuantum alan teorisi sistemlerinde skaler cebir için SymPy kullanır
    • ChemPy: Python ile yazılmış bir kimya paketidir
    • EinsteinPy: Sembolik ve sayısal genel görelilik için bir Python paketidir
    • OctSymPy: SymPy kullanan Octave için sembolik pakettir
    • PyDy: Python’da çok cisimli dinamikleri ele alır
    • QMCPACK: C++ tabanlı Quantum Monte Carlo projesidir; birim testleri için referans değer üretiminde ve bazı kod üretimlerinde SymPy kullanır
    • SageMath: SymPy’yi de içeren açık kaynaklı bir matematik sistemidir
  • Geliştirme araçları ve kod üretimi

    • devito: Yüksek performanslı stencil hesaplamaları için sembolik DSL ve JIT derleyicisidir
    • Optlang: Matematiksel optimizasyon problemlerini çözen bir Python paketidir
    • PyTorch TorchInductor: Dinamik shape ve stride desteği için SymPy kullanır
    • Spyder: Scientific Python geliştirme ortamıdır; IPython Console’da tam SymPy desteği etkinleştirilebilir
    • symjit: SymPy ifadeleri için hafif bir JIT derleyicisidir
    • yt: Hacimsel veri analizi ve görselleştirmesi için bir Python paketidir; yt’nin birim sistemi unyt SymPy kullanır

1 yorum

 
GN⁺ 2024-03-01
Hacker News yorumları
  • Robotikte, 3B dönüşümlerin sonucu olan büyük vektörler kullanılıyor ve birçok durum değişkenine göre türev olan Jacobian’ı hesaplamak sık gerektiğinden ifadeler hızla karmaşıklaşıyor.
    SymPy ile büyük vektörleri deklaratif biçimde oluşturuyor, Jacobian’ı hesaplıyor, ardından sonucu doğrudan projede kullanılabilecek C kodu olarak dışa aktarıyorum.
    Örneğin robot konumu ve sensör konumu veri kümeniz varsa, robot merkezine göre sensör konumunu tahmin etmek için aşırı kısıtlı bir sistemi gradyan inişiyle çözebilirsiniz; bunun için gereken artık fonksiyonu ve Jacobian SymPy ile hesaplanabilir.

    • Benzer şekilde, yörünge mekaniği hesapları için gereken karmaşık türevleri işlemek üzere SymPy kullanmıştım.
      Önce denklemleri yazıp, sıkıcı matematiği SymPy’ye bıraktım, sonra çıktıyı C koduna dönüştürdüm.
      SymPy projesinin gerçek ürün kodunda pek görünmemesinin nedeni de muhtemelen bu tür ara hesaplamalarda kullanıldıktan sonra yalnızca sonucun ürün koduna girmesi ve sembolik hesaplama kodunun atılması olabilir.
    • Şu kütüphane ilginizi çekebilir: https://github.com/symforce-org/symforce
    • Eskiden insanların bu işleri Maple ile yaptığını görürdüm; artık açık kaynak seçeneklerin olması sevindirici.
      Robotik ve bilgisayarlı görü tarafında bu tür işleri yapan, SymPy kullanan güzel bir kütüphane var: symforce: https://github.com/symforce-org/symforce
    • Bugün tam da bu işi bir bez simülatörü yaparken yaptım.
      Diğer düğümleri sabit tutarak her düğüm konumunu sırayla bir Newton adımıyla güncellemeyi denemek istedim.
    • jax’i değerlendirip değerlendirmediğinizi merak ediyorum.
      Python’dan çıkmadan Jacobian’ları verimli biçimde hesaplayabiliyor, isterseniz GPU da kullanabiliyorsunuz; API’si de NumPy ile uyumlu.
  • SymPy gerçekten harika ve yıllardır bir eğitim aracı olarak kullanıyorum.
    Mathematica veya Maple gibi seçeneklere kıyasla en iyi tercih olduğunu düşünmemin nedeni, API fonksiyonlarının öğrencilerin matematik öğrenirken kullandığı fiillerle birebir örtüşmesi: solve, expand, factor gibi.
    Başlamak isteyenler için kısa bir eğitim: https://minireference.com/static/tutorials/sympy_tutorial.pd...
    Çalıştırılabilir notebook biçimi de var: https://colab.research.google.com/github/minireference/sympy... salt okunur: http://nbviewer.ipython.org/github/minireference/sympytut_no...
    Kurulum yapmadan denemek isterseniz SymPy live shell de var: https://live.sympy.org/ WebAssembly sayesinde Python ve SymPy tarayıcıda çalışıyor.

    • SymPy’nin en büyük dezavantajı, tüm sembolleri önceden tanımlama gerekliliği.
      Kullanıcı tarafından girilen ifadeleri işlerken hangi değişkenlerin kullanıldığını bulmak için ifadeyi kendiniz ayrıştırmanız ya da kullanıcıdan sembolleri elle sağlamasını istemeniz gerekiyor; bu da işi zorlaştırıyor.
  • Sembolik matematik lisans eğitiminde ciddi biçimde eksik ele alınıyor; karşılaşsanız bile çoğunlukla Mathematica veya MATLAB gibi tescilli yazılımlara bağlı kalıyordu.
    Kâğıt kalemle düşünme biçimini kusurlu biçimde genişleten bir araç olarak öğrenildi ve daha ileri konuları kaynak kodla ele aldığınızda, soyutlama derinleştikçe işler kırılganlaşıyor.
    Örneğin çok sayıda tensör hesabı gerektiren matematik/mühendislik alanlarında çalışıyorum; çoğunlukla Maxima kullanıyorum ama ilgili paketler sınırlı ve zahmetli: https://arxiv.org/pdf/cs/0503073.pdf
    Daha karmaşık hesaplar için artık SymPy kullanıyorum; bunun nedeni sembolik işlemenin kendisinin daha iyi olması değil, Python’ın zaten sahip olduğu soyutlamalar.
    Bir gün Norvig’in Principles’ını okuyup Maxima’yı ihtiyaçlarıma göre değiştirebilirim; ayrıca Maxima kaynak kodu ya da tensör hesabı uygulamaları, sembolik tensör/geometrik cebir üzerine daha iyi başvuru kaynakları varsa bilmek isterim.

    • Maple gibi görüldüğü gibi dizilmiş girdi destekleyen, Maple dışında bir uygulama olup olmadığını merak ediyorum.
      Bildiğim kadarıyla Wolfram/Mathematica, LaTeX, SymPy, Jupyter, Sage gibi araçların hepsi matematiksel ifadeleri yazarken ve girerken daktilo tarzı metne dayanıyor.
      Sırf bu nedenle Maple bana tek anlamlı seçenek gibi gelmişti; çünkü elle yazılan biçime çok yakın şekilde girdi yapabiliyorsunuz. Bu özelliğin daha yaygın olmamasını anlayamıyorum.
      Bunun başkaları için de bir engel olup olmadığını merak ediyorum.
    • Yakın bir arkadaşım, Coherence’ta Mathematica Notebook ile optik ve ısıl hesaplamalar yapan prodüksiyon notebook’ları oluşturduğunu sık sık anlatırdı.
      Onun için gerçekten iş gören, ağır işçi gibi bir araçtı.
      Çok uzun zaman önce Derive5 ile oynamıştım; o dönemde en ucuz bilgisayar cebiri sistemiydi ve tüm boşlukları kaldırmanız, parantez dengesine sürekli dikkat etmeniz gereken tuhaf, tek satırlık bir programlama diliyle programlamayı öğrenmiştim.
      Eski dosyaları bulup GitHub’a koymam gerekiyor; ayrıca o işlemleri daha modern bir bilgisayar cebiri sisteminde yeniden uygulayıp (0,1) noktası yakınındaki eşit yay uzunluklu üstel fonksiyon ailesi eğrilerini daha sık aralıklarla çizmek istemiştim.
  • SymPy ile Mathematica arasında bir benchmark var: https://www.12000.org/my_notes/CAS_integration_tests/reports...
    Sonuçlara bakınca Mathematica 1.523 problemi çözememiş, SymPy ise 48.529 problemi çözememiş
    Hâlâ yetişmesi gereken epey alan var

    • SymPy açık kaynak, Mathematica ise değil
      Üstelik SymPy’ye bağımlı olan SageMath karşılaştırma için daha yakın bir ürün ve o da açık kaynak
    • İlginç olsa da, bahsedilen web sitesi yalnızca integral konusunu ele alıyor
    • Bu kadar büyük farkın neden olduğunu merak ediyorum
      Örneğin SymPy’nin yaklaşımında temel bir kusur olup olmadığını bilmek isterim
  • SymPy: https://en.wikipedia.org/wiki/SymPy
    “Logaritmalar nasıl öğretilmeli?” Python ve SymPy kullanımı: https://news.ycombinator.com/item?id=28518565#28519356
    “SymPy - sembolik matematik için bir Python kütüphanesi” (2020): https://news.ycombinator.com/item?id=23767513
    Matlab kullanıcıları için NumPy: https://numpy.org/doc/stable/user/numpy-for-matlab-users.htm...
    SymPy vs Matlab: https://github.com/sympy/sympy/wiki/SymPy-vs.-Matlab

  • https://github.com/idanpa/calcpy ile birlikte SymPy’yi hesap makinesi gibi kullanıyorum

    • Tam aradığım forma benziyor
      Varsayılan SymPy’nin kullanımını biraz zahmetli bulmuştum
  • SymPy, Jupyter içinde çok iyi çalışıyor
    Kendi hazırladığım SymPy demo notebook’ları
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/sympy... çok değişkenli ikinci dereceden ifadeleri çözme ve matematiksel ifadeleri güzel biçimde yazdırma
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/tiny-... hızlı çizilen NumPy/pylab grafik cheat sheet’i, SymPy örnekleri dahil
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/secan... mevcut Python fonksiyonlarını SymPy ile sembolik olarak türevleyip kapalı formda minimum bulma örneği
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/max-p... SymPy ile temel devre analizi ve temel kalkülüs
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/latex... MathJax biçimlendirmesi ve SymPy ile çeşitli denemeler; HAKMEM’in Minsky çember algoritmasının analizi dahil

  • 10 yıl önce genel görelilik ile ilgilenirken Einstein alan denklemlerinin sembolik hesaplamalarını yapan basit bir program yazmak istemiştim
    Metrikten başlayıp afin bağlantıyı, Ricci tensörünü vb. hesaplayacak türden bir şeydi; Python’a alışık olduğum için SymPy iyi bir seçenek gibi görünüyordu ama zordu ve gerçekten çalışır hâle getiremedim
    O sırada ilk kez kullandığım Mathematica ile bunu birkaç saat içinde başardım; sonra genişletip daha sonra yayımladığım kara delik makalesindeki birçok hesaplamada kullandım
    Şimdi baktığımda, bu alanda SymPy geliştirmesinin epey ilerlediğini ve onun üzerinde iyi kütüphaneler oluştuğunu görüyorum: https://docs.einsteinpy.org, https://github.com/spacetimeengineer/spacetimeengine
    Artık Schwarzschild metriğini ele alan bir Jupyter notebook örneği de var: https://github.com/sympy/sympy/blob/master/examples/intermed...

    • Sage Manifolds’a bakmak iyi olabilir: https://sagemanifolds.obspm.fr/
      SageMath üzerine yapılmış, ama bildiğim kadarıyla hesaplama motoru olarak SymPy de kullanılabiliyor
  • Sayısal hesaplama yapan bir “fizikçi” için SymPy epey kurtarıcı gibiydi
    Daha gelişmiş modelleri de önce prototipleyip sonra C++ ile optimize etmek için uygun
    Mathematica’yı çok fazla kullanmadım, ama hâlâ SymPy’den daha güçlü sembolik işlem yeteneklerine sahip ya da daha az uğraştırıyor gibi geliyor
    Mathematica deneyimi daha fazla olan biri gerçek farkı net biçimde açıklasa iyi olurdu

    • Stephen Wolfram’ı bir kenara bıraksak bile Mathematica, bilgisayar cebir sistemi olarak çoğu alternatiften hâlâ çok daha ileride
      Maple bazı integrallerde iyi
      Dezavantajı, bu dillerin genel amaçlı dil olarak pek uygun olmaması; yapılması gereken cebirsel manipülasyonlar o kadar karmaşık değilse “gerçek” bir dilde çalışmak istiyorsunuz
      Python en iyisi değil ama yeterince kullanılabilir; geniş genel amaçlı ekosisteminin avantajından yararlanan bir başka örnek
  • SymPy yapması gerekeni yapıyor
    Genelde SageMath kombinatorik kütüphanesinin içinde kullanıyorum; bunun hâlâ standart yol olup olmadığını, yoksa SymPy’nin artık tek başına kullanılacak kadar gelişip gelişmediğini merak ediyorum

    • SageMath havalı görünüyor, ama her birinin kendi söz dizimi olan ve işlevleri örtüşen birden fazla mevcut aracı bir araya getirmesi biraz göz korkutuyor
      İç tutarlılığı eksik olduğu için çalışma biçimlerinin tutarsız olabileceğini düşündürüyor
      Pratikte bunun nasıl hissettirdiğini merak ediyorum