{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "```{post} 2023-11-17\n", "\n", "```\n", "\n", "# [PyTensor](https://github.com/pymc-devs/pytensor) Chat\n", "\n", "Ricardo Vieira reached out asking to see if we could chat about egglog and to explore if it could be used inside\n", "of PyTensor for rewriting.\n", "\n", "We set up a call and he aggreed to record it, so that we could share anything we talked about with others:\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/jpeg": "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", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "\n", "YouTubeVideo(\"8rb841pBhf0\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It was great to get some feedback on the Python bindings and see where the rough patches are. So thank you Ricardo for\n", "being game to explore this together!\n", "\n", "Some of the main takeaways for me where:\n", "\n", "- Having generic user defined sorts in egglog would be very useful, so that every library like PyTensor doesn't\n", " have to reimplement collection types for every sort. If we had them, we could say implement a `egglog.std.Tuple`\n", " class that would work like a tuple, and if you had a user defined `Int` class, you could do `Tuple[Int]`.\n", "- It was interested to see how Ricardo started implementing the Op types at the end, as custom classes, and translating\n", " the pure functions to them. It's a nice example of how you can write multiple interfaces, depending on the user,\n", " and right rewrites in whichever you are more comfortable with, as long as you can convert to/from them.\n", "\n", "Some further things we could explore in the future are:\n", "\n", "- implementing loop nesting in egglog\n", "- converting between the existing PyTensor types and egglog types, in a programatic way, so that we could play with rewrites\n", " without having to rewrite their whole project.\n", "\n", "If anyone else who works on a Python library thinks they could benefit from egglog, or have other questions, feel free\n", "to reach out!\n", "\n", "A cleaned up version of the notebook is below:\n", "\n", "---\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ZmFq-i9By7V4" }, "outputs": [], "source": [ "%%capture\n", "!pip install egglog\n", "!pip install anywidget" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "itgwmxIGy929" }, "outputs": [], "source": [ "from __future__ import annotations\n", "from typing import ClassVar, Tuple\n", "\n", "from functools import partial\n", "from egglog import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "fBDfQ7Y5y_8d" }, "outputs": [], "source": [ "import numpy as np\n", "import pytensor\n", "import pytensor.tensor as pt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "xWZfT2oq8a3U" }, "outputs": [], "source": [ "from traitlets.traitlets import Type\n", "\n", "egraph = EGraph()\n", "\n", "\n", "@egraph.class_\n", "class Int(Expr):\n", " def __init__(self, value: i64Like) -> None:\n", " ...\n", "\n", " @classmethod\n", " def var(cls, name: StringLike) -> Int:\n", " ...\n", "\n", "\n", "converter(i64, Int, Int)\n", "\n", "\n", "@egraph.class_\n", "class IntTuple(Expr):\n", " def __init__(self, first: Int) -> None:\n", " ...\n", "\n", " @classmethod\n", " def empty(cls) -> IntTuple:\n", " ...\n", "\n", " def __add__(self, other: IntTuple) -> IntTuple:\n", " ...\n", "\n", " def length(self) -> Int:\n", " ...\n", "\n", " def __getitem__(self, i: Int) -> Int:\n", " ...\n", "\n", "\n", "converter(\n", " tuple,\n", " IntTuple,\n", " lambda x: (\n", " IntTuple(convert(x[0], Int)) + convert(x[1:], IntTuple)\n", " if len(x) > 1\n", " else (IntTuple(convert(x[0], Int)) if x else IntTuple.empty())\n", " ),\n", ")\n", "converter(int, IntTuple, lambda i: IntTuple(Int(i64(i))))\n", "converter(i64, IntTuple, lambda i: IntTuple(Int(i)))\n", "converter(Int, IntTuple, lambda i: IntTuple(i))\n", "\n", "\n", "@egraph.register\n", "def int_tuple_rules(int_tuple: IntTuple, i: i64, j: i64):\n", " # Handle tuple concatenation and access\n", " yield rewrite(IntTuple(i)[0]).to(Int(i))\n", " yield rewrite((IntTuple(i) + int_tuple)[0]).to(Int(i))\n", " yield rewrite((IntTuple(i) + int_tuple)[j]).to(int_tuple[Int(j - 1)], j > 0)\n", "\n", "\n", "Shape = IntTuple\n", "\n", "\n", "@egraph.class_\n", "class Tensor(Expr):\n", " def __init__(self, name: StringLike, shape: Shape) -> None:\n", " ...\n", "\n", " @property\n", " def shape(self) -> Shape:\n", " ...\n", "\n", " @property\n", " def ndim(self) -> i64:\n", " ...\n", "\n", "\n", "@egraph.register\n", "def inline_tensor_shape(x: Tensor, name: String, shape: Shape, i: Int):\n", " yield rewrite(Tensor(name, shape).shape).to(shape)\n", "\n", "\n", "@egraph.class_\n", "class UnaryOp(Expr):\n", " def __call__(self, x: Tensor) -> Tensor:\n", " ...\n", "\n", "\n", "@egraph.class_\n", "class BinaryOp(Expr):\n", " def __call__(self, x: Tensor, y: Tensor) -> Tensor:\n", " ...\n", "\n", "\n", "@egraph.function(cost=1)\n", "def Squeeze(axis: IntTuple) -> UnaryOp:\n", " ...\n", "\n", "\n", "def split_merge_reorder_axis_op(op, x: Tensor, axis: IntTuple, i: i64, j: i64):\n", " # Split into consecutive axis applications\n", " yield (rewrite(op(axis=(i,) + axis)(x)).to(op(axis=(i,))(op(axis=axis)(x))))\n", " # Swap consecutive axis applications\n", " yield (\n", " rewrite(op(axis=(i,))(op(axis=(j,))(x))).to(\n", " op(axis=(j - 1,))(op(axis=(i,))(x)),\n", " i < j,\n", " )\n", " )\n", " yield (\n", " rewrite(op(axis=(i,))(op(axis=(j,))(x))).to(\n", " op(axis=(j,))(op(axis=(i + 1,))(x)),\n", " i > j,\n", " )\n", " )\n", " # Merge from consecutive axis applications\n", " yield (\n", " rewrite(op(axis=(i,))(op(axis=(j,))(x))).to(\n", " op(axis=(i, j))(x),\n", " i < j,\n", " )\n", " )\n", " yield (\n", " rewrite(op(axis=(i,))(op(axis=(j,) + axis)(x))).to(\n", " op(axis=(i,) + (j + axis))(x),\n", " i < j,\n", " )\n", " )\n", "\n", "\n", "@egraph.register\n", "def squeeze_rules(\n", " x: Tensor,\n", " axis: IntTuple,\n", " i: i64,\n", " j: i64,\n", "):\n", " yield from split_merge_reorder_axis_op(Squeeze, x, axis, i, j)\n", "\n", " # Squeeze.shape\n", " yield (rewrite(Squeeze(axis=(i,))(x).shape[j]).to(x.shape[j + 1], i <= j))\n", " yield (rewrite(Squeeze(axis=(i,))(x).shape[j]).to(x.shape[j], i > j))\n", "\n", "\n", "@egraph.class_\n", "class OpType(Expr):\n", " ...\n", "\n", "\n", "ScalarAdd = egraph.constant(\"ScalarAdd\", OpType)\n", "ScalarMul = egraph.constant(\"ScalarMul\", OpType)\n", "ScalarDiv = egraph.constant(\"ScalarDiv\", OpType)\n", "\n", "\n", "@egraph.function(cost=10)\n", "def Reduce(scalar_op: OpType, axis: IntTuple) -> UnaryOp:\n", " ...\n", "\n", "\n", "@egraph.function(cost=5)\n", "def Elemwise(scalar_op: OpType) -> BinaryOp:\n", " ...\n", "\n", "\n", "Mul = Elemwise(ScalarMul)\n", "Div = Elemwise(ScalarDiv)\n", "Sum = partial(Reduce, ScalarAdd)\n", "\n", "\n", "@egraph.register\n", "def sum_rules(\n", " x: Tensor,\n", " y: Tensor,\n", " z: Tensor,\n", " i: i64,\n", " j: i64,\n", " axis: IntTuple,\n", " axis2: IntTuple,\n", " op: OpType,\n", "):\n", " any_reduce_op = partial(Reduce, op)\n", " yield from split_merge_reorder_axis_op(any_reduce_op, x, axis, i, j)\n", "\n", " # Introduce shape[i] needed for removing useless reductions\n", " yield (rule(eq(y).to(any_reduce_op(axis=(i,))(x))).then(x.shape[i]))\n", "\n", " # Remove useless reductions\n", " yield (rewrite(any_reduce_op(axis=(i,))(x)).to(Squeeze(axis=(i,))(x), eq(x.shape[i]).to(Int(1))))\n", "\n", " # Introduce shape[i] needed for factoring out multiplication/division out of sum\n", " yield (rule(eq(z).to(Sum(axis=(i,))(Elemwise(op)(x, y)))).then(y.shape[i]))\n", "\n", " # Factor multiplication/division out of sum\n", " for elemwise_op in (Mul, Div):\n", " yield (\n", " rewrite(Sum(axis=(i,))(elemwise_op(x, y))).to(\n", " elemwise_op(\n", " Sum(axis=(i,))(x),\n", " Squeeze(axis=(i,))(y),\n", " ),\n", " eq(y.shape[i]).to(Int(1)),\n", " )\n", " )\n", "\n", "\n", "x = Tensor(\"x\", (Int.var(\"x_dim_0\"), 5, 7))\n", "y = Tensor(\"y\", (1, 5, 1))\n", "expr = Sum(axis=(0, 2))(Div(x, y))\n", "# expr = Sum(axis=(0, 2))(y)\n", "\n", "egraph.register(expr)\n", "# egraph" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "rAcuuaK55_ks", "outputId": "c3fe65ef-038b-4b4f-cb7f-a3e9fddc6301" }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "%3\n", "\n", "\n", "outer_cluster_8\n", "\n", "\n", "cluster_8\n", "\n", "\n", "\n", "outer_cluster_3\n", "\n", "\n", "cluster_3\n", "\n", "\n", "\n", "outer_cluster_35\n", "\n", "\n", "cluster_35\n", "\n", "\n", "\n", "outer_cluster_40\n", "\n", "\n", "cluster_40\n", "\n", "\n", "\n", "outer_cluster_51\n", "\n", "\n", "cluster_51\n", "\n", "\n", "\n", "outer_cluster_13\n", "\n", "\n", "cluster_13\n", "\n", "\n", "\n", "outer_cluster_71\n", "\n", "\n", "cluster_71\n", "\n", "\n", "\n", "outer_cluster_62\n", "\n", "\n", "cluster_62\n", "\n", "\n", "\n", "outer_cluster_9\n", "\n", "\n", "cluster_9\n", "\n", "\n", "\n", "outer_cluster_37\n", "\n", "\n", "cluster_37\n", "\n", "\n", "\n", "outer_cluster_1\n", "\n", "\n", "cluster_1\n", "\n", "\n", "\n", "outer_cluster_66\n", "\n", "\n", "cluster_66\n", "\n", "\n", "\n", "outer_cluster_11\n", "\n", "\n", "cluster_11\n", "\n", "\n", "\n", "outer_cluster_61\n", "\n", "\n", "cluster_61\n", "\n", "\n", "\n", "outer_cluster_41\n", "\n", "\n", "cluster_41\n", "\n", "\n", "\n", "outer_cluster_10\n", "\n", "\n", "cluster_10\n", "\n", "\n", "\n", "outer_cluster_2\n", "\n", "\n", "cluster_2\n", "\n", "\n", "\n", "outer_cluster_60\n", "\n", "\n", "cluster_60\n", "\n", "\n", "\n", "outer_cluster_65\n", "\n", "\n", "cluster_65\n", "\n", "\n", "\n", "outer_cluster_5\n", "\n", "\n", "cluster_5\n", "\n", "\n", "\n", "outer_cluster_19\n", "\n", "\n", "cluster_19\n", "\n", "\n", "\n", "outer_cluster_4\n", "\n", "\n", "cluster_4\n", "\n", "\n", "\n", "outer_cluster_20\n", "\n", "\n", "cluster_20\n", "\n", "\n", "\n", "outer_cluster_12\n", "\n", "\n", "cluster_12\n", "\n", "\n", "\n", "outer_cluster_29\n", "\n", "\n", "cluster_29\n", "\n", "\n", "\n", "outer_cluster_36\n", "\n", "\n", "cluster_36\n", "\n", "\n", "\n", "outer_cluster_48\n", "\n", "\n", "cluster_48\n", "\n", "\n", "\n", "outer_cluster_15\n", "\n", "\n", "cluster_15\n", "\n", "\n", "\n", "outer_cluster_50\n", "\n", "\n", "cluster_50\n", "\n", "\n", "\n", "outer_cluster_70\n", "\n", "\n", "cluster_70\n", "\n", "\n", "\n", "outer_cluster_34\n", "\n", "\n", "cluster_34\n", "\n", "\n", "\n", "outer_cluster_39\n", "\n", "\n", "cluster_39\n", "\n", "\n", "\n", "outer_cluster_14\n", "\n", "\n", "cluster_14\n", "\n", "\n", "\n", "outer_cluster_0\n", "\n", "\n", "cluster_0\n", "\n", "\n", "\n", "outer_cluster_7\n", "\n", "\n", "cluster_7\n", "\n", "\n", "\n", "outer_cluster_String-1618856268753343266\n", "\n", "\n", "cluster_String-1618856268753343266\n", "\n", "\n", "\n", "outer_cluster_String-313937328870544552\n", "\n", "\n", "cluster_String-313937328870544552\n", "\n", "\n", "\n", "outer_cluster_String-6766843149853318713\n", "\n", "\n", "cluster_String-6766843149853318713\n", "\n", "\n", "\n", "outer_cluster_22\n", "\n", "\n", "cluster_22\n", "\n", "\n", "\n", "outer_cluster_45\n", "\n", "\n", "cluster_45\n", "\n", "\n", "\n", "outer_cluster_23\n", "\n", "\n", "cluster_23\n", "\n", "\n", "\n", "outer_cluster_58\n", "\n", "\n", "cluster_58\n", "\n", "\n", "\n", "outer_cluster_52\n", "\n", "\n", "cluster_52\n", "\n", "\n", "\n", "outer_cluster_54\n", "\n", "\n", "cluster_54\n", "\n", "\n", "\n", "outer_cluster_56\n", "\n", "\n", "cluster_56\n", "\n", "\n", "\n", "outer_cluster_24\n", "\n", "\n", "cluster_24\n", "\n", "\n", "\n", "outer_cluster_32\n", "\n", "\n", "cluster_32\n", "\n", "\n", "\n", "outer_cluster_43\n", "\n", "\n", "cluster_43\n", "\n", "\n", "\n", "outer_cluster_27\n", "\n", "\n", "cluster_27\n", "\n", "\n", "\n", "outer_cluster_17\n", "\n", "\n", "cluster_17\n", "\n", "\n", "\n", "outer_cluster_67\n", "\n", "\n", "cluster_67\n", "\n", "\n", "\n", "outer_cluster_26\n", "\n", "\n", "cluster_26\n", "\n", "\n", "\n", "outer_cluster_25\n", "\n", "\n", "cluster_25\n", "\n", "\n", "\n", "outer_cluster_53\n", "\n", "\n", "cluster_53\n", "\n", "\n", "\n", "outer_cluster_6\n", "\n", "\n", "cluster_6\n", "\n", "\n", "\n", "outer_cluster_44\n", "\n", "\n", "cluster_44\n", "\n", "\n", "\n", "outer_cluster_57\n", "\n", "\n", "cluster_57\n", "\n", "\n", "\n", "outer_cluster_31\n", "\n", "\n", "cluster_31\n", "\n", "\n", "\n", "outer_cluster_i64-4208978898528913939\n", "\n", "\n", "cluster_i64-4208978898528913939\n", "\n", "\n", "\n", "outer_cluster_i64-5871781006564002453\n", "\n", "\n", "cluster_i64-5871781006564002453\n", "\n", "\n", "\n", "outer_cluster_i64-10912160959110460649\n", "\n", "\n", "cluster_i64-10912160959110460649\n", "\n", "\n", "\n", "outer_cluster_i64-11743562013128004906\n", "\n", "\n", "cluster_i64-11743562013128004906\n", "\n", "\n", "\n", "outer_cluster_i64-0\n", "\n", "\n", "cluster_i64-0\n", "\n", "\n", "\n", "\n", "Elemwise-4208978898528913939:s->ScalarDiv-0\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-11743562013128004906:s->i64-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-2427221081489190903:s->Tensor_shape-10964134587551653303\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-2427221081489190903:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-10964134587551653303:s->UnaryOp___call__-8391183972302725451\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-0:s->i64-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14535344522394967184:s->Tensor_shape-3429551472952562336\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14535344522394967184:s->IntTuple___getitem__-8609920828969388276\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-3429551472952562336:s->UnaryOp___call__-10760501220358611293\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-8609920828969388276:s->Int___init__-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-8609920828969388276:s->IntTuple___add__-3515898189561353625\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6451836211519040652:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6451836211519040652:s->IntTuple___add__-16058157226959687954\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-16058157226959687954:s->IntTuple___init__-15952540911656918845\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-16058157226959687954:s->IntTuple___add__-14593153318476900644\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-4208978898528913939:s->i64-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6611095213683386216:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6611095213683386216:s->Tensor_shape-10184707161975301700\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-10184707161975301700:s->UnaryOp___call__-10053986080337813965\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-18195398224647045558:s->Int___init__-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-18195398224647045558:s->Tensor_shape-7586556743040283621\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-7586556743040283621:s->Tensor___init__-1575189424824699418\n", "\n", "\n", "\n", "\n", "\n", "Int_var-1618856268753343266:s->String-1618856268753343266\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-7613425605146757649:s->Int___init__-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-7613425605146757649:s->Tensor_shape-5923754635005195107\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-5923754635005195107:s->BinaryOp___call__-4194065315749295272\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14456597069198672103:s->Tensor_shape-12678910324027934471\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14456597069198672103:s->IntTuple___getitem__-10395939792580839918\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-12678910324027934471:s->UnaryOp___call__-9097699112323522779\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10395939792580839918:s->IntTuple___add__-5343794467401528509\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10395939792580839918:s->IntTuple___getitem__-1906738768387841566\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-10912160959110460649:s->i64-10912160959110460649\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-5871781006564002453:s->i64-5871781006564002453\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14040062012979708074:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14040062012979708074:s->Tensor_shape-3481525101393754990\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-3481525101393754990:s->UnaryOp___call__-3344968852115526449\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-5343794467401528509:s->IntTuple___init__-7690503999922668929\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-5343794467401528509:s->IntTuple___init__-9249358851075372135\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-1906738768387841566:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-1906738768387841566:s->Tensor_shape-51973628441192654\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10514990538936846041:s->IntTuple___getitem__-14040062012979708074\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10514990538936846041:s->Tensor_shape-5975728263446387761\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-5975728263446387761:s->UnaryOp___call__-4195639504827048526\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-3515898189561353625:s->IntTuple___add__-5343794467401528509\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-3515898189561353625:s->IntTuple___init__-7690503999922668929\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-9335705567684163424:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-9335705567684163424:s->IntTuple___init__-7690503999922668929\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-7690503999922668929:s->IntTuple___getitem__-10395939792580839918\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-51973628441192654:s->Tensor___init__-14358371401161707118\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-910243544565210939:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-910243544565210939:s->Tensor_shape-5923754635005195107\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-15952540911656918845:s->Int_var-1618856268753343266\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-5871781006564002453:s->Int___init__-0\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3344968852115526449:s->Tensor___init__-14358371401161707118\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3344968852115526449:s->Squeeze-5040379952546458196\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-9097699112323522779:s->Tensor___init__-1575189424824699418\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-9097699112323522779:s->Reduce-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-15318938057191675792:s->IntTuple___init__-5871781006564002453\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-15318938057191675792:s->IntTuple___init__-17615343019692007359\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-17615343019692007359:s->Int___init__-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-9249358851075372135:s->Int___init__-10912160959110460649\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-14358371401161707118:s->Tensor_shape-51973628441192654\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-14358371401161707118:s->String-6766843149853318713\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4194065315749295272:s->Elemwise-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4194065315749295272:s->Tensor___init__-14358371401161707118\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4194065315749295272:s->Tensor___init__-1575189424824699418\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-4195639504827048526:s->Tensor___init__-14358371401161707118\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-4195639504827048526:s->Squeeze-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-14593153318476900644:s->IntTuple___init__-9249358851075372135\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-14593153318476900644:s->IntTuple___init__-2546176790493825425\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-2546176790493825425:s->Int___init__-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-1575189424824699418:s->Tensor_shape-7586556743040283621\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-1575189424824699418:s->String-313937328870544552\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10053986080337813965:s->Tensor___init__-1575189424824699418\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10053986080337813965:s->Reduce-5040379952546458196\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-8391183972302725451:s->BinaryOp___call__-4194065315749295272\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-8391183972302725451:s->Reduce-5040379952546458196\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10760501220358611293:s->BinaryOp___call__-4194065315749295272\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10760501220358611293:s->Reduce-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-11743562013128004906:s->IntTuple___init__-5871781006564002453\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3636617994337743549:s->UnaryOp___call__-4195639504827048526\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3636617994337743549:s->Squeeze-883374682458736911\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-883374682458736911:s->IntTuple___init__-7690503999922668929\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7625190977779610862:s->UnaryOp___call__-3344968852115526449\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7625190977779610862:s->Squeeze-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-2183379458487809452:s->Tensor___init__-14358371401161707118\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-2183379458487809452:s->Squeeze-10912160959110460649\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-10912160959110460649:s->IntTuple___add__-15318938057191675792\n", "\n", "\n", "\n", "\n", "\n", "Reduce-5040379952546458196:s->IntTuple___init__-17615343019692007359\n", "\n", "\n", "\n", "\n", "\n", "Reduce-5040379952546458196:s->ScalarAdd-0\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-5040379952546458196:s->IntTuple___init__-17615343019692007359\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-15458927460662043536:s->UnaryOp___call__-9097699112323522779\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-15458927460662043536:s->Reduce-883374682458736911\n", "\n", "\n", "\n", "\n", "\n", "Reduce-883374682458736911:s->IntTuple___init__-7690503999922668929\n", "\n", "\n", "\n", "\n", "\n", "Reduce-883374682458736911:s->ScalarAdd-0\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-13202730753970051410:s->UnaryOp___call__-10053986080337813965\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-13202730753970051410:s->Reduce-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "Reduce-11743562013128004906:s->IntTuple___init__-5871781006564002453\n", "\n", "\n", "\n", "\n", "\n", "Reduce-11743562013128004906:s->ScalarAdd-0\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-593394598656903612:s->Tensor___init__-1575189424824699418\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-593394598656903612:s->Reduce-10912160959110460649\n", "\n", "\n", "\n", "\n", "\n", "Reduce-10912160959110460649:s->IntTuple___add__-15318938057191675792\n", "\n", "\n", "\n", "\n", "\n", "Reduce-10912160959110460649:s->ScalarAdd-0\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-7183646024568558754:s->Elemwise-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-7183646024568558754:s->UnaryOp___call__-7625190977779610862\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-7183646024568558754:s->UnaryOp___call__-13202730753970051410\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7296576659238450322:s->BinaryOp___call__-4194065315749295272\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7296576659238450322:s->Reduce-10912160959110460649\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-5720121267812153097:s->Reduce-11743562013128004906\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-5720121267812153097:s->BinaryOp___call__-17648236956133224341\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-17648236956133224341:s->Elemwise-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-17648236956133224341:s->UnaryOp___call__-3344968852115526449\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-17648236956133224341:s->UnaryOp___call__-10053986080337813965\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-6261542238027864055:s->Reduce-883374682458736911\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-6261542238027864055:s->BinaryOp___call__-4681938636454801376\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4681938636454801376:s->Elemwise-4208978898528913939\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4681938636454801376:s->UnaryOp___call__-9097699112323522779\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4681938636454801376:s->UnaryOp___call__-4195639504827048526\n", "\n", "\n", "\n", "\n", "\n", "Elemwise-4208978898528913939\n", "\n", "\n", "Elemwise\n", "\n", "\n", "\n", "\n", "\n", "\n", "ScalarDiv-0\n", "\n", "\n", "ScalarDiv\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-11743562013128004906\n", "\n", "\n", "Int___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "i64-11743562013128004906\n", "\n", "\n", "2\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-2427221081489190903\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-10964134587551653303\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-0\n", "\n", "\n", "Int___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14535344522394967184\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-3429551472952562336\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-8609920828969388276\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6451836211519040652\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-16058157226959687954\n", "\n", "\n", "IntTuple___add__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-4208978898528913939\n", "\n", "\n", "Int___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "i64-4208978898528913939\n", "\n", "\n", "7\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-6611095213683386216\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-10184707161975301700\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-18195398224647045558\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-7586556743040283621\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int_var-1618856268753343266\n", "\n", "\n", "Int_var\n", "\n", "\n", "\n", "\n", "\n", "\n", "String-1618856268753343266\n", "\n", "\n", ""x_dim_0"\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-7613425605146757649\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-5923754635005195107\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "i64-0\n", "\n", "\n", "0\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14456597069198672103\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-12678910324027934471\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10395939792580839918\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-10912160959110460649\n", "\n", "\n", "Int___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "i64-10912160959110460649\n", "\n", "\n", "5\n", "\n", "\n", "\n", "\n", "\n", "\n", "Int___init__-5871781006564002453\n", "\n", "\n", "Int___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "i64-5871781006564002453\n", "\n", "\n", "1\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-14040062012979708074\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-3481525101393754990\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-5343794467401528509\n", "\n", "\n", "IntTuple___add__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-1906738768387841566\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-10514990538936846041\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-5975728263446387761\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-3515898189561353625\n", "\n", "\n", "IntTuple___add__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-9335705567684163424\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-7690503999922668929\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor_shape-51973628441192654\n", "\n", "\n", "Tensor_shape\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___getitem__-910243544565210939\n", "\n", "\n", "IntTuple___getitem__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-15952540911656918845\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-5871781006564002453\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3344968852115526449\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-9097699112323522779\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-15318938057191675792\n", "\n", "\n", "IntTuple___add__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-17615343019692007359\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-9249358851075372135\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-14358371401161707118\n", "\n", "\n", "Tensor___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4194065315749295272\n", "\n", "\n", "BinaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-4195639504827048526\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___add__-14593153318476900644\n", "\n", "\n", "IntTuple___add__\n", "\n", "\n", "\n", "\n", "\n", "\n", "IntTuple___init__-2546176790493825425\n", "\n", "\n", "IntTuple___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Tensor___init__-1575189424824699418\n", "\n", "\n", "Tensor___init__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10053986080337813965\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-8391183972302725451\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-10760501220358611293\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "ScalarAdd-0\n", "\n", "\n", "ScalarAdd\n", "\n", "\n", "\n", "\n", "\n", "\n", "String-313937328870544552\n", "\n", "\n", ""x"\n", "\n", "\n", "\n", "\n", "\n", "\n", "String-6766843149853318713\n", "\n", "\n", ""y"\n", "\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-11743562013128004906\n", "\n", "\n", "Squeeze\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-3636617994337743549\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-883374682458736911\n", "\n", "\n", "Squeeze\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7625190977779610862\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-2183379458487809452\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-10912160959110460649\n", "\n", "\n", "Squeeze\n", "\n", "\n", "\n", "\n", "\n", "\n", "Reduce-5040379952546458196\n", "\n", "\n", "Reduce\n", "\n", "\n", "\n", "\n", "\n", "\n", "Squeeze-5040379952546458196\n", "\n", "\n", "Squeeze\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-15458927460662043536\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Reduce-883374682458736911\n", "\n", "\n", "Reduce\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-13202730753970051410\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Reduce-11743562013128004906\n", "\n", "\n", "Reduce\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-593394598656903612\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "Reduce-10912160959110460649\n", "\n", "\n", "Reduce\n", "\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-7183646024568558754\n", "\n", "\n", "BinaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-7296576659238450322\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-5720121267812153097\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-17648236956133224341\n", "\n", "\n", "BinaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "UnaryOp___call__-6261542238027864055\n", "\n", "\n", "UnaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "\n", "BinaryOp___call__-4681938636454801376\n", "\n", "\n", "BinaryOp___call__\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "egraph.run(20)\n", "egraph.display(n_inline_leaves=0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 70 }, "id": "xa_NKCF74p4H", "outputId": "ab6a53d7-7862-4a54-a996-2308631a038c" }, "outputs": [ { "data": { "text/html": [ "
Reduce(ScalarAdd, IntTuple(Int(0)) + IntTuple(Int(2)))(\n",
              "    Elemwise(ScalarDiv)(Tensor("x", IntTuple(Int.var("x_dim_0")) + (IntTuple(Int(5)) + IntTuple(Int(7)))), Tensor("y", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1)))))\n",
              ")\n",
              "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{n}{Reduce}\\PY{p}{(}\\PY{n}{ScalarAdd}\\PY{p}{,} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{0}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{2}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{(}\n", " \\PY{n}{Elemwise}\\PY{p}{(}\\PY{n}{ScalarDiv}\\PY{p}{)}\\PY{p}{(}\\PY{n}{Tensor}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{x}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{,} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{o}{.}\\PY{n}{var}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{x\\PYZus{}dim\\PYZus{}0}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{p}{(}\\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{5}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{7}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{,} \\PY{n}{Tensor}\\PY{p}{(}\\PY{l+s+s2}{\\PYZdq{}}\\PY{l+s+s2}{y}\\PY{l+s+s2}{\\PYZdq{}}\\PY{p}{,} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{p}{(}\\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{5}\\PY{p}{)}\\PY{p}{)} \\PY{o}{+} \\PY{n}{IntTuple}\\PY{p}{(}\\PY{n}{Int}\\PY{p}{(}\\PY{l+m+mi}{1}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\\PY{p}{)}\n", "\\PY{p}{)}\n", "\\end{Verbatim}\n" ], "text/plain": [ "Reduce(ScalarAdd, IntTuple(Int(0)) + IntTuple(Int(2)))(\n", " Elemwise(ScalarDiv)(Tensor(\"x\", IntTuple(Int.var(\"x_dim_0\")) + (IntTuple(Int(5)) + IntTuple(Int(7)))), Tensor(\"y\", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1)))))\n", ")" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "egraph.extract(expr)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uVjDI5hr6fZ3", "outputId": "4b05f145-14cc-41a5-a5e5-0a2db7019adc" }, "outputs": [ { "data": { "text/plain": [ "[Elemwise(ScalarDiv)(\n", " Reduce(ScalarAdd, IntTuple(Int(0)) + IntTuple(Int(2)))(Tensor(\"x\", IntTuple(Int.var(\"x_dim_0\")) + (IntTuple(Int(5)) + IntTuple(Int(7))))),\n", " Squeeze(IntTuple(Int(0)) + IntTuple(Int(2)))(Tensor(\"y\", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1))))),\n", " ),\n", " Reduce(ScalarAdd, IntTuple(Int(0)) + IntTuple(Int(2)))(\n", " Elemwise(ScalarDiv)(Tensor(\"x\", IntTuple(Int.var(\"x_dim_0\")) + (IntTuple(Int(5)) + IntTuple(Int(7)))), Tensor(\"y\", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1)))))\n", " ),\n", " Reduce(ScalarAdd, IntTuple(Int(0)))(\n", " Reduce(ScalarAdd, IntTuple(Int(2)))(\n", " Elemwise(ScalarDiv)(\n", " Tensor(\"x\", IntTuple(Int.var(\"x_dim_0\")) + (IntTuple(Int(5)) + IntTuple(Int(7)))), Tensor(\"y\", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1))))\n", " )\n", " )\n", " ),\n", " Reduce(ScalarAdd, IntTuple(Int(1)))(\n", " Reduce(ScalarAdd, IntTuple(Int(0)))(\n", " Elemwise(ScalarDiv)(\n", " Tensor(\"x\", IntTuple(Int.var(\"x_dim_0\")) + (IntTuple(Int(5)) + IntTuple(Int(7)))), Tensor(\"y\", IntTuple(Int(1)) + (IntTuple(Int(5)) + IntTuple(Int(1))))\n", " )\n", " )\n", " )]" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "egraph.extract_multiple(expr, 10)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "mw6a1kafJNax" }, "outputs": [], "source": [ "egraph.check(\n", " eq(Sum(axis=(0, 2))(Div(x, y))).to(\n", " # Sum(axis=0)(Mul(Sum(axis=0)(x), Squeeze(axis=0)(y)))\n", " Div(\n", " Sum(axis=(0, 2))(x),\n", " Squeeze(axis=(0, 2))(y),\n", " )\n", " # Sum(axis=(0,))(Sum(axis=(1, 2))(y))\n", " # Squeeze(axis=(0, 2))(y)\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "NgovSVpBRpu0" }, "outputs": [], "source": [] } ], "metadata": { "mystnb": { "execution_mode": "off" }, "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 0 }