Rabu, 04 Oktober 2023

menggunakan library .Net pada IronPython

.


.
.
.

dapat dilihat contoh sederhana diatas IronPython sama dengan Python pada bahasa dasar dan library bawaan, dapat menggunakan dua bahasa sekaligus untuk tujuan yg sama namun disisi lain berbeda yaitu pada integrasi .Net didalamnya. Hal tersebut yg menjadikan banyak keterbatasan library pendukung pihak ketiga (third party) tidak seperti yg ada pada Python standard (i.e NumPy, SciPy, MatPlotLib, dll) karena memang tidak kompatibel. Sebagai penggantinya library .Net dapat digunakan dan memang diperuntukan khusus untuk ini, kelebihannya adalah akan berjalan lebih stabil dan cepat karena library tersebut memang standard untuk C# yg sudah dilakukan optimalisasi. Beberapa library yg dapat digunakan sebagai pelengkap diantaranya adalah Mapack, Zedgraph, ScottPlot, UnitsNet, Math Numerics, ExcelLibrary, dll.

.

.

.

.

contoh penggunaan standard library .Net pada CLR bawaan IronPython yaitu MathDictionary dan Array, dapat berguna untuk membuat dan membaca tabel kepemilikan dan mengambilnya (extracted). Tabel tersebut pada aplikasi teknik sipil/struktural dapat berupa karakteristik penampang, deret nilai gaya internal balok sepanjang bentang, internal force pada element plane-stress atau plate-bending, dll untuk kemudian dilakukan proses lanjut data tersebut keperluan desain.

.

.

.

.

library .Net bawaan CLR dapat membuat data masukan dalam format XML, kelihatannya juga dapat membaca isi didalamnya serta mengambil bagian tertentu atau keseluruhan untuk proses lanjut mengetahui nilai bilangan atau tujuan manipulasi string.

.

,

.

contoh lain penggunaan library Mapack untuk operasi dasar matrik, penjumlahan, perkalian, transpose, determinant, inverse dan nilai eigen. Sudah cukup membantu  untuk analisa struktur sederhana (truss, beam, spring) metode matrik, linear elastis, statis dan dinamis, atau elemen plane stress sebagai pengantar mengetahui alur kerja umumnya program elemen hingga. Untuk yg lebih advanced dapat menggunakan library Math Numerics, keduanya berlisensi terbuka dan bebas digunakan. Sebagai pengingat ulang operasi matrix dapat merujuk buku tulisan Autar K. Kaw (2022) yg tersedia secara online.

.

.

.

perencanan desain struktur di Indonesia merujuk pada peraturan negara Amerika, sehingga diawal transisi ada kendala pada pengunaan satuan yg berbeda (U.S Costumary Units vs International Units). Sebenarnya hal tersebut dapat diabaikan dengan cukup mengkonversi data masukan dan hasil keluaran, namun akan kehilangan esensi jika detail perhitungan ditampilkan. Hal tersebut menjadikan peraturan asli negara Amerika belakangan mengeluarkan edisi Metrik (International Units). Jika program ditujukan untuk dua pengguna yg berbeda pada kebiasaan satuan maka diperlukan dua buah modul desain berdasarkan pemisahan satuan, namun untuk cara cepat dapat dilakukan konversi satuan setiap detail perhitungan secara otomatis dan hasil setiap perhitungan mempunyai kesetaraan units dengan nilai dalam tanda kurung,  Untuk tujuan tersebut diperlukan library conversi satuan seperti diatas yaitu UnitsNet agar dapat diterapkan secara langsung dengan mudah. Library tersebut berlisensi terbuka dan bebas digunakan.

.

.

Penyimpanan data hasil keluaran atau masukan dalam format spreadsheet dapat menggunakan library sederhana ExcelLibrary yg tentunya dapat lebih mudah dan dapat langsung dibuka pada program aplikasi perkantoran (Office) ketimbang format CSV.

.

.

library diatas sangat sederhana hanya mampu membuat file XLS saja dan terlihat masih banyak kekurangan, untuk dapat lebih lanjut seperti membaca dan membuat file XLSX serta membuat formula didalam cell maka diperlukan library lain seperti ClosedXML atau NanoXLSX. pada library pertama saya belum berhasil, maka digunakan pilihan kedua. Ada sedikit perbedaan pada definisi reference cell yg ditentukan langsung dan tidak. Default penulisan data pada lajur baris, untuk bergerak kebawah isediakan fungsi GoToNext dengan pilihan Row atau Column. Mungkin dengan named cell range manager akan lebih memudahkan dalam membaca dan membuatnya konsisten. Dapat juga menggunakan perintah langsung cell refferences seperti contoh:  wb.CurrentWorksheet.AddCell("ABC", "A3") untuk isi text atau wb.CurrentWorksheet.AddCellFormula("C1/B1", "A3") untuk isi rumusan

.

.
.

.
.
pembuatan laporan dalam format DOCX dapat digunakan juga sebagai pilihan selain HTML walau sya pibadi kurang merekomendasi terkait masalah kompatibilitas. Sebagai contoh dibawah, hasil file tidak dapat dibuka dan ditampilkan oleh OpenOffice Writer, sedangkan OnlyOffice masih kendala pada tampila rumus persamaan.
.
.
.

.

penggunaan library Math.NET Numerics juga terlihat berhasil dan berjalan baik, library tersebut cukup advances dapat diandalkan untuk perhitungan matrik skala besar dengan tingkat kecepatan yan baik karena sudah menggunakan teknologi Intel MKL yg biasa dipakai pada solver FE komersil yg ada dipasaran. Kecepatan library Pardiso dari Intel tersebut terlihat dapat mempercepat sampai seper-sepuluh waktu penyelesainnya dibanding bawaan standard.

.

.

selain library operasi matrik diatas ada juga NumSharp dan terlihat dapat digunakan, syntax mirip dengan Numpy sehingga akan lebih mudah adaptasi walaupun secara feature belum selengkapnya.

.

.

.

penggunaan ploting chart dengan library ZedGraph yg sebelumnya sya tidak berhasil karena kendala adaptasi bahasa, setelah dicoba beberapa kali dan mencari penyebabnya akhirnya sudah dapat digunakan. Diperlukan tambahan definisi import pada System.Drawing, kemudian hasilnya ditampilkan sebagai berikut.

.

.
.

alternative lain sebagai penggantinya menggunakan library ScottPlot dan terlihat dapat berjalan normal serta menampilkan hasil, kelebihan library tersebut adalah dapat melakukan: gambar garis dan polygon, regresi linear (curve fit), snap data point dan menampilkan nilainya, zooming dan panning secarat interactive, work-in-progress menyimpan grafik dalam format vector (svg) serta pengembangan yg berkelanjutan dan juga direncanakan cross-platform.

.

.
.

banyak contoh juga diberikan pada demo program, sehingga lebih mudah adaptasi untuk digunakan sesuai keinginan.

.

.

penggunaan library tersebut juga dapat untuk sketch bidang dua dimensi, plot bentuk penammpang akan dibuat skalatis atau proportioanl seperti contoh berikut

.

.
.
.
.

yg perlu dicoba adalah library plot atau draw (3D) dan mesh dalam format keluaran Stp/Igs dan Unv/Inp yg mana library terserbut perlu kompatibel dengan IronPython. Biasanya kendala pada dokumentasi, adaptasi dari bahasa awalnya yg untuk C# dijadikan Python, walau cukup dapat dijangkau dan dipahami namun sya coba tidak selalu berhasil (i.e ClosedXML, VTK, SketchUp.Net, OpenSees.Net, dll). Akan kesulitan karena memang developer pembuat library tidak mendukung secara resmi untuk hal khusus tersebut, memposting masalah pada forum adalah ide yg baik dgn harapan developer yg mengetahui struktur hirarki library atau ada pengguna lain yg  expert berpengalaman lintas bahasa pemrograman yg mengetahui secara detail kompatibilitas dan sumber masalahnya..

.
.
selain library pembacaan (read) dan pembuatan (write) file dalam format DXF diatas yg juga memperlihatkan berhasil, dapat menggunakan library lainnya yg sejenis bahkan lebih lengkap yaitu netDxf. Setelah memposting permasalahan kemudian diberikan beberapa petunjuk oleh pembuatnya (developer), akhirnya sya berhasil mengimplementasikan library tersebut pada IronPython seperti ditambpilkan dibawah ini.
.
.
.
selain format DXF untuk vector graphics dikenal juga dan banyak digunakan format SVG pada dokuementasi, kelebihannya adalah dapat disispkan pada word processor seperti MS Word atau OpenOffice Writer, serta Web browser juga mendukung format tersebut untuk ditampilkan. Library yg lenih banyak dikenal seperti SkiaSharp sya belum berhasil menggunakannya pada IronPython, maka sebagai alternative penggantinya adalah library VectSharp. Terlihat bahasanya lebih sederhana dan mudah, namun diawal sya gagal pada tahap menyimpan file drawing dan kemudian berhasil setelah posting masalah dan mendapat sedikit arahan dari developer.
.

.
.

kelebihan lainnya pada IronPython adalah dapat membuat stand-alone executable  yg sudah dialkukan optimalisasi dengan teknologi JIT (Just In Time) compiles oleh pembuat .Net yaitu Microsoft. Python standard juga dapat melakukan sama dalam membuat exectuable, namun sya pernah bandingkan waktu running cukup terpaut jauh. Ini memang hal unik, saat awal seseorang ingin membuat program secara cepat dengan sedikt baris code dan sesederhana mungkin, namun kelanjutan setelah program jadi yg diharapkannya adalah berjalan stabil dan cepat dan hal ini dapat bertentangan karena bahasa program yg digunakan.

.
.
jika data masukan (value box) diinginkan interaktif berfungsi juga seperti kalkulator dapat dalam bentuk persamaan, maka diperluka library untuk evaluation parser seperti Calcex sehingga nantinya dapat diterapkan dengan mudah. Ini dapat berguna misal pada contoh data masukan modulus elastisitas beton hubunganngan dengan kuat tekan, modulus geser terhadap nilai poisson, luas dan inersia penampang berdasarkan dimensi dll.
.
.

IronPython juga mampu membuat program GUI dengan WinForm sehingga tampilan lebih native, pada Linux dan Mac OS kelihatannya juga dapat berjalan baik dengan dukungan Mono.

.

beberapa rujukan dokumentasi online dalam fromat PDF dapat diakses bebas, versi cetak juga bisa didapat dgn membelinya. Daftar rujukan tersebut diantaranya adalah sebagai berikut:


**updates

untuk pemodelan object 3D serta meshing dapat menggunakan library Gmsh, yg mana didalam SDK tersebut sudah menyertakan library CAD OpenCASCADE dan juga aplikasi GUI (FLTK) yg dapat berguna sebagai model dan mesh viewer juga untuk post-processor. Ukuran file library Gmsh cukup besar yaitu sekitar  ~82Mb namun ini sebanding dengan kelengkapan feature dan kegunanaanya. Sebenarnya ini bukan library.Net berbahasa C# melainkan murni bahasa C++, namun oleh developer disediakan wrappers dalam bahasa Python. 

.

.


.

.

untuk solver struktural metode elemen hingga, dapat menggunakan project opensource yg sudah ada seperti OpenSees atau CalculiX dengan sebelumnya ditempuh pembuatan mesh  dan data masukan lain pada IronPython lalu memanggil executable dengan fungsi subprocess. Namun jika model dan masalah struktur tingkatan kerumitannya tidak terlalu besar atau cukup sederhana sampai menengah seperti analisa statis linear elastis 3D (truss, beam, plane stress, plate bending), maka penggunaan library yg ada seperti BriefFiniteElementNet dapat juga digunakan, selain mudah karena sudah terintegrasi juga ukuran file library yg terlihat jauh lebih kecil (total hanya 382KB) dibanding solver FE yg disebut sebelumnya.

.

.

.

karena library meshing sebelumnya yaitu Gmsh mempunyai ukuran file yg cukup besar dan tidak dapat terintegrasi langsung, maka sya mencari library meshing lain untuk object bidang 2D yaitu Triangle.Net adaptasi dari original buatan Shewcuk J.R (2003). Namun terlihat akan ada masalah pada kompatibilitas lisensi walau mungkin (?) tetap masih dapat digunakan untuk project OpenSource atau Free Software. Direkomendasikan pilihannya menggunakan Netgen format in2d untuk itu, alasan lainnya karena mempunyai feature lebih baik pada quad-dominate algorithm serta dukungan file format untuk solver FE seperti CalculiX. Meshing 3D bentuk sederhana juga dapat menggunakan CSG, atau untuk object yang rumit acuan file 3D format Step/Iges. 

.

.

.

.

penggunaan library geometry mungkin diperlukan, misal untuk mengetahui jarak terdekat suatu point dengan garis atau bidang hubungannya seperti fungsi pemutus (trim) atau pemanjang (extent) pada CAD, perpotongan (intersection) dua bua garis dengan object lingkaran atau garis lain pada sembarang bidang sama dalam masalah tiga dimensi, sudut dari dua buah garis, fungsi rays untuk construction points, pengelompokan banyak garis sesuai kesamaan bidang,  dll. Library GeometRi.CSharp dapat digunakan untuk kebutuhan tersebut.

.

.

Dari berbagai test atau percobaan implementasi library .Net berbahasa C#, terlihat IronPython mempunyai banyak kelebihan karena banyaknya pilihan keragaman library sejenis serta kestabilan dan kecepatan. Namun disisi lain mempunyai kekurangan, library tersebut tidak dapat secara langsung begitu saja digunakan (run out of the box) karena memang hal khusus tersebut tidak didukung secara resmi (officially supported) oleh developer dari library.

.