جوليا. تقرير ومولدات الوثائق


واحدة من المشاكل الملحة في جميع الأوقات هي مشكلة إعداد التقارير. نظرًا لأن Julia هي لغة يرتبط مستخدموها مباشرةً بمهام تحليل البيانات وإعداد المقالات والعروض التقديمية الجميلة مع نتائج الحسابات والتقارير ، فلا يمكن تجاهل هذا الموضوع بكل بساطة.


في البداية ، خططت هذه المقالة لمجموعة من الوصفات لتوليد التقارير ، ولكن بجانب التقارير موضوع التوثيق ، والذي به العديد من التقاطعات منشئي التقارير. لذلك ، يتضمن هذا أدوات لمعيار إمكانية تضمين تعليمة جوليا القابلة للتنفيذ في قالب مع بعض العلامات. أخيرًا ، نلاحظ أن المراجعة تضمنت منشورات للتقارير ، تم تنفيذها في جوليا نفسها ، وأدوات مكتوبة بلغات برمجة أخرى. حسنًا ، بالطبع ، لم تترك بعض النقاط الرئيسية في لغة جوليا نفسها دون عناية ، والتي بدونها قد لا يكون واضحًا في أي الحالات والوسائل التي يجب استخدامها.


دفتر Jupyter


ربما يجب أن تعزى هذه الأداة إلى الأكثر شعبية بين المشاركين في تحليل البيانات. نظرًا للقدرة على توصيل العديد من النوى الحاسوبية ، فإنها تحظى بشعبية مع الباحثين والرياضيين الذين اعتادوا على لغات البرمجة الخاصة بهم ، واحدة منها جوليا. يتم تطبيق الوحدات المناظرة للغة جوليا بشكل كامل على Jupyter Notebook. وهذا هو سبب ذكر المفكرة هنا.
عملية تثبيت Jupyter Notebook ليست معقدة. للحصول على الطلب ، راجع https://github.com/JuliaLang/IJulia.jl إذا كان Jupyter Notebook مثبتًا بالفعل ، فأنت بحاجة فقط إلى تثبيت حزمة Ijulia وتسجيل جوهر الحوسبة المقابل.


نظرًا لأن منتج Jupyter Notebook معروف بدرجة كافية بعدم كتابته بالتفصيل ، فإننا سنذكر بضع نقاط فقط. المفكرة (سنستخدم مصطلحات المفكرة) في Jupyter Notebook يتكون من كتل ، يمكن أن يحتوي كل منها على كود أو ترميز بأشكاله المختلفة (على سبيل المثال ، تخفيض السعر). نتيجة المعالجة هي تصور العلامة (النص ، الصيغ ، إلخ) ، أو نتيجة العملية الأخيرة. إذا تم وضع فاصلة منقوطة في نهاية السطر مع الرمز ، فلن يتم عرض النتيجة.


أمثلة يظهر دفتر الملاحظات قبل التنفيذ في الشكل التالي:



تظهر نتيجة تنفيذه في الشكل التالي.



المفكرة تحتوي على رسومات وبعض النص. لاحظ أنه لإخراج المصفوفة ، من الممكن استخدام نوع DataFrame ، الذي يتم عرض النتيجة في شكل جدول html به حدود صريحة وجهاز سكرولر ، إذا لزم الأمر.


يمكن Jupyter notebook تصدير دفتر الملاحظات الحالي إلى ملف html. إذا كانت هناك أدوات تحويل مثبتة ، فيمكنها التحويل إلى pdf.


لإنشاء تقارير وفقًا لبعض اللوائح ، يمكنك استخدام الوحدة النمطية nbconvert التالي ، والذي يسمى في الخلفية وفقًا للجدول:
jupyter nbconvert --to html --execute julia_filename.ipynb


عند إجراء عمليات حسابية طويلة ، من المستحسن إضافة خيار يشير إلى المهلة - --ExecutePreprocessor.timeout=180


سيظهر تقرير html الذي تم إنشاؤه من هذا الملف في الدليل الحالي. - - خيار --execute هنا يعني فرض إعادة --execute لبدء.


للحصول على مجموعة كاملة من nbconvert وحدة nbconvert انظر
https://nbconvert.readthedocs.io/ar/latest/usage.html


تكون نتيجة التحويل إلى html متوافقة تمامًا تقريبًا مع الشكل السابق ، باستثناء أنه لا يحتوي على شريط قائمة أو أزرار.


Jupytext


أداة مفيدة إلى حد ما تسمح لك بتحويل ملاحظات ipynb التي تم إنشاؤها مسبقًا إلى نص Markdown أو رمز Julia.


يمكننا تحويل المثال السابق النظر باستخدام الأمر
jupytext --to julia julia_filename.ipynb


نتيجة لذلك ، حصلنا على ملف julia_filename.jl برمز جوليا julia_filename.jl خاصة في شكل تعليقات.


 # --- # jupyter: # jupytext: # text_representation: # extension: .jl # format_name: light # format_version: '1.3' # jupytext_version: 0.8.6 # kernelspec: # display_name: Julia 1.0.3 # language: julia # name: julia-1.0 # --- # # Report example using Plots, DataFrames # ### Drawing # Good time to show some plot plot(rand(5,5), linewidth=2, title="My Plot", size = (500, 200)) # ## Some computational results rand(2, 3) DataFrame(rand(2, 3)) 

لاحظ أن فواصل الكتل عبارة عن موجزات سطر مزدوج.


يمكننا أن نفعل التحول العكسي باستخدام الأمر:
jupytext --to notebook julia_filename.jl


نتيجة لذلك ، سيتم إنشاء ملف ipynb ، والذي بدوره يمكن معالجته وتحويله إلى pdf أو html.


انظر التفاصيل https://github.com/mwouts/jupytext


العيب العام في jupytext و jupyter notebook هو أن "جمال" التقرير مقيد بقدرات هذه الأدوات.


أتش تي أم أل الذاتي ولدت


إذا اعتقدنا لسبب ما أن Jupyter Notebook يعد منتجًا ثقيلًا للغاية ، مما يتطلب تثبيت العديد من حزم الجهات الخارجية التي ليست ضرورية لعمل Julia ، أو أنها غير مرنة بما يكفي لبناء نموذج التقرير الذي نحتاج إليه ، فإن هناك طريقة بديلة هي إنشاء صفحة html يدويًا. ومع ذلك ، هنا سوف تضطر إلى الغوص قليلاً في ميزات التصوير.


بالنسبة لـ Julia ، تتمثل الطريقة النموذجية لإخراج شيء ما إلى دفق الإخراج في استخدام دالة Base.write ، Base.show(io, mime, x) ، Base.show(io, mime, x) . علاوة على ذلك ، بالنسبة لطرق إخراج mime المختلفة المطلوبة ، قد يكون هناك العديد من خيارات العرض. على سبيل المثال ، يتم عرض DataFrame عند عرضه كنص بواسطة جدول رسم مزيف.


 julia> show(stdout, MIME"text/plain"(), DataFrame(rand(3, 2))) 3×2 DataFrame │ Row │ x1 │ x2 │ │ │ Float64 │ Float64 │ ├─────┼──────────┼───────────┤ │ 1 │ 0.321698 │ 0.939474 │ │ 2 │ 0.933878 │ 0.0745969 │ │ 3 │ 0.497315 │ 0.0167594 │ 

إذا تم تحديد mime text/html ، فإن النتيجة هي ترميز HTML.


 julia> show(stdout, MIME"text/html"(), DataFrame(rand(3, 2))) <table class="data-frame"> <thead> <tr><th></th><th>x1</th><th>x2</th></tr> <tr><th></th><th>Float64</th><th>Float64</th></tr> </thead> <tbody><p>3 rows × 2 columns</p> <tr><th>1</th><td>0.640151</td><td>0.219299</td></tr> <tr><th>2</th><td>0.463402</td><td>0.764952</td></tr> <tr><th>3</th><td>0.806543</td><td>0.300902</td></tr> </tbody> </table> 

بمعنى أنه باستخدام أساليب وظيفة show المعرفة لنوع البيانات المطابق (الوسيطة الثالثة) وتنسيق الإخراج المقابل ، من الممكن ضمان تكوين ملف في أي تنسيق بيانات مرغوب.


الوضع مع الصور هو أكثر تعقيدا. إذا كنا بحاجة إلى إنشاء ملف html واحد ، فيجب تضمين الصورة في رمز الصفحة.


النظر في المثال الذي يتم تنفيذه هذا. سيتم تنفيذ الإخراج إلى الملف بواسطة وظيفة Base.write ، التي نحدد لها الطرق المناسبة. لذلك الرمز:


 #!/usr/bin/env julia using Plots using Base64 using DataFrames #        p = plot(rand(5,5), linewidth=2, title="My Plot", size = (500, 200)) #  ,  ,    @show typeof(p) # => typeof(p) = Plots.Plot{Plots.GRBackend} #    ,   3  #     abstract type Png end abstract type Svg end abstract type Svg2 end #  Base.write      #         #   —   ,  #   Base64-. #  HTML  img src="data:image/png;base64,..." function Base.write(file::IO, ::Type{Png}, p::Plots.Plot) local io = IOBuffer() local iob64_encode = Base64EncodePipe(io); show(iob64_encode, MIME"image/png"(), p) close(iob64_encode); write(file, string("<img src=\"data:image/png;base64, ", String(take!(io)), "\" alt=\"fig.png\"/>\n")) end #     Svg function Base.write(file::IO, ::Type{Svg}, p::Plots.Plot) local io = IOBuffer() show(io, MIME"image/svg+xml"(), p) write(file, replace(String(take!(io)), r"<\?xml.*\?>" => "" )) end #    XML-  ,  SVG Base.write(file::IO, ::Type{Svg2}, p::Plots.Plot) = show(file, MIME"image/svg+xml"(), p) #     DataFrame Base.write(file::IO, df::DataFrame) = show(file, MIME"text/html"(), df) #   out.html   HTML open("out.html", "w") do file write(file, """ <!DOCTYPE html> <html> <head><title>Test report</title></head> <body> <h1>Test html</h1> """) write(file, Png, p) write(file, "<br/>") write(file, Svg, p) write(file, "<br/>") write(file, Svg2, p) write(file, DataFrame(rand(2, 3))) write(file, """ </body> </html> """) end 

لإنشاء صور ، يتم استخدام محرك Plots.GRBackend افتراضيًا ، والذي يمكن أن يؤدي إلى إخراج صورة نقطية أو متجهة. بناءً على نوع معين في وسيطة mime للدالة show ، يتم إنشاء النتيجة المقابلة. MIME"image/png"() تشكل صورة بتنسيق png . MIME"image/svg+xml"() ينشئ صورة svg. ومع ذلك ، في الحالة الثانية ، يجب الانتباه إلى حقيقة أن مستند xml مستقل تمامًا قد تم تشكيله ، والذي يمكن كتابته كملف منفصل. في الوقت نفسه ، هدفنا هو تضمين صورة في صفحة HTML ، والتي يمكن القيام بها في HTML5 ببساطة عن طريق إدراج ترميز SVG. هذا هو السبب في أن الأسلوب Base.write(file::IO, ::Type{Svg}, p::Plots.Plot) يقطع رأس XML ، والذي ، وإلا ، سوف ينتهك بنية مستند HTML. على الرغم من أن معظم المتصفحات قادرة على عرض الصورة بشكل صحيح حتى في هذه الحالة.


فيما يتعلق بطريقة Base.write(file::IO, ::Type{Png}, p::Plots.Plot) ، فإن ميزة التنفيذ هنا هي أنه يمكننا فقط إدراج البيانات الثنائية في HTML بتنسيق Base64. نقوم بذلك باستخدام <img src="data:image/png;base64,"/> build. Base64EncodePipe نستخدم Base64EncodePipe .


Base.write(file::IO, df::DataFrame) طريقة Base.write(file::IO, df::DataFrame) الإخراج بتنسيق جدول html لكائن DataFrame .


الصفحة الناتجة هي كما يلي:



في الصورة ، تبدو جميع الصور الثلاث متشابهة تقريبًا ، تذكر أن إحدى هذه الصور تم إدراجها بشكل غير صحيح من وجهة نظر HTML (رأس XML إضافي). واحد هو النقطية ، مما يعني أنه لا يمكن زيادتها دون فقدان التفاصيل. ويتم إدراج واحد منهم فقط باعتباره جزء svg الصحيح داخل علامة HTML. ويمكن تحجيمها بسهولة دون فقدان التفاصيل.


بطبيعة الحال ، تبين أن الصفحة بسيطة للغاية. لكن أي تحسينات مرئية ممكنة مع CSS.


طريقة إنشاء التقارير هذه مفيدة ، على سبيل المثال ، عندما يتم تحديد عدد الجداول المعروضة بواسطة بيانات حقيقية وليس بواسطة قالب. على سبيل المثال ، تحتاج إلى تجميع البيانات حسب مجال ما. ولكل مجموعة لتشكيل كتل منفصلة. منذ تكوين الصفحة ، يتم تحديد النتيجة بعدد الاستدعاءات إلى Base.write ، فمن الواضح أنه لا توجد مشكلة في التفاف الكتلة المطلوبة في حلقة ، مما يجعل الإخراج يعتمد على البيانات ، إلخ.


مثال على الكود:


 using DataFrames #       ptable = DataFrame( Symbol = ["H", "He", "C", "O", "Fe" ], Room = [:Gas, :Gas, :Solid, :Gas, :Solid] ) res = groupby(ptable, [:Room]) #      open("out2.html", "w") do f for df in (groupby(ptable, [:Room])) write(f, "<h2>$(df[1, :Room])</h2>\n") show(f, MIME"text/html"(), DataFrame(df)) write(f, "\n") end end 

نتيجة هذا البرنامج النصي جزء من صفحة HTML.



يرجى ملاحظة أن كل ما لا يتطلب تحويل الزخرفة / التنسيق يتم عرضه مباشرة من خلال وظيفة Base.write . في الوقت نفسه ، كل ما يتطلب التحويل هو الإخراج من خلال Base.show .


Weave.jl


نسج هو مولد تقرير علمي تنفذها جوليا. يستخدم أفكار المولدات Pweave ، Knitr ، rmarkdown ، Sweave. وتتمثل مهمتها الرئيسية في تصدير علامة المصدر في أي من اللغات المقترحة (Noweb ، Markdown ، تنسيق البرنامج النصي) إلى LaTex و Pandoc و Github markdown و MultiMarkdown و Asciidoc وتنسيقات reStructuredText. وحتى في IJulia Notebooks والعكس صحيح. في الجزء الأخير ، يشبه Jupytext.


بمعنى أن Weave هي أداة تسمح لك بكتابة قوالب تحتوي على رمز جوليا بلغات الترميز المختلفة ، وعند الإخراج يكون هناك علامة بلغة أخرى (ولكن مع نتائج تنفيذ شفرة جوليا). وهذه أداة مفيدة للغاية للباحثين على وجه التحديد. على سبيل المثال ، يمكنك إعداد مقال حول Latex ، والذي سيكون له إدخالات على Julia مع حساب تلقائي للنتيجة واستبدالها. سوف نسج إنشاء ملف للمادة الأخيرة.


هناك دعم لمحرر Atom باستخدام المكون الإضافي الموافق https://atom.io/packages/language-weave . يسمح لك هذا بتطوير وتصحيح البرامج النصية Julia المضمنة في الترميز ، ثم إنشاء الملف الهدف.


يتمثل المبدأ الأساسي في Weave ، كما ذكرنا سابقًا ، في تحليل قالب يحتوي على العلامات بالنص (الصيغ ، إلخ) ولصق الشفرة في جوليا. يمكن عرض نتيجة تنفيذ التعليمات البرمجية في التقرير النهائي. يمكن تكوين إخراج النص ، الرمز ، إخراج النتائج ، إخراج الرسوم البيانية - كل هذا بشكل فردي.


لمعالجة القوالب ، تحتاج إلى تشغيل برنامج نصي خارجي يجمع كل شيء في وثيقة واحدة وتحويله إلى تنسيق الإخراج المطلوب. وهذا هو ، والقوالب بشكل منفصل ، والمعالجات بشكل منفصل.


مثال على مثل هذا البرنامج النصي للمعالجة:


 #     : # Markdown weave("w_example.jmd", doctype="pandoc" out_path=:pwd) # HTML weave("w_example.jmd", out_path=:pwd, doctype = "md2html") # pdf weave("w_example.jmd", out_path=:pwd, doctype = "md2pdf") 

jmd في أسماء الملفات هو جوليا تخفيض السعر.


خذ نفس المثال الذي استخدمناه في الأدوات السابقة. ومع ذلك ، سنقوم بإدراج عنوان يحتوي على معلومات حول المؤلف الذي يفهمه Weave.


 --- title : Intro to Weave.jl with Plots author : Anonymous date : 06th Feb 2019 --- # Intro ## Plot ` ``{julia;} using Plots, DataFrames plot(rand(5,5), linewidth=2, title="My Plot", size = (500, 200)) ` `` ## Some computational results ` ``julia rand(2, 3) ` `` ` ``julia DataFrame(rand(2, 3)) ` `` 

هذه القطعة ، التي يتم تحويلها إلى pdf ، تبدو كالتالي:



الخطوط والتخطيط معترف بهما جيدا من قبل مستخدمي اللاتكس.


لكل جزء من الشفرة المدمجة ، يمكنك تحديد كيفية معالجة هذا الرمز وما سيتم عرضه في النهاية.


على سبيل المثال:


  • صدى = صحيح - سيتم عرض الرمز
  • eval = true - سيتم عرض نتيجة تنفيذ التعليمات البرمجية
  • تسمية - إضافة تسمية. إذا تم استخدام Latex ، فسيتم استخدامه كتسمية:
  • fig_width ، fig_height - أحجام الصور
  • وهكذا دواليك

للحصول على تنسيقات noweb و script ، فضلاً عن المزيد حول هذه الأداة ، راجع http://weavejl.mpastell.com/stable/


Literate.jl


عندما يُسأل مؤلفو هذه الحزمة عن سبب معرفة القراءة والكتابة ، يرجى الرجوع إلى نموذج برمجة دونالد نوت لمحو الأمية. تتمثل مهمة هذه الأداة في إنشاء مستندات تستند إلى رمز جوليا الذي يحتوي على تعليقات بتنسيق تخفيض السعر. على عكس أداة Weave السابقة التي تم فحصها ، لا يستطيع تقديم مستندات بنتائج التنفيذ. ومع ذلك ، فإن الأداة خفيفة الوزن وتركز بشكل أساسي على توثيق الكود. على سبيل المثال ، ساعد في كتابة الأمثلة الجميلة التي يمكن وضعها على أي منصة تخفيض. غالبًا ما تستخدم في سلسلة من أدوات التوثيق الأخرى ، على سبيل المثال ، جنبًا إلى جنب مع Documenter.jl .


هناك ثلاثة خيارات ممكنة لتنسيق الإخراج - تخفيض السعر ، دفتر الملاحظات والبرنامج النصي (رمز جوليا الخالص). لن يقوم أي منهم بتنفيذ التعليمات البرمجية المنفذة.


مثال على ملف المصدر مع تعليقات تخفيض السعر (بعد الحرف الأول #):


 #!/usr/bin/env julia using Literate Literate.markdown(@__FILE__, pwd()) # documenter=true # # Intro # ## Plot using Plots, DataFrames plot(rand(5,5), linewidth=2, title="My Plot", size = (500, 200)) # ## Some computational results rand(2, 3) DataFrame(rand(2, 3)) 

ستكون نتيجة عمله وثيقة تخفيض السعر وتوجيهات لـ Documenter ، إذا لم يتم تعطيل جيلهم بشكل صريح.


 ` ``@meta EditURL = "https://github.com/TRAVIS_REPO_SLUG/blob/master/" ` `` ` ``@example literate_example #!/usr/bin/env julia using Literate Literate.markdown(@__FILE__, pwd(), documenter=true) ` `` # Intro ## Plot ` ``@example literate_example using Plots, DataFrames plot(rand(5,5), linewidth=2, title="My Plot", size = (500, 200)) ` `` ## Some computational results ` ``@example literate_example rand(2, 3) DataFrame(rand(2, 3)) ` `` *This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* 

يتم وضع الكود المدرج بداخل التصفية الموضحة هنا بمسافة بين مسافات فاصلة عليا وأخرى لاحقة ، حتى لا تفسد عند نشر المقالة.


مشاهدة مزيد من التفاصيل https://fredrikekre.imtqy.com/Literate.jl/stable/


Documententer.jl


مولد التوثيق. الغرض الرئيسي منه هو تكوين وثائق قابلة للقراءة للحزم المكتوبة بلغة جوليا. يقوم Documententer بتحويل أمثلة html أو pdf باستخدام ترميز Markdown ورمز Julia المضمن ، بالإضافة إلى ملفات مصدر الوحدة النمطية ، واستخراج Julia-docstrings (تعليقات Julia الخاصة).


مثال على الوثائق النموذجية:



في هذه المقالة لن نتطرق إلى مبادئ التوثيق ، لأنه بطريقة جيدة ، يجب أن يتم ذلك كجزء من مقالة منفصلة حول تطوير الوحدات. ومع ذلك ، سوف نلقي نظرة على بعض جوانب برنامج Documententer هنا.


بادئ ذي بدء ، يجب الانتباه إلى حقيقة أن الشاشة مقسمة إلى جزأين - الجانب الأيسر يحتوي على جدول محتويات تفاعلي. الجانب الأيمن ، في الواقع ، هو نص الوثائق.


بنية الدليل النموذجي مع الأمثلة والوثائق كالتالي:


  docs/ src/ make.jl src/ Example.jl ... 

دليل docs/src هو وثائق تخفيض السعر. وتوجد أمثلة في مكان ما في دليل مصدر src المشترك.


الملف الرئيسي لـ Docuementer هو docs/make.jl محتويات هذا الملف للموثق نفسه:


 using Documenter, DocumenterTools makedocs( modules = [Documenter, DocumenterTools], format = Documenter.HTML( # Use clean URLs, unless built as a "local" build prettyurls = !("local" in ARGS), canonical = "https://juliadocs.imtqy.com/Documenter.jl/stable/", ), clean = false, assets = ["assets/favicon.ico"], sitename = "Documenter.jl", authors = "Michael Hatherly, Morten Piibeleht, and contributors.", analytics = "UA-89508993-1", linkcheck = !("skiplinks" in ARGS), pages = [ "Home" => "index.md", "Manual" => Any[ "Guide" => "man/guide.md", "man/examples.md", "man/syntax.md", "man/doctests.md", "man/latex.md", hide("man/hosting.md", [ "man/hosting/walkthrough.md" ]), "man/other-formats.md", ], "Library" => Any[ "Public" => "lib/public.md", hide("Internals" => "lib/internals.md", Any[ "lib/internals/anchors.md", "lib/internals/builder.md", "lib/internals/cross-references.md", "lib/internals/docchecks.md", "lib/internals/docsystem.md", "lib/internals/doctests.md", "lib/internals/documenter.md", "lib/internals/documentertools.md", "lib/internals/documents.md", "lib/internals/dom.md", "lib/internals/expanders.md", "lib/internals/mdflatten.md", "lib/internals/selectors.md", "lib/internals/textdiff.md", "lib/internals/utilities.md", "lib/internals/writers.md", ]) ], "contributing.md", ], ) deploydocs( repo = "github.com/JuliaDocs/Documenter.jl.git", target = "build", ) 

كما ترون ، الأساليب الرئيسية هنا هي makedocs و deploydocs ، التي تحدد هيكل الوثائق المستقبلية ومكان وضعها. يوفر makedocs تشكيل ترميز العلامات من جميع الملفات المحددة ، والتي تشمل كل من تنفيذ التعليمات البرمجية المدمجة واستخراج التعليقات docstrings.


يدعم Documententer عددًا من التوجيهات لإدخال رمز. شكلها هو `` @something


  • @docs ، @autodocs - روابط إلى وثائق المستندات المستخرجة من ملفات جوليا.
  • @ref ، @meta ، @index ، @contents - الروابط ، مؤشرات صفحات الفهرس ، إلخ.
  • @example ، @repl ، @eval - أوضاع تنفيذ شفرة جوليا المدمجة.
  • ...

إن وجود التوجيهات @example, @repl, @eval ، في الواقع ، يحدد ما إذا كان يجب تضمين Documententer في هذا العرض العام أم لا. علاوة على ذلك ، يمكن لـ Literate.jl المذكور سابقًا إنشاء مثل هذه العلامات تلقائيًا ، كما سبق بيانه. بمعنى أنه لا توجد قيود أساسية على استخدام منشئ الوثائق كمنشئ تقرير.


لمزيد من المعلومات حول Documententer.jl ، راجع https://juliadocs.imtqy.com/Documenter.jl/stable/


الخاتمة


على الرغم من شباب لغة جوليا ، فإن الحزم والأدوات التي تم تطويرها بالفعل تتيح لنا التحدث عن الاستخدام الكامل في الخدمات المحملة للغاية ، وليس فقط عن تنفيذ المشروعات التجريبية. كما ترون ، يتم توفير القدرة على إنشاء مستندات وتقارير متنوعة ، بما في ذلك نتائج تنفيذ التعليمات البرمجية سواء في النص أو في شكل رسوم بيانية. علاوة على ذلك ، بناءً على تعقيد التقرير ، يمكننا الاختيار بين سهولة إنشاء قالب ومرونة إنشاء التقارير.


لا تعتبر المقالة مولد Flax من الحزمة Genie.jl. Genie.jl هي محاولة لتطبيق Julia on Rails ، و Flax هي نوع من التناظرية لـ eRubis مع إدراج كود لرمز Julia. ومع ذلك ، لا يتم توفير Flax كحزمة منفصلة ، ولا يتم تضمين Genie في مستودع الحزمة الرئيسي ، لذلك لم يتم تضمينه في هذا الاستعراض.


بشكل منفصل ، أود أن أذكر حزم Makie.jl و Luxor.jl ، التي توفر تشكيلات متجهية معقدة. يمكن أيضًا استخدام نتيجة عملهم كجزء من التقارير ، ولكن يجب أيضًا كتابة مقالة منفصلة حول هذا الموضوع.


المراجع


Source: https://habr.com/ru/post/ar439442/


All Articles