{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Expression Trees" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What's an *expression tree*?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Variable('x')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pymbolic.primitives as p\n", "x = p.Variable(\"x\")\n", "y = p.Variable(\"y\")\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look what happens with a simple expression:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Sum((Variable('x'), 5))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x+5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It does not get evaluated.\n", "\n", "---\n", "\n", "Let's look at its type and structure in more detail." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "u = x+5" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "pymbolic.primitives.Sum" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(u)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(Variable('x'), 5)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.children" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OK, easy. What if we introduce a product?" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Sum((Variable('x'), Product((4, Variable('y')))))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u = x + 4*y\n", "u" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Variable('x')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.children[0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Product((4, Variable('y')))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.children[1]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.children[1].children[0]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Variable('y')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u.children[1].children[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This structure is a called a *tree*, because there is a *root* and *branches*." ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 }