Hmmm, it appears I picked a bad example there (correct me if I'm wrong, I've never taken a CS class). Cholesky decomp is twice as fast as LU, which isn't an order of magnitude difference. For large n, this can be important though. A better example may be using `together` on factorable polynomials. We could print out code for the expanded form of (x + a1)*(x + a2)*...*(x + an), or we could factor it, and reduce the number of operations significantly.
On Thu, Sep 18, 2014 at 6:03 PM, James Crist <crist...@umn.edu> wrote: > Oh hey, that's kinda neat. > > On one of the slides you mention that by generating equations symbolically >> you can change change algorithmic complexity. Can you give an example of >> this? > > > That hasn't happened yet, but is planned. Mostly, it has to do with the > idea that in SymPy we have knowledge about the properties of the > computations. We know if a variable is always positive, or real, or (most > importantly) the properties of a matrix (upper triangular, symmetric, > positive definite, etc...). For selecting matrix solving routines, this is > important. Based on Matthew's talk at SciPy a few years back. This is a > long way off, but should be achievable. > > In the immediate future we can start applying transformations to the > expressions to improve computation speed (not an order of complexity > change, but still speed improvements). Horner's method is already part of > sympy, and could be applied to polynomials by default to reduce the number > of flops needed to compute. We can also apply CSE at a much higher level > than gcc will, which is necessary for some of the large expressions that > are computed in mechanics. > > -Jim > > On Thursday, September 18, 2014 1:33:48 PM UTC-5, Aaron Meurer wrote: >> >> They are good slides. Good job Jim. >> >> On one of the slides you mention that by generating equations >> symbolically you can change change algorithmic complexity. Can you give an >> example of this? >> >> Aaron Meurer >> >> On Thu, Sep 18, 2014 at 1:29 PM, Jason Moore <moore...@gmail.com> wrote: >> >>> Jim's slides on SymPy code gen got into the Python weekly. >>> >>> Jason >>> moorepants.info >>> +01 530-601-9791 >>> >>> ---------- Forwarded message ---------- >>> From: Python Weekly <ra...@pythonweekly.com> >>> Date: Thu, Sep 18, 2014 at 11:06 AM >>> Subject: Python Weekly - Issue 157 >>> To: moore...@gmail.com >>> >>> >>> Email not displaying correctly? View it in your browser. >>> <http://us2.campaign-archive1.com/?u=e2e180baf855ac797ef407fc7&id=ce99590cba&e=c9acab854b> >>> Welcome to issue 157 of Python Weekly. Another packed issue this >>> week. Enjoy it! >>> >>> *Articles, Tutorials and Talks* >>> >>> Python bad practice, a concrete case >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=f16265daac&e=c9acab854b> >>> A lot of people read up on good Python practice, and there's plenty of >>> information about that on the Internet. This post shows a concrete case of >>> code that the author doesn't consider being the state of the art. >>> >>> Kernel tricks and nonlinear dimensionality reduction via RBF kernel PCA >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=2128e6807d&e=c9acab854b> >>> The focus of this article is to briefly introduce the idea of kernel >>> methods and to implement a Gaussian radius basis function (RBF) kernel that >>> is used to perform nonlinear dimensionality reduction via KBF kernel >>> principal component analysis (kPCA). >>> >>> Bad Ideas in Python: The Worst Thing I've Ever Done >>> <http://pythonweekly.us2.list-manage2.com/track/click?u=e2e180baf855ac797ef407fc7&id=bf9baee8d0&e=c9acab854b> >>> >>> In this talk, James Powell shows us his experiences with the worst and >>> "most evil" things he's encountered when coding in Python and gives demos >>> on how to get around those errors to turn them into good ideas. >>> >>> Network Communications Clustering with Python and MongoDB >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=7329900f00&e=c9acab854b> >>> In this post we'll be clustering the behavior of users on a corporate >>> network in order to identify malicious activity. The data will be stored in >>> MongoDB which we'll access via the Monary and PyMongo packages. We'll be >>> transforming data with NumPy and using scikit-learn for pre-processing and >>> clustering. >>> >>> Building a text editor with PyQt: Part 3 >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=bc911dfa9d&e=c9acab854b> >>> In the third part of this series, we'll be adding some slick extensions >>> to our text editor for Finding and replacing text, Inserting an image and >>> Word and symbol count >>> >>> Cracking Online Banking CAPTCHA Login Using Python >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=39a3bc5563&e=c9acab854b> >>> This post discusses a real world example on how to crack a login page >>> for one of the biggest leading banks in the Middle East! >>> >>> Postgresql HStore, JSON data-type and Arrays with Peewee ORM >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=c38d2adeb8&e=c9acab854b> >>> This post showcases the peewee support for HStore, JSON document store, >>> and arrays. >>> >>> Generating Fast and Correct Code with SymPy >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=4fc5a0d65d&e=c9acab854b> >>> All about the why and how of code generation in SymPy. Discusses the >>> current state of converting symbolic math into fast numeric code, and gives >>> a brief overview of current and future improvements. >>> >>> Pickling Python collections with non-built-in type keys and cycles >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=d5ecf7e0e7&e=c9acab854b> >>> A presentation of various problems and an effective solution for >>> pickling Python collections with non-built-in types as keys and cycles or >>> self references. Applies to dictionaries, default dictionaries, ordered >>> dictionaries, sets, and ordered sets, at all levels of the pickle and >>> cPickle protocol, in Python 2 and 3. >>> >>> Teaching an old dog new tricks -- or, how I learned to love Python's >>> str.format, and gave up on % >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=d27ba5298b&e=c9acab854b> >>> >>> DjangoCon 2014 Videos >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=a9439d5cf7&e=c9acab854b> >>> >>> Using Python Templates with Jinja and Google App Engine >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=9fe3bb445b&e=c9acab854b> >>> >>> Voice Recognition with Pocketsphinx in Python >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=285fae2f11&e=c9acab854b> >>> >>> PyGotham 2014 Videos >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=5cfe2ce95b&e=c9acab854b> >>> >>> Python + functional programming >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=5b0bfb96ff&e=c9acab854b> >>> >>> Introducing Blaze - Migrations >>> <http://pythonweekly.us2.list-manage2.com/track/click?u=e2e180baf855ac797ef407fc7&id=388a0ad8b1&e=c9acab854b> >>> >>> Kiwi PyCon 2014 Videos >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=c5619c2762&e=c9acab854b> >>> >>> Hit the Ground Running with MongoDB and Python >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=8695171a97&e=c9acab854b> >>> >>> How-To: Python Compare Two Images >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=4b2a04e6b4&e=c9acab854b> >>> >>> >>> *Books* >>> >>> High Performance Python: Practical Performant Programming for Humans >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=5573f3229a&e=c9acab854b> >>> Your Python code may run correctly, but you need it to run faster. By >>> exploring the fundamental theory behind design choices, this practical >>> guide helps you gain a deeper understanding of Python's implementation. >>> You'll learn how to locate performance bottlenecks and significantly speed >>> up your code in high-data-volume programs. >>> >>> >>> *Interesting Projects, Tools and Libraries* >>> >>> pep8radius >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=ed9b2ec5b0&e=c9acab854b> >>> Fixing the entire project of PEP8 infractions ("PEP8 storms") can lead >>> to merge conflicts, add noise to merges / pull requests and break (git) >>> blame. pep8radius solves this problem by fixing only those PEP8 infractions >>> incontained on the lines of the project which you've been working, leaving >>> these sections "better than you found it" whilst keeping your commits >>> focused on the areas of the codebase you were actually working on. >>> >>> Chronyk >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=f1cc7b684b&e=c9acab854b> >>> A Python 3 library for parsing human-written times and dates. >>> >>> ObjectPath >>> <http://pythonweekly.us2.list-manage2.com/track/click?u=e2e180baf855ac797ef407fc7&id=99775b2a99&e=c9acab854b> >>> ObjectPath is a query language similar to XPath or JSONPath, but much >>> more powerful thanks to embedded arithmetic calculations, comparison >>> mechanisms and built-in functions. This makes the language more like SQL in >>> terms of expressiveness, but it works over JSON documents rather than >>> relations >>> >>> Qtile >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=69df4e9d27&e=c9acab854b> >>> A full-featured, hackable tiling window manager written and configured >>> in Python. >>> >>> python bond >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=e721bf72f3&e=c9acab854b> >>> The Python module bond supports transparent remote/recursive evaluation >>> between Python and another interpreter through automatic call >>> serialization. It lets you call functions in other languages as they were >>> normal Python functions. It also allows other languages to call Python >>> functions as if they were native. >>> >>> Krakatau >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=5931e4bdbe&e=c9acab854b> >>> Java decompiler, assembler, and disassembler writte in Python. >>> >>> xmldataset >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=2664f1b713&e=c9acab854b> >>> xmldataset is designed to make the process of gathering your desired >>> data into a Python structure as simple as possible through its plaintext >>> collection schema, deliminated just like Python! >>> >>> ADR4Movie >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=54ef8efa5f&e=c9acab854b> >>> Generate an animated visualization of the asteroids in SDSS using >>> matplotlib. >>> >>> syncthing-gui >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=9c6b95704b&e=c9acab854b> >>> GTK3 & python based GUI and notification area icon for Syncthing. >>> >>> >>> *Upcoming Events and Webinars* >>> >>> Django Messaging: Build Distributed, Run Concurrent - Cambridge, MA >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=faacd91c13&e=c9acab854b> >>> Understand the growing role of messaging in today's state of the art web >>> applications, cloud computing infrastructures, and the Internet of Things >>> (IoT). This talk will take you on a tour of the various messaging libraries >>> and protocols that can be used with Django. Learn what ZeroMQ is, how to >>> leverage AMQP via RabbitMQ, or how to start solving your concurrent >>> problems quickly with Celery. >>> >>> Forum Contest: Create a rock-paper-scissors game in Python >>> <http://pythonweekly.us2.list-manage1.com/track/click?u=e2e180baf855ac797ef407fc7&id=dc386ef72a&e=c9acab854b> >>> Create a game using Python that let's players play a game of >>> rock-paper-scissors. The exact elements are up to you >>> (rock-paper-scissors-lizard-spock anyone?) as are the play mechanics, >>> but it should be runnable in the terminal using Python 3. Entries will be >>> judged based on code and design. >>> >>> Intro to Python Workshop - San Diego, CA >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=316d0f95d3&e=c9acab854b> >>> This is the next Intro to Python workshop cohosted by San Diego >>> PyLadies, San Diego Python, Inland Empire Pyladies, and Inland Empire >>> Python Users Group. >>> >>> Silicon Valley Python Meetup September 2014 - Mountain View, CA >>> <http://pythonweekly.us2.list-manage.com/track/click?u=e2e180baf855ac797ef407fc7&id=d378eff966&e=c9acab854b> >>> This talk will show how to use IPython and Plotly to make interactive >>> 2D, 3D, and streaming plots. We'll also demo how to convert matplotlib, >>> prettyplotlib, seaborn, and ggplot plots into web-based, shareable plots >>> drawn with D3.js (a JavaScript visualization library). >>> >>> *Share Python Weekly* [image: Facebook] >>> <http://www.facebook.com/share.php?u=http%3A%2F%2Fus2.campaign-archive1.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&t=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> Twitter] >>> <http://twitter.com/intent/tweet?text=Python%20Weekly%20-%20Issue%20%20157%20-%20http%3A%2F%2Feepurl.com%2F3xU7X> >>> [image: >>> Reddit] >>> <http://reddit.com/submit?url=http%3A%2F%2Fus2.campaign-archive2.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> StumbleUpon] >>> <http://www.stumbleupon.com/submit?url=http%3A%2F%2Fus2.campaign-archive1.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> DZone] >>> <http://www.dzone.com/links/add.html?url=http%3A%2F%2Fus2.campaign-archive1.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> LinkedIn] >>> <http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fus2.campaign-archive2.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> Digg] >>> <http://digg.com/submit?phase=2&url=http%3A%2F%2Fus2.campaign-archive2.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> Delicious] >>> <http://del.icio.us/post?url=http%3A%2F%2Fus2.campaign-archive1.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba&title=Python%20Weekly%20-%20Issue%20%20157> >>> [image: >>> Slashdot] >>> <http://slashdot.org/bookmark.pl?title=Python%20Weekly%20-%20Issue%20%20157&url=http%3A%2F%2Fus2.campaign-archive2.com%2F%3Fu%3De2e180baf855ac797ef407fc7%26id%3Dce99590cba> >>> >>> You are receiving our weekly newsletter because you signed up at >>> http://www.PythonWeekly.com. >>> >>> Unsubscribe >>> <http://pythonweekly.us2.list-manage.com/unsubscribe?u=e2e180baf855ac797ef407fc7&id=9e26887fc5&e=c9acab854b&c=ce99590cba> >>> moore...@gmail.com from this list | Forward to a friend >>> <http://us2.forward-to-friend.com/forward?u=e2e180baf855ac797ef407fc7&id=ce99590cba&e=c9acab854b> >>> | Update your profile >>> <http://pythonweekly.us2.list-manage2.com/profile?u=e2e180baf855ac797ef407fc7&id=9e26887fc5&e=c9acab854b> >>> *Our mailing address is:* >>> Python Weekly >>> Brooklyn >>> Brooklyn, NY 11209 >>> >>> Add us to your address book >>> <http://pythonweekly.us2.list-manage1.com/vcard?u=e2e180baf855ac797ef407fc7&id=9e26887fc5> >>> >>> *Copyright (C) 2014 Python Weekly All rights reserved.* >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to sympy+un...@googlegroups.com. >>> To post to this group, send email to sy...@googlegroups.com. >>> Visit this group at http://groups.google.com/group/sympy. >>> To view this discussion on the web visit https://groups.google.com/d/ >>> msgid/sympy/CAP7f1AjK72cVppMb1yHK9BckFg7fWkinTFnue4tpH3v7mu99Mw%40mail. >>> gmail.com >>> <https://groups.google.com/d/msgid/sympy/CAP7f1AjK72cVppMb1yHK9BckFg7fWkinTFnue4tpH3v7mu99Mw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to a topic in the > Google Groups "sympy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sympy/CyiFlRMJr5k/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/ca6ded35-e587-4954-ba48-7074b3439bae%40googlegroups.com > <https://groups.google.com/d/msgid/sympy/ca6ded35-e587-4954-ba48-7074b3439bae%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAJ2L7mf545RqPO0SD4aV7GEjnDnnzY4ahJ4yJyF1A4q4Ck4T3Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.