Mathics 7.0 – Mathematica için açık kaynaklı alternatif
(github.com/Mathics3)- Mathics Core 7.0.0, Mathematica uyumlu açık kaynaklı hesaplama sisteminin çekirdek motorunu düzenliyor ve gelecekte yerleşik işlevlerin tembel yüklenmesi için temel hazırlıyor
- Yeni yerleşik işlevler olarak
ComplexExpand,ConjugateTranspose,LeviCivitaTensorve benzeri; formüller, lineer cebir ve reel sayı denetimiyle ilgili özellikler ekleniyor Range[],DirectedInfinity,Indeterminate,Graphicshata gösterimi,$CharacterEncodingdeğişikliği gibi mevcut uyumluluk açıkları gideriliyor- Yerleşik işlev yükleme süreci, örtük import bağımlılığından çıkıp
import_and_load_builtins()işlevinin açıkça çağrıldığı bir yapıya geçiyor - Python 3.11 ve SymPy 1.12 desteği eklenirken,
Quantity,SparseArray,Derivative,Exit[],BaseFormile ilgili düzeltmeler de pakete dahil ediliyor
Sürüm yönü ve iç düzenleme
- Mathics Core 7.0.0, ileride yerleşik işlevlerin tembel yüklenmesini desteklemek için iç yapıda düzenlemeler içeriyor
- Python kodu ve stil modernize edildi, tür açıklamaları artırıldı ve çeşitli yazım hataları düzeltildi
- SymPy ve Python bağımlılıkları daha güncel sürümlere yükseltildi
- Başlangıç yükleme hızını artırmak ve ilk bellek kullanımını azaltmak için de çalışmalar yapıldı
Yeni yerleşik işlevler
- Bu sürümde eklenen yerleşik işlevler şunlar:
$MaxLengthIntStringConversionElementsComplexExpandConjugateTransposeLeviCivitaTensorRealAbs,RealSignRealValuedNumberQ
Belgeler ve test üretiminde iyileştirmeler
- PDF belgelerdeki biçim sorunları çeşitli yerlerde düzeltildi
- Bölüm ve alt bölüm içindekilerinde bölüm numaraları arasındaki boşluk artırıldı
- Yerleşik işlev tanımlarının çevresindeki boşluk genişletildi
- Belge genelindeki yazım hataları temizlendi
- doctest çalıştırma ve LaTeX belge üretim kodu gözden geçirildi ve refaktör edildi
- Yerleşik işlevlerde artımlı güncellemeye izin veriliyor
- Yinelenen kodu azaltacak şekilde düzenlendi
- “Expression Structure” bölümüne Section Head-Related Operations adlı yeni bir kısım eklendi
- PDF başlığı Mathics yerine Mathics3 olarak değiştirildi ve tanıtım metni güncellendi
- Eski biçimdeki görünmeyen ve eğitim amaçlı olmayan doctest'ler pytest'e taşındı
Uyumluluk ve kullanıcıya görünen davranış değişiklikleri
*Plot, değerlendirme sırasında mesaj göstermiyorRange[], negatifdideğerini işliyor- İlgili PR: #951
DirectedInfinityveIndeterminatedesteği iyileştirildiGraphicsveGraphics3D, hatalı primitive veya directive içerdiğinde pembe arka planla gösteriliyor- Mathics-Django arayüzünde araç ipucu hata mesajı da birlikte gösteriliyor
$CharacterEncodingdeğeri oturum içinde değiştirilebiliyor
İç uygulama ve API değişiklikleri
AbsveSigniçineval_abs,eval_signayrıştırıldı vemathics.eval.arithmeticiçine eklendi- Dizelerde izin verilen en yüksek sayı basamak sayısı 7000 olarak ayarlandı
- Python'ın otomatik ayarlamadığı pyston gibi ortamlarda
MATHICS_MAX_STR_DIGITSortam değişkeniyle ayarlanabiliyor
- Python'ın otomatik ayarlamadığı pyston gibi ortamlarda
- Reel sayı karşılaştırma uygulaması iç tarafta
RealSignuygulamasına alındı - Python 3.11'de
$MaxLengthIntStringConversion, büyük tamsayılarla dizeler arasındaki literal dönüşümün en büyük boyutunu denetliyor - Yerleşik kod yükleme, örtük yöntem yerine açık yönerge modeline geçti
- Bu değişiklik, gelecekte yerleşik işlevler için tembel yükleme veya GNU Emacs autoload benzeri bir “autoload” mekanizmasını mümkün kılmak için yapıldı
- Yeni API ile
import_and_load_builtins()işlevi açıkça çağrılmalı- Önceden, yerleşik işlevlerin yüklenme zamanı import sırasına bağlı olarak örtük ve belirsizdi
mpmathiçine LRU önbelleği eklendi
Quantity, SparseArray ve diğer hata düzeltmeleri
Definitions, pickle ile uyumlu hale getirildiQuantityifadeleri için destek iyileştirildi- Dönüştürme, biçimlendirme ve aritmetik işlemler buna dahil
GraphicsveGraphics3DiçindekiBackgroundseçeneği yeniden çalışır hale getirildiStringiçeren ifadelerdeki sayısal karşılaştırma sorunu düzeltildi- İlgili sorun: #797
InfinityiçerenSwitch[]sorunu düzeltildi- İlgili sorun: #956
SparseArrayiçinOuter[]sorunu düzeltildi- İlgili sorun: #939
ArrayQ[],SparseArrayyapısını algılıyor- İlgili PR: #947
BoxExpressionErroristisnası ele alındıDerivativeiçinTrue,False,List[]değerlendirme davranışı düzeltildiCombinatoricapaketiyle ilgili düzeltmeler eklendi- Çalışmayan
Exit[]düzeltildi BaseForm,$OutputFormsiçine eklendi
Paket destek sürümleri
- Python 3.11 destekleniyor
- SymPy 1.12 destekleniyor
1 yorum
Hacker News yorumları
Bu projeyi birkaç yıldır takip ediyorum; istikrarlı biçimde iyi gelişiyor. Açık kaynak bilgisayarlı cebir sistemleri ile ilgileniyorsanız GNU Octave veya Maxima gibi klasik seçeneklerden SAGEmath, Symbolics.jl, sympy gibi modern seçeneklere kadar daha olgun pek çok çözüm var.
GiNaC gibi sembolik hesaplama kütüphanelerinden SAGEmath gibi pilleri dahil IDE’lere kadar geniş bir yelpaze var ve toplulukları da aktif. Örneğin SAGEmath’in web not defteri arayüzüne fiilen öncülük ettiğini ve bunun bugün çeşitli biçimlerde Jupyter’a uzandığını düşünüyorum.
Kişisel olarak Mathematica’nın (MMA) Lisp’i andıran tarzını seviyorum; ancak MMA’yı güçlü kılan şey yalnızca çekirdeği değil, devasa kütüphanesi. Sembolik integrasyon, 2D/3D grafikler, sonlu elemanlar yöntemi gibi temel konularda sektörün en iyi düzeyinde çözümleri var; biyoinformatik gibi pek çok özel alan da mevcut.
Mathics çekirdeği kopyalama konusunda iyi iş çıkarmış gibi görünüyor, ama doğal olarak o kütüphanelerin tamamı eksik. Matlab ve çeşitli “toolkit”leri bir numpy klonuyla karşılaştırırken de aynı mantık geçerli; ancak Python akımı artık Matlab’da çalışmayan pek çok yeni kodu numpy dünyasına taşımış durumda.
Yaklaşık 5 yıl önce ilk çıktığında “sembolik değerlendirme motorunu gerçekten iyi yapmışlar, bakalım şimdi nereye gidecek” diye düşünmüştüm. İleride ne zaman yeni bir projeye başlama isteği duysam, eski bir projeyi sürekli iyileştirmeye devam eden bu örneği hatırlamalıyım.
Birbirlerini tamamlıyorlar ve çoğu zaman birlikte de kullanılıyorlar. Mathematica ve Mathics iki paradigmayı da destekliyor gibi görünüyor, ama aynı şey değiller.
sympy tabanlı gibi görünüyor: https://www.sympy.org/en/index.html
Yalnızca kişisel kullanım istiyorsanız Wolfram Cloud ücretsiz kullanılabiliyor. Dosyalar yaklaşık 30 gün sonra siliniyor gibi. Wolfram Engine de Mathematica’yı komut satırından ücretsiz kullanmanın bir yolu. Eh, hiç yoktan iyidir.
Mathics için daha basit bir tanıtım burada:
https://mathics.org/
Nedense bunun SageMath’e entegre edileceğini düşünüyorum :D
SageMath’in en büyük Cython projelerinden biri olmasının nedenlerinden biri de Cython’ın Sage’de hızlı C/C++ kütüphanelerinden yararlanmayı mümkün kılması.
Mathics şu anda performansı ciddi biçimde dert ediyor gibi görünmüyor. Örneğin Mathics’te
"AbsoluteTiming[Sum[i, {i, 1, 100000}]]"gibi küçük bir mikrobenchmark çalıştırabilir veya yol haritasını okuyabilirsiniz.Elbette bunda bir sorun yok. Mathematica programlama dilinde performansın önemli olmadığı pek çok ilginç uygulama var; örneğin bazı sembolik işlemleri ifadeyle birlikte dikkatle adım adım izlemek gibi.
Ancak Sage geliştiricilerinin başlıca motivasyonu en ileri düzey araştırma matematiği ve orada performans neredeyse her zaman çok önemli. Sage’in yalnızca sympy kullanmayıp benzer pek çok işlevi kendisinin uygulamasının nedeni de performans. sympy kurulum kolaylığını önceliklendirdiği için görece yavaş olabiliyor; SageMath’te ise kurulum kolaylığı hiç öncelik değil.
SageMath’in misyonu Mathematica, Matlab, Magma ve Maple’a uygulanabilir bir alternatif olmaktı; ama bu bir klon olacağı anlamına gelmiyordu. Örneğin Mathematica kodunu doğrudan çalıştırmak değil, normalde bu kapalı kaynak programlarla yapılacak araştırmaları açık kaynak matematik yazılımları üzerinde destekleyebilen bir alternatif olmak anlamına geliyordu.
Yazılım mühendisleri yazılım maliyeti ödememek için her şeyi yapar.
Mathematica, Raspberry Pi üzerinde ücretsiz sunuluyor[1] ve çoğu üniversitenin tüm kampüsü kapsayan lisansı var. “Home & Hobby” lisansı da o kadar pahalı değil: abonelik yılda 195 dolar, kalıcı lisans 390 dolar ve yenileme yalnızca 175 dolar[2]
Açıkçası tinkering ile ilgilenip de bu fiyatı karşılayamayan biri için crack’li sürüm bulmak ya da kurmak da zor değil
Kişisel olarak Mathematica’yı, daha doğrusu “Wolfram Language”i oldukça seviyorum ve hobi lisansının ücretini ödemekten memnunum. Sadece parasının karşılığını verdiğini düşünmekle kalmıyorum; matematik yazılımlarını desteklemeyi para harcamaya değer “iyi bir amaç” olarak görüyorum
Üstelik amatör fotoğrafçıların Adobe CC gibi araçlara, birçok programcının tüm araçlarına harcadığından daha fazla para harcaması yaygın; bunun nedenini anlamıyorum. Çeşitli abonelik hizmetlerine ayda 20–40 dolar ya da daha fazlasını harcarken 200–400 dolarlık lisans ücreti konusunda tereddüt etmek de aynı şekilde
Gerçi benim durumumda, bilgisayarımda kurulu neredeyse tüm programlardan daha fazla zamanı Mathematica’da geçiriyorum
Yine de açık kaynak matematik yazılımları için hâlâ önemli bir yer var. Mathematica genel olarak kapsamlı olsa da ileri matematikte hâlâ büyük eksikleri var
Özellikle daha “niş” matematik alanlarını da karşılayacağına inanmayı zorlaştıran iki neden var. Birincisi, daha ileri ya da anlaşılması güç alanlara gidildikçe yatırımın geri dönüşü hızla düşüyor. İkincisi, Wolfram Language’da zaten 6000’den fazla yerleşik fonksiyon var; grup teorisi gibi alanları kapsamlı desteklemek için yüzlercesini daha eklemek pek mantıklı değil
Paketlerle desteklenebilir ama çekirdekte birinci sınıf destek almadığı için performans maliyeti olur; kullanıcıların özellikle arayıp kullanması gerektiğinden kullanılabilirlik maliyeti de doğar
Bu yüzden GAP, M2, PARI/GP gibi açık kaynak yazılımlar Wolfram Language’ın boşluklarını doldurmada önemli bir rol oynuyor. Ben Mathematica lisansına harcadığım kadar FOSS projelerine de katkıda bulunuyorum. Maddi katkının kolay olmadığı projelerde ise zaman ve becerilerimi harcayarak iyileştirmeye çalışıyorum
Açıkçası Mathematica’nın işlevlerini kopyalamaya çalışan projelere pek ilgi duymuyorum. Elbette bu projeler de geliştirilmeye ve iyileştirilmeye devam edecek; en azından Wolfram Research’ün temel işlevleri sürekli geliştirmesi için baskı oluşturabilirler. Ama böyle bir projenin bugünkü Mathematica/WL’ye yetişmesi muhtemelen 10–20 yıl alır gibi görünüyor
[1]: https://www.wolfram.com/raspberry-pi/
[2]: https://www.wolfram.com/mathematica/pricing/home-hobby/
Entegre notebook’lar, fareyle üzerine gelince çıkan belgeler ve şaşırtıcı biçimde binlerce fonksiyon içeren tek bir dev isim alanı bir şekilde birleşip, kullandığım hiçbir şeye benzemeyen basit ve üretken bir deneyim sunuyor. Normalde “ağır” IDE’leri seven biri olmamama rağmen böyle
Mathematica’da can sıkan şeylerden biri, tüm fonksiyonların aynı isim alanına tıkıştırılmış olması ve farklı parametrelendirme seçeneklerine göre overload olmaması
Aklıma gelen büyük tekrar, olsa olsa çeşitli Plot fonksiyonları