WolframClientForPython | مكتبة عميل ولفرام الجديدة للغة بيثون


الترجمة الأصلية في مدونتي

الوصول الكامل إلى لغة ولفرام من بيثون


توفر لغة Wolfram (لغة Wolfram ) للمبرمجين لغة فريدة من نوعها مع مجموعة كبيرة ومتنوعة من الخوارزميات المعقدة ، بالإضافة إلى معرفة مدمجة حول العالم. على مر السنين ، سألنا الأشخاص عن كيفية الوصول إلى جميع ميزات تقنيتنا من بيئات البرامج ولغات البرمجة الأخرى. مرت السنوات وأنشأنا العديد من الحلول مثل Wolfram CloudConnector for Excel و WSTP (بروتوكول نقل رمز Wolfram ) لبرامج C / C ++ وبالطبع J / Link التي توفر الوصول إلى Wolfram Language مباشرة من Java.

لذلك ، يسعدنا اليوم أن نقدم لكم رسميًا الحل الجديد الذي طال انتظاره للجمع بين اللغات ، والذي سيسمح لك بالاتصال مباشرة وفعالة بـ Wolfram Language من Python : Wolfram Client Library لـ Python . والأهم من ذلك ، أن مكتبة العميل هذه تحتوي على شفرة مفتوحة المصدر بالكامل يتم استضافتها على مستودع WolframClientForPython git بموجب ترخيص MIT ، بحيث يمكنك نسخها كما تشاء واستخدامها كما تريد.

إنه سهل وبسيط.


تعمل مكتبة عملاء Wolfram على تسهيل دمج مجموعة كبيرة من خوارزميات Wolfram Language ، بالإضافة إلى قاعدة معرفة Wolfram مباشرةً في أي كود بيثون موجود ، مما يوفر وقتك وجهدك بشكل كبير عند تطوير كود جديد. في هذا المقال ، نوضح لك أولاً كيفية إعداد اتصال بين بايثون ولغة ولفرام ، وإلقاء نظرة على العديد من الطرق والأمثلة التي يمكن استخدامها لحساب لغة ولفرام ، ثم نسميها للاستخدام من بايثون. للحصول على مزيد من المعلومات المرجعية الكاملة ، انتقل إلى: الصفحة الرئيسية لوثائق Wolfram Client Library لـ Python .

نقدر على الفور ...


لنبدأ بمثال بسيط يحسب متوسط ​​الانحراف المعياري لمليون رقم مأخوذ من التوزيع العادي. يوضح هذا المثال كيفية استدعاء دالة Wolfram من Python ومقارنة نتائج Python مع نفس حساب Wolfram Language لإظهار أنها متقاربة للغاية.

تحليل البيانات الإحصائية


أولاً ، للاتصال بلغة Wolfram ، تحتاج إلى إنشاء جلسة جديدة باستخدام محرك Wolfram ( محرك لغة Wolfram المجاني):

from wolframclient.evaluation import WolframLanguageSession session=WolframLanguageSession() 

للاتصال بوظائف Wolfram Language ، يتعين عليك استيراد محرك `wl`:

 from wolframclient.language import wl 

الآن يمكنك تنفيذ أي كود للغة Wolfram. عيّن متغير العينة من Python إلى قيمة قائمة بمليون رقم عشوائي مأخوذة من التوزيع الطبيعي ، بمتوسط ​​0 وانحراف معياري قدره 1:

 sample = session.evaluate(wl.RandomVariate(wl.NormalDistribution(0,1), 1e6)) 

النظر في الخمسة الأولى منهم:

 sample[:5] [0.44767075774581, 0.9662810005828261, -1.327910570542906, -0.2383857558557122, 1.1826399551062043] 

يمكنك حساب متوسط ​​هذه العينة باستخدام Wolfram Language. كما هو متوقع ، سيكون قريبًا من الصفر:

 session.evaluate(wl.Mean(sample)) 0.0013371607703851515 

يمكنك أيضًا حساب نفسه مباشرةً في Python للتأكد من حصولك على نتيجة مماثلة:

 from statistics import mean mean(sample) 0.0013371607703851474 

وبالمثل ، يمكنك حساب الانحراف المعياري للعينة باستخدام لغة Wolfram:

 session.evaluate(wl.StandardDeviation(sample)) 1.0014296230797068 

ثم قم بتشغيل الكود التالي في Python للتأكد من حصولك على نتيجة مماثلة:

 stdev(sample) 1.0014296230797068 

لا يمكن إلا أن نفرح أن تتلاقى النتائج. أنت الآن تعرف كيفية استدعاء وظائف Wolfram Language البسيطة من Python. دعنا نواصل مع مثال أكثر إثارة للاهتمام.

باستخدام قاعدة المعرفة Wolfram


لنلقِ نظرة على وظيفة Wolfram المضمنة ، والتي لا تتوفر في Python ، WolframAlpha :

 moons = session.evaluate(wl.WolframAlpha('moons of Saturn', 'Result')) 

تعد وظيفة WolframAlpha واحدة من الوظائف عالية المستوى في Wolfram Language التي تتصل بخوادم Wolfram | Alpha من خلال واجهة برمجة تطبيقات الويب . يمكنك استخدام واجهة برمجة التطبيقات هذه مباشرة من Python ، مما يجعل استدعاء وظيفة WolframAlpha أكثر قوة وأكثر راحة ، حيث يمكنك الوصول إلى جميع وظائف معالجة البيانات مباشرة من Wolfram Language. لنلقِ نظرة على ما يحتويه متغير القمر في بيثون:

 moons EntityClass['PlanetaryMoon', 'SaturnMoon'] 

الإخراج هنا هو تمثيل في Python لتعبير من Wolfram Language ، والذي يمكن استخدامه في أي حساب لاحق. على سبيل المثال ، إذا كنت ترغب في الحصول على قائمة بالأقمار الصناعية الأربعة الأولى لـ Saturn (حسب درجة قربها من Saturn) ، فيجب عليك تشغيل الكود التالي:

 session.evaluate(wl.EntityList(moons))[:4] [Entity['PlanetaryMoon', 'S2009S1'], Entity['PlanetaryMoon', 'Pan'], Entity['PlanetaryMoon', 'Daphnis'], Entity['PlanetaryMoon', 'Atlas']] 

أو يمكنك عرض أكبر أربعة أقمار صناعية لكتلة زحل باستخدام هذا الرمز:

 bigmoons = session.evaluate(wl.EntityList(wl.SortedEntityClass(moons, wl.Rule("Mass","Descending"),4))) bigmoons [Entity['PlanetaryMoon', 'Titan'], Entity['PlanetaryMoon', 'Rhea'], Entity['PlanetaryMoon', 'Iapetus'], Entity['PlanetaryMoon', 'Dione']] 

أو يمكنك الحصول على مجموعة من السلاسل بأسماء هذه الأقمار الصناعية ، على سبيل المثال:

 session.evaluate(wl.Map(wl.Function( wl.Slot()("Name")), bigmoons)) ['Titan', 'Rhea', 'Iapetus', 'Dione'] 

كل هذا مثير للإعجاب للغاية. دعنا ننظر إلى مثال آخر باستخدام وظائف معالجة الصور والتعلم الآلي المضمنة في Wolfram Language.

معالجة الصور والتعلم الآلي


أولاً ، دعنا ننتقل إلى وضع آخر لإجراء تقييمات مباشرة بلغة Wolfram. حتى الآن ، استخدمت محرك `wl` لإنشاء تعبيرات Wolfram Language في Python ، لكن يمكنك أيضًا تنفيذ سطور من التعليمات البرمجية المكتوبة في Python تحتوي على رمز Wolfram Language ، وأحيانًا يتم إدراكها بسهولة أكبر:

 from wolframclient.language import wlexpr 


على سبيل المثال ، قم بحساب 1 + 1 في Wolfram Language ، وإرسالها كسلسلة:

 session.evaluate('1+1') 2 


باستخدام هذه الطريقة ، يمكنك كتابة رمز صغير في Wolfram Language ، والذي يستقبل الصورة عند الإدخال ويستخدم خوارزمية اكتشاف الوجه المضمنة للعثور على موقع الوجه في الصورة. هنا ، الصورة التي نستخدمها هي اللوحة الشهيرة " Girl with a Pearl Earring " للفنان الهولندي يوهانس فيرمير (تجدر الإشارة ، بطبيعة الحال ، ستعمل هذه الخوارزمية أيضًا على أي صورة تقريبًا بها كائنات يمكن التعرف على الوجوه فيها). نظرًا لأن واجهة محطة Python لا تدعم إخراج الصور ، نحتاج إلى استخدام Jupyter Notebook مع حزمة Python Image Library (PIL) حتى نتمكن من إخراج النتيجة:

 from PIL import Image import io 

 session.evaluate(wlexpr(''' image = ImageResize[ Import["Girl_with_a_Pearl_Earring.jpg"], 300]; boxes = FindFaces[image]; face = ImageAssemble[{{image,HighlightImage[image, boxes, "Blur"]}}]; ''') ) 

 data = session.evaluate( wlexpr('ExportByteArray[ face, "PNG" ]') ) 

 Image.open(io.BytesIO) 



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

لذا ، اذهب إلى السحابة


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

في المثال التالي ، سنفعل ذلك عن طريق نشر واجهة برمجة تطبيقات Wolfram Language على الويب. على سبيل المثال ، تقبل واجهة برمجة التطبيقات أسماء دولتين (country1 و country2) عند الإدخال ، وتجد العاصمة لكل بلد ثم تحسب المسافة بينهما (بالكيلومترات):

 CloudDeploy[ APIFunction[{"country1"->"String","country2"->"String"}, QuantityMagnitude[ GeoDistance[ EntityValue[Entity["Country", #country1], "CapitalCity"], EntityValue[Entity["Country", #country2], "CapitalCity"] ], "Kilometers" ]&, "WXF" ], CloudObject["api/public/capital_distance"], Permissions->"Public"] 



بعد نشر واجهة برمجة التطبيقات هذه ، يمكنك بدء جلسة جديدة في Wolfram Language ، لكنك في هذه المرة تتصل بـ Wolfram Cloud بدلاً من المحرك المحلي:

 from wolframclient.evaluation WolframCloudSession cloud = WolframCloudSession() 

للاتصال بـ API ، يجب عليك تحديد اسم المستخدم (user1) ونقطة نهاية واجهة برمجة التطبيقات (api / public / capital_distance). باستخدام هذه البيانات ، يمكنك الاتصال بالسحابة ...

 api = ('user1', 'api/public/capital_distance') result = cloud.call(api, {'country1': 'Netherlands', 'country2': 'Spain'}) 

... ثم الحصول على النتيجة المرجوة:
 result.get() 1481.4538329484521 

تقييم مرة أخرى كم هو سهل وبسيط.

إذا كنت ترغب في حفظ واجهة برمجة تطبيقات Wolfram Language API بحيث لا يمكنك استخدامها إلا ، يمكنك نشر واجهة برمجة التطبيقات باستخدام الأمر أذونات → "خاص" . للقيام بذلك ، في واجهة برمجة التطبيقات الخاصة ، يمكنك إنشاء (في Wolfram Language) مفتاح أمان للمصادقة:

صورة
 key = GenerateSecuredAuthenticationKey["myapp"] 

انسخ الإجابات من سطرين الإدخال:

 key["ConsumerKey"] key["ConsumerSecret"] 

ثم الصقها في جلسة بيثون:

 SecuredAuthenticationKey('<<paste-consumer-key-here>>', '<<paste-consumer-secret-here>>') 

ثم ابدأ جلسة سحابة جديدة مع المصادقة:

 cloud = WolframCloudSession(credentials=sak) cloud.start() cloud.authorized() True 

يمكنك الآن (أنت وحدك) استخدام أي واجهة برمجة تطبيقات Wolfram Language التي قمت بنشرها للاستخدام الخاص.

دعنا نتحدث قليلا عن المفاهيم الأساسية للتسلسل


من أجل القيام بكل شيء بسرعة وكفاءة ، تستخدم مكتبة عملاء Wolfram لـ Python تنسيق WXF المفتوح لتبادل التعبيرات بين Python و Wolfram. WXF هو تنسيق ثنائي لتسلسل تعبيرات Wolfram Language بدقة في شكل مناسب للمشاركة مع البرامج الخارجية. يمكن أن تقوم وظيفة Library تصدير تسلسل كائنات Python إلى نموذج إدخال سلسلة و WXF ، كما تدعم مجموعة من فئات Python المضمنة مثل dict والقائمة والسلاسل:

 from wolframclient.serializers import export export({ 'list': [1,2,3], 'string': u'abc', 'etc': [0, None, -1.2] }) b'<|"list" -> {1, 2, 3}, "string" -> "abc", "etc" -> {0, None, -1.2}|>' 

WXF عبارة عن صفيف رقمي يحتوي على بيانات معبأة ، مما يتيح لك دعم صفيفات NumPy بشكل فعال.

على سبيل المثال ، قم بإنشاء صفيف من 255 أعداد صحيحة موجبة 8 بت:

 import numpy array=numpy.arange(255, dtype='uint8') 

تسلسلها إلى بايت WXF وحساب عدد البايتات:

 wxf=export(array, target_format='wxf') len(wxf) 262 

يتيح لك NumPy الوصول إلى العديد من مكتبات Python. وبالتالي ، فإن هذا التسلسل الفعال والمدمج يساعد على توصيل نظام Python بلغة Wolfram ، والتي تتمثل النتيجة المباشرة في دعم NumPy بأن إجراء تسلسل صور PIL يكون فعالًا للغاية بشكل عام. يتم عرض معظم أوضاع بيانات البكسل كواحد من أنواع المصفوفات الرقمية المحددة كـ NumericArrayType .

تجدر الإشارة إلى أن سلسلة الباندا و DataFrame مدعومة هنا في البداية. توفر المكتبة أيضًا آلية موسعة لتسلسل الفصول التعسفية.

ما هو متاح الآن؟


قم بتثبيت أحدث مكتبة عميل Wolfram لبرنامج Python باستخدام الأمر pip :

 $ pip install wolframclient 

للقيام بذلك ، تحتاج إلى Python 3.5.3 (أو إصدار أحدث) و Wolfram Language 11.3 (أو إصدار أحدث). راجع وثائق مكتبة عميل Wolfram لـ Python . يتم استضافة جميع التعليمات البرمجية المصدر في مستودع WolframClientForPython على Wolfram Research GitHub .

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

حول الترجمة
أعرب عن امتناني العميق لبيتر تينشيف وجالينا نيكيتينا لمساعدتهما في ترجمة المنشور وإعداده.

تريد أن تتعلم كيفية البرنامج في ولفرام اللغة؟
مشاهدة ندوات أسبوعية.
التسجيل للدورات الجديدة . بالطبع استعداد على الانترنت .
ترتيب الحل في ولفرام اللغة.

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


All Articles