1 पॉइंट द्वारा GN⁺ 2024-03-01 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अगर आप Python code के भीतर सीधे formulas को manipulate और compute करना चाहते हैं, तो SymPy interactive use और application embedding, दोनों को support करता है
  • यह BSD license के तहत उपलब्ध free software है, और implementation language तथा user-facing language दोनों Python हैं
  • इसकी dependency सिर्फ mpmath है, जो arbitrary-precision floating-point arithmetic के लिए एक pure Python library है, इसलिए install और उपयोग का बोझ कम है
  • Cadabra, ChemPy, devito, EinsteinPy, SageMath, Spyder, PyTorch TorchInductor जैसे कई scientific, mathematical और development tools SymPy का उपयोग करते हैं
  • इसका उपयोग tensor algebra, chemistry, general relativity, circuit analysis, optimization, dynamics, code generation, और dynamic shape व stride support तक फैला हुआ है

Python-आधारित symbolic mathematics library

  • SymPy Python में symbolic mathematics को संभालने के लिए एक library है
  • यह BSD license के तहत उपलब्ध है, इसलिए इसे स्वतंत्र रूप से उपयोग किया जा सकता है
  • पूरा framework Python में लिखा गया है, और SymPy में उपयोग की जाने वाली language भी Python है
  • इसकी dependency सिर्फ mpmath है
    • mpmath arbitrary-precision floating-point arithmetic के लिए एक pure Python library है
  • इसे interactive tool की तरह उपयोग किया जा सकता है, और दूसरी applications में embed भी किया जा सकता है या custom functions से extend किया जा सकता है
  • feature list SymPy's features पर देखी जा सकती है

SymPy को अपनाने वाले projects

  • सार्वजनिक सूची SymPy का उपयोग करने वाले projects की अपूर्ण सूची है, और उपयोग करने वाले projects को mailing list के माध्यम से जोड़ने का अनुरोध किया जा सकता है
  • scientific और mathematical computing क्षेत्र

    • Cadabra: tensor algebra और quantum field theory systems में scalar algebra के लिए SymPy का उपयोग करता है
    • ChemPy: Python में लिखा गया chemistry package है
    • EinsteinPy: symbolic और numerical general relativity के लिए Python package है
    • OctSymPy: SymPy का उपयोग करने वाला Octave के लिए symbolic package है
    • PyDy: Python में multibody dynamics को संभालता है
    • QMCPACK: C++-आधारित Quantum Monte Carlo project, जो unit tests के reference values बनाने और कुछ code generation के लिए SymPy का उपयोग करता है
    • SageMath: SymPy को शामिल करने वाला open source mathematics system है
  • development tools और code generation

    • devito: high-performance stencil computations के लिए symbolic DSL और JIT compiler है
    • Optlang: mathematical optimization problems को हल करने वाला Python package है
    • PyTorch TorchInductor: dynamic shape और stride support के लिए SymPy का उपयोग करता है
    • Spyder: Scientific Python development environment है, और IPython Console में पूरा SymPy support enable किया जा सकता है
    • symjit: SymPy expressions के लिए lightweight JIT compiler है
    • yt: volumetric data analysis और visualization के लिए Python package है, और yt का unit system unyt SymPy का उपयोग करता है

1 टिप्पणियां

 
GN⁺ 2024-03-01
Hacker News की राय
  • रोबोटिक्स में 3D transformation के नतीजे के तौर पर बड़े vectors इस्तेमाल होते हैं, और कई state variables के लिए derivatives यानी Jacobian निकालने पड़ते हैं, इसलिए expressions जल्दी ही गड़बड़ और जटिल हो जाते हैं
    SymPy से बड़े vectors को declarative तरीके से बनाकर, Jacobian calculate करके, नतीजे को सीधे project में इस्तेमाल हो सकने वाले C code के रूप में export कर रहा हूँ
    उदाहरण के लिए, अगर robot position और sensor position का dataset हो, तो robot center के सापेक्ष sensor position का अनुमान लगाने के लिए over-constrained system को gradient descent से solve किया जा सकता है, और इसके लिए जरूरी residual function और Jacobian SymPy से calculate किए जा सकते हैं

    • इसी तरह SymPy का इस्तेमाल करके orbital mechanics calculations के लिए जरूरी उलझे हुए derivatives संभाले थे
      पहले equations लिखे, झंझट वाला गणित SymPy पर छोड़ा, फिर output को C code में बदल दिया
      SymPy project असली product code में ज्यादा दिखाई नहीं देता, इसकी वजह शायद यह भी हो सकती है कि वह ऐसे intermediate calculations में इस्तेमाल होता है, फिर सिर्फ results product code में जाते हैं और symbolic calculation code फेंक दिया जाता है
    • यह library दिलचस्प हो सकती है: https://github.com/symforce-org/symforce
    • पहले लोगों को ऐसा काम Maple से करते देखा था, अब open source विकल्प मौजूद है यह देखकर अच्छा लगता है
      robotics और computer vision में ऐसा काम करने वाली एक शानदार library symforce है, जो SymPy इस्तेमाल करती है: https://github.com/symforce-org/symforce
    • आज ही यह काम cloth simulator बनाते समय किया
      बाकी nodes को fixed रखते हुए, हर node position को बारी-बारी से Newton step से update करके देखना चाहता था
    • जानना चाहूँगा कि आपने jax पर विचार किया है या नहीं
      Python से बाहर निकले बिना Jacobian को efficiently calculate किया जा सकता है, चाहें तो GPU भी इस्तेमाल कर सकते हैं, और API भी NumPy-compatible है
  • SymPy वाकई शानदार है, और कई सालों से इसे educational tool के रूप में इस्तेमाल करता आया हूँ
    Mathematica या Maple वगैरह की तुलना में इसे सबसे अच्छा विकल्प मानने की वजह यह है कि इसकी API functions ठीक उन verbs से मेल खाते हैं जिन्हें students गणित सीखते समय इस्तेमाल करते हैं: solve, expand, factor जैसे
    शुरू करने वालों के लिए छोटा tutorial: https://minireference.com/static/tutorials/sympy_tutorial.pd...
    executable notebook format भी है: https://colab.research.google.com/github/minireference/sympy... read-only: http://nbviewer.ipython.org/github/minireference/sympytut_no...
    अगर बिना install किए आजमाना चाहते हैं, तो SymPy live shell भी है: https://live.sympy.org/ WebAssembly की वजह से browser में Python और SymPy चलते हैं

    • SymPy की सबसे बड़ी कमी यह है कि सभी symbols पहले से define करने पड़ते हैं
      user द्वारा input किए गए expressions को process करते समय कौन-कौन से variables इस्तेमाल हुए हैं यह पता लगाने के लिए खुद expression parse करना पड़ता है, या user से symbols manually provide करवाने पड़ते हैं, जिससे काम और मुश्किल हो जाता है
  • symbolic math को undergraduate courses में गंभीर रूप से कम cover किया जाता है, और अगर exposure मिला भी तो वह आम तौर पर Mathematica या MATLAB जैसे proprietary software से बंधा हुआ था
    इसे कागज और पेन से सोचने के तरीके को अधूरा-सा extend करने वाले tool के रूप में सीखा, और जब advanced चीजों को source code में handle करते हैं तो abstractions जितनी गहरी होती जाती हैं, उतनी ही unstable हो जाती हैं
    उदाहरण के लिए मैं ऐसे math/engineering क्षेत्रों में काम करता हूँ जहाँ बहुत tensor calculations चाहिए होती हैं; मुख्य रूप से Maxima इस्तेमाल करता हूँ, लेकिन related packages सीमित और झंझट भरे हैं: https://arxiv.org/pdf/cs/0503073.pdf
    ज्यादा complex calculations के लिए अब SymPy इस्तेमाल करता हूँ, इसलिए नहीं कि उसकी symbolic processing खुद ज्यादा बेहतर है, बल्कि Python की पहले से मौजूद abstractions की वजह से
    शायद किसी दिन Norvig की Principles पढ़कर Maxima को अपनी जरूरतों के हिसाब से modify कर सकूँ; और अगर Maxima source code या tensor calculation implementations, symbolic tensor/geometric algebra पर बेहतर references हों तो जानना चाहूँगा

    • Maple की तरह जैसा दिखता है वैसा typeset input support करने वाली application Maple के अलावा कोई है क्या, यह जानने की उत्सुकता है
      जहाँ तक मुझे पता है Wolfram/Mathematica, LaTeX, SymPy, Jupyter, Sage वगैरह सभी math expressions लिखने और input करने के लिए typewriter-style text पर निर्भर करते हैं
      सिर्फ इसी एक वजह से Maple मुझे unique लगा, क्योंकि उसमें हाथ से लिखे जाने वाले रूप में ही input किया जा सकता है, और समझ नहीं आता कि यह feature ज्यादा common क्यों नहीं है
      क्या यह दूसरे लोगों के लिए भी barrier है, यह जानना चाहूँगा
    • एक करीबी दोस्त अक्सर बताता था कि उसने Coherence में Mathematica Notebook से optics और thermal calculations करने वाली production notebook बनाई थी
      उसके लिए वह सचमुच workhorse जैसा tool था
      बहुत पहले Derive5 से खेला था; उस समय वह सबसे सस्ता computer algebra system था, और मैंने programming एक अजीब one-line programming language में सीखी थी जिसमें सभी spaces हटाने पड़ते थे और parentheses balance का हमेशा ध्यान रखना पड़ता था
      पुराने files ढूँढकर GitHub पर डालने चाहिए, और सच में उन operations को किसी अधिक modern computer algebra system में फिर से implement करके (0,1) point के पास equal-length exponential family curves को और घना plot करना चाहता था
  • SymPy और Mathematica का benchmark उपलब्ध है: https://www.12000.org/my_notes/CAS_integration_tests/reports...
    नतीजे देखें तो Mathematica 1,523 समस्याएँ हल नहीं कर पाया, और SymPy 48,529 हल नहीं कर पाया
    अभी काफी कुछ catch up करना बाकी है

    • SymPy open source है और Mathematica नहीं है
      इसके अलावा, SymPy पर निर्भर SageMath तुलना के लिए ज्यादा नज़दीकी product है, और वह भी open source है
    • दिलचस्प तो है, लेकिन बताई गई website सिर्फ integration को cover करती है
    • जिज्ञासा है कि इतना बड़ा अंतर क्यों है
      उदाहरण के लिए, जानना चाहूँगा कि SymPy के approach में कोई बुनियादी खामी है क्या
  • SymPy: https://en.wikipedia.org/wiki/SymPy
    “How should logarithms be taught?” Python और SymPy का उपयोग: https://news.ycombinator.com/item?id=28518565#28519356
    “SymPy - a Python library for symbolic mathematics” (2020): https://news.ycombinator.com/item?id=23767513
    NumPy for Matlab users: https://numpy.org/doc/stable/user/numpy-for-matlab-users.htm...
    SymPy vs Matlab: https://github.com/sympy/sympy/wiki/SymPy-vs.-Matlab

  • https://github.com/idanpa/calcpy के साथ SymPy को calculator की तरह इस्तेमाल कर रहा हूँ

    • बिल्कुल वही रूप लगता है जिसकी तलाश थी
      default SymPy इस्तेमाल करने में थोड़ा झंझटभरा लगा था
  • SymPy Jupyter में बहुत अच्छी तरह काम करता है
    ये खुद बनाए हुए SymPy demo notebooks हैं
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/sympy... बहु-चर quadratic expression solve करना और गणितीय expressions को खूबसूरती से print करना
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/tiny-... तेजी से बनाए जाने वाले NumPy/pylab plots की cheatsheet, SymPy examples सहित
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/secan... मौजूदा Python function को SymPy से symbolically differentiate करके closed-form minimum खोजने का example
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/max-p... SymPy से basic circuit analysis और बुनियादी calculus
    https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/latex... MathJax formatting और SymPy को कई तरीकों से आज़माने की सामग्री, HAKMEM के Minsky circle algorithm का analysis सहित

  • 10 साल पहले जब general relativity में रुचि थी, तब Einstein field equations की symbolic calculation संभालने वाला एक simple program बनाना चाहता था
    योजना metric से शुरू करके affine connection, Ricci tensor वगैरह calculate करने की थी, और Python परिचित होने की वजह से SymPy अच्छा विकल्प लगा, लेकिन यह मुश्किल था और मैं उसे सच में चलने लायक नहीं बना पाया
    उस समय पहली बार इस्तेमाल कर रहे Mathematica से यह कुछ घंटों में कर लिया, और बाद में इसे expand करके बाद में प्रकाशित black hole paper में कई calculations के लिए इस्तेमाल किया
    अब देखने पर लगता है कि इस क्षेत्र में SymPy development काफी आगे बढ़ चुका है और उसके ऊपर अच्छी libraries बन गई हैं: https://docs.einsteinpy.org, https://github.com/spacetimeengineer/spacetimeengine
    अब Schwarzschild metric को handle करने वाला Jupyter notebook example भी है: https://github.com/sympy/sympy/blob/master/examples/intermed...

    • Sage Manifolds को देखना अच्छा रहेगा: https://sagemanifolds.obspm.fr/
      यह SageMath पर बना है, लेकिन मेरी जानकारी में calculation engine के रूप में SymPy भी इस्तेमाल किया जा सकता है
  • संख्यात्मक गणना करने वाले “physicist” के लिए SymPy काफ़ी हद तक उद्धारकर्ता जैसा था
    ज़्यादा advanced models को भी पहले prototype बनाकर देखना और बाद में C++ में optimize करना सुविधाजनक है
    Mathematica का बहुत ज़्यादा इस्तेमाल नहीं किया है, लेकिन अब भी लगता है कि इसकी symbolic processing क्षमता SymPy से ज़्यादा मज़बूत है या इसमें कम manual effort लगता है
    अच्छा होगा अगर Mathematica का ज़्यादा अनुभव रखने वाला कोई व्यक्ति वास्तविक अंतर साफ़ तौर पर समझा दे

    • Stephen Wolfram को अलग रख दें तो भी, Mathematica अब भी ज़्यादातर alternatives की तुलना में computer algebra system के रूप में काफ़ी आगे है
      Maple कुछ integrals में अच्छा है
      कमी यह है कि वे languages general-purpose language के तौर पर बहुत उपयुक्त नहीं हैं, और जब करने वाली algebraic manipulation इतनी जटिल न हो, तो “असली” language में काम करने का मन करता है
      Python सबसे बेहतर नहीं है, लेकिन काफ़ी उपयोगी है, और यह विशाल general-purpose ecosystem का लाभ उठाने का एक और उदाहरण है
  • SymPy अपना काम कर देता है
    आम तौर पर इसे SageMath combinatorics library के अंदर इस्तेमाल करता हूँ, लेकिन अब भी सोचता हूँ कि क्या यही तरीका standard है या अब SymPy इतना आगे बढ़ गया है कि इसे standalone इस्तेमाल किया जा सके

    • SageMath अच्छा दिखता है, लेकिन यह बात थोड़ी भारी लगती है कि यह अलग-अलग syntax और overlap करने वाली functionality वाले कई मौजूदा tools का संयोजन है
      क्योंकि internal consistency की कमी से workflow असंगत और इधर-उधर का लग सकता है
      असल में यह हिस्सा कैसा महसूस होता है, यह जानने की उत्सुकता है