Bio je to gaaadan (i samonametnuti) usiljeni marš na početku ove godine, sve dok početkom ožujka konačno nisam objavio release 1.0 Minimal Math Librarya (MML) ❤️💪. Github history govori sve.

Objavljena verzija 1.0 nije bila ni blizu gotova u scopeu koji sam planirao i gomila stvari je ostala nedovršena 🙄, ali iako se taj kôd ni u kojem slučaju ne može smatrati kompletnim, niti do kraja korektnim (ie. ima sigurno još bugova), a niti do kraja testiranim (što mi je bitan fokus), ipak je zadovoljio moje kriterije za “početnu verziju”.
To je bilo to 💪 … i nije izgledalo loše 😎.

Proljeće je došlo, vrt je čekao i tenzori su pali u drugi plan.
Uz to, nakon tog silnog efforta, počela me pingati misao: “OK Zvone, sve si to lijepo napravio, organizirao, imaš konačno pouzdanu Vector, Matrix, Polynom, ODESystem klasu (i mnoge druge), i fine algoritme (uglavnom pokupljene iz Numerical Recipes in C++) … i što sad sa svim tim nakucanim C++ kodom?” 🤔
Kao što je licenca MML repozitorija kristalno jasno govorila “strictly for non-commercial use, due to restrictive licensing for Numerical Recipes algorithms”.
Ali, iako su ti algoritmi suština svakog numeričkog librarya, dok pričamo o implementaciji ovih bazičnih algoritama (LU dekompozicija, integracija ODE sistema, numeričko računanje integrala), ti algoritmi su “dimme-a-dozen” danas na internetu … evo, svaki ima u Boostu s MIT Licensom. Naravno, ima i onih drugih algoritama, recimo SVD dekompozicija, ili računanje svojstvenih vrijednosti za realnu ne-simetričnu matricu, koji nisu ni blizu trivijalni, i za koje je meni bilo eeeekstra zgodno samo ih pokupiti iz Numerical Recipesa 😎.
Međutim, 80% kôda, kad se uračuna najprije implementacija raznoraznih klasa za reprezentaciju matematičkih objekata, pa demo primjeri i na kraju testovi, je 1-kroz-1 moje. Ja ga iskucao i napisao.
I to sam ga morao iskucati i više nego što sam očekivao! Jer, na primjer, naći test matricu 50 x 50 s točnim svojstvenim vrijednostima je ispalo začuđujuće teško!? Je, za sparse matrice (a koje su 99,9% primjene u konkretnim realnim problemima) imaš test-bedova koliko hoćeš, ali nakon pola sata Google pretrage u potrazi za jednostavnim nizom od 50 x 50 brojeva, i još 50 (sigurno kompleksnih) eigenvrijednosti, ja sam odustao i napravio svoj test bed. Potpuno primitivan, s trivijalno generiranim rasponom slučajnih vrijednosti, ali je tu … i možeš ga dobiti u svom C++ programu u jednoj liniji kôda.
U ovih 30 godina bavljenja C++om sam Vector i Matrix klasu implementirao kao neka temp rješenja u svojim projektima bar deset puta 🤔, pa sam rekao sebi, možda je vrijeme da to napraviš jednom za svagda “kako triba”?
I u svom tom silnom promišljanju, kristalizirao mi se smjer akcije – Minimal Math Library ide u tri forka 💪💪💪. Tri Github repozitorija, s tri različite licence i tri različite ciljane publike, odnosno skupine korisnika.
Prvi je Numerical Recipes on Steroids, odnosno NRS (https://github.com/zvanjak/NRS) , koji je doslovna replika već postojećeg 1.0 MML-a (bar za sada), koji ima sve implementirane Numerical Recipes algoritme, i koji je stoga strogo za “osobnu, edukacijsku i istraživačku” upotrebu. Unutra je sav moj kod koji sam iskucao, sve moguće klase od Vectora do FunctionSpace (napola dovršene), i jedno 50ak algoritama iskorištenih iz Numerical Recipesa. Za potrebe mojih numeričkih simulacija i istraživanja u fizici, to će biti primarni repozitorij koji ću koristiti.
Preostala dva forka su manje više isto što i NRS … ali bez Numerical Recipes algoritama 😎🤔.
Ništa, nula, zero, nâda … samo moj kôd 💪💪💪💪💪💪💪.
Što znači da nema ni LU dekompozicije, ni SVD-a, ni fency-šmensi ODE solver rutina, ali umjesto toga ima elementarni Gauss-Jordan i Runge-Kutta 💪🤣. Ima i osnovni trapezoidalni integrator, i gomilu rutina za numeričko deriviranje čega god ti padne napamet. I tenzore ❤️, s podrškom za različite koordinatne sisteme, uključujući i njihove (numeričke) transformacije.
“Crni Zvone, pa zašto si iz biblioteke izbacio sve te NR algoritme, za koje si se dobro namučio da ih prilagodiš i svedeš u okvir organizacije i strukture MML-a?”
Jednostavno – zato da mogu s tim kôdom raditi što hoću!
“Ahaaaa, znači možeš ga onda objaviti i pod MIT License? 😎😎😎”.
E, kako si malac 🤣🤣🤣.
DALEKO OD TOGA da mislim da bi itko ovaj moj kôd išao iskoristiti, čitaj ukrasti, u nekom komercijalnom produktu na kojem bi zaradio pare, a što bi mu MIT License omogućila. Ovakvih pokušaja kreiranja C++ konzistentnog skupa matematičkih klasa/objekata i algoritama koji nad njima operiraju je pun internet!
Nije moj ništa previše poseban, iako treba reći i da za pregledati Github repozitorije koji imaju cpp i tensor u svojim tagovima, a da nisu vezani uz TensorFlow (koji naravno s pravim tenzorima nikakve veze nema 🤣🤣🤣), vam treba par minuta (ie. ima ih samo nekoliko). Doduše, istina je i da sam s tenzorima tek na početku, modelirani jesu, transformacije (što su njihova suština) modelirane jesu … ali maaalaaac, daj primjer!? E, za to će trebati izračunati nešto s elektromagnetskim tenzorom … a ima još do toga 🙄.
Uglavnom, MIT License mi je odmah u startu bila no-go!
“A moj Zvone, sve je jasno, znači Open Source!” 💪.
Da … ali ipak ne samo to 😎.
Open Source licenci ima raznih, s različitom razinom restriktivnosti korištenja pod tim licencama objavljenog koda, i u tom smislu mene je za Open Source zanimala najjača, dakle najrestriktivnija od svih, GPL-3.0 !!!
Ništa Apache, ništa BSD … open source all the way! Ništa commercial, ništa pare, samo i isključivo originalna Stallmanova vizija o dijeljenom i potpuno dostupnom izvornom softverskom kôdu.
Pa je tako nastao drugi fork MML-a, OpenSourceMML (https://github.com/zvanjak/OpenSourceMML) ! Što god hoćeš raditi u open source projektima, samo uzmi kôd i nosi! Korištenje GPL-3.0 licence ima još jednu prednost – biti će relativno jednostavno proširiti MML kôd raznim algoritama iz odlične GSL – GNU Scientific Library. Nema kakvog algoritma tamo nema implementiranog i vjerujem da će OpenSourceMML u stvari po funkcionalnosti prilično brzo prestići Numerical Recipes on Steroids verziju 💪 (ovisno koliko mi se bude dalo 🤣).
Ipak, ograničiti MML na korištenje ISKLJUČIVO u OpenSource projektima, znači sa “zero commercial viability” mi se učinilo malo preradikalno 🙄.
I tako je nastao i treći fork, moj “osobni” MML (https://github.com/zvanjak/MML), u kojem će biti samo i isključivo ono što sam napišem, bez algoritama iz Numerical Recipesa ili GNU Scientific Librarya, što znači vrlo ograničeno u funkcionalnosti … ali, dostupno za komercijalno korištenje, ako tako nešto ikada ikome zatreba!
Jedina realna mogućnost za tako nešto je da nekome ispadne zgodan i koristan NRS repozitorij, odnosno algoritmi koje sam tamo uključio iz Numerical Recipesa, a kome ne bi bilo problem izdvojiti 800 dolara za Numerical Recipes licencu, sasvim sigurno mu ne bi bilo problem platiti meni 10 dolara za moj MML kôd 😎. Yep … kad na vrbi rodi grožđe, znam 🤣🤣🤣.
S kreiranjem ovakva tri repozitorija sam sad sebi zadao i dosta posla 🙄, tako da je proces njihovog alignmenta, usklađivanja njihovog source kôda i popratne dokumentacije još uvijek ongoing i potrajati će neko vrijeme. No, svejedno sam s provedenom reorganizacijom prizadovoljan jer je sad sve kristalno jasno postavljeno.
Sad samo treba prionuti poslu i uhvatiti se u koštac s elektromagnetskim tenzorom 💪💪💪.