From 3ab291131edda0b413569ddb0f4bfb3a173f0f18 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Mon, 26 Dec 2016 22:44:50 +0000 Subject: [PATCH 1/8] Update examples (#42) * Delete some unnecessary files; update Annulus notebook * Basic separators notebook Remove example notebooks --- examples/Annulus.ipynb | 182 -- examples/Billiard.ipynb | 336 --- examples/Calculate pi.ipynb | 775 ------- examples/Logistic map.ipynb | 1947 ----------------- examples/Set inversion.ipynb | 1827 ---------------- examples/Sliced solid torus.ipynb | 253 --- .../Solid torus and implicit equations.ipynb | 1652 -------------- examples/Solid torus.ipynb | 209 -- examples/Surface.ipynb | 380 ---- examples/coloured_solid_torus.png | Bin 264667 -> 0 bytes examples/draw_boxes.jl | 47 - examples/draw_cubes.jl | 58 - examples/ring.png | Bin 24921 -> 0 bytes examples/robot_kinematics.jl | 19 - examples/set_inversion.jl | 15 - examples/tangle.jld | Bin 4023672 -> 0 bytes 16 files changed, 7700 deletions(-) delete mode 100644 examples/Annulus.ipynb delete mode 100644 examples/Billiard.ipynb delete mode 100644 examples/Calculate pi.ipynb delete mode 100644 examples/Logistic map.ipynb delete mode 100644 examples/Set inversion.ipynb delete mode 100644 examples/Sliced solid torus.ipynb delete mode 100644 examples/Solid torus and implicit equations.ipynb delete mode 100644 examples/Solid torus.ipynb delete mode 100644 examples/Surface.ipynb delete mode 100644 examples/coloured_solid_torus.png delete mode 100644 examples/draw_boxes.jl delete mode 100644 examples/draw_cubes.jl delete mode 100644 examples/ring.png delete mode 100644 examples/robot_kinematics.jl delete mode 100644 examples/set_inversion.jl delete mode 100644 examples/tangle.jld diff --git a/examples/Annulus.ipynb b/examples/Annulus.ipynb deleted file mode 100644 index 9011269..0000000 --- a/examples/Annulus.ipynb +++ /dev/null @@ -1,182 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":wide" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setrounding(Interval, :wide)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[-∞, ∞] × [-∞, ∞]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ring = @constraint 1 <= x^2 + y^2 <= 2\n", - "X = IntervalBox(-∞..∞, -∞..∞)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 5.008634 seconds (35.39 M allocations: 1.274 GB, 11.58% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "Paving:\n", - "- tolerance ϵ = 0.001\n", - "- inner approx. of length 20992\n", - "- boundary approx. of length 20992" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time paving = pave(ring, X, 0.001)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 13 methods)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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2CiXfVpRUaEDBw6kLT906JBKSkqUTCZzasvx48dHnNQWFoPPXOjp6Rk2kfLQoUOKxWKqqKgYc1sv9rnt8tmno/nTn/6kq666ys1mRgbHaXa4HYNhTpw4oba2tmHL1qxZo/fee0+tra1Dy9ra2vTWW29p3bp1fjcxENasWaPTp09r7969Q8u6urq0Z88erVq1ShMnThxaPtI+7erqSnvPuro6nTlzRitWrPCu4YatWbNGX375perr64eW9ff3q6GhQUuXLtWsWbMkXXzKb1tbm7766qth22a6z6Mkn3060nH4q1/9Si0tLaE+Dt3CcZq/mOM4julGwHuPPfaYYrGYjh49qhdeeEF///d/r7/+67+WJD300END61VVVWn//v3DnhfQ09OjhQsX6uzZs7r//vtVUFCgHTt2yHEcHT58WNOnT/f99zFtYGBAf/M3f6OjR4/q/vvvV1lZmerq6nTixAm99957mjdv3tC6I+3TSZMm6c4779SCBQtUVFSkt99+W7t379bChQt14MCBoUmFYXTnnXfqpZde0r/8y78MPd3z/fff11tvvaVly5ZJkr7//e+rsbFRx48f17XXXispu30eNbnu02QyqYULF2rJkiUqLS1VS0uLdu7cqVmzZundd9+N9GjIs88+q88//1wnT57Uc889p+9973tauHChpIsTy6dMmcJx6gYjj0iD72KxmBOPx9P+mzBhwrD1qqqq0pY5juOcPHnSWbdunXPFFVc4U6dOde644w7n2LFjfjU/kD7//HNn06ZNzlVXXeVMnjzZWb58udPa2pq23kj7tKamxpk/f75TWlrqFBYWOslk0vnhD3/o9PT0+NV8Yy5cuOBs2bLFSSQSTnFxsXPTTTc5r7/++rB1vv/97zsTJkxwPv7442HLM93nUZPrPn3kkUecRYsWOdOmTXMKCwud2bNnO//8z//sfPLJJ37/CoEze/bsEWtmPB4f2occp/ljJAQAABjBnBAAAGAEIQQAABhBCAEAAEYQQgAAgBGEEAAAYAQhBAAAGEEIAQAARhBCAACAEYQQAABgBCEEAAAYQQgBAABGEEIAAIAR/x86o5kRWy0P4gAAAABJRU5ErkJggg==", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.4142135623730954,1.414213562373095,-1.4142135623730954,1.4142135623730956)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Billiard.ipynb b/examples/Billiard.ipynb deleted file mode 100644 index 8f033a2..0000000 --- a/examples/Billiard.ipynb +++ /dev/null @@ -1,336 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x, y" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "disc1 = @constraint x^2 + y^2 <= 0.125\n", - "disc2 = @constraint (x-1)^2 + y^2 <= 0.125\n", - "disc3 = @constraint (x-1)^2 + (y-1)^2 <= 0.125\n", - "disc4 = @constraint x^2 + (y-1)^2 <= 0.125\n", - "\n", - "# x_domain = @constraint 0 <= x <= 1\n", - "# y_domain = @constraint 0 <= y <= 1\n", - "\n", - "# configuration_space = (x_domain ∩ y_domain) ∩ !(disc1 ∪ disc2 ∪ disc3 ∪ disc4)\n", - "configuration_space = !(disc1 ∪ disc2 ∪ disc3 ∪ disc4)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.506502 seconds (4.55 M allocations: 158.780 MB, 4.58% gc time)\n" - ] - } - ], - "source": [ - "X = IntervalBox(0..1, 0..1)\n", - "@time inner, boundary = pave(configuration_space, X, 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/dpsanders/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 5 methods)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-5.551115123125783e-17,1.0,0.0,1.0)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner, \"green\", 0.5, 0); draw(boundary, \"grey\", 0.5)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables sinθ" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "angle_domain = @constraint -1 <= sinθ <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables sinθ, x, y" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "phase_space = configuration_space ∩ angle_domain" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "145.724099 seconds (1.07 G allocations: 32.050 GB, 13.68% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-1..1, 0..1, 0..1)\n", - "@time inner2, boundary2 = pave(phase_space, Y, 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42644" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(inner2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3D vis " - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using GLVisualize, GeometryTypes, Colors" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "positions = Point3{Float32}[Point3(mid(x)) for x in inner2]\n", - "scales = Vec3f0[Vec3f0([diam(x) for x in xx]) for xx in inner2]\n", - "colors = [RGBA(1f0, 0f0, 0f0, 0.1f0) for xx in inner2];" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Visualization packages loaded.\n", - "Set inversion finished\n" - ] - } - ], - "source": [ - "\n", - "using GLVisualize, GeometryTypes, GLAbstraction, Colors\n", - "\n", - "println(\"Visualization packages loaded.\")\n", - "\n", - "\n", - "println(\"Set inversion finished\")\n", - "\n", - "cube_particle = HyperRectangle{3, Float32}(Vec3f0(-0.5, -0.5, -0.5), Vec3f0(1, 1, 1))\n", - "\n", - "# function cube(X::IntervalBox, inner=true)\n", - "# lo = [x.lo for x in X] # what's the good way to do this?\n", - "# hi = [x.hi for x in X]\n", - "# #color = Float32((hi[3] + 2.) / 4)\n", - "# #c = Float32(abs(hi[3]) / 2.)\n", - "# #mycolor = RGBA(1f0, c, c/2, 0.2f0)\n", - "# if inner\n", - "# mycolor = RGBA(1f0, 0f0, 0f0, 0.1f0)\n", - "# else\n", - "# mycolor = RGBA(0f0, 1f0, 0f0, 0.1f0)\n", - "# end\n", - "# return (HyperRectangle{3, Float32}(Vec3f0(lo), Vec3f0(hi - lo)), mycolor)\n", - "# end\n", - "\n", - "window = glscreen()\n", - "\n", - "# create an array of differently colored boxes in the direction of the 3 axes\n", - "#cubes = map(cube, inner2)\n", - "#boundarycubes = [cube(x, false) for x in boundary]\n", - "\n", - "# convert to an array of normal meshes\n", - "# note, that the constructor is a bit weird. GLNormalMesh takes a tuple of\n", - "# a geometry and a color. This means, the geometry will be converted to a GLNormalMesh\n", - "# and the color will be added afterwards, so the resulting type is a GLNormalColorMesh\n", - "#meshes = map(GLNormalMesh, cubes)\n", - "# merge them into one big mesh\n", - "# the resulting type is a GLNormalAttributeMesh, since we merged meshes with different\n", - "# attributes (colors). An array of the colors will be created and each vertex in the\n", - "# mesh will be asigned to one of the colors found there.\n", - "#colored_mesh = merge(meshes)\n", - "#view(visualize(colored_mesh), window)\n", - "\n", - "vis = visualize( (cube_particle, positions), scale=scales, color=colors)\n", - "\n", - "view(vis)\n", - "\n", - "\n", - "renderloop(window)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Calculate pi.ipynb b/examples/Calculate pi.ipynb deleted file mode 100644 index f286575..0000000 --- a/examples/Calculate pi.ipynb +++ /dev/null @@ -1,775 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "code = quote \n", - " z1 = x ^ 2\n", - " z2 = y ^ 2\n", - " z3 = z1 + z2\n", - " z3 = z3 ∩ _A_\n", - " (z3,z1,z2) = plusRev(z3,z1,z2)\n", - " (z2,y,_) = powerRev(z2,y,2)\n", - " (z1,x,_) = powerRev(z1,x,2)\n", - " return (x,y)\n", - "end\n" - ] - }, - { - "data": { - "text/plain": [ - "Separator with variables x, y" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "disc = @constraint x^2 + y^2 <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[-∞, ∞] × [-∞, ∞]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X = IntervalBox(-∞..∞, -∞..∞)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(([-1, 1],[-1, 1]),([-∞, ∞],[-∞, ∞]))" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "disc(X)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.358591 seconds (2.13 M allocations: 69.906 MB, 36.71% gc time)\n" - ] - } - ], - "source": [ - "@time P = pave(disc, X, 1e-2);" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "7164" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(P.inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "IntervalConstraintProgramming.Paving{2,Float64}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "typeof(P)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2-dimensional area: [3.1407, 3.14248]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(P)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/dpsanders/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 13 methods)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "false" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pygui(false)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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a47313BvDQCgOePKDwAAMArxAwAAjEL8AAAAoxA/AADAKNzwfIWa443FEjcXAwDQUFz5AQAARiF+AACAUYgfAABgFO75+TspPVIUGx3rN869NQAAtA5c+QEAAEYhfgAAgFF42+vvdO7cmbe4AABoxbjyAwAAjEL8AAAAoxA/AADAKMQPAAAwCvEDAACMQvwAAACjED8AAMAoxA8AADAK8QMAAIxC/AAAAKMQPwAAwCjEDwAAMArxAwAAjOJI/Bw9elTTp0/X4MGDFRISIpfLpby8vAYdo7S0VGlpaerQoYNuuOEGPfzww/rLX/5y0W3ffvttxcfHy+12q0ePHpo9e7ZqamoaYyoAAKCFcyR+ioqKtGDBApWWlqpv376yLKtB+3/77bdKTEzUBx98oJ///Od68cUXlZ+fr8TERJ08edJn282bNys5OVkdO3bUq6++quTkZGVlZSkjI6Mxp4Qm8B//8R/X+ikYjfW/tlj/a4v1N4sj8XPHHXfoxIkT+vzzzzVlypQG779kyRIdOnRImzZt0j//8z/rmWee0XvvvafS0lL95je/8dl26tSpiouL05YtWzRx4kQtWrRIM2bM0PLly3Xw4MHGmhKaAP/4XFus/7XF+l9brL9ZHImfoKAg3Xjjjd95/5ycHP3whz9Uv379vGO33HKLhgwZorfeess7VlhYqMLCQqWnp8vl+v+pPf3006qtrdW6deu+83MAAACtQ7O/4dm2bX322We64447/B5LSEjQoUOH9O2330qS8vPzZVmW4uPjfbaLiIhQZGSk8vPzHXnOAACg+Wr28fP111+rqqpKERERfo/VjZWWlkqSysrKfMb/ftu67QAAgLnaNHQH27Z17ty5K9q2ffv2DX5Cf8/j8dR7rICAAJ9tLrft6dOnL3uewsLCq3vC+M5OnTqlvXv3XuunYSzW/9pi/a8t1v/aqXvdrXsddkKD4ycvL0+DBg267HaWZamwsFDR0dHf6YnVcbvdkqSqqiq/xyorK322udy2dY9fzOHDhyVJY8eOvarni6vz929Zwlms/7XF+l9brP+1dfjwYQ0YMMCRczU4fmJiYrRq1aor2vZibz81VMeOHdW+fXvvW1oXqhvr2rWrz/nKysrUrVs3v2379+9f73nuv/9+rVmzRjfddNMlIwkAADQej8ejw4cP6/7773fsnA2On/DwcI0fP74pnstFWZal2NhYffzxx36Pffjhh+rVq5eCgoIkSXFxcbJtWx9//LHPDdJlZWUqKSnRU089Ve95QkND9ZOf/KTxJwAAAC7JqSs+dZrdDc/FxcUqKiryGUtNTdVHH33k835sUVGRtm3bprS0NO/Y97//fcXExGjFihWybds7vnTpUrlcLj3yyCNNPwEAANCsWfaFldCEsrKyZFmW9u/fr+zsbD3++OPq2bOnJGnmzJne7RITE5WXl6fa2lrv2JkzZ3T77bfr9OnTmjp1qtq0aaOFCxfKtm3l5+erU6dO3m03bdqkhx56SImJiRo9erT27dunJUuW6IknntCyZcucmCoAAGjGHIsfl8t10a+1sCxL58+f9/7vQYMG6YMPPvAZk/72cfYpU6bovffeU21trQYNGqRXXnlFvXr18jvm22+/rTlz5qiwsFCdO3fWhAkTNGvWLF133XWNPzEAANCiOBY/AAAAzUGzu+cHAACgKbWa+Dl37pyef/55devWTYGBgbrzzju1devWy+539OhRTZ8+XYMHD1ZISIhcLpfy8vLq3X7nzp0aOHCggoKCFBERoWeeecb79Roma+r193g8WrJkie6//3517dpVISEh6tevn1577TWf+8NM5dTPf51Tp04pLCxMLpdL69evb4wptGhOrX91dbV+9atf6dZbb5Xb7VaXLl30D//wD8b/9non1t+2bb322mu6/fbbdf3116tLly5KSkrSrl27Gns6Lc53Xf9t27Zp4sSJuuWWWxQUFKSoqCg98cQTOnr06EW3b9TXX7uVGD16tN2uXTv7+eeft1euXGkPGDDAbtu2rb1jx45L7vf+++/bLpfLvuWWW+wBAwbYLpfL/u///u+Lbpufn2+73W47Pj7eXr58uT1r1iw7ICDATkpKaooptShNvf4FBQW2y+Wyhw0bZr/88sv2ihUr7EceecS2LMt+7LHHmmpaLYYTP/8X+qd/+if7+uuvt10ul52Tk9NY02ixnFj/6upqe+jQoXZwcLA9ZcoU+/XXX7dfeeUV+9FHH7UPHDjQFNNqMZxY/+eee862LMv+6U9/aq9cudJesGCBHRUVZbdt29b+6KOPmmJaLcZ3Xf877rjDjoqKsqdPn27/7ne/s2fOnGmHhITYERER9rFjx3y2bezX31YRPx9++KFtWZb9yiuveMcqKyvtm2++2R4wYMAl9z1z5ox98uRJ27Zte926dZf84X/wwQftbt262WfOnPGO/fa3v7VdLpf9xz/+sRFm0jI5sf7Hjx+/6D/wjz/+uO1yuexDhw5d5SxaLqd+/uvs27fPbtu2rZ2VlUX82M6t//z58+327dvbH3/8ceM9+VbAifU/f/68HRgYaD/66KM+43/5y19sy7LsZ599thFm0jJdzfp/8MEHfmN5eXm2ZVn2rFmzfMYb+/W3VbzttW7dOrVp00ZPPPGEd6x9+/aaOHGidu3apa+++qrefYOCgnTjjTde9hynT5/W1q1bNW7cOO8vVZSk8ePHKygoSG+99dbVTaIFc2L9O3XqpFtvvdVvPDk5WZLZ38nmxPpf6JlnntEjjzyigQMH+vw+LVM5sf62betf//VflZKSovj4eNXU1Dj6PUjNmRPrX11dLY/Ho7CwMJ/xzp07y+VyKTAw8LtPoIW7mvUfOHCg39g999yjjh07+vyb3hSvv60ifj755BNFR0crODjYZzwhIcH7+NXat2+fzp8/7/fdL23btlVcXJzy8/Ov+hwtlRPrX5+6rzgJDQ1tsnM0d06u/9q1a7V79279+te/brRjtnROrP+BAwdUWlqq2NhYpaenKygoSEFBQfrBD36g999//6qP35I5sf4BAQHq37+/Vq1apX//939XcXGxPvvsMz322GPq1KmTzwu/aRp7/b/99ludOXPG59/0pnj9bRXxU1ZWdtHvEYuIiJBt241yM2BZWZksy6r3PCbfcOjE+l9MdXW1Fi1apF69eumHP/xhk5yjJXBq/SsrK5WZmannnntO3bt3b5RjtgZOrP8XX3whSXrllVeUl5enlStXatWqVaqqqtKDDz6ogoKCqz5HS+XUz/+bb76p6OhojR07Vj169FBcXJw++eQTbd++XTfddFOjnKMlauz1X7hwoaqrqzV69GifczT262+Dv9urOfJ4PGrfvr3feEBAgPfxxjiHpHrPY/IlaCfW/2ImT56szz//XH/4wx/kcrWKjv9OnFr/efPm6fz585oxY0ajHK+1cGL9z5w54/2/n376qffLnAcNGqSbb75Zv/71r7V69eqrPk9L5NTPf3BwsG677TbdfffdGjJkiI4ePaqXXnpJDz30kLZv366OHTs2ynlamsZc/7y8PL344ot69NFH9aMf/cjnHFLjvv62ivhxu92qqqryG6+srPQ+3hjnkFTveUz+Jngn1v/vLViwQL/97W81d+5cR78JuDlyYv0PHz6sl19+WcuWLTP6/oaLcfLfnwEDBnjDR5K6d++ugQMHaufOnVd9jpbKifWvqanR0KFDNWjQIP3Lv/yLd3zIkCG67bbbtGDBAs2bN++qz9MSNdb6f/7550pJSVHfvn21cuVKv3NIjfv62yr+czkiIsJ778eF6sYu/Mfias5h23a952mMc7RUTqz/hVatWqXp06fr6aef5iqEnFn/X/ziF4qMjNS9996rI0eO6MiRI97jl5eX68iRI8be/OzE+tcdIzw83O+xsLAwnTx58qrP0VI5sf55eXkqKCjQyJEjfcZvvvlm3XrrrdqxY8dVn6Olaoz1Ly4u1rBhw9ShQwdt2rTJ56bmunM09utvq4ifuLg4HTx40HtpuM7u3btlWZbi4uKu+hx9+vRRmzZt9PHHH/uMV1dX65NPPmmUc7RUTqx/nY0bN+qJJ55QamqqXn311UY7bkvmxPoXFxfryy+/VK9evdSzZ0/17NlTY8aMkWVZ+tnPfqZevXrp9OnTV32elsiJ9Y+NjVXbtm0v+smZ0tJSde7c+arP0VI5sf7Hjh2TZVmqqanxe6y6utrvuyhNcrXr//XXX2vYsGE6f/68tmzZctHAb4rX31YRP6mpqTp//rxWrFjhHTt37pxWrVqlO++8U926dZP0t9/mWVRUdNEf4MsJCQnR0KFDtWbNGp/fKLl69Wp9++23SktLu/qJtFBOrL/0t//6+vGPf6zExEStWbOmUZ57a+DE+s+dO1e5ubnasGGD909WVpYk6fnnn1dubq7ff62Zwon1Dw4OVlJSknbu3KmDBw96xwsLC7Vz504NGzbs6ifSQjmx/tHR0bJtW9nZ2T7je/fuVVFRkfr163d1k2jBrmb9z549qwcffFBlZWX6wx/+cNEvKpea6PW3wb8ZqJlKS0uz27VrZ0+bNs1esWKFfffdd9vt2rWzt2/f7t3mpz/9qW1Zln3kyBGffX/5y1/aWVlZ9o9//GPbsix74sSJdlZWlp2VleWz3d69e223223369fPfu211+yZM2fabrfbfvDBBx2ZY3PW1Ot/5MgR+4YbbrCDgoLspUuX2mvWrPH589lnnzk21+bIiZ//v/f+++/blmUZ/0sObduZ9T9w4IB9/fXX2127drVfeukle968eXbXrl3tLl262KWlpY7Ms7lyYv2HDRtmu1wuOyUlxX7ttdfsX/ziF3bHjh3tkJAQ++DBg47Ms7n6ruv/0EMP2ZZl2ZMmTfL7N33Dhg0+52js199WEz9VVVX2tGnT7K5du9put9vu37+/3299fOyxx+zrrrvO74ffsizb5XL5/bnuuuv8zrNjxw574MCBdmBgoB0eHm5nZGT4/MZJUzX1+tf9Gvr6/syZM8eReTZXTv38X6ju/yfEj3Prn5+fbw8bNsy+/vrr7RtuuMFOSUmxv/zyyyadW0vgxPpXVlbaWVlZdp8+feygoCC7Q4cO9kMPPWR/+umnTT6/5u67rv9NN91U77/pPXv29DtPY77+WrZt6F2KAADASK3inh8AAIArRfwAAACjED8AAMAoxA8AADAK8QMAAIxC/AAAAKMQPwAAwCjEDwAAMArxAwAAjEL8AAAAoxA/AADAKMQPAAAwyv8Bm4xIJe/tt5QAAAAASUVORK5CYII=", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "4-element Array{Float64,1}:\n", - " 0.1\n", - " 0.2\n", - " -1.0\n", - " -0.9" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(P)\n", - "axis([0.1,0.2,-1,-0.9])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "## Riemann integrals" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This does not use IntervalConstraintProgramming, just standard intervals." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: New definition \n", - " promote_rule(Type{ValidatedNumerics.Interval{#T<:Real}}, Type{#S<:Real}) at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/conversion.jl:9\n", - "is ambiguous with: \n", - " promote_rule(Type{#A<:Real}, Type{ForwardDiff.Dual{#N<:Any, #B<:Real}}) at /Users/dpsanders/.julia/v0.4/ForwardDiff/src/dual.jl:149.\n", - "To fix, define \n", - " promote_rule(Type{ValidatedNumerics.Interval{#T<:Real}}, Type{ForwardDiff.Dual{#N<:Any, #B<:Real}})\n", - "before the new definition.\n", - "WARNING: New definition \n", - " promote_rule(Type{ValidatedNumerics.DecoratedInterval{#T<:Real}}, Type{#S<:Real}) at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/decorations/intervals.jl:76\n", - "is ambiguous with: \n", - " promote_rule(Type{#A<:Real}, Type{ForwardDiff.Dual{#N<:Any, #B<:Real}}) at /Users/dpsanders/.julia/v0.4/ForwardDiff/src/dual.jl:149.\n", - "To fix, define \n", - " promote_rule(Type{ValidatedNumerics.DecoratedInterval{#T<:Real}}, Type{ForwardDiff.Dual{#N<:Any, #B<:Real}})\n", - "before the new definition.\n" - ] - } - ], - "source": [ - "using ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "100-element Array{Any,1}:\n", - " [0, 0.0100001] \n", - " [0.01, 0.0200001] \n", - " [0.02, 0.03] \n", - " [0.0299999, 0.0400001]\n", - " [0.04, 0.0500001] \n", - " [0.05, 0.06] \n", - " [0.0599999, 0.0700001]\n", - " [0.07, 0.0800001] \n", - " [0.08, 0.09] \n", - " [0.0899999, 0.100001] \n", - " [0.1, 0.110001] \n", - " [0.11, 0.12] \n", - " [0.119999, 0.130001] \n", - " ⋮ \n", - " [0.88, 0.890001] \n", - " [0.89, 0.900001] \n", - " [0.9, 0.910001] \n", - " [0.91, 0.920001] \n", - " [0.92, 0.930001] \n", - " [0.93, 0.94] \n", - " [0.939999, 0.95] \n", - " [0.949999, 0.96] \n", - " [0.959999, 0.97] \n", - " [0.969999, 0.98] \n", - " [0.979999, 0.99] \n", - " [0.989999, 1] " - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "N = 101\n", - "x = linspace(0, 1, N)\n", - "intervals = [ Interval(x[i], x[i+1]) for i in 1:length(x)-1 ]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "f (generic function with 1 method)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(x) = √(1-x^2)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.999949, 1]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(intervals[1])" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "riemann_pi (generic function with 1 method)" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function riemann_pi(N)\n", - " x = linspace(0, 1, N)\n", - " intervals = [ Interval(x[i], x[i+1]) for i in 1:length(x)-1 ]\n", - " II = 4*sum([f(x)*diam(x) for x in intervals])\n", - " \n", - " return II\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 4]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "riemann_pi(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: MethodError: `ldexp` has no method matching ldexp(::Int64, ::Float64)\nwhile loading In[43], in expression starting on line 1", - "output_type": "error", - "traceback": [ - "LoadError: MethodError: `ldexp` has no method matching ldexp(::Int64, ::Float64)\nwhile loading In[43], in expression starting on line 1", - "" - ] - } - ], - "source": [ - "2^" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.005169 seconds (36.23 k allocations: 1.003 MB)\n" - ] - }, - { - "data": { - "text/plain": [ - "[3.13346, 3.14915]" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time riemann_pi(2^8)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.185488 seconds (1.42 M allocations: 39.295 MB, 19.19% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "[3.14139, 3.1418]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time riemann_pi(10000)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.880168 seconds (14.20 M allocations: 392.965 MB, 17.38% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "[3.14157, 3.14162]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time riemann_pi(100000)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "linspace(0.0,1.0,101)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "256-element Array{Any,1}:\n", - " [0, 0.00390625] \n", - " [0.00390625, 0.0078125]\n", - " [0.0078125, 0.0117188] \n", - " [0.0117187, 0.015625] \n", - " [0.015625, 0.0195313] \n", - " [0.0195312, 0.0234375] \n", - " [0.0234375, 0.0273438] \n", - " [0.0273437, 0.03125] \n", - " [0.03125, 0.0351563] \n", - " [0.0351562, 0.0390625] \n", - " [0.0390625, 0.0429688] \n", - " [0.0429687, 0.046875] \n", - " [0.046875, 0.0507813] \n", - " ⋮ \n", - " [0.953125, 0.957032] \n", - " [0.957031, 0.960938] \n", - " [0.960937, 0.964844] \n", - " [0.964843, 0.96875] \n", - " [0.96875, 0.972657] \n", - " [0.972656, 0.976563] \n", - " [0.976562, 0.980469] \n", - " [0.980468, 0.984375] \n", - " [0.984375, 0.988282] \n", - " [0.988281, 0.992188] \n", - " [0.992187, 0.996094] \n", - " [0.996093, 1] " - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "N = 2^8 + 1\n", - "x = collect(linspace(0, 1, N))\n", - " intervals = [ Interval(x[i], x[i+1]) for i in 1:length(x)-1 ]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.0" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.01" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x[2]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.02" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x[3]" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Interval(0.01, 0.02)" - ] - } - ], - "source": [ - "showall(Interval(x[2], x[3]))" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Interval(0.02, 0.03)" - ] - } - ], - "source": [ - "showall(Interval(x[3], x[4]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Logistic map.ipynb b/examples/Logistic map.ipynb deleted file mode 100644 index e7046c9..0000000 --- a/examples/Logistic map.ipynb +++ /dev/null @@ -1,1947 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Logistic map:\n", - "\n", - "$f(x) = 4x(1-x)$" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "f (generic function with 1 method)" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(x) = 4x*(1-x)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: Method definition make_function(Any, Any, Any) in module IntervalConstraintProgramming at /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/contractor.jl:405 overwritten at /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/functions.jl:134.\n", - "WARNING: replacing docs for 'IntervalConstraintProgramming.make_function :: Tuple{Any,Any,Any}' in module 'IntervalConstraintProgramming'.\n" - ] - } - ], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - "- variables: x\n", - "- expression: (4x) * (1 - x) ∈ [0.299999, 0.400001]\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C = @constraint 4x*(1-x) ∈ [0.3, 0.4]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X = IntervalBox(0..1)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Paving:\n", - "- tolerance ϵ = 0.01\n", - "- inner approx. of length 4\n", - "- boundary approx. of length 4" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving = pave(C, X)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "4-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.901015, 0.916761] \n", - " [0.889014, 0.901016] \n", - " [0.0989849, 0.110986]\n", - " [0.0832394, 0.098985]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving.inner" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "4-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.91676, 0.918335] \n", - " [0.886832, 0.889015] \n", - " [0.110985, 0.113168] \n", - " [0.0816653, 0.0832395]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving.boundary" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Inverse functions:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "g2 (generic function with 1 method)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g1(x) = (1/2) * (1 + √(1-x))\n", - "g2(x) = (1/2) * (1 - √(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.112702]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y = IntervalBox(hull(g2(Interval(0.3)), g2(Interval(0.4))))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setdiff(Y, paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.0816699, 0.0832395]\n", - " [0.110985, 0.112702] " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setdiff(Y, paving.inner)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Second iterate:" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C2 = @constraint 4*(4x*(1-x))*(1-(4x*(1-x))) ∈ [0.3, 0.4]" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Paving:\n", - "- tolerance ϵ = 1.0e-6\n", - "- inner approx. of length 122\n", - "- boundary approx. of length 20" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving = pave(C2, X, 1e-6)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "68-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.974218, 0.978592] \n", - " [0.978878, 0.979118] \n", - " [0.978591, 0.978879] \n", - " [0.971488, 0.974219] \n", - " [0.971088, 0.971489] \n", - " [0.971, 0.971089] \n", - " [0.657081, 0.660659] \n", - " [0.666639, 0.666798] \n", - " [0.666797, 0.667132] \n", - " [0.667836, 0.66784] \n", - " [0.667131, 0.667405] \n", - " [0.66762, 0.66771] \n", - " [0.667772, 0.667806] \n", - " ⋮ \n", - " [0.332379, 0.332596] \n", - " [0.33229, 0.33238] \n", - " [0.332227, 0.332291] \n", - " [0.332163, 0.332165] \n", - " [0.332194, 0.332228] \n", - " [0.33216, 0.332164] \n", - " [0.0257812, 0.0285113]\n", - " [0.0289111, 0.0289997]\n", - " [0.0285112, 0.0289112]\n", - " [0.021408, 0.0257813] \n", - " [0.0211211, 0.0214081]\n", - " [0.020882, 0.0211212] " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving.inner" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Inverses:" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1-dimensional length: [9.36162e-06, 9.36163e-06]" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(paving.boundary)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "20-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.979147, 0.979148] \n", - " [0.970982, 0.970983] \n", - " [0.667857, 0.667859] \n", - " [0.667855, 0.667857] \n", - " [0.667854, 0.667856] \n", - " [0.667852, 0.667854] \n", - " [0.642891, 0.642893] \n", - " [0.642889, 0.642891] \n", - " [0.642888, 0.64289] \n", - " [0.642886, 0.642887] \n", - " [0.357113, 0.357114] \n", - " [0.35711, 0.357112] \n", - " [0.357109, 0.357111] \n", - " [0.357107, 0.357109] \n", - " [0.332146, 0.332148] \n", - " [0.332144, 0.332146] \n", - " [0.332143, 0.332145] \n", - " [0.332141, 0.332143] \n", - " [0.0290173, 0.0290178]\n", - " [0.0208522, 0.0208524]" - ] - }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving.boundary" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "h1 (generic function with 1 method)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "h1(x) = (1/2) * (1 - √(1 - √(1 - x)) / √2)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.332144, 0.357111]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y = IntervalBox(hull(h1(Interval(0.3)), h1(Interval(0.4))))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setdiff(Y, paving)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "## Forward and reverse by hand" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = 0..1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Do `@constraint f(f(x)) in [0.3,0.4]` by hand:" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(anonymous function)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#ex = :(4x*(1-x))\n", - "#-4(x^2 - x)\n", - "ex = :(-4( (x-0.5)^2 - 0.25 ))\n", - "\n", - "f_forward_code = IntervalConstraintProgramming.forward_pass(ex)\n", - "f_reverse_code = IntervalConstraintProgramming.backward_pass(ex)\n", - "\n", - "f_forward = eval(f_forward_code)\n", - "f_reverse = eval(f_reverse_code)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = 0..1" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":((x,)->begin # /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/contractor.jl, line 248:\n", - " begin \n", - " _z10_ = x - 0.5\n", - " _z11_ = _z10_ ^ 2\n", - " _z12_ = _z11_ - 0.25\n", - " _z13_ = -4_z12_\n", - " return (_z10_,_z11_,_z12_,_z13_)\n", - " end\n", - " end)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f_forward_code" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([-0.5, 0.5],[0, 0.25],[-0.25, 0],[-0, 1])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z1, z2, z3 = f_forward(x)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.299999, 0.3125]" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4, z5, z6 = f_forward(z3)\n", - "z6 = z6 ∩ (0.3..0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: redefining constant rev_ops\n" - ] - }, - { - "data": { - "text/plain": [ - "pow_rev2 (generic function with 1 method)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"../src/reverse_mode.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[-0, 0.981251]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z3_new = f_reverse(z3, z4, z5, z6)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[-0, 0.981251]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z3 = z3 ∩ z3_new" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_new = f_reverse(x, z1, z2, z3)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = x ∩ x_new" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Use better expression with single occurrence of x:" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(anonymous function)" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ex = :(-4( (x-0.5)^2 - 0.25 ))\n", - "\n", - "g_forward_code = IntervalConstraintProgramming.forward_pass(ex)\n", - "g_reverse_code = IntervalConstraintProgramming.backward_pass(ex)\n", - "\n", - "g_forward = eval(f_forward_code)\n", - "g_reverse = eval(f_reverse_code)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":((x,)->begin # /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/contractor.jl, line 248:\n", - " begin \n", - " _z26_ = x - 0.5\n", - " _z27_ = _z26_ ^ 2\n", - " _z28_ = _z27_ - 0.25\n", - " _z29_ = -4_z28_\n", - " return (_z26_,_z27_,_z28_,_z29_)\n", - " end\n", - " end)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g_forward_code" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":((x,_z30_,_z31_,_z32_,_z33_)->begin # /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/contractor.jl, line 248:\n", - " begin \n", - " (_z33_,_,_z32_) = mul_rev(_z33_,-4,_z32_)\n", - " (_z32_,_z31_,_) = minus_rev(_z32_,_z31_,0.25)\n", - " (_z31_,_z30_,_) = power_rev(_z31_,_z30_,2)\n", - " (_z30_,x,_) = minus_rev(_z30_,x,0.5)\n", - " return (x,)\n", - " end\n", - " end)" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g_reverse_code" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([-0.5, 0.5],[0, 0.25],[-0.25, 0],[-0, 1])" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = 0..1\n", - "z1, z2, z3, z4 = g_forward(x)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.299999, 0.400001]" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z5, z6, z7, z8 = g_forward(z4)\n", - "z8 = z8 ∩ (0.3..0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.918331]" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4_new = g_reverse(z4, z5, z6, z7, z8)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.918331]" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4 = z4 ∩ z4_new" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0208523, 0.979148]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_new = g_reverse(x, z1, z2, z3, z4)[1]\n", - "x = x ∩ x_new" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next step: bisect" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([-0.479148, 0],[0, 0.229583],[-0.25, -0.0204174],[0.0816699, 1])" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = Interval(x.lo, mid(x))\n", - "z1, z2, z3, z4 = g_forward(x)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.299999, 0.400001]" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z5, z6, z7, z8 = g_forward(z4)\n", - "z8 = z8 ∩ (0.3..0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.918331]" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4_new = g_reverse(z4, z5, z6, z7, z8)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.918331]" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4 = z4 ∩ z4_new" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0208523, 0.357111]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_new = g_reverse(x, z1, z2, z3, z4)[1]\n", - "x = x ∩ x_new" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next step: bisect again:" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([-0.479148, -0.311018],[0.0967326, 0.229583],[-0.153268, -0.0204174],[0.0816699, 0.61307])" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = Interval(x.lo, mid(x))\n", - "z1, z2, z3, z4 = g_forward(x)" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.299999, 0.400001]" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z5, z6, z7, z8 = g_forward(z4)\n", - "z8 = z8 ∩ (0.3..0.4)" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.112702]" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4_new = g_reverse(z4, z5, z6, z7, z8)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0816699, 0.112702]" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z4 = z4 ∩ z4_new" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.0208523, 0.0290175]" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_new = g_reverse(x, z1, z2, z3, z4)[1]\n", - "x = x ∩ x_new" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1-dimensional length: [0.00816511, 0.00816512]" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(ans)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "## Monotonicity from derivative constraints" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using ForwardDiff" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(anonymous function)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f(x) = 4x*(1-x)\n", - "f_deriv = x -> ForwardDiff.derivative(f, x)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using PyPlot" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAIUCAYAAADIee7hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X90lnd9//HnHZphRmyU9qQz26gY7VBJVxLAiCKgCKKkOM4k5qvJPIBxdCAwj/zwlH4BxzTsuLCssH2NgxosHGiL5wSZBEWWcoARSFCkB1bZhE7aSprOTKBlgfD941pbsbQNkOv+3D+ej3M4vb3ukM/Lc5+jr17X/Xl/EleuXLmCJEmSFFhO6ACSJEkSWEwlSZKUIiymkiRJSgkWU0mSJKUEi6kkSZJSgsVUkiRJKcFiKkmSpJRgMZUkSVJKsJhKkiQpJVhMJUmSlBKSXkxXrVpFTk4OJSUlyV5akiRJKSxx5cqVK8la7Be/+AV/9Ed/RE5ODkOHDuXo0aPJWlqSJEkpLqnF9NOf/jRdXV1cunSJ5557jp/+9KfJWlqSJEkpLmmP8h9//HEee+wx1qxZw5UrV0gkEslaWpIkSWkgKcX08uXLzJs3j89//vO8973vTcaSkiRJSjO3JGORf/zHf+Spp57iRz/6UTKWkyRJUhqKvZh2dXXxwAMP8MADD3Dbbbe94c8/99xztLS08Pa3v528vLy440mSJOk6vfDCC5w6dYrJkydz++2399vvjb2Y3n///dx+++3MmzevTz/f0tLCZz/72ZhTSZIk6WZ95zvf4TOf+Uy//b5Yi+nPfvYzGhsbWbNmDb/4xS9evv7iiy/yP//zP5w+fZpbb72Vt771rS+/9/a3v/1/X32H8ePfzfLl8OY3x5lSoS1cuJD6+vrQMZQkft7Zxc87u/h5Z4/jx4/z2c9+9jd6W/+ItZieOXOG3t5evvjFL/LFL37xVe8PHTqUBQsW8Ld/+7cvX3vp8X19/btZvryU2bPhscfg7rvjTKqQCgoKKC0tDR1DSeLnnV38vLOLn3f26e+vXcZaTEtKSvjud7971WioK1eucP/993Pu3Dn+7u/+juLi4mv+3Q99CNrb4U//FMrL4f/9P6iujjOtJEmSQoq1mN52221MmzbtVddfus1/7733vu7fLy6G/fvhL/4Camqi12vWwMCBscSVJElSQEkbsP+bEolEnwfs5+XBP/0TNDbChg0wdiycPh1zQEmSJCVdkGK6Z88ejh492uefTyRg9mzYtw86O6G0FFpaYgyopKqqqgodQUnk551d/Lyzi5+3blaQYnqjysqi752+730wZQqsXAm9vaFT6Wb5P2TZxc87u/h5Zxc/b92stCqmAIMHw/e+BytWwPLlMHUqdHWFTiVJkqSblXbFFCAnB5Ytg+9/Hw4ejO6kHj4cOpUkSZJuRloW05dMngwdHVBYCB/4AHzzm3DlSuhUkiRJuhFpXUwB7rwT9u6FWbPgC1+AmTPhwoXQqSRJknS90r6YQjTXdN06aGqCLVtgzBg4eTJ0KkmSJF2PjCimL6muhn/9Vzh/HkaOhObm0IkkSZLUVxlVTAHuvjvaCDVhAkybBkuXwqVLoVNJkiTpjWRcMQUoKIBt26CuDlavjjZJnT0bOpUkSZJeT0YWU4hOi1q0CHbvhmPHYMQI2L8/dCpJkiS9lowtpi8ZPx6OHIGhQ2HcOGhocKSUJElSKsr4YgpQVAR79sDcuTB/PlRVwblzoVNJkiTpN2VFMQXIzYX6+mic1I4dMHo0nDgROpUkSZJekjXF9CUzZsChQ9HrUaNg69aweSRJkhTJumIKMGwYtLXB1KlQWQkLF0JPT+hUkiRJ2S0riylAfj5s2hRthnrwwWju6ZkzoVNJkiRlr6wtphCNlJo3D1pb4dQpKC2NNklJkiQp+bK6mL5kzBjo6IDhw2HixGgovyOlJEmSksti+r8KC2HXLliyBBYvhunTobs7dCpJkqTsYTH9DQMGwKpV0NwcPdIfORKOHg2dSpIkKTtYTK+hogLa22HQICgvh40bQyeSJEnKfBbT11BcDAcOROOkampgzhy4eDF0KkmSpMxlMX0deXmwfj00NsKGDTB2LJw+HTqVJElSZrKYvoFEAmbPhn37oLMzGinV0hI6lSRJUuaxmPZRWVn0vdPycpgyBVauhN7e0KkkSZIyh8X0OgweDNu3w4oVsHx5dKRpV1foVJIkSZnBYnqdcnJg2TLYuRPa2l65kypJkqSbYzG9QZMmRadFFRZGJ0c1NnpalCRJ0s2wmN6EIUNg716YNQtqa2HmTLhwIXQqSZKk9GQxvUkDB8K6ddDUBFu2RHdPT54MnUqSJCn9WEz7SXU1HDwI589HR5k2N4dOJEmSlF4spv2opAQOH4YJE2DaNFi6FC5dCp1KkiQpPVhM+1lBAWzbBnV1sHo1TJ4MZ8+GTiVJkpT6LKYxSCRg0SLYvRuOHYMRI2D//tCpJEmSUpvFNEbjx8ORIzB0KIwbBw0NjpSSJEl6LRbTmBUVwZ49MHcuzJ8PVVVw7lzoVJIkSanHYpoEublQXx+Nk9qxA0aPhuPHQ6eSJElKLRbTJJoxAw4dil6PGgVbt4bNI0mSlEospkk2bBi0tUFFBVRWwoIF0NMTOpUkSVJ4FtMA8vNh06ZoM9TatdHc0zNnQqeSJEkKy2IaSCIB8+ZBayucOgWlpdEmKUmSpGxlMQ1szBjo6IDhw2HixGgovyOlJElSNrKYpoDCQti1C5YsgcWLYfp06O4OnUqSJCm5LKYpYsAAWLUKmpujR/ojR8LRo6FTSZIkJY/FNMVUVEB7OwwaBOXlsHFj6ESSJEnJYTFNQcXFcOBANE6qpgbmzIGLF0OnkiRJilfsxfSJJ57gU5/6FMXFxQwaNIjbbruNMWPG8PDDD8e9dFrLy4P166GxETZsgLFj4fTp0KkkSZLiE3sxfeqppzh37hyf+9znaGhoYPny5eTm5lJdXc2qVaviXj6tJRIwezbs2wedndFIqZaW0KkkSZLikbhyJfnDiXp7eykrK+P555/n9G/dBuzo6KCsrIz29nZKS0uTHS1lPf88VFfD978Py5fD/fdDjl/EkCRJAcTV14JUm5ycHP7gD/6A3NzcEMunpcGDYft2WLEiKqZTp0JXV+hUkiRJ/eeWZC104cIFLly4QHd3N83NzbS0tPDggw8ma/mMkJMDy5bB+94H/+f/QFkZPPZY9E9JkqR0l7Q7pn/5l39JYWEh73rXu1i8eDENDQ3U1tYma/mMMmlSdFpUYWF0clRjo6dFSZKk9Je0Yrpw4UJ++MMf0tTUxEc+8hHmzp3Lt7/97WQtn3GGDIG9e2HWLKithZkz4cKF0KkkSZJuXJDNTwCTJ0+mra2Np59+mry8vJevv/Rl2g996EMUFBRc9XeqqqqoqqpKdtSUt3EjfOELcNdd8Oij8M53hk4kSZIyxebNm9m8efNV17q7u3n88cf7ffNTsGL6zW9+kz//8z+no6ODe+655+Xr7sq/MT/9KUyfHo2VamqCe+8NnUiSJGWqjNqVD/DCCy9EAZx51C9KSuDwYZgwAaZNg6VL4dKl0KkkSZL6LvZW2NnZ+aprPT09NDU1cdttt/He97437ghZo6AAtm2DujpYvRomT4azZ0OnkiRJ6pvYx0XV1tby61//mg996EMUFRXx7LPP8vDDD/Pkk0+yYcMGBgwYEHeErJJIwKJFMHo0VFbCiBHwyCPR7n1JkqRUFvsd009/+tPk5OTwD//wD9x3332sWbOGd7zjHezatYuampq4l89a48fDkSMwdCiMGwcNDY6UkiRJqS32O6aVlZVUVlbGvYyuoagI9uyJ7qDOnw/798O3vgX5+aGTSZIkvZo7jzJcbi7U18OWLbBjR/SI//jx0KkkSZJezWKaJWbMgEOHotejRsHWrWHzSJIk/TaLaRYZNgza2qCiItoYtWAB9PSETiVJkhSxmGaZ/HzYtCnaDLV2bTT39MyZ0KkkSZIsplkpkYB586C1FU6dgtLSaJOUJElSSBbTLDZmDHR0wPDhMHFiNJTfkVKSJCkUi2mWKyyEXbtgyRJYvBimT4fu7tCpJElSNrKYigEDYNUqaG6OHumPHAlHj4ZOJUmSso3FVC+rqID2dhg0CMrLYePG0IkkSVI2sZjqKsXFcOBANE6qpgbmzIGLF0OnkiRJ2cBiqlfJy4P166GxETZsgLFj4fTp0KkkSVKms5jqmhIJmD0b9u2Dzs5opFRLS+hUkiQpk1lM9brKyqLvnZaXw5QpsHIl9PaGTiVJkjKRxVRvaPBg2L4dVqyA5cth6lTo6gqdSpIkZRqLqfokJweWLYOdO6Gt7ZU7qZIkSf3FYqrrMmlSdFpUYWF0clRjo6dFSZKk/mEx1XUbMgT27oVZs6C2FmbOhAsXQqeSJEnpzmKqGzJwIKxbB01NsGVLdPf05MnQqSRJUjqzmOqmVFfDwYNw/nx0lGlzc+hEkiQpXVlMddNKSuDwYZgwAaZNg6VL4dKl0KkkSVK6sZiqXxQUwLZtUFcHq1fD5Mlw9mzoVJIkKZ1YTNVvEglYtAh274Zjx2DECNi/P3QqSZKULiym6nfjx8ORIzB0KIwbBw0NjpSSJElvzGKqWBQVwZ49MHcuzJ8PVVVw7lzoVJIkKZVZTBWb3Fyor4/GSe3YAaNHw/HjoVNJkqRUZTFV7GbMgEOHotejRsHWrWHzSJKk1GQxVVIMGwZtbVBRAZWVsGAB9PSETiVJklKJxVRJk58PmzZFm6HWro3mnp45EzqVJElKFRZTJVUiAfPmQWsrnDoFpaXRJilJkiSLqYIYMwY6OmD4cJg4MRrK70gpSZKym8VUwRQWwq5dsGQJLF4M06dDd3foVJIkKRSLqYIaMABWrYLm5uiR/siRcPRo6FSSJCkEi6lSQkUFtLfDoEFQXg4bN4ZOJEmSks1iqpRRXAwHDkTjpGpqYM4cuHgxdCpJkpQsFlOllLw8WL8eGhthwwYYOxZOnw6dSpIkJYPFVCknkYDZs2HfPujsjEZKtbSETiVJkuJmMVXKKiuLvndaXg5TpsDKldDbGzqVJEmKi8VUKW3wYNi+HVasgOXLYepU6OoKnUqSJMXBYqqUl5MDy5bBzp3Q1vbKnVRJkpRZLKZKG5MmRadFFRZGJ0c1NnpalCRJmcRiqrQyZAjs3QuzZkFtLcycCRcuhE4lSZL6g8VUaWfgQFi3DpqaYMuW6O7pyZOhU0mSpJtlMVXaqq6Ggwfh/PnoKNPm5tCJJEnSzbCYKq2VlMDhwzBhAkybBkuXwqVLoVNJkqQbYTFV2isogG3boK4OVq+GyZPh7NnQqSRJ0vWymCojJBKwaBHs3g3HjsGIEbB/f+hUkiTpesReTA8dOsTcuXN573vfS35+PnfeeSeVlZX87Gc/i3tpZaHx4+HIERg6FMaNg4YGR0pJkpQuYi+mdXV1fPe73+WjH/0oDQ0N1NbW8vjjj1NaWsoTTzwR9/LKQkVFsGcPzJ0L8+dDVRWcOxc6lSRJeiO3xL3Al770JUaNGsUtt7yyVGVlJSUlJXz9619n48aNcUdQFsrNhfp6eP/7o5mno0fDY4/Bu98dOpkkSXotsd8xff/7339VKQV45zvfyXve8x5OnDgR9/LKcjNmwKFD0etRo2Dr1rB5JEnSawuy+enKlSv88pe/5Pbbbw+xvLLMsGHQ1gYVFVBZCQsWQE9P6FSSJOm3BSmmDz/8ME8//TSVlZUhllcWys+HTZuizVBr10ZzT8+cCZ1KkiT9pqQX0xMnTvAXf/EXjBkzhj/7sz9L9vLKYokEzJsHra1w6hSUlkabpCRJUmqIffPTb3r22Wf5xCc+wVvf+lYeffRREonEa/7swoULKSgouOpaVVUVVVVVccdUhhszBjo6ot36EyfC174GX/5yVFwlSdLVNm/ezObNm6+61t3dHctaiStXkjPlsbu7m/Hjx/OLX/yCvXv3MmzYsGv+XEdHB2VlZbS3t1NaWpqMaMpSly/DAw/AX/81fPKT8NBD0SlSkiTp9cXV15LyKP/FF1+koqKCkydP8r3vfe81S6mUTAMGwKpV0NwcPdIfORKOHg2dSpKk7BV7Mb18+TKVlZUcPHiQRx55hPe9731xLyldl4oKaG+HQYOgvBwcrStJUhhJGbC/fft2KioqeO655/jOd75z1fuf/exn444gvaHiYjhwAO67D2pqYP9+WLMGBg4MnUySpOwRezH9yU9+QiKRYPv27Wzfvv2q9xKJhMVUKSMvD9avhw98IDrOtL0dHnkE7rwzdDJJkrJD7I/y9+zZw+XLl+nt7X3Vn8uXL8e9vHRdEgmYPRv27YPOzmikVEtL6FSSJGWHIAP2pVRXVhbdMS0vhylTYOVK6O0NnUqSpMxmMZVew+DBsH07rFgBy5fD1KnQ1RU6lSRJmctiKr2OnBxYtgx27oS2tlfupEqSpP5nMZX6YNKk6LSowsLo5KjGRkjO0RSSJGUPi6nUR0OGwN69MGsW1NbCzJlw4ULoVJIkZQ6LqXQdBg6EdeugqQm2bInunp48GTqVJEmZwWIq3YDqajh4EM6fj44ybW4OnUiSpPRnMZVuUEkJHD4MEybAtGmwdClcuhQ6lSRJ6ctiKt2EggLYtg3q6mD1apg8Gc6eDZ1KkqT0ZDGVblIiAYsWwe7dcOwYjBgB+/eHTiVJUvqxmEr9ZPx4OHIEhg6FceOgocGRUpIkXQ+LqdSPiopgzx6YOxfmz4eqKjh3LnQqSZLSg8VU6me5uVBfH42T2rEDRo+G48dDp5IkKfVZTKWYzJgBhw5Fr0eNgq1bw+aRJCnVWUylGA0bBm1tUFEBlZWwYAH09IROJUlSarKYSjHLz4dNm6LNUGvXRnNPz5wJnUqSpNRjMZWSIJGAefOgtRVOnYLS0miTlCRJeoXFVEqiMWOgowOGD4eJE6Oh/I6UkiQpYjGVkqywEHbtgiVLYPFimD4durtDp5IkKTyLqRTAgAGwahU0N0eP9EeOhKNHQ6eSJCksi6kUUEUFtLfDoEFQXg4bN4ZOJElSOBZTKbDiYjhwIBonVVMDc+bAxYuhU0mSlHwWUykF5OXB+vXQ2AgbNsDYsXD6dOhUkiQll8VUShGJBMyeDfv2QWdnNFKqpSV0KkmSksdiKqWYsrLoe6fl5TBlCqxcCb29oVNJkhQ/i6mUggYPhu3bYcUKWL4cpk6Frq7QqSRJipfFVEpROTmwbBns3Altba/cSZUkKVNZTKUUN2lSdFpUYWF0clRjo6dFSZIyk8VUSgNDhsDevTBrFtTWwsyZcOFC6FSSJPUvi6mUJgYOhHXroKkJtmyJ7p6ePBk6lSRJ/cdiKqWZ6mo4eBDOn4+OMm1uDp1IkqT+YTGV0lBJCRw+DBMmwLRpsHQpXLoUOpUkSTfHYiqlqYIC2LYN6upg9WqYPBnOng2dSpKkG2cxldJYIgGLFsHu3XDsGIwYAfv3h04lSdKNsZhKGWD8eDhyBIYOhXHjoKHBkVKSpPRjMZUyRFER7NkDc+fC/PlQVQXnzoVOJUlS31lMpQySmwv19dE4qR07YPRoOH48dCpJkvrGYiploBkz4NCh6PWoUbB1a9g8kiT1hcVUylDDhkFbG1RUQGUlLFgAPT2hU0mS9NosplIGy8+HTZuizVBr10ZzT8+cCZ1KkqRrs5hKGS6RgHnzoLUVTp2C0tJok5QkSanGYipliTFjoKMDhg+HiROjofyOlJIkpRKLqZRFCgth1y5YsgQWL4bp06G7O3QqSZIiFlMpywwYAKtWQXNz9Eh/5Eg4ejR0KkmSLKZS1qqogPZ2GDQIysth48bQiSRJ2c5iKmWx4mI4cCAaJ1VTA3PmwMWLoVNJkrJV7MX0/Pnz/N//+3/52Mc+xuDBg8nJyeHb3/523MtK6qO8PFi/HhobYcMGGDsWTp8OnUqSlI1iL6adnZ189atf5d/+7d+45557AEgkEnEvK+k6JBIwezbs2wedndFIqZaW0KkkSdkm9mJaVFTEs88+y89//nP+5m/+Ju7lJN2EsrLoe6fl5TBlCqxcCb29oVNJkrJF7MX0d37ndygsLATgikMTpZQ3eDBs3w4rVsDy5TB1KnR1hU4lScoGbn6S9Co5ObBsGezcCW1tr9xJlSQpThZTSa9p0qTotKjCwujkqMZGT4uSJMXHYirpdQ0ZAnv3wqxZUFsLM2fChQuhU0mSMtEtoQO8loULF1JQUHDVtaqqKqqqqgIlkrLXwIGwbh28//3whS/AkSPw6KPwzneGTiZJitvmzZvZvHnzVde6YzrPOmWLaX19PaWlpaFjSPoN1dVwzz0wfXp0lGlTE9x7b+hUkqQ4XevGYEdHB2VlZf2+lo/yJV2XkhI4fBgmTIBp02DpUrh0KXQqSVImsJhKum4FBbBtG9TVwerVMHkynD0bOpUkKd0l5VH+gw8+yK9+9SuefvppAJqbm3nqqacA+OIXv8itt96ajBiS+lEiAYsWwejRUFkJI0bAI49Eu/clSboRSSmm3/jGNzj9v4dvJxIJvvvd77Jt2zYSiQQ1NTUWUymNjR8fbYaaMQPGjYNvfAPmzYuKqyRJ1yMpj/J//vOf09vbS29vL5cvX+by5csvvx4yZEgyIkiKUVER7NkDc+fC/PlQVQXnzoVOJUlKN37HVFK/yM2F+nrYsgV27Ige8R8/HjqVJCmdWEwl9asZM+DQoej1qFGwdWvYPJKk9GExldTvhg2DtjaoqIg2Ri1YAD09oVNJklKdxVRSLPLzYdMmaGiAtWujuadnzoROJUlKZRZTSbFJJKId+q2tcOoUlJZGm6QkSboWi6mk2I0ZAx0dMHw4TJwYDeW/ciV0KklSqrGYSkqKwkLYtQuWLIHFi2H6dOjuDp1KkpRKLKaSkmbAAFi1Cpqbo0f6I0fC0aOhU0mSUoXFVFLSVVRAezsMGgTl5bBxY+hEkqRUYDGVFERxMRw4EI2TqqmBOXPg4sXQqSRJIVlMJQWTlwfr10NjI2zYAGPHwunToVNJkkKxmEoKKpGA2bNh3z7o7IxGSrW0hE4lSQrBYiopJZSVRd87LS+HKVNg5Uro7Q2dSpKUTBZTSSlj8GDYvh1WrIDly2HqVOjqCp1KkpQsFlNJKSUnB5Ytg507oa3tlTupkqTMZzGVlJImTYpOiyosjE6Oamz0tChJynQWU0kpa8gQ2LsXZs2C2lqYORMuXAidSpIUF4uppJQ2cCCsWwdNTbBlS3T39OTJ0KkkSXGwmEpKC9XVcPAgnD8fHWXa3Bw6kSSpv1lMJaWNkhI4fBgmTIBp02DpUrh0KXQqSVJ/sZhKSisFBbBtG9TVwerVMHkynD0bOpUkqT9YTCWlnUQCFi2C3bvh2DEYMQL27w+dSpJ0syymktLW+PFw5AgMHQrjxkFDgyOlJCmdWUwlpbWiItizB+bOhfnzoaoKzp0LnUqSdCMsppLSXm4u1NdH46R27IDRo+H48dCpJEnXy2IqKWPMmAGHDkWvR42CrVvD5pEkXR+LqaSMMmwYtLVBRQVUVsKCBdDTEzqVJKkvLKaSMk5+PmzaFG2GWrs2mnt65kzoVJKkN2IxlZSREgmYNw9aW+HUKSgtjTZJSZJSl8VUUkYbMwY6OmD4cJg4MRrK70gpSUpNFlNJGa+wEHbtgiVLYPFimD4durtDp5Ik/TaLqaSsMGAArFoFzc3RI/2RI+Ho0dCpJEm/yWIqKatUVEB7OwwaBOXlsHFj6ESSpJdYTCVlneJiOHAgGidVUwNz5sDFi6FTSZIsppKyUl4erF8PjY2wYQOMHQunT4dOJUnZzWIqKWslEjB7NuzbB52d0UiplpbQqSQpe1lMJWW9srLoe6fl5TBlCqxcCb29oVNJUvaxmEoSMHgwbN8OK1bA8uUwdSp0dYVOJUnZxWIqSf8rJweWLYOdO6Gt7ZU7qZKk5LCYStJvmTQpOi2qsDA6Oaqx0dOiJCkZLKaSdA1DhsDevTBrFtTWwsyZcOFC6FSSlNksppL0GgYOhHXroKkJtmyJ7p6ePBk6lSRlLoupJL2B6mo4eBDOn4+OMm1uDp1IkjKTxVSS+qCkBA4fhgkTYNo0WLoULl0KnUqSMovFVJL6qKAAtm2DujpYvRomT4azZ0OnkqTMYTGVpOuQSMCiRbB7Nxw7BiNGwP79oVNJUmaIvZhevHiRxYsXU1RUxO/+7u9SXl7OD3/4w7iXlaRYjR8PR47A0KEwbhw0NDhSSpJuVuzF9HOf+xz19fVUV1fT0NDAgAED+PjHP86+ffviXlqSYlVUBHv2wNy5MH8+VFXBuXOhU0lS+oq1mLa1tbFlyxa+/vWvU1dXx+zZs/nRj37EnXfeyaJFi+JcWpKSIjcX6uujcVI7dsDo0XD8eOhUkpSeYi2mjz76KLfccgu1tbUvXxs4cCCzZs3iwIEDnDlzJs7lJSlpZsyAQ4ei16NGwdatYfNIUjqKtZgeOXKEu+66i/z8/Kuujxo1CoAf//jHcS4vSUk1bBi0tUFFBVRWwoIF0NMTOpUkpY9Yi+kzzzzD2972tlddf+na008/HefykpR0+fmwaVO0GWrt2mjuqQ+HJKlvYi2mL7zwAgMHDnzV9Te96U0vvy9JmSaRgHnzoLUVTp2C0tJok5Qk6fXdEucvz8vL4+LFi6+6/uKLL778/mtZuHAhBQUFV12rqqqiqqqqf0NKUkzGjIGOjmi3/sSJ8LWvwZe/HBVXSUoXmzdvZvPmzVdd6+7ujmWtWIvp2972tms+rn/mmWcAKCoqes2/W19fT2lpaWzZJCkZCgth1y544AFYvBgOHICHHopOkZKkdHCtG4MdHR2UlZX1+1qxPsofMWIETz75JL/+9a+vun7w4EEA7rnnnjiXl6SUMGAArFoFzc3RI/2RI+Ho0dCpJCn1xFpM//RP/5TLly/zzW9+8+VrFy9eZMOGDZSXl/P7v//7cS4vSSmlogLa22HQICgvh40bQyeSpNQS66P80aNH86lPfYqlS5dy9uxZiouL+fa3v81TTz3Fhg0b4lxaklJScXH0OP+++6CmBvbvhzVr4Br7RCUp68RaTAGamppYtmwZGzdu5L/+67/44z/+Y773ve+yp6EnAAAgAElEQVTxwQ9+MO6lJSkl5eXB+vXwgQ9Ex5m2t8Mjj8Cdd4ZOJklhxfooH6KTnlavXs3TTz/NCy+8wL/+67/y0Y9+NO5lJSmlJRIwezbs2wedndFIqZaW0KkkKazYi6kk6bWVlUV3TMvLYcoUWLkSentDp5KkMCymkhTY4MGwfTusWAHLl8PUqdDVFTqVJCWfxVSSUkBODixbBjt3QlvbK3dSJSmbWEwlKYVMmhSdFlVYGJ0c1dgIV66ETiVJyWExlaQUM2QI7N0Ls2ZBbS3MnAkXLoROJUnxs5hKUgoaOBDWrYOmJtiyJbp7evJk6FSSFC+LqSSlsOpqOHgQzp+PjjJtbg6dSJLiYzGVpBRXUgKHD8OECTBtGixdCpcuhU4lSf3PYipJaaCgALZtg7o6WL0aJk+Gs2dDp5Kk/mUxlaQ0kUjAokWwezccOwYjRsD+/aFTSVL/sZhKUpoZPx6OHIGhQ2HcOGhocKSUpMxgMZWkNFRUBHv2wNy5MH8+VFXBuXOhU0nSzbGYSlKays2F+vponNSOHTB6NBw/HjqVJN04i6kkpbkZM+DQoej1qFGwdWvYPJJ0oyymkpQBhg2DtjaoqIDKSliwAHp6QqeSpOtjMZWkDJGfD5s2RZuh1q6N5p6eORM6lST1ncVUkjJIIgHz5kFrK5w6BaWl0SYpSUoHFlNJykBjxkBHBwwfDhMnRkP5HSklKdVZTCUpQxUWwq5dsGQJLF4M06dDd3foVJL02iymkpTBBgyAVauguTl6pD9yJBw9GjqVJF2bxVSSskBFBbS3w6BBUF4OGzeGTiRJr2YxlaQsUVwMBw5E46RqamDOHLh4MXQqSXqFxVSSskheHqxfD42NsGEDjB0Lp0+HTiVJEYupJGWZRAJmz4Z9+6CzMxop1dISOpUkWUwlKWuVlUXfOy0vhylTYOVK6O0NnUpSNrOYSlIWGzwYtm+HFStg+XKYOhW6ukKnkpStLKaSlOVycmDZMti5E9raXrmTKknJZjGVJAEwaVJ0WlRhYXRyVGOjp0VJSi6LqSTpZUOGwN69MGsW1NbCzJlw4ULoVJKyhcVUknSVgQNh3TpoaoItW6K7pydPhk4lKRtYTCVJ11RdDQcPwvnz0VGmzc2hE0nKdBZTSdJrKimBw4dhwgSYNg2WLoVLl0KnkpSpLKaSpNdVUADbtkFdHaxeDZMnw9mzoVNJykQWU0nSG0okYNEi2L0bjh2DESNg//7QqSRlGoupJKnPxo+HI0dg6FAYNw4aGhwpJan/WEwlSdelqAj27IG5c2H+fKiqgnPnQqeSlAksppKk65abC/X10TipHTtg9Gg4fjx0KknpzmIqSbphM2bAoUPR61GjYOvWsHkkpTeLqSTppgwbBm1tUFEBlZWwYAH09IROJSkdWUwlSTctPx82bYo2Q61dG809PXMmdCpJ6cZiKknqF4kEzJsHra1w6hSUlkabpCSpryymkqR+NWYMdHTA8OEwcWI0lN+RUpL6wmIqSep3hYWwaxcsWQKLF8P06dDdHTqVpFRnMZUkxWLAAFi1Cpqbo0f6I0fC0aOhU0lKZRZTSVKsKiqgvR0GDYLycti4MXQiSanKYipJil1xMRw4EI2TqqmBOXPg4sXQqSSlmliL6bPPPsuSJUuYMGECb37zm8nJyaG1tTXOJSVJKSovD9avh8ZG2LABxo6F06dDp5KUSmItpidOnGD16tU888wz3H333QAkEok4l5QkpbBEAmbPhn37oLMzGinV0hI6laRUEWsxHTlyJM8//zwnTpxg4cKFcS4lSUojZWXR907Ly2HKFFi5Enp7Q6eSFFqsxTQ/P5+3vOUtcS4hSUpTgwfD9u2wYgUsXw5Tp0JXV+hUkkJy85MkKZicHFi2DHbuhLa2V+6kSspOFlNJUnCTJkWnRRUWRidHNTZ6WpSUjW7p6w9euXKFi32c7fGmN73phgNJkrLTkCGwdy8sXAi1tbB/P6xdC7/7u6GTSUqWPhfT1tZWPvzhD/fpZ0+cOMFdd911w6EAFi5cSEFBwVXXqqqqqKqquqnfK0lKXQMHwrp18P73wxe+AEeOwKOPwjvfGTqZlL02b97M5s2br7rWHdMZw30upu9+97t56KGH+vSzv/d7v3ejeV5WX19PaWnpTf8eSVL6qa6Ge+6B6dOjo0ybmuDee0OnkrLTtW4MdnR0UFZW1u9r9bmY3nHHHdTU1PR7AEmSrqWkBA4fhs99DqZNgyVL4KtfhVv6/P9cktKNm58kSSmroAC2bYO6Oli9GiZPhrNnQ6eSFJfY/73zr/7qrwB44oknAGhqauLxxx8H4P777497eUlSmkskYNEiGD0aKithxAh45JFo976kzJK4ciXegRw5OTkkEgmuXLny8j8hOpr08uXLr/r5l76z0N7e7ndMJUlXefppmDEDDh6Eb3wD5s2Liquk5Iqrr8X+KL+3t5fLly9f9c+XXkuSdD2KimDPHpg7F+bPh6oqOHcudCpJ/cXvmEqS0kpuLtTXw5YtsGNH9Ij/+PHQqST1B4upJCktzZgBhw5Fr0eNgq1bw+aRdPMsppKktDVsGLS1QUVFtDFqwQLo6QmdStKNsphKktJafj5s2gQNDdERphMmwJkzoVNJuhEWU0lS2kskoh36ra1w6hSUlkabpCSlF4upJCljjBkDHR0wfDhMnBgN5Y93KKKk/mQxlSRllMJC2LUrOsJ08WKYPh26u0OnktQXFlNJUsYZMABWrYLm5uiR/siRcPRo6FSS3ojFVJKUsSoqoL0dBg2C8nLYuDF0Ikmvx2IqScpoxcVw4EA0TqqmBubMgYsXQ6eSdC0WU0lSxsvLg/XrobERNmyAsWPh9OnQqST9NoupJCkrJBIwezbs2wedndFIqZaW0Kkk/SaLqSQpq5SVRd87LS+HKVNg5Uro7Q2dShJYTCVJWWjwYNi+HVasgOXLYepU6OoKnUqSxVSSlJVycmDZMti5E9raXrmTKikci6kkKatNmhSdFlVYGJ0c1djoaVFSKBZTSVLWGzIE9u6FWbOgthZmzoQLF0KnkrKPxVSSJGDgQFi3DpqaYMuW6O7pyZOhU0nZxWIqSdJvqK6Ggwfh/PnoKNPm5tCJpOxhMZUk6beUlMDhwzBhAkybBkuXwqVLoVNJmc9iKknSNRQUwLZtUFcHq1fD5Mlw9mzoVFJms5hKkvQaEglYtAh274Zjx2DECNi/P3QqKXNZTCVJegPjx8ORIzB0KIwbBw0NjpSS4mAxlSSpD4qKYM8emDsX5s+Hqio4dy50KimzWEwlSeqj3Fyor4/GSe3YAaNHw/HjoVNJmcNiKknSdZoxAw4dil6PGgVbt4bNI2UKi6kkSTdg2DBoa4OKCqishAULoKcndCopvVlMJUm6Qfn5sGlTtBlq7dpo7umZM6FTSenLYipJ0k1IJGDePGhthVOnoLQ02iQl6fpZTCVJ6gdjxkBHBwwfDhMnRkP5HSklXR+LqSRJ/aSwEHbtgiVLYPFimD4durtDp5LSh8VUkqR+NGAArFoFzc3RI/2RI+Ho0dCppPRgMZUkKQYVFdDeDoMGQXk5bNwYOpGU+iymkiTFpLgYDhyIxknV1MCcOXDxYuhUUuqymEqSFKO8PFi/HhobYcMGGDsWTp8OnUpKTRZTSZJilkjA7Nmwbx90dkYjpVpaQqeSUo/FVJKkJCkri753Wl4OU6bAypXQ2xs6lZQ6LKaSJCXR4MGwfTusWAHLl8PUqdDVFTqVlBosppIkJVlODixbBjt3QlvbK3dSpWxnMZUkKZBJk6LTogoLo5OjGhs9LUrZzWIqSVJAQ4bA3r0waxbU1sLMmXDhQuhUUhgWU0mSAhs4ENatg6Ym2LIlunt68mToVFLyWUwlSUoR1dVw8CCcPx8dZdrcHDqRlFwWU0mSUkhJCRw+DBMmwLRpsHQpXLoUOpWUHBZTSZJSTEEBbNsGdXWwejVMngxnz4ZOJcXPYipJUgpKJGDRIti9G44dgxEjYP/+0KmkeMVeTHfv3s3MmTO56667GDRoEMXFxXz+85/n2WefjXtpSZLS3vjxcOQIDB0K48ZBQ4MjpZS5bol7gcWLF/OrX/2KT33qU7zrXe/i3//933nwwQf53ve+x49//GPuuOOOuCNIkpTWiopgz57oDur8+dGd0299C/LzQyeT+lfsxXTNmjV88IMfvOraxz72McaNG8eDDz7IV7/61bgjSJKU9nJzob4e3v/+aObp6NHw2GPw7neHTib1n9gf5f92KQUYO3YsgwcP5sSJE3EvL0lSRpkxAw4dil6PGgVbt4bNI/WnIJufzp07x69//Wtuv/32EMtLkpTWhg2DtjaoqIDKSliwAHp6QqeSbl6QYrpmzRp6enqorKwMsbwkSWkvPx82bYo2Q61dG809PXMmdCrp5lxXMb1y5Qovvvhin/68lscff5wVK1ZQWVnJ+PHjbza/JElZK5GAefOgtRVOnYLS0miTlJSurmvzU2trKx/+8If79LMnTpzgrrvuetW1P/mTP+Huu+/mW9/61uv+/YULF1JQUHDVtaqqKqqqqq4nsiRJGW/MGOjogKoqmDgRvvY1+PKXo+Iq3azNmzezefPmq651d3fHslbiypW+T0P75S9/SUtLS59+9pOf/CS33nrry//5P//zP/nABz7A7/zO77Bv377XHBPV0dFBWVkZ7e3tlJaW9jWaJElZ7/JleOAB+Ou/hk9+Eh56KDpFSupvcfW167pjescdd1BTU3Pdi3R1dTFp0iR6enrYs2ePs0slSYrBgAGwahWUl0N1NYwcGY2Uuvvu0Mmkvol989P58+f5+Mc/zjPPPMM///M/U1xcHPeSkiRltYoKaG+HQYOikrpxY+hEUt/EPmD/M5/5DIcOHWLmzJk88cQTPPHEEy+/9+Y3v5lp06bFHUGSpKxTXAwHDsB990FNTXRa1Jo1MHBg6GTSa4u9mP7kJz8hkUiwfv161q9ff9V7b3/72y2mkiTFJC8P1q+HD3wA5s6N7qI+8gjceWfoZNK1xf4o/+c//zmXL1+mt7f3VX/+4z/+I+7lJUnKaokEzJ4N+/ZBZ2c0UqqP+5ilpAsyYF+SJCVXWVl0x7S8HKZMgZUrobc3dCrpahZTSZKyxODBsH07rFgBy5fD1KnQ1RU6lfQKi6kkSVkkJweWLYOdO6Gt7ZU7qVIqsJhKkpSFJk2KTosqLIxOjmpshL4fuSPFw2IqSVKWGjIE9u6FWbOgthZmzoQLF0KnUjazmEqSlMUGDoR166CpCbZsie6enjwZOpWylcVUkiRRXQ0HD8L589FRps3NoRMpG1lMJUkSACUlcPgwTJgA06bB0qVw6VLoVMomFlNJkvSyggLYtg3q6mD1apg8Gc6eDZ1K2cJiKkmSrpJIwKJFsHs3HDsGI0bA/v2hUykbWEwlSdI1jR8PR47A0KEwbhw0NDhSSvGymEqSpNdUVAR79sDcuTB/PlRVwblzoVMpU1lMJUnS68rNhfr6aJzUjh0wejQcPx46lTKRxVSSJPXJjBlw6FD0etQo2Lo1bB5lHoupJEnqs2HDoK0NKiqgshIWLICentCplCksppIk6brk58OmTdFmqLVro7mnZ86ETqVMYDGVJEnXLZGAefOgtRVOnYLS0miTlHQzLKaSJOmGjRkDHR0wfDhMnBgN5XeklG6UxVSSJN2UwkLYtQuWLIHFi2H6dOjuDp1K6chiKkmSbtqAAbBqFTQ3R4/0R46Eo0dDp1K6sZhKkqR+U1EB7e0waBCUl8PGjaETKZ1YTCVJUr8qLoYDB6JxUjU1MGcOXLwYOpXSgcVUkiT1u7w8WL8eGhthwwYYOxZOnw6dSqnOYipJkmKRSMDs2bBvH3R2RiOlWlpCp1Iqs5hKkqRYlZVF3zstL4cpU2DlSujtDZ1KqchiKkmSYjd4MGzfDitWwPLlMHUqdHWFTqVUYzGVJElJkZMDy5bBzp3Q1vbKnVTpJRZTSZKUVJMmRadFFRZGJ0c1NnpalCIWU0mSlHRDhsDevTBrFtTWwsyZcOFC6FQKzWIqSZKCGDgQ1q2DpibYsiW6e3ryZOhUCsliKkmSgqquhoMH4fz56CjT5ubQiRSKxVSSJAVXUgKHD8OECTBtGixdCpcuhU6lZLOYSpKklFBQANu2QV0drF4NkyfD2bOhUymZLKaSJCllJBKwaBHs3g3HjsGIEbB/f+hUShaLqSRJSjnjx8ORIzB0KIwbBw0NjpTKBhZTSZKUkoqKYM8emDsX5s+Hqio4dy50KsXJYipJklJWbi7U10fjpHbsgNGj4fjx0KkUF4upJElKeTNmwKFD0etRo2Dr1rB5FA+LqSRJSgvDhkFbG1RUQGUlLFgAPT2hU6k/WUwlSVLayM+HTZuizVBr10ZzT8+cCZ1K/cViKkmS0koiAfPmQWsrnDoFpaXRJimlP4upJElKS2PGQEcHDB8OEydGQ/kdKZXeLKaSJCltFRbCrl2wZAksXgzTp0N3d+hUulEWU0mSlNYGDIBVq6C5OXqkP3IkHD0aOpVuhMVUkiRlhIoKaG+HQYOgvBw2bgydSNfLYipJkjJGcTEcOBCNk6qpgTlz4OLF0KnUV7EW08cff5x7772XIUOGkJeXxx133MFHPvIRvv/978e5rCRJymJ5ebB+PTQ2woYNMHYsnD4dOpX6ItZi+rOf/YxbbrmFOXPmsG7dOhYtWsTzzz/PJz7xCR5++OE4l5YkSVkskYDZs2HfPujsjEZKtbSETqU3krhyJbmDFV544QXe8Y53cNddd9Ha2vqq9zs6OigrK6O9vZ3S0tJkRpMkSRno+eehuhq+/31Yvhzuvx9y/DLjTYmrryX9Y8nLy+P2228nNzc32UtLkqQsNHgwbN8OK1ZExXTqVOjqCp1K15KUYvrf//3fPPfcc5w4cYKvfOUrPPnkk3zpS19KxtKSJEnk5MCyZbBzJ7S1QVlZtINfqSUpxXTGjBkUFhbynve8h7//+79n69atTJkyJRlLS5IkvWzSpOi0qMLC6OSoxkZPi0olfS6mV65c4cUXX+zTn99WV1fHD37wA/7pn/6J97znPXz605/mBz/4Qb/+F5EkSeqLIUNg716YNQtqa2HmTLhwIXQqwXVsfvqXf/kXPvzhD/fpl544cYK77rrrmu/19PRQWlrKxYsXefLJJ1/1/ktfpv3Qhz5EQUHBVe9VVVVRVVXVpwySJElvZONG+MIX4K674NFH4Z3vDJ0o9WzevJnNmzdfda27u5vHH3+83zc/9bmY/vKXv6Slj3MWPvnJT3Lrrbe+5vtf+cpX+PrXv87zzz/PW97ylqvec1e+JElKpp/+FKZPj8ZKNTXBvfeGTpT64uprt/T1B++44w5qamr6ZdEXXngBgBxnNUiSpMBKSuDwYfjc52DaNFiyBL76Vbilzy1J/SXWZnj27NlXXfvVr37FY489RklJyeveVZUkSUqWggLYtg3q6mD1apg8Ga5RYxSzWP9dYMqUKfzhH/4ho0ePprCwkKeeeooNGzbQ2dnJQw89FOfSkiRJ1yWRgEWLYPRoqKyEESPgkUei3ftKjljvmM6aNYvnn3+eNWvWcN9999HY2Eh5eTn79+/v80YqSZKkZBo/Ho4cgaFDYdw4aGhwpFSyxHrH9L777uO+++6LcwlJkqR+V1QEe/ZEd1Dnz4f9++Fb34L8/NDJMpu7jyRJkq4hNxfq62HLFtixI3rEf/x46FSZzWIqSZL0OmbMgEOHotejRsHWrWHzZDKLqSRJ0hsYNgza2qCiItoYtWAB9PSETpV5LKaSJEl9kJ8PmzZFm6HWroUJE+DMmdCpMovFVJIkqY8SCZg3D1pb4dQpKC2NNkmpf1hMJUmSrtOYMdDRAcOHw8SJ0VB+R0rdPIupJEnSDSgshF27oiNMFy+G6dOhuzt0qvRmMZUkSbpBAwbAqlXQ3Bw90h85Eo4eDZ0qfVlMJUmSblJFBbS3w6BBUF4OGzeGTpSeLKaSJEn9oLgYDhyIxknV1MCcOXDxYuhU6cViKkmS1E/y8mD9emhshA0bYOxYOH06dKr0YTGVJEnqR4kEzJ4N+/ZBZ2c0UqqlJXSq9GAxlSRJikFZWfS90/JymDIFVq6E3t7QqVKbxVSSJCkmgwfD9u2wYgUsXw5Tp0JXV+hUqctiKkmSFKOcHFi2DHbuhLa2V+6k6tUsppIkSUkwaVJ0WlRhYXRyVGOjp0X9NoupJElSkgwZAnv3wqxZUFsLM2fChQuhU6UOi6kkSVISDRwI69ZBUxNs2RLdPT15MnSq1GAxlSRJCqC6Gg4ehPPno6NMm5tDJwrPYipJkhRISQkcPgwTJsC0abB0KVy6FDpVOBZTSZKkgAoKYNs2qKuD1ath8mQ4ezZ0qjAsppIkSYElErBoEezeDceOwYgRsH9/6FTJZzGVJElKEePHw5EjMHQojBsHDQ3ZNVLKYipJkpRCiopgzx6YOxfmz4eqKjh3LnSq5LCYSpIkpZjcXKivj8ZJ7dgBo0fD8eOhU8XPYir9//buPSaqMw0D+HNmRcDhohQRTLMMaoxtvV+oIEah1ktaYrVdUNNdG0SMqaAkVRS67QpsE22bUliNSutlMVSNWi/dKgaxq+4aRLHZbJTiNgJWsUusNSCXMvDuHxNmS1E6zLnMAM8v+RLyzRzOc/JmZt6cmfMdIiIiNxUXB5SV2f6eNg04dMi1efTGxpSIiIjIjY0ZA1y+DMTGAvHxwLp1QGurq1Ppg40pERERkZvz8QEKC20XQ23bZlv39M4dV6fSHhtTIiIiol5AUYDkZODvfweqqoDJk20XSfUlbEyJiIiIepHISKC8HBg7Fpgzx7Yof19ZUoqNKREREVEvExQEnDkDbNwIpKUBixcDDx+6OpV6bEyJiIiIeqHf/Ab485+BEydsX+lPnQr861+uTqUOG1MiIiKiXiw2Frh6FTCbgenTgYICVydyHhtTIiIiol5u5Ejg0iXbclJ/+AOwejXQ0uLqVD3HxpSIiIioD/D2BnbvBvLzgT17gJkzgepqV6fqGTamRERERH2EogCJicA//gHU1dmWlCoqcnUqx7ExJSIiIupjpkyx/e50+nRgwQIgMxNob3d1ql/HxpSIiIioDwoIAE6eBDZvBv70J+Dll4H7912dqntsTImIiIj6KJMJ+OMfgdOngcuX/38m1V2xMSUiIiLq4+bOtd0tKijIdueo/Hz3vFsUG1MiIiKifuC3vwUuXABWrACSkoCEBKCx0dWpOmNjSkRERNRPeHoC27cDf/0rcPCg7ezpf/7j6lT/x8aUiIiIqJ/5/e+B0lLg0SPbrUxPnHB1Ihs2pkRERET90LhxwJUrQHQ0sHAhsGkTYLW6NhMbUyIiIqJ+yt8fOHoU2LIF2LoVmDcP+O9/XZeHjSkRERFRP6YowIYNwNmzwL//DUyaBPzzn67JYmhjunLlSphMJsTGxhq5WyIiIiL6FbNnA9euAWFhwKxZQG6u8UtKGdaYXrlyBfv27YOXlxcURTFqt9QLfPbZZ66OQAZivfsX1rt/Yb17v+HDgXPngDVrgLVrgaVLgYYG4/ZvSGMqIkhJScHy5csxbNgwI3ZJvQjfyPoX1rt/Yb37F9a7b/DwAD76yLac1N/+BoSHAzduGLNvQxrTgoICXL9+HdnZ2RB3vM0AEREREXUSFweUldn+Dg8HDh3Sf5+6N6b19fVIS0tDeno6z5YSERER9SJjxgCXLwMvvwzExwOpqUBrq377070xzczMhNlsRmpqqt67IiIiIiKN+fgAhYW2i6H+8hfbuqd1dfrsa4CjTxQRtLS0OPRcLy8vAEBlZSVyc3Nx4MABeHh4OLRtU1MTAOCGUT9mIJd7+PAhysvLXR2DDMJ69y+sd//CevdtM2YA+fm2paV+9ztbn9bRt2lGHHTu3DlRFMWh8c0334iIyPz58yU6OrrT/wkNDZXY2Ngn7mf//v0CgIODg4ODg4ODw83H/v37HW0lHeLwGdNnnnkGe/fudei5wcHBKCkpQVFREY4ePYqqqir7Y1arFY2NjaiurkZAQAB8fX07bTtv3jzs378fFosF3t7ejsYjIiIiIoM0NTWhqqoK8+bN0/T/KiL6XCa/d+9eJCQkdPucnJwcpKSk6LF7IiIiIupldGtMb9++jWvXrnWaExEkJSXBYrEgIyMDY8eOxYgRI/TYPRERERH1Mro1pk9isVgwfvx4nDhxwsjdEhEREZGbM+yWpB14O1IiIiIiehzDz5gSERERET2O4WdMiYiIiIgex7DGtKWlBWlpaRg+fDgGDRqE6dOno7i42KFtf/zxRyQlJWHo0KHw8fFBTExMlwuryL04W++zZ88iISEBo0ePhtlsxsiRI7Fy5Urcu3fPgNTkLDWv759buXIlTCYTYmNjdUhJWlFb7+LiYsTExGDw4MHw8/PD1KlTcciIm3CTU9TUu7i4GC+88AKCgoLg6+uLCRMmIC8vD+3t7TqnJmc9evQI7777LubPn4+AgACYTCbs27fP4e1V92yarorajSVLloiHh4ds2LBB8vPzJTIyUjw8POTixYvdbtfW1iaRkZHi4+MjmZmZsm3bNnnuuefEz89Pbt68aVB66iln6z1lyhQZOXKkbNy4UT799FNJT08XPz8/CQ4Olnv37hmUnnrK2Xr/XFlZmXh4eIi3t3e3N+Eg11NT7927d4vJZJL58+fL9u3bZefOnZKamioffvihAcnJGc7W+9SpU6IoiowbN05ycnJk165d8sorr4iiKLJ27VqD0lNP3bp1SxRFEYvFItHR0aIoiuzbt8+hbbXo2QxpTEtLS0VRlE5vPM3NzTJq1CiJjIzsdtuDBw+Koihy5MgR+1xdXZ0MGTJEli1bpltmcp6ael+4cKHL3Pnz50VRFHn77bc1z0rqqal3h/b2domIiJDExESxWCxsTN2YmnrfunVLvL29Zd26dXrHJI2oqVKOdl4AAAasSURBVPeyZcvEy8tLHjx40Gl+1qxZ4u/vr0teUq+lpUW+//57ERG5cuVKjxpTLXo2Q77KP3z4MAYMGICkpCT7nKenJ1asWIFLly7hzp073W4bHByMxYsX2+cCAwMRFxeH48ePo7W1Vdfs1HNq6h0VFdVlbubMmQgICEBFRYUueUkdNfXuUFBQgOvXryM7OxvC6zHdmpp679ixAyKCzMxMAEBDQwPr7ebU1Nvb2xuenp7w9/fvNB8cHIxBgwbplpnUGThwIIKCggCgx69PLXo2QxrTa9euYfTo0fDx8ek0P23aNADA119/3e22kydP7jI/bdo0NDY2orKyUtuwpJqaej9OQ0MD6uvrERgYqFlG0o7aetfX1yMtLQ3p6ekYNmyYbjlJG2rqXVxcjDFjxuCLL77A008/DT8/PwQGBuKdd95hg+qm1NQ7OTkZ7e3tWLVqFSoqKlBdXY0dO3bg888/x6ZNm3TNTa6hRc9mSGNaW1uLkJCQLvMdc3fv3tVlW3INrWuWk5OD1tZWxMfHa5KPtKW23pmZmTCbzUhNTdUlH2lLTb1v3ryJmpoaJCQkIDExEUeOHMGCBQuQnZ2NjIwM3TKT89TUe8KECSgpKcHJkyfx7LPPIiwsDMnJycjLy0NycrJumcl1tPj8H6B5qsdoamqCp6dnl3kvLy/740/S3Nzs9LbkGmrq/Uvnz5/H5s2bER8fj9mzZ2sVkTSkpt6VlZXIzc3FgQMH4OHhoVtG0o6aend8db9lyxasX78eALBo0SL88MMP+Pjjj5Gent7lzBy5lpp6V1RU4KWXXkJoaCjef/99eHl5obCwEGvWrMGwYcOwcOFC3XKTa2jRsxlyxtTb2xstLS1d5pubm+2P67EtuYZWNauoqMCiRYswfvx4fPLJJ5pmJO2oqffatWsxY8YMLFq0SLd8pC217+eKomDp0qWd5pcsWYKmpqYe/8yH9Kem3m+99RYGDBiAr776Cq+//jpee+01HD16FFFRUXjzzTfR1tamW25yDS0+/w1pTENCQh57+ra2thYAMHz4cF22JdfQoma3b9/G3LlzMWTIEHz55Zcwm82a5yRtOFvvkpISFBUVISUlBVVVVfZhtVrR2NiI6upq1NfX65qdek7N67vjsV/+lrjjQosHDx5oFZM0oqbeFy9eRExMTJcLnWJjY3H37l1UV1drG5ZcTovPf0Ma00mTJqGysrLLh0xpaSkAYOLEiU/cduLEiSgvL+/yw/jS0lKYzWaMHj1a+8Ckipp6A8D9+/cxd+5ctLa2oqioiBfEuDln611TUwMAWLx4MUaMGGEfd+/eRUlJCcLCwrBnzx59w1OPqXl9T506FSKC7777rtN8xwfZ0KFDNU5Laqmpt9VqfexZ0Y4rs61Wq4ZJyR1o0rM5vLCVCh3roH3wwQf2uY510CIiIuxztbW1cuPGDWltbbXPdayJdfjwYftcXV2dDB48WJYuXWpEfOohNfVuaGiQ8PBw8ff3l/LyckNzk3OcrXdNTY0cP3680zh27JgEBQVJeHi4HD9+XL799lvDj4e6p+b1fezYMVEURTIyMuxzbW1tEhUVJYGBgfLTTz8ZcxDkMDX1joqKkqeeekru379vn7NarTJlyhTx9/cXq9VqzEGQ08rKyp64jqlePZthd36Ki4uz3zli586dEhkZKQMHDuy0oPry5ctFURSprq62z7W1tUlERIT4+vp2uouAv7+/VFZWGhWfesjZei9cuFAURZEVK1ZIQUFBp3Hs2DFXHAo5wNl6P05oaCgX2Hdzauo9Z84cMZlMsmrVKtm2bZu8+OKLoiiK5OfnG30Y5CBn633q1CkxmUwyatQo2bp1q+Tm5kpERIQoiiLvvfeeKw6FHJSXlydZWVmyevVqURRFXn31VcnKypKsrCx5+PChiOjXsxnWmDY3N8v69eslJCREvLy85Pnnn5czZ850es4bb7whJpOpyxvZgwcPJDExUQIDA8VsNkt0dLRcvXrVqOjkBGfrbbFYxGQyiaIoXUZYWJjRh0EOUvP6/iXe+cn9qal3Q0ODrFu3TkJCQsTT01MmTJgghYWFRsanHlJT79OnT8vMmTPFbDbb671r1y4j45MTLBaL/bPXZDLZP5d/XmO9ejZFhKsaExEREZHrGXLxExERERHRr2FjSkRERERugY0pEREREbkFNqZERERE5BbYmBIRERGRW2BjSkRERERugY0pEREREbkFNqZERERE5BbYmBIRERGRW2BjSkRERERugY0pEREREbkFNqZERERE5Bb+BzdM17Fi7/h1AAAAAElFTkSuQmCC", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "1-element Array{Any,1}:\n", - " PyObject " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xx = 0:0.01:1\n", - "plot(xx, map(f_deriv, xx))" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(f,args,code) = (:f,Any[:x],quote \n", - " (4x) * (1 - x)\n", - "end)\n", - "return_arguments = :_z_3_\n", - "flatAST = input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_1_,:_z_2_,:_z_3_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.Assignment(:_z_1_,:*,Any[4,:x]),IntervalConstraintProgramming.Assignment(:_z_2_,:-,Any[1,:x]),IntervalConstraintProgramming.Assignment(:_z_3_,:*,Any[:_z_1_,:_z_2_])]\n", - "\n", - "return_arguments = :_z_3_\n", - "HERE\n", - "(forward_code,backward_code) = (IntervalConstraintProgramming.GeneratedFunction(Symbol[:x],Symbol[:_z_3_,:_z_1_,:_z_2_],quote \n", - " _z_1_ = 4x\n", - " _z_2_ = 1 - x\n", - " _z_3_ = _z_1_ * _z_2_\n", - "end),IntervalConstraintProgramming.GeneratedFunction(Symbol[:x,:_z_3_,:_z_1_,:_z_2_],Symbol[:x],quote \n", - " (_z_3_,_z_1_,_z_2_) = mul_rev(_z_3_,_z_1_,_z_2_)\n", - " (_z_2_,_,x) = minus_rev(_z_2_,1,x)\n", - " (_z_1_,_,x) = mul_rev(_z_1_,4,x)\n", - "end))\n", - "make_function(forward_code) = :(x->begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 106:\n", - " begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 107:\n", - " begin \n", - " _z_1_ = 4x\n", - " _z_2_ = 1 - x\n", - " _z_3_ = _z_1_ * _z_2_\n", - " end # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 108:\n", - " return (_z_3_,_z_1_,_z_2_)\n", - " end\n", - " end)\n", - "make_function(backward_code) = :((x,_z_3_,_z_1_,_z_2_)->begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 106:\n", - " begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 107:\n", - " begin \n", - " (_z_3_,_z_1_,_z_2_) = mul_rev(_z_3_,_z_1_,_z_2_)\n", - " (_z_2_,_,x) = minus_rev(_z_2_,1,x)\n", - " (_z_1_,_,x) = mul_rev(_z_1_,4,x)\n", - " end # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 108:\n", - " return x\n", - " end\n", - " end)\n" - ] - }, - { - "data": { - "text/plain": [ - "IntervalConstraintProgramming.ConstraintFunction{##15#17,##16#18}(Symbol[:x],Symbol[:_z_3_,:_z_1_,:_z_2_],#15,#16)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@function f(x) = 4x*(1-x)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ex = :(f(x) ∈ [0.6,0.8])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_1_ = @contractor($(Expr(:escape, :(f(x)))))\n", - " ConstraintSeparator(_C_1_.variables[2:end],[0.599999, 0.800001],_C_1_,$(Expr(:quote, :(f(x) ∈ [0.599999, 0.800001]))))\n", - "end\n", - "@contractor; ex=f(x)\n", - "Entering Contractor(ex) with ex=f(x)\n", - "(top,linear_AST) = (Symbol[:_z_4_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_4_,:_z_5_,:_z_6_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_4_,:_z_5_,:_z_6_],:f,Any[:x])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/plain": [ - "Separator:\n", - "- variables: x\n", - "- expression: f(x) ∈ [0.599999, 0.800001]\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C = @constraint f(x) ∈ [0.6, 0.8]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X = IntervalBox(0..1)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Paving:\n", - "- tolerance ϵ = 0.01\n", - "- inner approx. of length 12\n", - "- boundary approx. of length 4" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving = pave(C, X)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "12-element Array{ValidatedNumerics.IntervalBox{1,Float64},1}:\n", - " [0.768432, 0.804798]\n", - " [0.810695, 0.814974]\n", - " [0.804797, 0.810696]\n", - " [0.739729, 0.768433]\n", - " [0.730784, 0.73973] \n", - " [0.726321, 0.730785]\n", - " [0.231567, 0.260271]\n", - " [0.269215, 0.273679]\n", - " [0.26027, 0.269216] \n", - " [0.195202, 0.231568]\n", - " [0.189304, 0.195203]\n", - " [0.185026, 0.189305]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "paving.inner" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using Plots\n", - "gr()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "12-element Array{ValidatedNumerics.IntervalBox{2,Float64},1}:\n", - " [0.768432, 0.804798] × [0, 1]\n", - " [0.810695, 0.814974] × [0, 1]\n", - " [0.804797, 0.810696] × [0, 1]\n", - " [0.739729, 0.768433] × [0, 1]\n", - " [0.730784, 0.73973] × [0, 1] \n", - " [0.726321, 0.730785] × [0, 1]\n", - " [0.231567, 0.260271] × [0, 1]\n", - " [0.269215, 0.273679] × [0, 1]\n", - " [0.26027, 0.269216] × [0, 1] \n", - " [0.195202, 0.231568] × [0, 1]\n", - " [0.189304, 0.195203] × [0, 1]\n", - " [0.185026, 0.189305] × [0, 1]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "boxes = [IntervalBox(x, 0..1) for x in paving.inner]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "plot(boxes, xlim=(0,1), ylim=(0,1))\n", - "plot!(x->4*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ex = :(f(f(x)) ∈ [0.6,0.8])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_2_ = @contractor($(Expr(:escape, :(f(f(x))))))\n", - " ConstraintSeparator(_C_2_.variables[2:end],[0.599999, 0.800001],_C_2_,$(Expr(:quote, :(f(f(x)) ∈ [0.599999, 0.800001]))))\n", - "end\n", - "@contractor; ex=f(f(x))\n", - "Entering Contractor(ex) with ex=f(f(x))\n", - "(top,linear_AST) = (Symbol[:_z_10_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_7_,:_z_8_,:_z_9_,:_z_10_,:_z_11_,:_z_12_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_7_,:_z_8_,:_z_9_],:f,Any[:x]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_10_,:_z_11_,:_z_12_],:f,Any[:_z_7_])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C2 = @constraint f(f(x)) ∈ [0.6, 0.8]\n", - "paving = pave(C2, X)\n", - "boxes = [IntervalBox(x, 0..1) for x in paving.inner]\n", - "\n", - "plot(boxes, xlim=(0,1), ylim=(0,1))\n", - "plot!(x->4*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ex = :(f(f(f(x))) ∈ [0.6,0.8])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_3_ = @contractor($(Expr(:escape, :(f(f(f(x)))))))\n", - " ConstraintSeparator(_C_3_.variables[2:end],[0.599999, 0.800001],_C_3_,$(Expr(:quote, :(f(f(f(x))) ∈ [0.599999, 0.800001]))))\n", - "end\n", - "@contractor; ex=f(f(f(x)))\n", - "Entering Contractor(ex) with ex=f(f(f(x)))\n", - "(top,linear_AST) = (Symbol[:_z_19_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_13_,:_z_14_,:_z_15_,:_z_16_,:_z_17_,:_z_18_,:_z_19_,:_z_20_,:_z_21_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_13_,:_z_14_,:_z_15_],:f,Any[:x]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_16_,:_z_17_,:_z_18_],:f,Any[:_z_13_]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_19_,:_z_20_,:_z_21_],:f,Any[:_z_16_])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C2 = @constraint f(f(f(x))) ∈ [0.6, 0.8]\n", - "paving = pave(C2, X, 0.001)\n", - "boxes = [IntervalBox(x, 0..1) for x in paving.inner]\n", - "\n", - "plot(boxes, xlim=(0,1), ylim=(0,1))\n", - "plot!(x->4*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ex = :(f(f(f(f(x)))) ∈ [0.6,0.8])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_5_ = @contractor($(Expr(:escape, :(f(f(f(f(x))))))))\n", - " ConstraintSeparator(_C_5_.variables[2:end],[0.599999, 0.800001],_C_5_,$(Expr(:quote, :(f(f(f(f(x)))) ∈ [0.599999, 0.800001]))))\n", - "end\n", - "@contractor; ex=f(f(f(f(x))))\n", - "Entering Contractor(ex) with ex=f(f(f(f(x))))\n", - "(top,linear_AST) = (Symbol[:_z_43_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_34_,:_z_35_,:_z_36_,:_z_37_,:_z_38_,:_z_39_,:_z_40_,:_z_41_,:_z_42_,:_z_43_,:_z_44_,:_z_45_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_34_,:_z_35_,:_z_36_],:f,Any[:x]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_37_,:_z_38_,:_z_39_],:f,Any[:_z_34_]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_40_,:_z_41_,:_z_42_],:f,Any[:_z_37_]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_43_,:_z_44_,:_z_45_],:f,Any[:_z_40_])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C2 = @constraint f(f(f(f(x)))) ∈ [0.6, 0.8]\n", - "paving = pave(C2, X, 0.001)\n", - "boxes = [IntervalBox(x, 0..1) for x in paving.inner]\n", - "\n", - "plot(boxes, xlim=(0,1), ylim=(0,1), aspect_ratio=:equal)\n", - "plot!(x->4*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ex = :(f(f(f(f(x)))) ∈ [0.4,0.8])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_16_ = @contractor($(Expr(:escape, :(f(f(f(f(x))))))))\n", - " ConstraintSeparator(_C_16_.variables[2:end],[0.399999, 0.800001],_C_16_,$(Expr(:quote, :(f(f(f(f(x)))) ∈ [0.399999, 0.800001]))))\n", - "end\n", - "@contractor; ex=f(f(f(f(x))))\n", - "Entering Contractor(ex) with ex=f(f(f(f(x))))\n", - "(top,linear_AST) = (Symbol[:_z_160_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_151_,:_z_152_,:_z_153_,:_z_154_,:_z_155_,:_z_156_,:_z_157_,:_z_158_,:_z_159_,:_z_160_,:_z_161_,:_z_162_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_151_,:_z_152_,:_z_153_],:f,Any[:x]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_154_,:_z_155_,:_z_156_],:f,Any[:_z_151_]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_157_,:_z_158_,:_z_159_],:f,Any[:_z_154_]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_160_,:_z_161_,:_z_162_],:f,Any[:_z_157_])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "C3 = @constraint f(f(f(f(x)))) ∈ [0.4, 0.8]\n", - "paving = pave(C3, X, 0.001)\n", - "inner = [IntervalBox(x, 0..1) for x in paving.inner]\n", - "boundary = [IntervalBox(x, 0..1) for x in paving.boundary]\n", - "\n", - "plot(inner, xlim=(0,1), ylim=(0,1), aspect_ratio=:equal)\n", - "plot!(boundary, xlim=(0,1), ylim=(0,1), aspect_ratio=:equal, c=:gray)\n", - "plot!(x->4*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(f,args,code) = (:g,Any[:x],quote \n", - " (5x) * (1 - x)\n", - "end)\n", - "return_arguments = :_z_175_\n", - "flatAST = input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_173_,:_z_174_,:_z_175_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.Assignment(:_z_173_,:*,Any[5,:x]),IntervalConstraintProgramming.Assignment(:_z_174_,:-,Any[1,:x]),IntervalConstraintProgramming.Assignment(:_z_175_,:*,Any[:_z_173_,:_z_174_])]\n", - "\n", - "return_arguments = :_z_175_\n", - "HERE\n", - "(forward_code,backward_code) = (IntervalConstraintProgramming.GeneratedFunction(Symbol[:x],Symbol[:_z_175_,:_z_173_,:_z_174_],quote \n", - " _z_173_ = 5x\n", - " _z_174_ = 1 - x\n", - " _z_175_ = _z_173_ * _z_174_\n", - "end),IntervalConstraintProgramming.GeneratedFunction(Symbol[:x,:_z_175_,:_z_173_,:_z_174_],Symbol[:x],quote \n", - " (_z_175_,_z_173_,_z_174_) = mul_rev(_z_175_,_z_173_,_z_174_)\n", - " (_z_174_,_,x) = minus_rev(_z_174_,1,x)\n", - " (_z_173_,_,x) = mul_rev(_z_173_,5,x)\n", - "end))\n", - "make_function(forward_code) = :(x->begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 106:\n", - " begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 107:\n", - " begin \n", - " _z_173_ = 5x\n", - " _z_174_ = 1 - x\n", - " _z_175_ = _z_173_ * _z_174_\n", - " end # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 108:\n", - " return (_z_175_,_z_173_,_z_174_)\n", - " end\n", - " end)\n", - "make_function(backward_code) = :((x,_z_175_,_z_173_,_z_174_)->begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 106:\n", - " begin # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 107:\n", - " begin \n", - " (_z_175_,_z_173_,_z_174_) = mul_rev(_z_175_,_z_173_,_z_174_)\n", - " (_z_174_,_,x) = minus_rev(_z_174_,1,x)\n", - " (_z_173_,_,x) = mul_rev(_z_173_,5,x)\n", - " end # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/code_generation.jl, line 108:\n", - " return x\n", - " end\n", - " end)\n", - "ex = :(g(g(x)) ∈ [0,1])\n", - "code = quote # /Users/dpsanders/.julia/v0.5/IntervalConstraintProgramming/src/separator.jl, line 67:\n", - " _C_19_ = @contractor($(Expr(:escape, :(g(g(x))))))\n", - " ConstraintSeparator(_C_19_.variables[2:end],[0, 1],_C_19_,$(Expr(:quote, :(g(g(x)) ∈ [0, 1]))))\n", - "end\n", - "@contractor; ex=g(g(x))\n", - "Entering Contractor(ex) with ex=g(g(x))\n", - "(top,linear_AST) = (Symbol[:_z_179_],input vars: Set(Symbol[:x])\n", - "intermediate vars: Symbol[:_z_176_,:_z_177_,:_z_178_,:_z_179_,:_z_180_,:_z_181_]\n", - "code: \n", - "Any[IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_176_,:_z_177_,:_z_178_],:g,Any[:x]),IntervalConstraintProgramming.FunctionAssignment(Symbol[:_z_179_,:_z_180_,:_z_181_],:g,Any[:_z_176_])]\n", - ")\n", - "input_arguments = Symbol[:x]\n", - "augmented_input_arguments = Symbol[:_A_,:x]\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@function g(x) = 5x*(1-x)\n", - "C4 = @constraint g(g(x)) ∈ [0, 1]\n", - "\n", - "paving = pave(C4, X, 0.001)\n", - "inner = [IntervalBox(x, 0..1) for x in paving.inner]\n", - "boundary = [IntervalBox(x, 0..1) for x in paving.boundary]\n", - "\n", - "plot(inner, xlim=(0,1), ylim=(0,1), aspect_ratio=:equal)\n", - "plot!(boundary, xlim=(0,1), ylim=(0,1), aspect_ratio=:equal, c=:gray)\n", - "plot!(x->5*x*(1-x))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "display_name": "Julia 0.5.0", - "language": "julia", - "name": "julia-0.5" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.5.0" - }, - "toc": { - "nav_menu": { - "height": "65px", - "width": "253px" - }, - "navigate_menu": true, - "number_sections": true, - "sideBar": true, - "threshold": "2", - "toc_cell": false, - "toc_section_display": "block", - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Set inversion.ipynb b/examples/Set inversion.ipynb deleted file mode 100644 index ca5f8a1..0000000 --- a/examples/Set inversion.ipynb +++ /dev/null @@ -1,1827 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/PyCall.ji for module PyCall.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Conda.ji for module Conda.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/PyPlot.ji for module PyPlot.\n", - "/usr/local/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 13 methods)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[10, 11]" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = y = -∞..∞\n", - "x = 10..11" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[100, 121]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z1 = x^2" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, ∞]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z2 = y^2" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[100, ∞]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z3 = z1 + z2" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "∅" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z3 = z3 ∩ (0..1)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "∅" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z1 = z1 ∩ (z3 - z2)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "∅" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "IntervalConstraintProgramming.sqr_rev(z1, x)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "macro simple(expr)\n", - " @show expr\n", - " return nothing\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "expr = :(1 <= x ^ 2 + y ^ 2 <= 3)\n" - ] - } - ], - "source": [ - "@simple 1 <= x^2 + y^2 <= 3" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - "- variables: x, y\n", - "- expression: x ^ 2 + y ^ 2 ∈ [1, 3]\n" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S1 = @constraint 1 <= x^2 + y^2 <= 3" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "draw (generic function with 15 methods)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function draw(inner)\n", - " draw_boxes(inner, \"green\", 0.5)\n", - " axis(\"image\")\n", - "end\n", - "\n", - "function draw(inner, boundary)\n", - " draw_boxes(inner, \"green\", 0.5)\n", - " draw_boxes(boundary, \"gray\", 0.5)\n", - " axis(\"image\")\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.7320508075688776,1.7320508075688767,-1.7320508075688772,1.7320508075688772)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X = IntervalBox(-100..100, -100..100)\n", - "paving = pave(S1, X, ldexp(1., -3))\n", - "draw(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2-dimensional area: [5.9714, 6.59028]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.0625" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "refine!(paving, ldexp(1.,-4))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2-dimensional area: [6.12788, 6.43732]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.7320508075688776,1.732050807568878,-1.7320508075688774,1.7320508075688772)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2-dimensional area: [6.12788, 6.43732]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.209378 seconds (1.57 M allocations: 46.505 MB, 13.95% gc time)\n" - ] - } - ], - "source": [ - "@time inner, boundary = pave(S1, X, ldexp(1., -6));\n" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "true" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pygui(true)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ion()\n", - "clf()\n", - "for n in 1:length(inner)\n", - " draw_boxes(inner[n:n+1], \"green\", 0.2)\n", - " sleep(0.1)\n", - " axis(\"image\")\n", - " \n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0-element Array{ValidatedNumerics.IntervalBox{2,Float64},1}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inner" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "area (generic function with 2 methods)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "area(X::IntervalBox) = prod(map(diam, X))\n", - "\n", - "function area(inner, boundary)\n", - " lower = sum(map(area, inner))\n", - " upper = lower + sum(map(area, boundary)) \n", - " return hull(lower, upper)\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Calculate area of inner and boundary pavings:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.011396 seconds (100.93 k allocations: 2.994 MB)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (2,[2.92837, 3.31564],32,36)\n", - " 0.031480 seconds (199.37 k allocations: 5.916 MB, 28.09% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (3,[3.03985, 3.2335],68,72)\n", - " 0.045924 seconds (395.38 k allocations: 11.731 MB)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (4,[3.09195, 3.18877],140,144)\n", - " 0.101517 seconds (786.51 k allocations: 23.331 MB, 13.77% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (5,[3.11708, 3.16549],284,288)\n", - " 0.217646 seconds (1.57 M allocations: 46.505 MB, 14.10% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (6,[3.12941, 3.15362],572,576)\n", - " 0.432683 seconds (3.13 M allocations: 92.826 MB, 16.19% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (7,[3.13552, 3.14763],1148,1152)\n", - " 0.821639 seconds (6.25 M allocations: 185.441 MB, 13.69% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (8,[3.13856, 3.14462],2300,2304)\n", - " 1.559038 seconds (12.50 M allocations: 370.644 MB, 14.08% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (9,[3.14007, 3.14311],4604,4608)\n", - " 3.113749 seconds (24.99 M allocations: 741.022 MB, 14.18% gc time)\n", - "(i,area(inner,boundary),length(inner),length(boundary)) = (10,[3.14083, 3.14235],9212,9216)\n" - ] - } - ], - "source": [ - "X = IntervalBox(-2..2, -2..2)\n", - "\n", - "for i in 2:10\n", - "\n", - " @time inner, boundary = pave(S1, X, ldexp(1., -i))\n", - " @show i, area(inner, boundary), length(inner), length(boundary)\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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+vz85ubmmDp1aqcf5/yZz3wmLr744vjZz35WjiHSD83NzTFmzJi44oorOradeOKJMW/evHjyySfjvffeK+l12tvb469//WvHd5xRWc3NzTFgwIBYsGBBx7aBAwfG9ddfH+vWrYs33njjiM8txz5Advrz+R5WLBbjwIEDXb7rk+o77rjj4qSTToqI6PUcWq7jN9eh0h/t7e3x8ssvx3nnndfla1OmTIk//vGP8c4771RhZBy2ZcuWmDRpUpftU6ZMiXfffTe2b99e0uuceeaZMWLEiBg2bFhcffXVrn1X2JYtW6KpqanT5beIDz/HiIitW7ce8bnl2AfITn8+38NmzpwZw4cPjyFDhsSXv/zleO211zIZK5VVruO3bkPlrbfeir/97W/d/qj9w9t27dpV6WHxMS0tLf36fEaOHBnf+MY34uGHH47HH388brjhhli9enX84z/+Yxw4cCCTMdNVfz7H/u4DZK8/n9GQIUPiuuuui2XLlsUvfvGLWLRoUaxZsyYuuOCCeP311zMbM5VRruM3mZtpi8Vit78puTuDBg3q9/sdOnQoIj5couzp9Q8/hv7ry+fb2trar89n4cKFnf79K1/5SkydOjW++tWvxrJly2Lx4sUljYf+OXToUJ8/x/7uA2SvP5/v3LlzO/06lMsvvzy++MUvxhe+8IW4++6748EHHyz/gKmYch2/yayorF27No4//viS/inHcu/hb1Ht7uTZ2tra6TH0X18+38GDB5f985k/f36MGTMm1qxZ07//IErWn88xi32A8ir3Z3ThhRfG+eefX/K3r5Oucu0byayonHPOOfHII4+U9NgxY8b0+/1GjhwZAwcOjJaWli5fO7xt7Nix/X4fPtSXz7exsbHbpcH+fj6nnnpqvPXWW316Lr3Xn88xq32A8sniMzr11FPdf1QDyrVvJBMqJ598clxzzTUVe7+GhoY499xzY8OGDV2+tn79+jjrrLNiyJAhFRtPrevL5zthwoR44YUXOn5P1GHr16+PIUOGRFNTU6/HUSwWY8eOHZ2+04tsTZw4MZ577rk4cOBAnHDCCR3b169fHxEffs49yWIfoLz68/n25E9/+lOMHj26bGOkOsp1/CZz6SdrO3fujG3btnXaNmfOnNiwYUNs2rSpY9urr74azz77bKfrplTHnDlz4s0334wnnniiY9u+ffvisccei8suuyyOPfbYju3dfb579+7t8poPPvhg7Nu3L2bPnp3dwOlkzpw58cEHH8TDDz/csa2trS2WL18e06ZNi1NOOSUiPvxJ09u2bYv333+/03NL3Qeojv58vt0do0899VRs3rzZMZozWR6/uf+lhN/97ncjIuL3v/99rF69Or72ta/F6aefHhERd9xxR8fjZsyYEc8//3y0t7d3bDt48GBMnDgxDhw4EN/61rdiwIAB8f3vfz+KxWJs3bo1Ro0aVdH/Fjprb2+Piy66KH73u9/FLbfc0vFTDV9//fXYsGFDjBs3ruOx3X2+xx9/fFx55ZUxfvz4GDRoUPzmN7+J1atXx4QJE+LFF18sy03ZlOZf/uVf4uc//3ncfPPNcdZZZ8WKFSti48aNsWbNmrjooosi4sOfbrpy5crYsWNHnHbaaRHRu32A6unr5ztu3LiYNGlSTJ48OYYPHx6bN2+On/zkJ3HKKafEhg0brKok4gc/+EHs378/du3aFQ899FBcccUVHStlCxcujGHDhmV7/Jb8o+ESVSgUig0NDZ3+9/D//7gZM2Z02VYsFouvv/56ce7cucXhw4cXTzjhhOLll19e/OMf/1ip4XMUb7/9dvGGG24onnjiicUhQ4YUZ86c2e1Psezu8/23f/u34mc/+9nisGHDiscdd1yxqampeNtttxUPHjxYqeHzd62trcVbbrml2NjYWBw0aFDx/PPPLz799NOdHnPttdcWGxoain/5y186bS91H6B6+vr53nHHHcWJEycWR4wYUTzuuOOKp59+evHrX/96cc+ePZX+T+AITj/99E7n1o+fcw9/nlkev7lfUQEAalfd3KMCAOSPUAEAkiVUAIBkCRUAIFlCBQBIllABAJIlVACAZAkVACBZQgUASJZQAQCSJVQAgGQJFQAgWf8PBdmlxW5YnUAAAAAASUVORK5CYII=", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-0.999998569487502,0.9999985694875023,-0.9999995231627279,0.9999995231627279)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "8628" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.848361 seconds (6.32 M allocations: 211.844 MB, 5.36% gc time)\n" - ] - }, - { - "data": { - "image/png": "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6NGqq6uLO4S88MILOnnypA4fPqzCwkJJ0j333KPp06dr69ateuqpp5xotiuohsA0bmqNHecqvCIo56orIWTEiBFJ7V9XV6e5c+f2BBBJ+s53vqO7775bv/vd73wdQiSCCLyDKklvnJfwmqCdk56/MdWyLP3xj3/UAw880OexoqIi7dmzR5cvX0466ADoK2yhhNABuMvzIeTixYu6du2acnNz+zzWve3s2bODmwG4AAARwElEQVSaNm2a202zVffgziAILxusf/oloHCOwa/8co7FI+4QYlmWOjs7Y3puampq3A26WUdHx4CvlZaW1us5QcDSDPxqqH7r1gDK+YMgCmIAkRIIIfX19VqwYMGQz4tEIvr444+Vn5+fUMO6paenS5KuXbvW57GrV6/2es5AysvLlZWV1WtbaWmpSktLk2obgNgRDoBgqq2tVW1tba9tbW1tMe0bdwi5/fbbVV1dHdNz+1tCidctt9yi1NRUNTc393mse1teXt6gr1FZWdnrplavoxoCAOjm9SpIfxf1jY2Nmj179pD7xh1CbrvtNt13333x7pawSCSiGTNm6MiRI30e++CDDzRlyhRuSgUAwIc897djTp8+raampl7bli1bpsOHD6uxsbFnW1NTk959910tX77c7Sa6wuvJFwDgvKDPBa59Ouapp55SJBLR8ePHZVmWampqtH//fknS448/3vO8srIy1dfXq6urq2fbv/7rv+q//uu/tHjxYj3yyCNKSUlRZWWlcnNz9R//8R9uvQXXsSwDAOEV9AAiuRhCnnzySUUiEUnXl1i2b9/e8983hpBIJKJotHeBJjMzU++//77Ky8v19NNP9/ztmGeffVZjx4516y0AAAAbuRZCbqxsDOa9997rd3teXp527txpZ5N8ge8PAYBwCUMFpJvn7gkBAADhQAjxiTAlYwAIq7CN9YQQHwlb5wSAMAnjGE8IAQAARhBCfCaMSRkAgqyiuCK0YzshxIfC3GEBIEjCPpYTQgAAgBGEEB8Le4IGAD9jDCeEAAAAQwghPkeSBgB/4b6+vyOEBAAdGgD8gbG6N0IIAAAwwrU/YAfn8cfuAMCbqID0j0oIAAAwgkpIAFERAQBvoAIyOCohAADACEIIAAAwguWYAGNZBgDMYBkmNlRCAACAEVRCQoCKCAC4gwpIfKiEAAAAI6iEhAgVEQBwBhWQxFAJ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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.7320111636183058,1.7320111636183055,-1.731997948766467,1.731997948766467)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X = IntervalBox(-100..100, -100..100)\n", - "S2 = @constraint 1 <= x^2 + y^2 <= 3\n", - "@time inner, boundary = pave(S2, X, ldexp(1., -6))\n", - "draw(inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.105208 seconds (625.90 k allocations: 18.664 MB, 29.18% gc time)\n" - ] - } - ], - "source": [ - "@time inner, boundary = pave(S2, X, ldexp(1., -3));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Animation " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "true" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pygui(true)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2016-05-24 00:05:17.068 julia[37236:279254] setCanCycle: is deprecated. Please use setCollectionBehavior instead\n", - "2016-05-24 00:05:17.075 julia[37236:279254] setCanCycle: is deprecated. Please use setCollectionBehavior instead\n" - ] - } - ], - "source": [ - "ion()\n", - "for n in 1:length(inner)\n", - " draw_boxes([inner[n]], \"green\", 0.2, 1)\n", - " draw_boxes([boundary[n]], \"grey\", 0.2, 0.1)\n", - " \n", - " sleep(0.00001)\n", - " if n==1\n", - " axis(\"image\")\n", - " xlim(-2, 2)\n", - " ylim(-2, 2)\n", - " end\n", - " show()\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "336" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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SYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIKkscfHYY4/FZZddFqeddloMHz482tvbY/bs2fHTn/40x8MDABlliYtNmzbFu971rvjCF74Q3/rWt+LLX/5y7Ny5M84///z4t3/7txxDaFlrH1lb9BAamuVXHcuvOpZfdSy/4mSJi/nz58d9990XN998c3zuc5+LG2+8Mf7zP/8zxowZE9/85jdzDKFlPfPoM0UPoaFZftWx/Kpj+VXH8itOYddcDB8+PMaMGRN79uwpaggAQA0Myflgr7zySvT29sauXbtixYoVsW7duli0aFHOIQAANZY1LubNmxc//vGPIyLixBNPjAULFsRf/uVf5hwCAFBjFcdFuVyO3t7eAf3u0KFD+/z/pUuXxp/92Z/F1q1bY8WKFdHb2xuvvfZanHjiif3+/f79+yMiYtcLuyodJv/nQM+B6N7UXfQwGpblVx3LrzqWX3Usv8F7a7/71n64YuUKrVmzplwqlY77r62trbxx48aj3k9vb2950qRJ5blz5x71dzo7O8sR4Z9//vnnn3/+FfCvs7Oz0kwol8vlcsUzF+ecc04sX758QL/b3t5+1J+dcMIJMWfOnFi6dGkcPHjwiFmOiIiZM2dGZ2dnnHHGGTF8+PBKhwoADML+/fvjV7/6VcycOXNQf18ql8vlxGMasIULF8add94ZO3fujNGjRxc1DAAgoSxx8eKLL8aYMWP63LZnz57o6OiId73rXfH888/XeggAQCZZ3i0ye/bs+J3f+Z34wz/8wxg7dmxs2bIlli9fHt3d3bF69eocQwAAMskyc/G3f/u38U//9E+xYcOG2LNnT4waNSr+6I/+KL785S/Hhz70oVo/PACQUaHXXAAAzcdXrgMASTVUXPjq9uo8+uijMX/+/Dj77LNjxIgRceaZZ8Z1110XO3bsKHpoDWHHjh3xla98JS688MJ497vfHW1tbdHV1VX0sOpOb29v3HTTTTF+/Pg46aSTYvr06fHv//7vRQ+rYbz66qvxta99LWbPnh3vfe97o62tLVauXFn0sBrCU089Fddff31MmjQpRo4cGaeffnpceeWVsXnz5qKH1hCeffbZmDdvXpx55pkxYsSIGDNmTMyYMSN++MMfVnxfDRUXvrq9OjfddFP85Cc/icsvvzzuuuuu+OQnPxmrV6+OqVOnxv/+7/8WPby6t3Hjxrjtttti+/bt0dHREaVSqegh1aXPfOYz8c1vfjOuueaauPPOO2PIkCHxsY99zEHAAO3atSu+/vWvx4YNG2LKlCnWswosXbo07r///rj44ovjzjvvjAULFkRXV1dMnTo1nn322aKHV/e2bNkSPT098dnPfjbuvPPO+OpXvxqlUinmzJkTf//3f1/ZnQ3qo7fqyL59+8qnnHJKefbs2UUPpe499thjR9zW1dVVLpVK5VtuuaWAETWWnp6e8ksvvVQul8vle++9t9zW1lb+yU9+UvCo6suTTz5ZLpVK5dtvv/3wbQcOHChPmDChfN555xU4ssbR29tb3rlzZ7lcLpefeuqpcqlUKq9YsaLgUTWGn/3sZ+XXXnutz22bN28uDxs2rHzNNdcUNKrG9sYbb5SnTJlS/r3f+72K/q6hZi7646vbB+7DH/7wEbd95CMfife85z2xfv36AkbUWEaMGBG//du/XfQw6tq9994bQ4YMieuuu+7wbUOHDo358+fHz372s9i2bVuBo2sMJ5xwQowdO7boYTSk6dOnx5AhfT9hYcKECfGBD3zANm6QSqVSvO9976t4H9uQcfHKK6/E7t27Y+PGjfEXf/EXsW7durj44ouLHlZDevXVV6Onp8cnpJLE008/HRMnToyRI0f2uX3atGmHfw65+RToyuzbty92794dzz33XNxxxx3xox/9qOJ9bNavXE/FV7enc8cdd8Rrr70WV111VdFDoQl0d3f3+51C7e3tUS6XY/v27QWMilbW2dkZ27ZtiyVLlhQ9lIbxpS99Kb797W9HRERbW1t84hOfiLvuuqui+ygsLsoZv7q9GVWz/N7S1dUVt956a1x55ZUxY8aMlMOreymWH0fav39/v8tr2LBhh38OuWzYsCGuv/76OO+88+Laa68tejgNY+HChTF37tzYvn17rF69Ol5//fU4ePBgRfdRWFx0dXXFBRdccNzfK5VKsX79+pg4ceLh2zo6Og7/76uvvjqmTp0an/vc51rqo8SrWX4Rb77oLr/88ujo6IjvfOc7tRpm3ap2+dG/4cOH97sROnDgwOGfQw47d+6MSy+9NEaNGhXf//73veumAhMnTjy8zfv0pz8dM2fOjDlz5sQTTzwx4PsoLC5yfnV7M6pm+W3dujUuueSSGDVqVDz00EMxYsSIGoywvqVa/+irvb2931Mf3d3dERFx6qmn5h4SLWjv3r0xa9as2Lt3bzz++ONxyimnFD2khnbFFVfE5z//+di8eXOcddZZA/qbwuJi3Lhxyaap9u3bF+VyOV555ZWWiYvBLr9f//rXcckll8ShQ4dizZo1MW7cuBqMrv6lXP/4jSlTpsSaNWuip6cGqJOuAAACXklEQVSnz0WdTzzxRJRKpZgyZUqBo6MVHDx4MD7+8Y/HL3/5y3jkkUfi7LPPLnpIDe+t05kvv/zygP+mod4t8uKLLx5x2549e+IHP/hBnHbaaa4GPo59+/bF7Nmzo7u7O/71X/813v/+9xc9JJrMFVdcEYcOHYply5Ydvq23tzeWL18e06dPj/Hjxxc4OprdG2+8EfPmzYsnn3wy7r333sPvUmJg+tvHHjp0KFasWBHDhw+Pc889d8D31VDvFvHV7dX51Kc+FT//+c9j/vz5sW7duli3bt3hn40cOTIuu+yyAkfXGJYsWRKlUinWrVsX5XI5Vq5cGY899lhERCxatKjg0RVv2rRpMXfu3Lj55ptj586dMWHChFi+fHls2bIl7rnnnqKH1zDuvvvu2LNnz+HPBXnggQdi69atERFxww03xMknn1zk8OrWjTfeGA8++GDMmTMndu3aFatWrerz86uvvrqgkTWGBQsWxN69e+P888+P8ePHx44dO2LVqlWxcePGuP322+Okk04a8H011Lei+ur26vzu7/5uvPDCC/3+7PTTT4/nnnsu84gaT1tbW78XhpVKpTh06FABI6o/vb29ccstt0RnZ2e89NJL0dHREUuWLPFZNBU41mv1+eefj9NOOy3ziBrDBRdccMzv+3n99dczjqbxrF69Or773e/G2rVrY/fu3XHyySfHBz/4wbjhhhvi0ksvrei+GiouAID611DXXAAA9U9cAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJPX/Ae1SFqUkuiF6AAAAAElFTkSuQmCC", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-3.0,3.0,-3.0,3.0)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S3 = @constraint 1 <= (x-0.5)^2 + (y-1)^2 <= 3\n", - "S3c = !S3 # complement\n", - "\n", - "Y = IntervalBox(-3..3, -3..3)\n", - "inner, boundary = pave(S3c, Y, ldexp(1., -5))\n", - "draw(inner)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - " - variables: [:x,:y]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setprecision(Interval, Float64)\n", - "X = IntervalBox(-3..3, -3..4)\n", - "S2 = @constraint 1 <= x^2 + y^2 <= 3\n", - "S4 = @constraint 1 <= (x-0.5)^2 + (y-1)^2 <= 3\n", - "S24 = S2 ∩ S4" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(([-1.23206, 1.73206],[-0.732051, 1.73206]),([-3, 3],[-3, 4]))" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S24(X)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.137638 seconds (8.54 M allocations: 263.776 MB, 12.41% gc time)\n" - ] - }, - { - "data": { - "image/png": "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p3167bXXore3N1599dX4sz/7s5g2bVp84QtfiN7e3njqqadi7ty5GbV8Ys1mM6677rp4+umn47bbbovzzjsvNm/eHL29vTEwMBC/9mu/NunvyHOsPvrRj8b9998fGzZsiIULF8aWLVviuuuui507d8Z73/vecd/XjX5nqd1+RfxiPO64445YsGDBiO3nnntuhi2e3OHDh+OOO+6Iiy++OJYtWxY7d+5s+b1FHq9O+hVRzPHauHFjfPvb3441a9bE0qVL4+DBg/HFL34xli9fHrt37453vetd474397Fq1syxY8eaP/vZz5rNZrO5Y8eOZk9PT/Pf//3fW35/f39/s6enp/mTn/wkqyZOWad92rhxY7Onp6e5d+/eoW3PPfdcc9q0ac3bb7+96+1t1b333ttsNBrN+++/f2jbj3/84+bcuXOb69atm/T9eY7V7t27m41Go/mFL3xhaNvrr7/eXLhwYXPVqlUTvrfTfmepk35t2bJl1H5WFCdPnmweOnSo2Ww2m3v27Gk2Go3mV77ylZbeW+Tx6qRfRR2vxx57rPnzn/98xLbnn3++OWPGjOZNN9004XvzHqvaLSmfddZZXZmdnTp1Kl599dUutKhznfbpvvvuiyuvvDKWL18+tO3SSy+N973vffEP//AP3Whi2+264IIL4sMf/vDQtnnz5sXatWvjH//xH+PnP/95S78nj7HasWNHTJs2LW655ZahbdOnT4+Pf/zj8dhjj8X+/fvHfW+3+p2FTvo13LFjx+LUqVNZNXPKzjzzzDj//PPbem+Rx6uTfg1XpPFauXJlTJs2cnF24cKF8e53v3vS5+7nPVa1C9xuaDab8fa3vz3mzJkTZ599dtx00025X4NqV7PZjP/8z/+MK664YtTPVqxYEd///vfjtddey6FlEU8++eSIScCgFStWxP/8z//E9773vUl/R15j9dRTT8WiRYti9uzZI7avWLFi6Ofj6Ua/s9JJvyJ+MR69vb1xzjnnxKxZs+JDH/pQvPDCC5m1N4Uij1enyjRehw4dmvTRinmPlcCdorlz58Yf/MEfxD333BP33Xdf3HLLLXHvvffGVVddFceOHcu7eVP205/+NE6cOBHz588f9bPBbS+//HLqZkVExIEDBzpqV55jNVHbm83mhG3vtN9Z6qRfs2bNit/93d+NzZs3xze+8Y34zGc+Ew8//HCsWrWq5cq4iIo8Xp0o03ht27Yt9u/fHx/5yEcmfF3eY1Xqm6aazWacPHmypddOnz69K5/5yU9+csT/f/jDH44rr7wy1q1bF5s3b47bbruto9+fuk+Df1JqrN81Y8aMEa/pRDv9On78+Ljtajabk7Yr67GayERtH/x5O+9tpd9Z6qRfa9asiTVr1gz9/+rVq+O3fuu34qqrroq/+Iu/iM2bN3e/wQkUebw6UZacJcd4AAAE/UlEQVTxeu6552L9+vWxatWquPnmmyd8bd5jVeoK99FHH42ZM2dO+t+sWbMyXSro6+uLCy64oOWvfEwkdZ8G/wrTiRMnRv3s9ddfH/GaTrTTr5kzZ47brkaj0Va7ujlWE5mo7YM/b+e97fa7Wzrp11hWrVoV73nPezIfjywVeby6rWjjdejQofjABz4Qc+fOja997WvRaDQmfH3eY1XqCvcd73hHbNmypaXXjrWM0E1ve9vb4qc//WnHvyd1n375l385pk+fHgcOjP7j54PbLrzwwo4/p51+zZ8/P5N2dWusJjJ//vwxl6daaXtW/e6GTvo1nre97W2lvs5Z5PHKQlHG6+jRo3HNNdfE0aNHY9euXXHBBRdM+p68x6rUgfvWt7510iWEVF588cUxL8ZPVeo+NRqNWLJkSezZs2fUz3bv3h1vf/vbR3yHtV3t9GvZsmWxa9euUdsff/zxmDVrVixatKittnRrrCYy+J3HY8eOjbjB6PHHH49GoxHLli2b8L1Z9LsbOunXeP7rv/4r3vKWt3SzmUkVebyyUITxOnHiRHzwgx+MF154IR5++OG49NJLW3pf3mNV6iXlrL300kuxb9++EdsOHz486nWbN2+OH//4x3HttdemalrbxurT9ddfH9/5zndiYGBgaNu+ffvikUceibVr16Zu4oh2HTp0KO6///6hbYcPH44dO3bE6tWr48wzzxzaXrSxuv766+ONN96Ie+65Z2jbyZMnY8uWLbFy5cq46KKLIuIXTwnbt29f/O///u+I97ba79Q66ddY4/HP//zPsXfv3lIcOxHlG69WlWm8Tp06FWvXro3du3fHjh07hu6QP10Rx6qWf4D+zjvvjEajEc8880z8/d//ffze7/1e/Oqv/mpERNx+++1Dr+vt7Y1HH310xPfPzjrrrLjhhhtiyZIlMWPGjPjWt74V9957b1x22WWxa9euoZtHUuukT8eOHYvLLrssXn311fj0pz8d06ZNi02bNkWz2Ywnn3wyzjvvvOT9ifjFgfXrv/7r8cwzz8SnP/3pmDdvXmzevDleeuml+M53vhOXXHLJ0GuLOFY33HBDfOMb34hPfepTQ09k2rNnTzzyyCOxatWqiIj42Mc+Flu3bo0XX3wxfuVXfmXK/c5Du/1atGhRXHbZZXHFFVfEnDlzYu/evfHlL385LrroonjiiSdyr5ruuuuueOWVV2L//v3xpS99KX7nd34nLrvssoj4xQ14Z599dinHq91+FXW8PvWpT8Xf/u3fxurVq0fc1DVo3bp1EVHQYyvzR2sUUKPRaPb09Iz674wzzhjxut7e3lHbPvGJTzQXL17cnDNnTnP69OnNRYsWNf/0T/+0eezYsZRdGKWTPjWbzeb+/fuba9eubZ577rnNc845p/mhD32o+f3vfz9V88f1yiuvNG+55ZbmW97ylubs2bObV199dXNgYGDU64o4VidOnGjedtttzQsvvLA5c+bM5nve857mv/zLv4x4zcc+9rHmGWec0fzhD384Ynur/c5Du/367Gc/21y+fHlz7ty5zenTpzcXLFjQXL9+ffNHP/pR6i6MacGCBWMeQz09PUP9KON4tduvoo5Xb2/vuP3p6ekZel0Rx6qWFS4ApOYaLgAkIHABIAGBCwAJCFwASEDgAkACAhcAEhC4AJCAwAWABAQuACQgcAEgAYELAAkIXABI4P8AcG1kLAGuCzkAAAAASUVORK5CYII=", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.7320110272625673,2.2320110272625673,-1.7319781879936316,2.7319781879936316)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time inner, boundary = pave(S24, X, ldexp(1., -5));\n", - "#draw(inner, boundary)\n", - "draw(inner)\n", - "axis(\"image\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "X = IntervalBox(-100..100, -100..100)\n", - "S4 = @constraint 1 <= (x-0.5)^2 + (y-1)^2 <= 3\n", - "inner, boundary = pave(S4, X, ldexp(1., -3));\n", - "#draw(inner)\n", - "#axis(\"image\")\n", - ";" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.110340 seconds (754.47 k allocations: 22.162 MB, 14.32% gc time)\n" - ] - } - ], - "source": [ - "@time inner, boundary = pave(S4, X, ldexp(1., -3));\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - " - variables: [:x,:y]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setprecision(Interval, Float64)\n", - "X = IntervalBox(-3..3, -3..4)\n", - "S2 = @constraint 1 <= x^2 + y^2 <= 3\n", - "S4 = @constraint 1 <= (x-0.5)^2 + (y-1)^2 <= 3\n", - "S24 = S2 ∩ S4" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[11], in expression starting on line 1", - "output_type": "error", - "traceback": [ - "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[11], in expression starting on line 1", - "", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:94", - " in call at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:57" - ] - } - ], - "source": [ - "S24(X)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[10], in expression starting on line 6", - "output_type": "error", - "traceback": [ - "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[10], in expression starting on line 6", - "", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:94", - " in pave at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/pave.jl:45" - ] - } - ], - "source": [ - "inner, boundary = pave(S24, X, ldexp(1., -2))\n", - "draw(inner)\n", - "axis(\"image\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[11], in expression starting on line 3", - "output_type": "error", - "traceback": [ - "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[11], in expression starting on line 3", - "", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:94", - " in pave at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/pave.jl:45" - ] - } - ], - "source": [ - "S24 = S2 ∩ S4\n", - "\n", - "inner, boundary = pave(S24, X, ldexp(1., -4))\n", - "draw(inner)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[12], in expression starting on line 6", - "output_type": "error", - "traceback": [ - "LoadError: MethodError: `getindex` has no method matching getindex(::ValidatedNumerics.IntervalBox{2,Float64}, ::Array{Int64,1})\nClosest candidates are:\n getindex{T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}}(::T<:FixedSizeArrays.FixedArray{T,1,Tuple{CARDINALITY}}, !Matched::Union{Integer,Range{T}})\n getindex(::FixedSizeArrays.FixedArray{T,NDim,SIZE}, !Matched::Tuple)\nwhile loading In[12], in expression starting on line 6", - "", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:94", - " in pave at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/pave.jl:45" - ] - } - ], - "source": [ - "S5a = @constraint 1 >= x+y >= -1\n", - "S5b = @constraint x-y >= 1\n", - "\n", - "S5 = S5a ∩ S5b\n", - "\n", - "inner, boundary = pave(S5, X, ldexp(1., -2))\n", - "draw(inner)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Example from Jaulin et al., \"Applied Interval Analysis\", pg. 61:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.354182 seconds (2.62 M allocations: 79.810 MB, 12.43% gc time)\n" - ] - } - ], - "source": [ - "S6 = @constraint x1^2 * (x1^2 - 1) + 4*x2^2 ∈ [-0.1, 0.1] # 4th power not yet working correctly in powerRev\n", - "Y = IntervalBox(-10..10, -10..10)\n", - "\n", - "@time inner, boundary = pave(S6, Y, ldexp(1., -5));\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-1.0449698339937934,1.0449698339937932,-0.3015944517013159,0.30159445170131594)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner, boundary)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Combining separators with different variables " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/IntervalConstraintProgramming.ji for module IntervalConstraintProgramming.\n" - ] - } - ], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - " - variables: [:x,:y]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S7a = @constraint x > 0\n", - "S7b = @constraint y > 0\n", - "S7 = S7a ∩ S7b" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(2-elementArray{ValidatedNumerics.IntervalBox{2,Float64},1}:\n", - " [1.5, 3] × [0, 3]\n", - " [0, 1.5] × [0, 3]\n", - ",0-elementArray{ValidatedNumerics.IntervalBox{2,Float64},1}:\n", - ")" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inner, boundary = pave(S7, IntervalBox(-3..3, -3..3), 0.1)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/dpsanders/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAIUCAYAAACpTQ7mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHClJREFUeJzt3XuMVfW58PFnjygiIPUCOFIvVcQbTMjQUlpUXqwRUYOpCjoqXkINmmNMRmvVWvVEeZMSexyD1VasChRCi1pTL/XYqMXReqmXaCwCYkSkMEwFBUQuI7rfP84rPVNoZZiHtRn8fJKdyG/vvdbjCrC/7L1mr1K5XC4HAECSqkoPAADsXMQFAJBKXAAAqcQFAJBKXAAAqcQFAJBKXAAAqcQFAJBKXAAAqcQFAJCqkLh46623YsyYMXHooYdG165do2fPnjFs2LB49NFHi9g9AFCgTkXsZNGiRbFmzZq48MILY//994+1a9fGgw8+GKNGjYrJkyfHD37wgyLGAAAKUKrUhcvK5XLU1tbGhg0b4q233qrECADAdlCxcy5KpVIccMABsXLlykqNAABsB4V8LPKFtWvXxrp162LVqlXx+9//Ph5//PGoq6srcgQAYDsr9GORSy+9NO66666IiKiqqoozzjgjJk+eHD169ChqBABgOys0Lt5+++3429/+FkuXLo1Zs2bFbrvtFnfeeWf06tVri49fvnx5PPHEE3HwwQdHly5dihoTAL7S1q1bF++9916MGDEi9t133zY/v2IndEZEjBgxIlatWhUvvvjiFu+fMWNGnHfeeQVPBQBEREyfPj3OPffcNj+v0HMu/tmZZ54Zl1xySSxYsCAOO+ywze4/+OCDI+J//ueOPPLIgqfbOdTX10dDQ0Olx+iwHL/2+f5F34+T/uOkSo/RYf33Hf/t+LWD47ftlr+/PH73f3+36XW4rSoaF+vWrYuIiFWrVm3x/i8+CjnyyCOjtra2sLl2Jj169HDs2sHxa5/du+0e1f2qKz1Gh+X4tY/j137bekpCIT+K+sEHH2y2tnHjxpg6dWp06dIljjrqqCLGAAAKUMg7F+PHj4/Vq1fHcccdF3369Illy5bFjBkzYv78+XHrrbfGHnvsUcQYAEABComLs88+O+6555745S9/GStWrIju3bvHoEGD4pZbbolTTjmliBEAgIIUEhdjxoyJMWPGFLEr/okvKWsfx699+h/fv9IjdGiOX/s4fpXjkus7OS+O7eP4tc+A7w2o9AgdmuPXPo5f5YgLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACBVIXHxyiuvxGWXXRb9+/ePbt26xUEHHRRnnXVWLFiwoIjdAwAF6lTETiZOnBjPP/98jB49OmpqamLZsmVx++23R21tbbz00ktx1FFHFTEGAFCAQuLiyiuvjJkzZ0anTv/Y3ZgxY2LAgAHx05/+NKZNm1bEGABAAQqJiyFDhmy21rdv3zj66KNj7ty5RYwAABSkoid0Njc3x7777lvJEQCAZBWLi+nTp8eSJUvi7LPPrtQIAMB2UJG4mDdvXlx22WUxdOjQOP/88ysxAgCwnRRyzsX/1tzcHKecckrstddecf/990epVPrS59TX10ePHj1ardXV1UVdXd32GhMAvhLefOrN+OvTf221tn7N+nZts9C4WL16dZx00kmxevXqeO6552K//fbbquc1NDREbW3tdp4OAL56BnxvQAz43oBWa01vN8Xk8ZO3eZuFxcWGDRvi1FNPjXfeeSeeeuqpOPzww4vaNQBQoELi4vPPP48xY8bESy+9FA8//HAMHjy4iN0CABVQSFxcccUV8cgjj8SoUaNi+fLlMWPGjFb3n3vuuUWMAQAUoJC4eOONN6JUKsUjjzwSjzzyyGb3iwsA2HkUEhd/+tOfitgNALADcMl1ACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUhUWF5988knceOONMXLkyNhnn32iqqoqpk2bVtTuAYCCFBYXy5cvj5tvvjnmzZsXAwcOjFKpVNSuAYACdSpqR/vvv38sW7YsevXqFa+++mp861vfKmrXAECBCnvnYtddd41evXoVtTsAoEKc0AkApBIXAEAqcQEApCrshM72qK+vjx49erRaq6uri7q6ugpNBAA7hzefejP++vRfW62tX7O+XdvsEHHR0NAQtbW1lR4DAHY6A743IAZ8b0Crtaa3m2Ly+MnbvE0fiwAAqcQFAJCq0I9F7rjjjli5cmUsWbIkIiIefvjhWLx4cUREXH755dG9e/cixwEAtoNC4+JnP/tZvP/++xERUSqV4qGHHoqHHnooIiLGjh0rLgBgJ1BoXCxcuLDI3QEAFeCcCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFKJCwAglbgAAFIVFhctLS1x9dVXR58+fWKPPfaIIUOGxJNPPlnU7gGAghQWFxdccEHcdtttMXbs2Jg0aVJ06tQpTj755Hj++eeLGgEAKECnInbyl7/8JX7729/Gf/3Xf0V9fX1ERIwdOzb69+8fP/rRj+K5554rYgwAoACFvHPxwAMPRKdOneLiiy/etNa5c+cYN25cvPDCC7FkyZIixgAAClBIXLz++uvRr1+/6NatW6v1wYMHb7ofANg5FBIXTU1NUV1dvdl6dXV1lMvlWLp0aRFjAAAFKCQu1q1bF507d95sfffdd990PwCwcyjkhM4uXbrEhg0bNltfv379pvv/nfr6+ujRo0ertbq6uqirq8sbEkj3n//nPys9AvAlZs6cGTNnzmy1tmrVqnZts5C4qK6u3uJHH01NTRERsf/++//b5zc0NERtbe12mQ0Avsq29I/11157LQYNGrTN2yzkY5GBAwfG22+/HWvWrGm1/uKLL0apVIqBAwcWMQYAUIBC4uLMM8+MjRs3xuTJkzettbS0xJQpU2LIkCHRp0+fIsYAAApQyMcigwcPjtGjR8e1114bzc3N0bdv35gyZUosWrQo7rvvviJGAAAKUkhcRET8+te/juuvvz6mT58eH330UdTU1MRjjz0WQ4cOLWoEAKAAhcXFbrvtFhMnToyJEycWtUsAoAJcch0ASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBUhcTFsmXL4pprronjjz8+9txzz6iqqorGxsYidg0AFKyQuJg/f37ccsstsXTp0qipqYlSqVTEbgGACigkLr75zW/GihUrYt68eVFfX1/ELgGACulUxE66du1axG4AgB2AEzoBgFTiAgBI1eaPRcrlcrS0tGzVYzt37tzmgQCAjq3NcdHY2BjDhw//0seVSqWYO3du9OvXb5sG+9/q6+ujR48erdbq6uqirq6u3dsGgK+ymTNnxsyZM1utrVq1ql3bbHNcHHHEETFlypStemx1dXVbN79FDQ0NUVtbm7ItAOAftvSP9ddeey0GDRq0zdtsc1z07t07zj///G3eIQCwc3NCJwCQqpDvuYiImDBhQpRKpZgzZ06Uy+WYNm1aPPvssxERcd111xU1BgCwnRUWFzfccMOmr/0ulUpx3333bfpvcQEAO4/C4uLzzz8valcAQAU55wIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBU4gIASCUuAIBUhcTF008/HePGjYvDDz88unbtGoceemhcfPHFsWzZsiJ2DwAUqFMRO7n66qvjo48+itGjR8dhhx0W7777btx+++3x2GOPxeuvvx69evUqYgwAoACFxEVDQ0Mcc8wxrdZGjBgRw4YNi5///Odx0003FTEGAFCAQj4W+eewiIg49thjY++99465c+cWMQIAUJCKndD5ySefxJo1a2Lfffet1AgAwHZQsbhoaGiITz/9NM4+++xKjQAAbAdtPueiXC5HS0vLVj22c+fOW1xvbGyMm266Kc4666wYNmxYW0cAAHZgbY6LxsbGGD58+Jc+rlQqxdy5c6Nfv36t1ufNmxenn3561NTUxN13371V+6yvr48ePXq0Wqurq4u6urqtHxwA2MzMmTNj5syZrdZWrVrVrm2WyuVyuS1PaG5ujieeeGKrHvv9738/unfvvunXixcvjqFDh0bnzp3jueeei969e//b57/22msxaNCgePXVV6O2trYtYwIA26i9r79tfueid+/ecf7557d5Rx9++GGceOKJsXHjxpg9e/aXhgUA0DEV8j0Xa9eujZEjR0ZTU1PMnj07DjnkkCJ2CwBUQCFxcc4558TLL78c48aNizlz5sScOXM23detW7c47bTTihgDAChAIXHxxhtvRKlUinvvvTfuvffeVvcddNBB4gIAdiKF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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "include(\"draw_boxes.jl\")\n", - "draw(inner)\n", - "\n", - "xlim(-3, 3)\n", - "ylim(-3, 3)\n", - "ax = gca()\n", - "ax[:set_aspect](\"equal\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - " - variables: [:x,:y]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S8 = S7a ∪ S7b" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(2-elementArray{ValidatedNumerics.IntervalBox{2,Float64},1}:\n", - " [-3, 0] × [0, 3]\n", - " [0, 3] × [-3, 3]\n", - ",0-elementArray{ValidatedNumerics.IntervalBox{2,Float64},1}:\n", - ")" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inner, boundary = pave(S8, IntervalBox(-3..3, -3..3), 0.1)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAIUCAYAAACpTQ7mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHC1JREFUeJzt3XuMVfW5+OF3jyhXa1EujtRLBcEqMyHYUlovxEtExGCiAqLiJZSgqTFBa9Va9UT9JSX2iMFqK1YFCrFFramXqo1aHK1CtY2GOxgVKQxUUMCRy4ju88f5lZ4ptDLMy9oMPk+yE1hr7/V9swLMh9lr9iqVy+VyAAAkqar0AADA3kVcAACpxAUAkEpcAACpxAUAkEpcAACpxAUAkEpcAACpxAUAkEpcAACpComLBQsWxIgRI6Jnz57RsWPH6Nq1awwaNCieeuqpIpYHAArUpohFli1bFg0NDXHppZfGIYccEhs3bozHHnsshg0bFpMnT47vfe97RYwBABSgVKkbl5XL5ejfv39s2bIlFixYUIkRAIDdoGLXXJRKpTj00ENj3bp1lRoBANgNCnlb5B82btwYmzZtivXr18fvfve7eOaZZ2LUqFFFjgAA7GaFvi1yxRVXxH333RcREVVVVXHuuefG5MmT44ADDihqBABgNys0LpYsWRJ/+9vfYuXKlTFz5szYb7/94t57741u3brt8Plr1qyJ5557Lo444oho3759UWMCwJfapk2b4r333ovBgwdHly5dmv36il3QGRExePDgWL9+fcyePXuH+2fMmBEXXXRRwVMBABER06dPjwsvvLDZryv0mot/dd5558Xll18eS5cujaOOOmq7/UcccURERJxz4znR5bDmlxMRz97zbJzx/TMqPUar5fy1jPPXMs5fyzh/u27N+2vit//vt9u+DjdXReNi06ZNERGxfv36He7/x1shXQ7rEtW9qwuba2/SrlM7564FnL+Wcf5axvlrGeev5Xb1koRCfhT1gw8+2G7b1q1bY+rUqdG+ffs45phjihgDAChAId+5GDduXGzYsCFOOumk6NGjR6xatSpmzJgRixcvjjvvvDM6dOhQxBgAQAEKiYvzzz8/HnjggfjFL34Ra9eujf333z+OO+64uOOOO2Lo0KFFjAAAFKSQuBgxYkSMGDGiiKX4F31P6VvpEVo1569lnL+Wcf5axvmrHLdc38vVnFpT6RFaNeevZZy/lnH+Wsb5qxxxAQCkEhcAQCpxAQCkEhcAQCpxAQCkEhcAQCpx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dturq6ujXC7HypUrixgDAChAIXGxadOmaNu27Xbb27Vrt20/ALB3KOSCzvbt28eWLVu227558+Zt+/+TRTMWRf0B9U22jRo1KkaNGpU3JJDuv2b9V6VHAL7A3BfmxrwX5zXZtrlhc4uOWUhcVFdX7/Ctj/r6/w2GQw455D++fuLEidG/f//dMhsAfJnVnFoTNafWNNlWv6Q+Jo+bvMvHLORtkX79+sWSJUuioaGhyfbZs2dHqVSKfv36FTEGAFCAQuLivPPOi61bt8bkyf+soMbGxpgyZUoMHDgwevToUcQYAEABCnlbZMCAATF8+PC44YYbYvXq1dGrV6+YMmVKLFu2LB566KEiRgAAClJIXERE/OpXv4qbbroppk+fHh999FHU1tbG008/Hccff3xRIwAABSgsLvbbb7+YMGFCTJgwoaglAYAKcMt1ACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUokLACCVuAAAUhUSF6tWrYrrr78+TjnllPjKV74SVVVVUVdXV8TSAEDBComLxYsXxx133BErV66M2traKJVKRSwLAFRAIXHxzW9+M9auXRuLFi2K8ePHF7EkAFAhbYpYpGPHjkUsAwDsAVzQCQCkEhcAQKpmvy1SLpejsbFxp57btm3bZg8EALRuzY6Lurq6OPnkk7/weaVSKRYuXBi9e/fepcH+r/Hjx8cBBxzQZNuoUaNi1KhRLT42AHyZzX1hbsx7cV6TbZsbNrfomM2Oi6OPPjqmTJmyU8+trq5u7uF3aOLEidG/f/+UYwEA/1Rzak3UnFrTZFv9kvqYPG7yLh+z2XHRvXv3uPjii3d5QQBg7+aCTgAgVSGfcxER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61//OhYtWhTr1q2Lzp07x3e+85249tpr47vf/e7uXh4AKFBFr7kAAPY+brkOAKRqVXHh1u0t8+KLL8aYMWOiT58+0bFjx+jZs2eMHTs2Vq1aVenRWoVVq1bF9ddfH6ecckp85Stfiaqqqqirq6v0WHucxsbGuO6666JHjx7RoUOHGDhwYDz//POVHqvV+OSTT+KWW26JIUOGxEEHHRRVVVUxbdq0So/VKrzxxhtx5ZVXRt++faNTp05x+OGHx8iRI2Pp0qWVHq1VWLBgQYwYMSJ69uwZHTt2jK5du8agQYPiqaeeavaxWlVcuHV7y1x33XXx0ksvxTnnnBN33313jBo1KmbOnBn9+/ePv//975Ueb4+3ePHiuOOOO2LlypVRW1sbpVKp0iPtkS655JK46667YvTo0TFp0qRo06ZNnHnmmf4TsJPWrFkTt912WyxatCj69evnz1kzTJgwIR5//PE47bTTYtKkSTFu3Lioq6uL/v37x4IFCyo93h5v2bJl0dDQEJdeemlMmjQpbr755iiVSjFs2LD45S9/2byD7dJHb+1BNm7cWD744IPLQ4YMqfQoe7yXX355u211dXXlUqlUvummmyowUevS0NBQ/uijj8rlcrn86KOPlquqqsovvfRShafas8yZM6dcKpXKd95557ZtmzdvLvfq1at8/PHHV3Cy1qOxsbG8evXqcrlcLr/xxhvlUqlUnjp1aoWnah1ee+218qefftpk29KlS8vt2rUrjx49ukJTtW6ff/55uV+/fuVvfOMbzXpdq/rOxY64dfvOO+GEE7bbduKJJ8aBBx7o/i07oWPHjvHVr3610mPs0R599NFo06ZNjB07dtu2tm3bxpgxY+K1116LFStWVHC61mHfffeNbt26VXqMVmngwIHRpk3TT1jo1atXHHvssf6N20WlUikOPfTQZn+NbZVx8fHHH8fatWtj8eLF8aMf/Sjmz58fp512WqXHapU++eSTaGho8AmppHjzzTejd+/e0alTpybbBwwYsG0/FM2nQDfPxo0bY+3atfHOO+/ExIkT45lnnmn219hCb7mexa3b80ycODE+/fTTOP/88ys9CnuB+vr6Hd5TqLq6OsrlcqxcubICU/FlNn369FixYkXcfvvtlR6l1bjmmmvivvvui4iIqqqqOPfcc+Puu+9u1jEqFhflAm/dvjdqyfn7h7q6urj11ltj5MiRMWjQoMzx9ngZ54/tbdq0aYfnq127dtv2Q1EWLVoUV155ZRx//PFx8cUXV3qcVmP8+PExfPjwWLlyZcycOTM+++yz2LJlS7OOUbG4qKuri5NPPvkLn1cqlWLhwoXRu3fvbdtqa2u3/frCCy+M/v37x2WXXfal+ijxlpy/iP/9S3fOOedEbW1t3H///btrzD1WS88fO9a+ffsd/iO0efPmbfuhCKtXr46hQ4dG586d45FHHvFTN83Qu3fvbf/mXXTRRTF48OAYNmxYzJ49e6ePUbG4KPLW7Xujlpy/5cuXx+mnnx6dO3eOp59+Ojp27LgbJtyzZf35o6nq6uodvvVRX18fERGHHHJI0SPxJbRhw4Y444wzYsOGDfHKK6/EwQcfXOmRWrXzzjsvLr/88li6dGkcddRRO/WaisVF9+7d075NtXHjxiiXy/Hxxx9/aeJiV8/fhx9+GKeffnps3bo1Zs2aFd27d98N0+35Mv/88U/9+vWLWbNmRUNDQ5OLOmfPnh2lUin69etXwen4MtiyZUucddZZ8fbbb8cLL7wQffr0qfRIrd4/3s5cv379Tr+mVf20yAcffLDdtnXr1sVjjz0Whx12mKuBv8DGjRtjyJAhUV9fH7///e/jyCOPrPRI7GXOO++82Lp1a0yePHnbtsbGxpgyZUoMHDgwevToUcHp2Nt9/vnnMWLEiJgzZ048+uij235KiZ2zo6+xW7dujalTp0b79u3jmGOO2eljtaqfFnHr9pa54IIL4vXXX48xY8bE/PnzY/78+dv2derUKc4+++wKTtc63H777VEqlWL+/PlRLpdj2rRp8fLLL0dExI033ljh6SpvwIABMXz48Ljhhhti9erV0atXr5gyZUosW7YsHnrooUqP12rcc889sW7dum2fC/LEE0/E8uXLIyLiqquuiv3337+S4+2xrr766njyySdj2LBhsWbNmpgxY0aT/RdeeGGFJmsdxo0bFxs2bIiTTjopevToEatWrYoZM2bE4sWL484774wOHTrs9LFa1V1R3bq9Zb7+9a/H+++/v8N9hx9+eLzzzjsFT9T6VFVV7fDCsFKpFFu3bq3ARHuexsbGuOmmm2L69Onx0UcfRW1tbdx+++0+i6YZ/tPf1XfffTcOO+ywgidqHU4++eT/eL+fzz77rMBpWp+ZM2fGAw88EHPnzo21a9fG/vvvH8cdd1xcddVVMXTo0GYdq1XFBQCw52tV11wAAHs+cQEApBIXAEAqcQEApBIXAEAqcQEApBIXAEAqcQEApBIXAEAqcQEApBIXAEAqcQEApPofOHzO9MANZlcAAAAASUVORK5CYII=", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "include(\"draw_boxes.jl\")\n", - "draw(inner)\n", - "\n", - "xlim(-3, 3)\n", - "ylim(-3, 3)\n", - "ax = gca()\n", - "ax[:set_aspect](\"equal\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - " - variables: [:x,:y]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S9a = @constraint -1 <= x + y <= 1\n", - "S9b = @constraint -1 <= x - y <= 1\n", - "S9 = S9a ∩ S9b" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[-3, 3]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = y = -3..3" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(([-3, 3],[-3, 3]),([-3, 3],[-3, 3]))" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S9((x,y))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.116705 seconds (766.33 k allocations: 29.160 MB, 8.13% gc time)\n" - ] - } - ], - "source": [ - "@time inner, boundary = pave(S9, IntervalBox(-10^8..10^8, -10^8..10^8), 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAIUCAYAAACpTQ7mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAH4RJREFUeJzt3WuMlOX98PHfrCgiIJ4AkSpWEY/dkKWltKhUY6SowVQFXc8GjZoYE7RWrfUQ9YXEf8RgtVWrAoVsi1pTDzU2anG1HqoSTYOAGBWRw1ZQFhFkRed50Ufsygo7O9fec/p8kk3tPbtz//aekevr7MVOLp/P5wMAIJG6Ug8AAFQXcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACSVSVy89dZbMXHixNh///2jd+/e0b9//xgzZkw8/vjjWZweAMhQjyxOsmTJkli3bl2ce+65sddee8X69evj4YcfjvHjx8c999wT559/fhZjAAAZyJXqjcvy+Xw0NDTExo0b46233irFCABANyjZnotcLhd77713rFmzplQjAADdIJMfi3xt/fr1sWHDhmhtbY2//vWv8eSTT0ZjY2OWIwAA3SzTH4tcfPHFcffdd0dERF1dXZx88slxzz33RL9+/bIaAQDoZpnGxdtvvx0ffvhhLF++PObMmRM77LBD3HXXXTFgwIAOP3/VqlXx1FNPxb777hu9evXKakwAqGkbNmyI999/P8aOHRt77LFHwV9fsg2dERFjx46N1tbWePnllzu8ffbs2XHmmWdmPBUAEBExa9asOOOMMwr+ukz3XHzbKaecEhdddFEsXrw4DjjggC1u33fffSPiv9/cwQcfnPF01WHy5MkxderUUo9RsVy/4rh+xXH9iuP6dd2CBQvizDPP3LwOF6qkcbFhw4aIiGhtbe3w9q9/FHLwwQdHQ0NDZnNVk379+rl2RXD9iuP6Fcf1K47rV7yubknI5K+ifvTRR1sc27RpU8yYMSN69eoVhxxySBZjAAAZyOSViwsvvDDWrl0bRx55ZAwePDhWrlwZs2fPjkWLFsVtt90WO+20UxZjAAAZyCQuTjvttLjvvvvi97//faxevTr69u0bI0aMiFtvvTWOP/74LEYAADKSSVxMnDgxJk6cmMWp+Ba/pKw4rl9xXL/iuH7Fcf1Kp6R/FXVb5s2bFyNGjIjXX3/dphwAyEix62/J3lsEAKhO4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFKZxMVrr70Wl1xySRx22GHRp0+fGDJkSJx66qmxePHiLE4PAGSoRxYnmTJlSrz44osxYcKEqK+vj5UrV8Ydd9wRDQ0N8corr8QhhxySxRgAQAYyiYvLL788mpqaokePb043ceLE+MEPfhC33HJLzJw5M4sxAIAMZBIXo0aN2uLY0KFD49BDD40FCxZkMQIAkJGSbuhsaWmJPfbYo5QjAACJlSwuZs2aFcuWLYvTTjutVCMAAN2gJHGxcOHCuOSSS2L06NFx9tlnl2IEAKCbZLLn4n+1tLTE8ccfH7vuums8+OCDkcvltvk1kydPjn79+rU71tjYGI2Njd01JgDUhKampmhqamp3rLW1taj7zOXz+XxR91CAtWvXxpgxY+LDDz+MF154IQ488MCtfv68efNixIgR8frrr0dDQ0NGUwJAbSt2/c3slYuNGzfGCSecEO+8804888wz2wwLAKAyZRIXX331VUycODFeeeWVePTRR2PkyJFZnBYAKIFM4uKyyy6Lxx57LMaPHx+rVq2K2bNnt7v9jDPOyGIMACADmcTFm2++GblcLh577LF47LHHtrhdXABA9cgkLv7xj39kcRoAoAx4y3UAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACSVWVx89tlncf3118e4ceNi9913j7q6upg5c2ZWpwcAMpJZXKxatSpuuummWLhwYQwfPjxyuVxWpwYAMtQjqxPttddesXLlyhgwYEC8/vrr8aMf/SirUwMAGcrslYvtt98+BgwYkNXpAIASsaETAEhKXAAASYkLACCpzDZ0FmPy5MnRr1+/dscaGxujsbGxRBMBQHVoamqKpqamdsdaW1uLus+KiIupU6dGQ0NDqccACnDD3Bv++78/u6GkcwBb19F/rM+bNy9GjBjR5fv0YxEgua/D4tv/DNQGcQF0O4EBtSXTH4vceeedsWbNmli2bFlERDz66KOxdOnSiIi49NJLo2/fvlmOAyS2tYi4Ye4NfkQCNSLTuPi///u/+OCDDyIiIpfLxSOPPBKPPPJIREScddZZ4gIqWGdenRAYUBsy/bHIe++9F19++WWHH/vss0+WowAJFfJjDz8igepnzwVQlK7EgsCA6iYugJIQGFC9xAXQJTfMvaHoQBAYUJ3EBVCwlFEgMKD6iAugIN0RAwIDqou4ADqtOyNAYED1EBdA2RAYUB3EBbBNKTZvFnIuoLKJC2CrSrHYCwyobOIC+E6lXOQFBlQucQF0qBwW93KYASicuADKmsCAyiMugHay3LzZWeU2D7B14gLYrJwX8XKeDWhPXAARURmLdyXMCIgLICpr0a6kWaFWiQug4ggMKG/iAmpYOW7e7KxKnRtqgbiAGlUNi3M1fA9QjcQF1KBqWpSr6XuBaiEuoMZU42Jcjd8TVDJxAVQFgQHlQ1xAjajkzZudVe3fH1QKcQE1oJYW3Vr6XqFciQuocrW42Nbi9wzlRFxAFavlRbaWv3coNXEBVC2BAaUhLqAK1cLmzc5yHSB74gKqjMV0S64JZEtcQBWxiH431wayIy6gSlg8t801gmyIC6CmCAzofuICKpzNm4VzvaB7iQuoYBbJrnPtoPuIC6hQFsfiuYbQPcQFVCCLYjquJaQnLoCaJzAgLXEBFcTmze7jukI64gIqhMWv+7nGkIa4gApg0cuOaw3FExdQ5ix22XPNoTjiAqADAgO6TlxAmbJ5s/Rcf+gacQFlyKJWPjwWUDhxAWXGYlZ+PCZQGHEBZcQiVr48NtB54gKgkwQGdI64gDJg82bl8DjBtokLKDGLVeXxmMHWiQsoIYtU5fLYwXcTF1AiFqfK5zGEjokLgCIIDNiSuICM2bxZfTye0J64gAxZhKqXxxa+IS4gIxaf6ucxhv8SF5ABi07t8FiDuABITmBQ68QFdCObN2uXx51aJi6gm1hc8BygVokL6AYWFb7muUAtEheQmMWEb/OcoNaIC4AMCAxqibiARGzeZFs8P6gV4gISsGjQWZ4r1AJxAUWyWFAozxmqnbiAIlgk6CrPHapZZnHR1tYWV155ZQwePDh22mmnGDVqVDz99NNZnR6g7AgMqlVmcXHOOefE7bffHmeddVZMmzYtevToEccdd1y8+OKLWY0Aydi8SSqeR1SjTOLiX//6V/z5z3+OW265JW655ZY4//zz45lnnokhQ4bEr371qyxGgGQsBqTmOUW1ySQuHnrooejRo0dccMEFm4/17NkzJk2aFC+99FIsW7YsizGgaBYBuovnFtUkk7h44403YtiwYdGnT592x0eOHLn5dih3/vCnu3mOUS0yiYsVK1bEoEGDtjg+aNCgyOfzsXz58izGACh7AoNqkElcbNiwIXr27LnF8R133HHz7VCubN4ka55vVLoeWZykV69esXHjxi2Of/7555tv35rJkydHv3792h1rbGyMxsbGdEMCQA1qamqKpqamdsdaW1uLus9M4mLQoEEd/uhjxYoVERGx1157bfXrp06dGg0NDd0yGwDUso7+Y33evHkxYsSILt9nJj8WGT58eLz99tuxbt26dsdffvnlyOVyMXz48CzGgC654Wc3xA0/u6HUY1BDPN+odJnExSmnnBKbNm2Ke+65Z/Oxtra2mD59eowaNSoGDx6cxRgAZU9YUA0y+bHIyJEjY8KECXH11VdHS0tLDB06NKZPnx5LliyJBx54IIsRoGg3/MzGTrqXsKBaZBIXERF//OMf49prr41Zs2bFJ598EvX19fHEE0/E6NGjsxoBivb1H/4ig5REBdUms7jYYYcdYsqUKTFlypSsTgkAlIC3XIcusMmTVDyPqEbiAqBEhAXVSlxAESwOdJXnDtUssz0XUK1s8qQQooJa4JULACApcQGJ2OTJtnh+UCvEBUAGhAW1RFxAYhYRvs1zglpjQyd0A5s8iRAV1C6vXAAASYkL6EY2edYujzu1TFwAJCYsqHXiAjJgsakdHmuwoRMyY5NndRMV8A2vXAAASYkLyJhNntXH4wntiQuAIggL2JK4gBKxKFU+jyF0zIZOKCGbPCuTqICt88oFAJCUuIAyYJNn5fA4wbaJC4BOEhbQOeICyojFq3x5bKDzbOiEMmOTZ3kRFVA4r1wAAEmJCyhTNnmWnusPXSMuADogLKDrxAWUOYtc9lxzKI4NnVABbPLMhqiANLxyAQAkJS6ggtjk2X1cV0hHXAA1T1hAWuICKpDFMB3XEtKzoRMqlE2exREV0H28cgEAJCUuoMLZ5Fk41wu6l7gAaoqwgO4nLqBKWDS3zTWCbNjQCVXEJs+OiQrIllcuAICkxAVUIZs8v+E6QPbEBVC1hAWUhriAKlbLi2stf+9QajZ0QpWrtU2eogJKzysXAEBS4gJqRC1s8qz27w8qhbgAqoKwgPIhLqDGVOMiXI3fE1QyGzqhBlXLJk9RAeXJKxcAQFLiAmpYJW/yrNS5oRaIC6DiCAsob+ICqKjFupJmhVplQycQEeW/yVNUQOXwygUAkJS4ANopx02e5TYPsHXiAihrwgIqj7gAOlQOi3o5zAAUzoZO4DuVapOnqIDK5pULACApcQFsU5abPL1qAZVPXABlQ1hAdRAXQKd15+IvLKB62NAJFCT1Jk9RAdXHKxcAQFLiAuiSFJs8vWoB1SmTuFi5cmVcddVVcfTRR8fOO+8cdXV10dzcnMWpgTIlLKB6ZRIXixYtiltvvTWWL18e9fX1kcvlsjgtkIGuRIKwgOqWyYbOH/7wh7F69erYZZdd4uGHH46XXnopi9MCGensJk9RAbUhk7jo3bt3FqcBAMqADZ1AMlvb5OlVC6gd4gLodsICakvBcZHP52Pjxo2d+gBq0//GhLCA2lPwnovm5uY46qijtvl5uVwuFixYEMOGDevSYP9r8uTJ0a9fv3bHGhsbo7Gxsej7BrqHqIDK0NTUFE1NTe2Otba2FnWfBcfFQQcdFNOnT+/U5w4aNKjQu+/Q1KlTo6GhIcl9AQDf6Og/1ufNmxcjRozo8n0WHBcDBw6Ms88+u8snBACqmw2dAEBSmb0r6s033xy5XC7mz58f+Xw+Zs6cGc8//3xERFxzzTVZjQEAdLPM4uK6667b/Gu/c7lcPPDAA5v/WVwAQPXILC6++uqrrE4FAJSQPRcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEgqk7h49tlnY9KkSXHggQdG7969Y//9948LLrggVq5cmcXpAYAM9cjiJFdeeWV88sknMWHChDjggAPi3XffjTvuuCOeeOKJeOONN2LAgAFZjAEAZCCTuJg6dWocfvjh7Y6NHTs2xowZE7/97W/jxhtvzGIMACADmfxY5NthERFxxBFHxG677RYLFizIYgQAICMl29D52Wefxbp162KPPfYo1QgAQDcoWVxMnTo1vvjiizjttNNKNQIA0A0K3nORz+ejra2tU5/bs2fPDo83NzfHjTfeGKeeemqMGTOm0BEAgDJWcFw0NzfHUUcdtc3Py+VysWDBghg2bFi74wsXLoyTTjop6uvr49577+3UOSdPnhz9+vVrd6yxsTEaGxs7PzgAsIWmpqZoampqd6y1tbWo+8zl8/l8IV/Q0tISTz31VKc+9xe/+EX07dt38/9funRpjB49Onr27BkvvPBCDBw4cKtfP2/evBgxYkS8/vrr0dDQUMiYAEAXFbv+FvzKxcCBA+Pss88u+EQff/xxHHvssbFp06aYO3fuNsMCAKhMmfyei/Xr18e4ceNixYoVMXfu3Nhvv/2yOC0AUAKZxMXpp58er776akyaNCnmz58f8+fP33xbnz594sQTT8xiDAAgA5nExZtvvhm5XC7uv//+uP/++9vdNmTIEHEBAFUkk7h47733sjgNAFAGvOU6AJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgKXEBACQlLgCApMQFAJCUuAAAkhIXAEBS4gIASEpcAABJiQsAIClxAQAkJS4AgKTEBQCQlLgAAJISFwBAUuICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSyiQunn/++TjxxBNjn332iV69esWgQYNi3Lhx8eKLL2ZxegAgQ5nExdtvvx3bbbddXHzxxXHXXXfFFVdcES0tLXHkkUfG3//+9yxGqFlNTU2lHqGiuX7Fcf2K4/oVx/UrnUziYtKkSfGXv/wlrr766jjvvPPisssui3/+85/Rv3//uP3227MYoWb5l6s4rl9xXL/iuH7Fcf1Kp2R7Lnr16hX9+/ePNWvWlGoEAKAb9MjyZJ9++mm0tbXFqlWrYsaMGTF//vy45pprshwBAOhmmcbFxIkT46mnnoqIiB122CEuvPDC+M1vfpPlCABANys4LvL5fLS1tXXqc3v27Nnu/0+ZMiV++ctfxtKlS2PGjBnR1tYWX3zxReywww4dfv2GDRsiImLBggWFjsn/19raGvPmzSv1GBXL9SuO61cc1684rl/Xfb3ufr0OFyxfoLlz5+Zzudw2P+rq6vKLFi36zvtpa2vLH3bYYfkJEyZ85+fMmjUrHxE+fPjw4cOHjxJ8zJo1q9BMyOfz+XzBr1wcdNBBMX369E597qBBg77ztu233z7Gjx8fU6ZMiY0bN27xKkdExNixY2PWrFmx7777Rq9evQodFQDogg0bNsT7778fY8eO7dLX5/L5fD7xTJ02efLkmDZtWrS0tMQee+xRqjEAgIQyiYuPPvoo+vfv3+7YmjVror6+Prbbbrt47733unsEACAjmfxtkXHjxsX3vve9+PGPfxwDBgyIJUuWxPTp02PFihUxZ86cLEYAADKSySsXv/vd7+JPf/pTLFy4MNasWRO77rpr/OQnP4krrrgifvrTn3b36QGADJV0zwUAUH285ToAkFRFxYW3bi/Os88+G5MmTYoDDzwwevfuHfvvv39ccMEFsXLlylKPVhFWrlwZV111VRx99NGx8847R11dXTQ3N5d6rLLT1tYWV155ZQwePDh22mmnGDVqVDz99NOlHqtifPbZZ3H99dfHuHHjYvfdd4+6urqYOXNmqceqCK+99lpccsklcdhhh0WfPn1iyJAhceqpp8bixYtLPVpFeOutt2LixImx//77R+/evaN///4xZsyYePzxxwu+r4qKC2/dXpwrr7wynnvuuTjppJPijjvuiMbGxpgzZ040NDTEf/7zn1KPV/YWLVoUt956ayxfvjzq6+sjl8uVeqSydM4558Ttt98eZ511VkybNi169OgRxx13nP8I6KRVq1bFTTfdFAsXLozhw4d7nhVgypQp8cgjj8QxxxwT06ZNiwsvvDCam5ujoaEh3nrrrVKPV/aWLFkS69ati3PPPTemTZsW1113XeRyuRg/fnz84Q9/KOzOuvSrt8rI+vXr83vuuWd+3LhxpR6l7D3//PNbHGtubs7ncrn8tddeW4KJKsu6devyn3zyST6fz+cfeuihfF1dXf65554r8VTl5ZVXXsnncrn8bbfdtvnY559/nh86dGh+9OjRJZyscrS1teVbWlry+Xw+/9prr+VzuVx+xowZJZ6qMrz00kv5L774ot2xxYsX53fcccf8WWedVaKpKttXX32VHz58eP7ggw8u6Osq6pWLjnjr9s47/PDDtzh2xBFHxG677eb9Wzqhd+/escsuu5R6jLL20EMPRY8ePeKCCy7YfKxnz54xadKkeOmll2LZsmUlnK4ybL/99jFgwIBSj1GRRo0aFT16tP8NC0OHDo1DDz3Un3FdlMvlYu+99y54ja3IuPj0009j9erVsWjRovj1r38d8+fPj2OOOabUY1Wkzz77LNatW+c3pJLEG2+8EcOGDYs+ffq0Oz5y5MjNt0PW/Bbowqxfvz5Wr14d7777bkydOjWefPLJgtfYTN9yPRVv3Z7O1KlT44svvojTTjut1KNQBVasWNHhewoNGjQo8vl8LF++vARTUctmzZoVy5Yti5tvvrnUo1SMyy+/PO6+++6IiKirq4uTTz457rjjjoLuo2Rxkc/wrdurUTHX72vNzc1x4403xqmnnhpjxoxJOV7ZS3H92NKGDRs6vF477rjj5tshKwsXLoxLLrkkRo8eHWeffXapx6kYkydPjgkTJsTy5ctjzpw58eWXX8bGjRsLuo+SxUVzc3McddRR2/y8XC4XCxYsiGHDhm0+Vl9fv/mfzzjjjGhoaIjzzjuvpn6VeDHXL+K//9KddNJJUV9fH/fee293jVm2ir1+dKxXr14d/iH0+eefb74dstDS0hLHH3987LrrrvHggw/6WzcFGDZs2OY/884888wYO3ZsjB8/Pl5++eVO30fJ4iLLt26vRsVcv6VLl8axxx4bu+66azzxxBPRu3fvbpiwvKV6/tHeoEGDOvzRx4oVKyIiYq+99sp6JGrQ2rVr4+c//3msXbs2Xnjhhdhzzz1LPVJFO+WUU+Kiiy6KxYsXxwEHHNCprylZXAwcODDZy1Tr16+PfD4fn376ac3ERVev38cffxzHHntsbNq0KebOnRsDBw7shunKX8rnH98YPnx4zJ07N9atW9duU+fLL78cuVwuhg8fXsLpqAUbN26ME044Id5555145pln4sADDyz1SBXv6x9ntra2dvprKupvi3z00UdbHFuzZk08/PDDsc8++9gNvA3r16+PcePGxYoVK+Jvf/tb7LfffqUeiSpzyimnxKZNm+Kee+7ZfKytrS2mT58eo0aNisGDB5dwOqrdV199FRMnToxXXnklHnrooc1/S4nO6WiN3bRpU8yYMSN69eoVhxxySKfvq6L+toi3bi/O6aefHq+++mpMmjQp5s+fH/Pnz998W58+feLEE08s4XSV4eabb45cLhfz58+PfD4fM2fOjOeffz4iIq655poST1d6I0eOjAkTJsTVV18dLS0tMXTo0Jg+fXosWbIkHnjggVKPVzHuvPPOWLNmzebfC/Loo4/G0qVLIyLi0ksvjb59+5ZyvLJ12WWXxWOPPRbjx4+PVatWxezZs9vdfsYZZ5Rosspw4YUXxtq1a+PII4+MwYMHx8qVK2P27NmxaNGiuO2222KnnXbq9H1V1Luieuv24nz/+9+PDz74oMPbhgwZEu+++27GE1Weurq6DjeG5XK52LRpUwkmKj9tbW1x7bXXxqxZs+KTTz6J+vr6uPnmm/0umgJs7d/V9957L/bZZ5+MJ6oMRx111Fbf7+fLL7/McJrKM2fOnLjvvvvi3//+d6xevTr69u0bI0aMiEsvvTSOP/74gu6rouICACh/FbXnAgAof+ICAEhKXAAASYkLACApcQEAJCUuAICkxAUAkJS4AACSEhcAQFLiAgBISlwAAEmJCwAgqf8HeE3k7Hx7GeQAAAAASUVORK5CYII=", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "include(\"draw_boxes.jl\")\n", - "\n", - "draw(inner)\n", - "\n", - "xlim(-3, 3)\n", - "ylim(-3, 3)\n", - "ax = gca()\n", - "ax[:set_aspect](\"equal\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "## Disjoint regions" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 13 methods)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x, y" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S10a = @constraint (x-2)^2 + y^2 <= 1\n", - "S10b = @constraint x^2 + (y-2)^2 <= 1\n", - "S10 = S10a ∪ S10b" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.028110 seconds (64.43 k allocations: 2.185 MB, 18.10% gc time)\n" - ] - } - ], - "source": [ - "X = IntervalBox(-10^4..10^4, -10^4..10^4)\n", - "\n", - "@time paving = pave(S10, X, 1);" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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008/VWxsbJ8KaxMcHCxJamlp8XjtypUrbsf8UFVVlSTp/vvv71cNppk1a5avS7AV4x3cGO/glrcmr2/91Ld+vjbU5reqqkqJiYkD/r69Di+33XabCgoKenRsR6d6euumm25SYGCgamo803lbW0xMTId977rrLhUVFWnixImdBhwAADCwmpubVVVVpbvuussr79/r8HLzzTdr5cqV3qilQw6HQ9OnT9fx48c9Xjt27JhuueWWTjfrRkZGasWKFd4uEQAA/IA3Vlza+N2G3XPnzqmystKtLSUlRR999JHbucLKykq9++67SktLs7tEAADgQw7Lsiw7PmjLli1yOBw6ceKEXnnlFf3sZz/Tj370I0nSk08+2X5cUlKSDh06pNbW1va2xsZGzZw5U99++60effRRBQQEKCcnR5ZlqaKiQhEREXYMAQAA+AHbwovT6ezwsQAOh0PXr19v//OCBQv0/vvvu7VJ310OnZWVpb/85S9qbW3VggUL9MILL+iWW27xeu0AAMB/2BZeAAAABoLf7XkBAADoyqAJL7W1tcrOztbChQsVFhYmp9OpQ4cO9eo9qqurlZaWptGjRys8PFw/+clP9MUXX3ip4v5raGjQ6tWrFRUVpdDQUC1cuFAVFRU96vurX/1KTqfT4yckJMTLVXfv6tWreuyxxzR27FiFhIRo7ty5OnDgQI/69uc78ZW+jnfHjh0dzuGwYcP05Zdf2lB531y+fFkbN27UkiVLFBERIafTqcLCwh73N22O+zNe0+b4+PHjWrt2raZNm6bQ0FBNmDBB9913nz777LMe9TdtbvszXtPmVpL+/ve/Ky0tTZMmTdKIESMUERGhefPmaefOnT3qP5Dz6/fPNuqpyspKPf/885oyZYpmzJjR6ydXX758WUlJSfr222/1y1/+UgEBAXrhhReUlJSkjz/+WKNHj/ZS5X1jWZaWLl2qTz75RBs2bFBERIRyc3OVlJSk8vJyTZo0qdv3cDgceumll9wuNR82bJg3y+6RBx54QHv27FFWVpYmT56sgoICLV26VAcPHtS8efM67TcQ34kv9HW80ndzuHnzZk2cONGtvT8PQvW2+vp6bd68WRMmTFBcXJwOHjzY474mznF/xiuZNcfPPfecPvjgA6WmpmrGjBmqra3V9u3bFR8fr2PHjun222/vtK+Jc9uf8Upmza0knT17Vo2N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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-0.9980449639169569,2.9980449639169566,-0.9981672658552772,2.998167265855277)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time refine!(paving, 0.1)\n", - "draw(paving.inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.846274 seconds (13.69 M allocations: 416.454 MB, 14.07% gc time)\n" - ] - } - ], - "source": [ - "S10c = @constraint (x-1)^2 + (y-1)^2 <= 1\n", - "S11 = S10a ∪ S10b ∪ S10c\n", - "@time inner, boundary = pave(S11, X, 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAIUCAYAAADSacwqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt8XGW5L/DfyszKZZLMJJlcey9pWqFQ26YEhK0W9SgWrBu03XSLbDm6BbUqyGVXhQItdJfSClqoPXiw0A27HrEqVGQjIhUpbdJM0gulJJM09/usycxkbpm11qzzR5g096RpMpfM7/v58CFds9asdzKZ9On7Ps/zCpqmaSAiIiKKEQmRHgARERHRhWDwQkRERDGFwQsRERHFFAYvREREFFMYvBAREVFMYfBCREREMYXBCxEREcUUBi9EREQUUxi8EBERUUxh8EJEREQxJSzBywcffID169ejsLAQqampyMnJwac//Wn86U9/mtD1TqcT3/72t5Gbm4u0tDR85jOfQWVl5TSPmoiIiKKRPhw3aWhogNvtxje+8Q3MmjULXq8XBw8exNq1a/Hss8/iW9/61qjXapqGNWvW4PTp07j//vthNpuxZ88erF69GhUVFSgsLAzHSyAiIqIoIURqY0ZN07By5Ur09vbigw8+GPW83/72t7jllltw8OBB3HTTTQAAm82GxYsXY82aNXjxxRfDNWQiIiKKAhHLeREEAXPnzoXD4RjzvIMHDyI/P78/cAGA7OxsrF+/Hq+88gpkWZ7uoRIREVEUCWvw4vV6IUkSzp07hyeffBKvv/46Pve5z415TWVlJVauXDnseElJCbxeL6qrq6druERERBSFwhq83HPPPcjJycGiRYtw33334eabb8bu3bvHvKatrQ0FBQXDjoeOtba2TstYiYiIKDqFJWE35O6778a6devQ2tqK3/72t1BVFb29vWNe4/P5kJSUNOx4cnIyNE2Dz+cb9VqbzYY33ngDCxYsQEpKykWPn4iIiMbn8/lQX1+PL3zhC8jOzp7y5w9r8LJ48WIsXrwYAHDrrbfiC1/4AtauXYtjx46Nek1KSsqIAY7f74cgCGMGJW+88QZuvfXWix84ERERXbAXX3wRX/va16b8ecMavAz11a9+FXfeeSesViuKiopGPKegoABtbW3DjoeOzZo1a9TnX7BgAYC+b96ll1568QOOAXfffTeefPLJSA9jGIfDAZfLBa/XC7/fD03T4PF48LtXf4em1iZkZ2fD6/bC1e2CTq+D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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-0.9999923705763645,2.9999923705763645,-0.9999713893612233,2.999971389361223)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner, \"green\", 0.5, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - ":((S10a ∪ S10b) ∪ S10c)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "expand(:(S10a ∪ S10b ∪ S10c))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.273488 seconds (8.97 M allocations: 269.566 MB, 14.99% gc time)\n" - ] - }, - { - "data": { - "image/png": "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3BP/8A//EH/+859j8eLF8d///d9lvwDyYdOmTUkvgSp6+3dvJ72EihM6/pf7l3KVtB3zxhtvxDPPPBOPPvporFq1KiIiVq5cGeeff36sXr06duzYMejcZ599Nnbu3BlbtmyJa6+9NiIi2traorm5OR5++OHYuHHjKF4GWbdp06ZYsWJF0sugSv7r9/8V3/s/30t6GWURMobn/qVcJYWQzZs3x9ixY+OOO+7oGxs/fnzcfvvt8bd/+7dx4MCBmDVr1innbtmyJWbMmNEXQCIipk2bFsuXL4+nn346vvzyyxg3blyZLwOgMoQOqJ2SQshbb70Vzc3NMWnSpH7jLS0tfT8fLITs2bMnFixYMGC8paUlfv3rX8fevXvjvPPOK2U5AKMicECySgoh3d3d0dTUNGC8qakpisVifPTRR0PO/cEPfnDKuRERH330kRACVJSQAelWUgjp7e2N8ePHDxifMGFC38/LmVssFoedGxHxhz/8oZTlkiGHDx+Orq6upJdBlcwYOyOWTl4av9r9q4r9zrsW3jXsY/xvqjbcv/l18u/dof6OHo2SQsjEiRPj2LFjA8aPHj3a9/Ny5hYKhSHn7t+/PyIibrrpplKWS8ZcdNFFSS+BKqr09V0X6yr6+xgd92++7d+/P1pbWyv+e0sKIU1NTafccunu7o6IiJkzZw459+TjSp175ZVXxsaNG2Pu3LlDhhUAoHJ6e3tj//79ceWVV1bl95cUQubPnx/bt2+PI0eO9DucumvXrigUCjF//vwh557qLby7du2KxsbGaG5uHnTutGnT4sYbbyxlqQBABVSjATmppA8rW7ZsWXz11Vexbt3/1qDHjx+PDRs2xKJFi/reGXPw4MF499134+uvv+4399ChQ7F169a+sZ6enti8eXMsXbrU23MBoM4UisVisZQJ119/fTz//PNx7733xrx582LDhg2xe/fu+P3vf9+Xlm699dbo6OiI/fv3x+zZsyMi4sSJE3HppZfGO++8Ez/96U9j2rRp0d7eHh9++GG8+eabcc4551T+1QEAqVXyF9j95je/iYceeig2btwYn3zySVxwwQWxbdu2fnVNoVCIhob+JUtDQ0O8/PLLcd9998UTTzwRvb290dLSEh0dHQIIANShkpsQAIBKKPkL7AAAKiHREHL8+PG4//77Y9asWdHY2BiLFi2KV199dURzDx8+HHfeeWdMnz49Jk2aFJdffnns2bOnyiumFOVe36eeeioaGhoG/BkzZkx8/PHHNVg5I/H555/Hww8/HFdffXVMnTo1GhoaoqOjY8Tz3cPpNprr6x5Ot927d8fdd98d559/fkyaNCnmzJkT119/fbz33nsjml/Je7fkMyGVdMstt8TWrVtj1apVfYdclyxZEtu3b49LLrlk0HnFYjGWLFkSb7/9dqxevTqmTp2ktWi4AAAFuElEQVQa7e3tsXjx4ujq6oqzzz67hq+CwZR7fSO+OVe0du3amDt3br/x008/vYorphQ9PT2xdu3amDNnTt/b90fKPZx+o7m+Ee7hNPu7v/u7eO2116KtrS0uuOCCOHjwYDzxxBOxYMGCeP311+O73/3uoHMrfu8WE/L6668XC4VC8R//8R/7xo4ePVqcN29esbW1dci5zzzzTLFQKBS3bt3aN/bnP/+5eMYZZxRvvPHGqq2ZkRvN9d2wYUOxoaGh2NnZWe1lMgrHjx8vHjp0qFgsFou7d+8uFgqF4lNPPTWiue7h9BvN9XUPp9vOnTuLX375Zb+x9957rzhhwoTiypUrh5xb6Xs3se2YzZs3x9ixY+OOO+7oGxs/fnzcfvvtsXPnzjhw4MCgc7ds2RIzZsyIa6+9tm9s2rRpsXz58vjXf/3X+PLLL6u6doY3muv7144cORInTpyo1jIZhXHjxsX06dPLmuseTr/RXN+/5h5On0WLFsXYsf03QubNmxfnnXfesN/RVul7N7EQ8tZbb0Vzc3O/T16NiGhpaen7+WD27NkTCxYsGDDe0tISX3zxRezdu7eyi6Vko7m+Ed9UfosXL47JkydHY2NjXHPNNbFv376qrZfacg/nn3s4ew4dOhTTpk0b8jGVvncTCyHd3d3R1NQ0YLypqSmKxeIpv6NmJHMjYsi51MZorm9jY2Pcdttt0d7eHs8//3zcf//98bvf/S5aW1tH3KCQbu7hfHMPZ8/GjRvjwIEDccMNNwz5uErfu4kdTO3t7Y3x48cPGJ8wYULfz8uZWywWq/aVw4zcaK5vW1tbtLW19f3z0qVL44orrojLLrssHnnkkWhvb6/8gqkp93C+uYez5Y9//GPcfffd0draGjfffPOQj630vZtYEzJx4sQ4duzYgPGjR4/2/bycuYVCwTftpsBoru+ptLa2xsUXXzzit3CTbu7h+uMeTqdDhw7Fj370ozjjjDPi2WefjUKhMOTjK33vJhZCmpqaoru7e8D4ybGZM2dWZS61UY1rdNZZZ8Vf/vKXUa+N5LmH65N7OF0+++yzuOqqq+Kzzz6Lf/u3f4sZM2YMO6fS925iIWT+/Pmxd+/eOHLkSL/xXbt2RaFQiPnz5w85t6ura8D4rl27orGxMZqbmyu+Xkozmus7mPfffz/OPPPMSi2RBLmH65N7OD2OHTsWP/7xj2Pfvn2xbdu2OPfcc0c0r9L3bmIhZNmyZfHVV1/FunXr+saOHz8eGzZsiEWLFsWsWbMiIuLgwYPx7rvvxtdff91v7qFDh2Lr1q19Yz09PbF58+ZYunRpjBs3rnYvhFMazfXt6ekZ8Pteeuml6OzsjKuvvrr6i6ei3MP55h7OnhMnTsTy5cvj9ddfj82bN/e9a/HbanHvJvoFdtdff308//zzce+99/Z9oubu3bvj97//fd+38t56663R0dER+/fvj9mzZ0fEN/8CL7300njnnXfipz/9aUybNi3a29vjww8/jDfffNO38qZEude3ubk5Lrzwwli4cGFMmTIlOjs7Y/369TFr1qx44403/JdUijz55JPx6aefxoEDB+Kf/umf4rrrrosLL7wwIiLuueeeOO2009zDGVbu9XUPp9u9994bv/zlL2Pp0qX9DhCfdOONN0ZEjf7+LfnjzSro2LFjxdWrVxdnzpxZnDhxYvHiiy8uvvLKK/0ec+uttxbHjBlT/NOf/tRv/NNPPy3ecccdxTPPPLM4adKk4uWXX17s6uqq5fIZRrnX96GHHiouWLCgeMYZZxTHjx9fnDt3bvHuu+8ufvzxx7V+CQxj7ty5xYaGhlP+OXlN3cPZVe71dQ+n2+LFiwe9rg0NDX2Pq8W9m2gTAgDUr0S/RRcAqF9CCACQCCEEAEiEEAIAJEIIAQASIYQAAIkQQgCARAghAEAihBAAIBFCCACQCCEEAEiEEAIAJOL/ASW5D/3UMnYJAAAAAElFTkSuQmCC", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(9.155692571038987e-5,1.999908443074289,0.0001220777639902998,1.9998779222360095)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "S12 = (S10a ∩ S10c) ∪ (S10b ∩ S10c)\n", - "@time inner, boundary = pave(S12, X, 0.01);\n", - "draw(inner)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Cusp" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1.7320508075688772" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sqrt(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 8.317151 seconds (59.83 M allocations: 1.786 GB, 13.88% gc time)\n" - ] - } - ], - "source": [ - "S13a = @constraint x^2 + y^2 <= 1\n", - "S13b = @constraint (x-2)^2 + y^2 <= 1\n", - "S13c = @constraint (x-1)^2 + (y-1.732050807568877)^2 <= 1\n", - "\n", - "\n", - "S13 = !(S13a ∪ S13b ∪ S13c)\n", - "X = IntervalBox(-0..2, -0..2)\n", - "@time inner, boundary = pave(S13, X, 0.001);" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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tnd0s3a1THdX50okki7PrampAQAsX768J82lIWbatGnJbgININ6/wxvv3+GtpqYGc+bM6ffH7VEQYrVaLzhs0tjYCADIzc3t8tyO43p67rXXXotXX30VRUVFXQYrRERE1H+CwSBqampw7bXXDsjj9ygIqaiowNatW+H3+zslp+7evRsSiQQVFRVdnrt9+/bztu/evRtarRYlJSUXPTcrKwvLli3rSVOJiIioHwxED0iHHiWmLlq0CIIg4I9//GNiWyQSwfr16zFz5kzk5eUBODMGfPToUcRisU7n2u12bN68ObHN6XRi06ZNWLhwIRQKRV9fCxEREQ0hErGHZQyXLFmCt99+G4888gjGjBmD9evXY9++ffjss88S0dLKlSuxYcMG1NTUoKCgAAAQj8cxd+5cfPPNN3jssceQlZWFdevWoa6uDl9++SXGjh3b/6+OiIiIUlaPhmMA4JVXXsFTTz2FV199FW63G2VlZdiyZUun7hqJRHJedUSpVIoPP/wQP/rRj/D8888jGAxixowZ2LBhAwMQIiKiEajHPSFERERE/YGLORAREVFSJDUIiUQieOKJJ5CXlwetVouZM2fik08+6da5Xq8Xa9euhdlshk6nw/z583Hw4MEBbjH1RG+v78svvwypVHrej0wmg8PhGISWU3e0tbXhpz/9KRYsWIDMzExIpVJs2LCh2+fzHk5tfbm+vIdT2759+/Dggw9i0qRJ0Ol0KCwsxJIlS3D8+PFund+f926Pc0L604oVK7B582Y8+uijiSTX66+/Hlu3bsXs2bMvep4oirj++uvx9ddf4/HHH0dmZibWrVuHefPm4cCBAxg9evQgvgq6mN5eX+BMXtHTTz+NoqKiTtsNBsMAtph6wul04umnn0ZhYWFi+n538R5OfX25vgDv4VT2zDPPYOfOnVi8eDHKysrQ1NSE559/HlOnTsWePXswYcKEi57b7/eumCR79uwRJRKJ+Otf/zqxLRQKiWPGjBHnzJnT5bmvv/66KJFIxM2bNye2NTc3i0ajUVy2bNmAtZm6ry/Xd/369aJUKhX3798/0M2kPohEIqLdbhdFURT37dsnSiQS8eWXX+7WubyHU19fri/v4dS2a9cuMRqNdtp2/PhxUa1Wi3fddVeX5/b3vZu04ZhNmzZBLpdjzZo1iW0qlQqrV6/Grl27UF9ff9Fz33rrLVgsFtx6662JbVlZWbj99tvxzjvvIBqNDmjb6dL6cn3P5vf7EY/HB6qZ1AcKhQJms7lX5/IeTn19ub5n4z2cembOnAm5vPNAyJgxYzBx4sRLrtHW3/du0oKQyspKlJSUdKq8CgAzZsxI7L+YgwcPYurUqedtnzFjBgKBAI4dO9a/jaUe68v1Bc50+c2bNw8ZGRnQarW4+eabUVVVNWDtpcHFe3j44z089NjtdmRlZXV5TH/fu0kLQhobG2G1Ws/bbrVaIYriBdeo6c65ALo8lwZHX66vVqvFqlWrsG7dOrz99tt44okn8Omnn2LOnDnd7kGh1MZ7eHjjPTz0vPrqq6ivr8cdd9zR5XH9fe8mLTE1GAxCpVKdt12tVif29+ZcURQHbMlh6r6+XN/Fixdj8eLFiX8vXLgQ//zP/4zvfOc7+PnPf45169b1f4NpUPEeHt54Dw8tR44cwYMPPog5c+bg7rvv7vLY/r53k9YTotFoEA6Hz9seCoUS+3tzrkQi4Uq7KaAv1/dC5syZg8svv7zbU7gptfEeHnl4D6cmu92OG264AUajEW+++SYkEkmXx/f3vZu0IMRqtaKxsfG87R3bcnNzB+RcGhwDcY1sNhtcLlef20bJx3t4ZOI9nFp8Ph+uu+46+Hw+/O1vf4PFYrnkOf197yYtCKmoqMCxY8fg9/s7bd+9ezckEgkqKiq6PPfAgQPnbd+9eze0Wi1KSkr6vb3UM325vhdTXV2N7Ozs/moiJRHv4ZGJ93DqCIfDuPHGG1FVVYUtW7agtLS0W+f1972btCBk0aJFEAQBf/zjHxPbIpEI1q9fj5kzZyIvLw8A0NTUhKNHjyIWi3U61263Y/PmzYltTqcTmzZtwsKFC6FQKAbvhdAF9eX6Op3O8x7vgw8+wP79+7FgwYKBbzz1K97Dwxvv4aEnHo/j9ttvx549e7Bp06bErMVzDca9m9QF7JYsWYK3334bjzzySKKi5r59+/DZZ58lVuVduXIlNmzYgJqaGhQUFAA48wucO3cuvvnmGzz22GPIysrCunXrUFdXhy+//JKr8qaI3l7fkpISTJkyBdOnT4der8f+/fvx0ksvIS8vD3v37uU3qRTyH//xH/B4PKivr8d//ud/4rvf/S6mTJkCAHj44YeRnp7Oe3gI6+315T2c2h555BE899xzWLhwYacE4g7Lli0DMEh/f3tc3qwfhcNh8fHHHxdzc3NFjUYjXn755eLHH3/c6ZiVK1eKMplMPHXqVKftHo9HXLNmjZidnS3qdDpx/vz54oEDBwaz+XQJvb2+Tz31lDh16lTRaDSKKpVKLCoqEh988EHR4XAM9kugSygqKhKlUukFfzquKe/hoau315f3cGqbN2/eRa+rVCpNHDcY925Se0KIiIho5ErqKrpEREQ0cjEIISIioqRgEEJERERJwSCEiIiIkoJBCBERESUFgxAiIiJKCgYhRERElBQMQoiIiCgpGIQQERFRUjAIISIioqRgEEJERERJwSCEiIiIkuL/A2QaPdQooWRDAAAAAElFTkSuQmCC", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(0.0,2.0000000000000004,-2.7755575615628914e-17,2.0)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner, \"red\", 0.2, 1)\n", - "draw(boundary, \"grey\", 0.2, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Sliced solid torus.ipynb b/examples/Sliced solid torus.ipynb deleted file mode 100644 index 855c935..0000000 --- a/examples/Sliced solid torus.ipynb +++ /dev/null @@ -1,253 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator:\n", - "- variables: x, y, z\n", - "- expression: x + y + z ∈ [-∞, 1]\n" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solid_torus = @constraint (3 - sqrt(x^2 + y^2))^2 + z^2 <= 1\n", - "\n", - "half_plane = @constraint x + y + z <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "using Compat\n", - "@compat (S::IntervalConstraintProgramming.CombinationSeparator)(X) = S.separator(X)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 2.544950 seconds (10.42 M allocations: 342.973 MB, 5.50% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(solid_torus ∩ half_plane, Y, 0.25);" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 9.290564 seconds (75.27 M allocations: 2.350 GB, 8.94% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "0.09" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time refine!(paving, 0.09)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3D vis " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "inner = paving.inner\n", - "boundary = paving.boundary;" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "positions = Point3{Float32}[Point3(mid(x)) for x in vcat(inner, boundary)]\n", - "scales = Vec3f0[Vec3f0([diam(x) for x in xx]) for xx in vcat(inner, boundary)]\n", - "\n", - "zs = Float32[x[3] for x in positions]\n", - "minz = minimum(zs)\n", - "maxz = maximum(zs)\n", - "\n", - "xs = Float32[x[1] for x in positions]\n", - "minx = minimum(xs)\n", - "maxx = maximum(xs)\n", - "\n", - "colors1 = RGBA{Float32}[RGBA( (zs[i]-minz)/(maxz-minz), (xs[i]-minx)/(maxx-minx), 0f0, 0.1f0)\n", - " for i in 1:length(inner)]\n", - "colors2 = RGBA{Float32}[RGBA( 0.5f0, 0.5f0, 0.5f0, 0.02f0) for x in boundary];\n", - "colors = vcat(colors1, colors2);" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Visualization packages loaded.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:6\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:8\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:8\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:8\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near In[13]:8\n" - ] - }, - { - "data": { - "text/plain": [ - "Ptr{Void} @0x0000000000000000" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors\n", - "println(\"Visualization packages loaded.\")\n", - "\n", - "cube_particle = HyperRectangle{3, Float32}(Vec3f0(-0.5, -0.5, -0.5), Vec3f0(1, 1, 1))\n", - "\n", - "window = glscreen()\n", - "\n", - "vis = visualize( (cube_particle, positions), scale=scales, color=colors)\n", - "\n", - "_view(vis)\n", - "\n", - "\n", - "renderloop(window)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Solid torus and implicit equations.ipynb b/examples/Solid torus and implicit equations.ipynb deleted file mode 100644 index e339354..0000000 --- a/examples/Solid torus and implicit equations.ipynb +++ /dev/null @@ -1,1652 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x, y, z" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solid_torus = @constraint (3 - sqrt(x^2 + y^2))^2 + z^2 <= 1\n", - "\n", - "half_plane = @constraint x + y + z <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.084013 seconds (1.92 M allocations: 75.395 MB, 1.70% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(solid_torus, Y, 1);" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "96" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(paving.inner) # number of boxes in inner approximation" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.391124 seconds (2.95 M allocations: 94.754 MB, 13.26% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "744" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time refine!(paving, 0.5) # refine the paving\n", - "length(paving.inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 12.325309 seconds (95.59 M allocations: 3.004 GB, 14.07% gc time)\n" - ] - }, - { - "data": { - "text/plain": [ - "28176" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@time refine!(paving, 0.1) # refine the paving\n", - "length(paving.inner)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 11.086498 seconds (73.42 M allocations: 2.310 GB, 8.34% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(solid_torus ∩ half_plane, Y, 0.1);" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3-dimensional Volume: [32.479, 35.7929]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Vol(paving)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 15.386922 seconds (21.71 M allocations: 600.190 MB, 2.23% gc time)\n" - ] - } - ], - "source": [ - "weird = @constraint x^4 + y^4 + z^4 - 5*(x^2+y^2+z^2) + 11.8 == 0.0\n", - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(weird, Y, 1);\n", - "inner = paving.boundary;" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "367.716575 seconds (555.72 M allocations: 14.925 GB, 2.71% gc time)\n" - ] - } - ], - "source": [ - "@time refine!(paving, 0.25)\n", - "inner = paving.boundary;" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "9240" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(paving.boundary)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Precompiling module JLD...\n" - ] - } - ], - "source": [ - "using JLD" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "save(\"weird.jld\", \"boundary\", paving.boundary)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Cloning cache of Blosc from git://github.com/stevengj/Blosc.jl.git\n", - "INFO: Cloning cache of HDF5 from git://github.com/JuliaIO/HDF5.jl.git\n", - "INFO: Cloning cache of JLD from git://github.com/JuliaIO/JLD.jl.git\n", - "INFO: Installing Blosc v0.1.5\n", - "INFO: Installing HDF5 v0.6.2\n", - "INFO: Installing JLD v0.6.1\n", - "INFO: Building Blosc\n", - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n", - "100 63144 100 63144 0 0 83584 0 --:--:-- --:--:-- --:--:-- 83584\n", - "INFO: Building Homebrew\n", - "From https://github.com/Homebrew/brew\n", - " c602210..66cda61 master -> origin/master\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HEAD is now at 66cda61 test-bot: fix diff_formulae\n", - "Updating tap homebrew-core\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "From https://github.com/Homebrew/homebrew-core\n", - " 3f7f1cf..8821f57 master -> origin/master\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "HEAD is now at 8821f57 bash: use https for ftpmirror.gnu.org\n", - "Updating tap homebrew-juliadeps\n", - "HEAD is now at 867f585 Manually copy over from `juliatranslated` during `sf/rewrite` times\n", - "Uninstalling gmp... (17 files, 3.2M)\n", - "==> Downloading https://homebrew.bintray.com/bottles/gmp-6.1.1.el_capitan.bottle.tar.gz\n", - "==> Pouring gmp-6.1.1.el_capitan.bottle.tar.gz\n", - "🍺 /Users/dpsanders/.julia/v0.4/Homebrew/deps/usr/Cellar/gmp/6.1.1: 17 files, 3.2M\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning: Already linked: /Users/dpsanders/.julia/v0.4/Homebrew/deps/usr/Cellar/gmp/6.1.1\n", - "INFO: Building HDF5\n", - "INFO: Package database updated\n", - "INFO: METADATA is out-of-date — you may not have the latest version of JLD\n", - "INFO: Use `Pkg.update()` to get the latest versions of your packages\n" - ] - } - ], - "source": [ - "Pkg.add(\"uJLD\")" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 53.493586 seconds (81.24 M allocations: 2.192 GB, 2.47% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(weird, Y, 0.5);" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "LoadError", - "evalue": "LoadError: InterruptException:\nwhile loading In[3], in expression starting on line 155", - "output_type": "error", - "traceback": [ - "LoadError: InterruptException:\nwhile loading In[3], in expression starting on line 155", - "", - " in call at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib", - " in ^ at mpfr.jl:433", - " in anonymous at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/macros.jl:39", - " in with_rounding at rounding.jl:54", - " [inlined code] from /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/macros.jl:38", - " in sqr at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/functions.jl:70", - " in ^ at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/functions.jl:21", - " in ^ at /Users/dpsanders/.julia/v0.4/ValidatedNumerics/src/intervals/functions.jl:11", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/contractor.jl:152", - " in call at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/contractor.jl:211", - " in anonymous at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/separator.jl:33", - " in pave at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/setinversion.jl:35", - " in pave at /Users/dpsanders/.julia/v0.4/IntervalConstraintProgramming/src/setinversion.jl:76" - ] - } - ], - "source": [ - "pinch = @constraint x^2+y^2+z^2*(z-1)==0\n", - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(pinch, Y, 0.1);\n", - "inner = paving.boundary;" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3D vis " - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.9991381f0" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "minz" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "ColorTypes.RGBA{Float32}" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "typeof(colors[1])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "inner = paving.inner" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "positions = Point3{Float32}[Point3(mid(x)) for x in inner]\n", - "scales = Vec3f0[Vec3f0([diam(x) for x in xx]) for xx in inner]\n", - "\n", - "zs = Float32[x[3] for x in positions]\n", - "minz = minimum(zs)\n", - "maxz = maximum(zs)\n", - "\n", - "xs = Float32[x[1] for x in positions]\n", - "minx = minimum(xs)\n", - "maxx = maximum(xs)\n", - "\n", - "\n", - "colors = RGBA{Float32}[RGBA( (x[3]-minz)/(maxz-minz), (x[1]-minx)/(maxx-minx), 0f0, 0.1f0) for x in positions];\n" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Visualization packages loaded.\n", - "1 : #version 410\n", - "2 : \n", - "3 : \n", - "4 : #define FXAA_PC 1\n", - "5 : #define FXAA_GLSL_130 1\n", - "6 : #define FXAA_QUALITY__PRESET 39\n", - "7 : #define FXAA_GREEN_AS_LUMA 1\n", - "8 : #define FXAA_GATHER4_ALPHA 0\n", - "9 : \n", - "10 : /*--------------------------------------------------------------------------*/\n", - "11 : #ifndef FXAA_PC_CONSOLE\n", - "12 : //\n", - "13 : // The console algorithm for PC is included\n", - "14 : // for developers targeting really low spec machines.\n", - "15 : // Likely better to just run FXAA_PC, and use a really low preset.\n", - "16 : //\n", - "17 : #define FXAA_PC_CONSOLE 0\n", - "18 : #endif\n", - "19 : /*--------------------------------------------------------------------------*/\n", - "20 : #ifndef FXAA_GLSL_120\n", - "21 : #define FXAA_GLSL_120 0\n", - "22 : #endif\n", - "23 : /*--------------------------------------------------------------------------*/\n", - "24 : #ifndef FXAA_GLSL_130\n", - "25 : #define FXAA_GLSL_130 0\n", - "26 : #endif\n", - "27 : /*--------------------------------------------------------------------------*/\n", - "28 : #ifndef FXAA_HLSL_3\n", - "29 : #define FXAA_HLSL_3 0\n", - "30 : #endif\n", - "31 : /*--------------------------------------------------------------------------*/\n", - "32 : #ifndef FXAA_HLSL_4\n", - "33 : #define FXAA_HLSL_4 0\n", - "34 : #endif\n", - "35 : /*--------------------------------------------------------------------------*/\n", - "36 : #ifndef FXAA_HLSL_5\n", - "37 : #define FXAA_HLSL_5 0\n", - "38 : #endif\n", - "39 : /*==========================================================================*/\n", - "40 : #ifndef FXAA_GREEN_AS_LUMA\n", - "41 : //\n", - "42 : // For those using non-linear color,\n", - "43 : // and either not able to get luma in alpha, or not wanting to,\n", - "44 : // this enables FXAA to run using green as a proxy for luma.\n", - "45 : // So with this enabled, no need to pack luma in alpha.\n", - "46 : //\n", - "47 : // This will turn off AA on anything which lacks some amount of green.\n", - "48 : // Pure red and blue or combination of only R and B, will get no AA.\n", - "49 : //\n", - "50 : // Might want to lower the settings for both,\n", - "51 : // fxaaConsoleEdgeThresholdMin\n", - "52 : // fxaaQualityEdgeThresholdMin\n", - "53 : // In order to insure AA does not get turned off on colors\n", - "54 : // which contain a minor amount of green.\n", - "55 : //\n", - "56 : // 1 = On.\n", - "57 : // 0 = Off.\n", - "58 : //\n", - "59 : #define FXAA_GREEN_AS_LUMA 0\n", - "60 : #endif\n", - "61 : /*--------------------------------------------------------------------------*/\n", - "62 : #ifndef FXAA_EARLY_EXIT\n", - "63 : //\n", - "64 : // Controls algorithm's early exit path.\n", - "65 : // On PS3 turning this ON adds 2 cycles to the shader.\n", - "66 : // On 360 turning this OFF adds 10ths of a millisecond to the shader.\n", - "67 : // Turning this off on console will result in a more blurry image.\n", - "68 : // So this defaults to on.\n", - "69 : //\n", - "70 : // 1 = On.\n", - "71 : // 0 = Off.\n", - "72 : //\n", - "73 : #define FXAA_EARLY_EXIT 1\n", - "74 : #endif\n", - "75 : /*--------------------------------------------------------------------------*/\n", - "76 : #ifndef FXAA_DISCARD\n", - "77 : //\n", - "78 : // Only valid for PC OpenGL currently.\n", - "79 : // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n", - "80 : //\n", - "81 : // 1 = Use discard on pixels which don't need AA.\n", - "82 : // For APIs which enable concurrent TEX+ROP from same surface.\n", - "83 : // 0 = Return unchanged color on pixels which don't need AA.\n", - "84 : //\n", - "85 : #define FXAA_DISCARD 0\n", - "86 : #endif\n", - "87 : /*--------------------------------------------------------------------------*/\n", - "88 : #ifndef FXAA_FAST_PIXEL_OFFSET\n", - "89 : //\n", - "90 : // Used for GLSL 120 only.\n", - "91 : //\n", - "92 : // 1 = GL API supports fast pixel offsets\n", - "93 : // 0 = do not use fast pixel offsets\n", - "94 : //\n", - "95 : #ifdef GL_EXT_gpu_shader4\n", - "96 : #define FXAA_FAST_PIXEL_OFFSET 1\n", - "97 : #endif\n", - "98 : #ifdef GL_NV_gpu_shader5\n", - "99 : #define FXAA_FAST_PIXEL_OFFSET 1\n", - "100 : #endif\n", - "101 : #ifdef GL_ARB_gpu_shader5\n", - "102 : #define FXAA_FAST_PIXEL_OFFSET 1\n", - "103 : #endif\n", - "104 : #ifndef FXAA_FAST_PIXEL_OFFSET\n", - "105 : #define FXAA_FAST_PIXEL_OFFSET 0\n", - "106 : #endif\n", - "107 : #endif\n", - "108 : /*--------------------------------------------------------------------------*/\n", - "109 : #ifndef FXAA_GATHER4_ALPHA\n", - "110 : //\n", - "111 : // 1 = API supports gather4 on alpha channel.\n", - "112 : // 0 = API does not support gather4 on alpha channel.\n", - "113 : //\n", - "114 : #if (FXAA_HLSL_5 == 1)\n", - "115 : #define FXAA_GATHER4_ALPHA 1\n", - "116 : #endif\n", - "117 : #ifdef GL_ARB_gpu_shader5\n", - "118 : #define FXAA_GATHER4_ALPHA 1\n", - "119 : #endif\n", - "120 : #ifdef GL_NV_gpu_shader5\n", - "121 : #define FXAA_GATHER4_ALPHA 1\n", - "122 : #endif\n", - "123 : #ifndef FXAA_GATHER4_ALPHA\n", - "124 : #define FXAA_GATHER4_ALPHA 0\n", - "125 : #endif\n", - "126 : #endif\n", - "127 : \n", - "128 : \n", - "129 : /*============================================================================\n", - "130 : FXAA QUALITY - TUNING KNOBS\n", - "131 : ------------------------------------------------------------------------------\n", - "132 : NOTE the other tuning knobs are now in the shader function inputs!\n", - "133 : ============================================================================*/\n", - "134 : #ifndef FXAA_QUALITY__PRESET\n", - "135 : //\n", - "136 : // Choose the quality preset.\n", - "137 : // This needs to be compiled into the shader as it effects code.\n", - "138 : // Best option to include multiple presets is to\n", - "139 : // in each shader define the preset, then include this file.\n", - "140 : //\n", - "141 : // OPTIONS\n", - "142 : // -----------------------------------------------------------------------\n", - "143 : // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\n", - "144 : // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\n", - "145 : // 39 - no dither, very expensive\n", - "146 : //\n", - "147 : // NOTES\n", - "148 : // -----------------------------------------------------------------------\n", - "149 : // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\n", - "150 : // 13 = about same speed as FXAA 3.9 and better than 12\n", - "151 : // 23 = closest to FXAA 3.9 visually and performance wise\n", - "152 : // _ = the lowest digit is directly related to performance\n", - "153 : // _ = the highest digit is directly related to style\n", - "154 : //\n", - "155 : #define FXAA_QUALITY__PRESET 12\n", - "156 : #endif\n", - "157 : \n", - "158 : \n", - "159 : /*============================================================================\n", - "160 : \n", - "161 : FXAA QUALITY - PRESETS\n", - "162 : \n", - "163 : ============================================================================*/\n", - "164 : \n", - "165 : /*============================================================================\n", - "166 : FXAA QUALITY - MEDIUM DITHER PRESETS\n", - "167 : ============================================================================*/\n", - "168 : #if (FXAA_QUALITY__PRESET == 10)\n", - "169 : #define FXAA_QUALITY__PS 3\n", - "170 : #define FXAA_QUALITY__P0 1.5\n", - "171 : #define FXAA_QUALITY__P1 3.0\n", - "172 : #define FXAA_QUALITY__P2 12.0\n", - "173 : #endif\n", - "174 : /*--------------------------------------------------------------------------*/\n", - "175 : #if (FXAA_QUALITY__PRESET == 11)\n", - "176 : #define FXAA_QUALITY__PS 4\n", - "177 : #define FXAA_QUALITY__P0 1.0\n", - "178 : #define FXAA_QUALITY__P1 1.5\n", - "179 : #define FXAA_QUALITY__P2 3.0\n", - "180 : #define FXAA_QUALITY__P3 12.0\n", - "181 : #endif\n", - "182 : /*--------------------------------------------------------------------------*/\n", - "183 : #if (FXAA_QUALITY__PRESET == 12)\n", - "184 : #define FXAA_QUALITY__PS 5\n", - "185 : #define FXAA_QUALITY__P0 1.0\n", - "186 : #define FXAA_QUALITY__P1 1.5\n", - "187 : #define FXAA_QUALITY__P2 2.0\n", - "188 : #define FXAA_QUALITY__P3 4.0\n", - "189 : #define FXAA_QUALITY__P4 12.0\n", - "190 : #endif\n", - "191 : /*--------------------------------------------------------------------------*/\n", - "192 : #if (FXAA_QUALITY__PRESET == 13)\n", - "193 : #define FXAA_QUALITY__PS 6\n", - "194 : #define FXAA_QUALITY__P0 1.0\n", - "195 : #define FXAA_QUALITY__P1 1.5\n", - "196 : #define FXAA_QUALITY__P2 2.0\n", - "197 : #define FXAA_QUALITY__P3 2.0\n", - "198 : #define FXAA_QUALITY__P4 4.0\n", - "199 : #define FXAA_QUALITY__P5 12.0\n", - "200 : #endif\n", - "201 : /*--------------------------------------------------------------------------*/\n", - "202 : #if (FXAA_QUALITY__PRESET == 14)\n", - "203 : #define FXAA_QUALITY__PS 7\n", - "204 : #define FXAA_QUALITY__P0 1.0\n", - "205 : #define FXAA_QUALITY__P1 1.5\n", - "206 : #define FXAA_QUALITY__P2 2.0\n", - "207 : #define FXAA_QUALITY__P3 2.0\n", - "208 : #define FXAA_QUALITY__P4 2.0\n", - "209 : #define FXAA_QUALITY__P5 4.0\n", - "210 : #define FXAA_QUALITY__P6 12.0\n", - "211 : #endif\n", - "212 : /*--------------------------------------------------------------------------*/\n", - "213 : #if (FXAA_QUALITY__PRESET == 15)\n", - "214 : #define FXAA_QUALITY__PS 8\n", - "215 : #define FXAA_QUALITY__P0 1.0\n", - "216 : #define FXAA_QUALITY__P1 1.5\n", - "217 : #define FXAA_QUALITY__P2 2.0\n", - "218 : #define FXAA_QUALITY__P3 2.0\n", - "219 : #define FXAA_QUALITY__P4 2.0\n", - "220 : #define FXAA_QUALITY__P5 2.0\n", - "221 : #define FXAA_QUALITY__P6 4.0\n", - "222 : #define FXAA_QUALITY__P7 12.0\n", - "223 : #endif\n", - "224 : \n", - "225 : /*============================================================================\n", - "226 : FXAA QUALITY - LOW DITHER PRESETS\n", - "227 : ============================================================================*/\n", - "228 : #if (FXAA_QUALITY__PRESET == 20)\n", - "229 : #define FXAA_QUALITY__PS 3\n", - "230 : #define FXAA_QUALITY__P0 1.5\n", - "231 : #define FXAA_QUALITY__P1 2.0\n", - "232 : #define FXAA_QUALITY__P2 8.0\n", - "233 : #endif\n", - "234 : /*--------------------------------------------------------------------------*/\n", - "235 : #if (FXAA_QUALITY__PRESET == 21)\n", - "236 : #define FXAA_QUALITY__PS 4\n", - "237 : #define FXAA_QUALITY__P0 1.0\n", - "238 : #define FXAA_QUALITY__P1 1.5\n", - "239 : #define FXAA_QUALITY__P2 2.0\n", - "240 : #define FXAA_QUALITY__P3 8.0\n", - "241 : #endif\n", - "242 : /*--------------------------------------------------------------------------*/\n", - "243 : #if (FXAA_QUALITY__PRESET == 22)\n", - "244 : #define FXAA_QUALITY__PS 5\n", - "245 : #define FXAA_QUALITY__P0 1.0\n", - "246 : #define FXAA_QUALITY__P1 1.5\n", - "247 : #define FXAA_QUALITY__P2 2.0\n", - "248 : #define FXAA_QUALITY__P3 2.0\n", - "249 : #define FXAA_QUALITY__P4 8.0\n", - "250 : #endif\n", - "251 : /*--------------------------------------------------------------------------*/\n", - "252 : #if (FXAA_QUALITY__PRESET == 23)\n", - "253 : #define FXAA_QUALITY__PS 6\n", - "254 : #define FXAA_QUALITY__P0 1.0\n", - "255 : #define FXAA_QUALITY__P1 1.5\n", - "256 : #define FXAA_QUALITY__P2 2.0\n", - "257 : #define FXAA_QUALITY__P3 2.0\n", - "258 : #define FXAA_QUALITY__P4 2.0\n", - "259 : #define FXAA_QUALITY__P5 8.0\n", - "260 : #endif\n", - "261 : /*--------------------------------------------------------------------------*/\n", - "262 : #if (FXAA_QUALITY__PRESET == 24)\n", - "263 : #define FXAA_QUALITY__PS 7\n", - "264 : #define FXAA_QUALITY__P0 1.0\n", - "265 : #define FXAA_QUALITY__P1 1.5\n", - "266 : #define FXAA_QUALITY__P2 2.0\n", - "267 : #define FXAA_QUALITY__P3 2.0\n", - "268 : #define FXAA_QUALITY__P4 2.0\n", - "269 : #define FXAA_QUALITY__P5 3.0\n", - "270 : #define FXAA_QUALITY__P6 8.0\n", - "271 : #endif\n", - "272 : /*--------------------------------------------------------------------------*/\n", - "273 : #if (FXAA_QUALITY__PRESET == 25)\n", - "274 : #define FXAA_QUALITY__PS 8\n", - "275 : #define FXAA_QUALITY__P0 1.0\n", - "276 : #define FXAA_QUALITY__P1 1.5\n", - "277 : #define FXAA_QUALITY__P2 2.0\n", - "278 : #define FXAA_QUALITY__P3 2.0\n", - "279 : #define FXAA_QUALITY__P4 2.0\n", - "280 : #define FXAA_QUALITY__P5 2.0\n", - "281 : #define FXAA_QUALITY__P6 4.0\n", - "282 : #define FXAA_QUALITY__P7 8.0\n", - "283 : #endif\n", - "284 : /*--------------------------------------------------------------------------*/\n", - "285 : #if (FXAA_QUALITY__PRESET == 26)\n", - "286 : #define FXAA_QUALITY__PS 9\n", - "287 : #define FXAA_QUALITY__P0 1.0\n", - "288 : #define FXAA_QUALITY__P1 1.5\n", - "289 : #define FXAA_QUALITY__P2 2.0\n", - "290 : #define FXAA_QUALITY__P3 2.0\n", - "291 : #define FXAA_QUALITY__P4 2.0\n", - "292 : #define FXAA_QUALITY__P5 2.0\n", - "293 : #define FXAA_QUALITY__P6 2.0\n", - "294 : #define FXAA_QUALITY__P7 4.0\n", - "295 : #define FXAA_QUALITY__P8 8.0\n", - "296 : #endif\n", - "297 : /*--------------------------------------------------------------------------*/\n", - "298 : #if (FXAA_QUALITY__PRESET == 27)\n", - "299 : #define FXAA_QUALITY__PS 10\n", - "300 : #define FXAA_QUALITY__P0 1.0\n", - "301 : #define FXAA_QUALITY__P1 1.5\n", - "302 : #define FXAA_QUALITY__P2 2.0\n", - "303 : #define FXAA_QUALITY__P3 2.0\n", - "304 : #define FXAA_QUALITY__P4 2.0\n", - "305 : #define FXAA_QUALITY__P5 2.0\n", - "306 : #define FXAA_QUALITY__P6 2.0\n", - "307 : #define FXAA_QUALITY__P7 2.0\n", - "308 : #define FXAA_QUALITY__P8 4.0\n", - "309 : #define FXAA_QUALITY__P9 8.0\n", - "310 : #endif\n", - "311 : /*--------------------------------------------------------------------------*/\n", - "312 : #if (FXAA_QUALITY__PRESET == 28)\n", - "313 : #define FXAA_QUALITY__PS 11\n", - "314 : #define FXAA_QUALITY__P0 1.0\n", - "315 : #define FXAA_QUALITY__P1 1.5\n", - "316 : #define FXAA_QUALITY__P2 2.0\n", - "317 : #define FXAA_QUALITY__P3 2.0\n", - "318 : #define FXAA_QUALITY__P4 2.0\n", - "319 : #define FXAA_QUALITY__P5 2.0\n", - "320 : #define FXAA_QUALITY__P6 2.0\n", - "321 : #define FXAA_QUALITY__P7 2.0\n", - "322 : #define FXAA_QUALITY__P8 2.0\n", - "323 : #define FXAA_QUALITY__P9 4.0\n", - "324 : #define FXAA_QUALITY__P10 8.0\n", - "325 : #endif\n", - "326 : /*--------------------------------------------------------------------------*/\n", - "327 : #if (FXAA_QUALITY__PRESET == 29)\n", - "328 : #define FXAA_QUALITY__PS 12\n", - "329 : #define FXAA_QUALITY__P0 1.0\n", - "330 : #define FXAA_QUALITY__P1 1.5\n", - "331 : #define FXAA_QUALITY__P2 2.0\n", - "332 : #define FXAA_QUALITY__P3 2.0\n", - "333 : #define FXAA_QUALITY__P4 2.0\n", - "334 : #define FXAA_QUALITY__P5 2.0\n", - "335 : #define FXAA_QUALITY__P6 2.0\n", - "336 : #define FXAA_QUALITY__P7 2.0\n", - "337 : #define FXAA_QUALITY__P8 2.0\n", - "338 : #define FXAA_QUALITY__P9 2.0\n", - "339 : #define FXAA_QUALITY__P10 4.0\n", - "340 : #define FXAA_QUALITY__P11 8.0\n", - "341 : #endif\n", - "342 : \n", - "343 : /*============================================================================\n", - "344 : FXAA QUALITY - EXTREME QUALITY\n", - "345 : ============================================================================*/\n", - "346 : #if (FXAA_QUALITY__PRESET == 39)\n", - "347 : #define FXAA_QUALITY__PS 12\n", - "348 : #define FXAA_QUALITY__P0 1.0\n", - "349 : #define FXAA_QUALITY__P1 1.0\n", - "350 : #define FXAA_QUALITY__P2 1.0\n", - "351 : #define FXAA_QUALITY__P3 1.0\n", - "352 : #define FXAA_QUALITY__P4 1.0\n", - "353 : #define FXAA_QUALITY__P5 1.5\n", - "354 : #define FXAA_QUALITY__P6 2.0\n", - "355 : #define FXAA_QUALITY__P7 2.0\n", - "356 : #define FXAA_QUALITY__P8 2.0\n", - "357 : #define FXAA_QUALITY__P9 2.0\n", - "358 : #define FXAA_QUALITY__P10 4.0\n", - "359 : #define FXAA_QUALITY__P11 8.0\n", - "360 : #endif\n", - "361 : \n", - "362 : \n", - "363 : \n", - "364 : /*============================================================================\n", - "365 : \n", - "366 : API PORTING\n", - "367 : \n", - "368 : ============================================================================*/\n", - "369 : #if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\n", - "370 : #define FxaaBool bool\n", - "371 : #define FxaaDiscard discard\n", - "372 : #define FxaaFloat float\n", - "373 : #define FxaaFloat2 vec2\n", - "374 : #define FxaaFloat3 vec3\n", - "375 : #define FxaaFloat4 vec4\n", - "376 : #define FxaaHalf float\n", - "377 : #define FxaaHalf2 vec2\n", - "378 : #define FxaaHalf3 vec3\n", - "379 : #define FxaaHalf4 vec4\n", - "380 : #define FxaaInt2 ivec2\n", - "381 : #define FxaaSat(x) clamp(x, 0.0, 1.0)\n", - "382 : #define FxaaTex sampler2D\n", - "383 : #else\n", - "384 : #define FxaaBool bool\n", - "385 : #define FxaaDiscard clip(-1)\n", - "386 : #define FxaaFloat float\n", - "387 : #define FxaaFloat2 float2\n", - "388 : #define FxaaFloat3 float3\n", - "389 : #define FxaaFloat4 float4\n", - "390 : #define FxaaHalf half\n", - "391 : #define FxaaHalf2 half2\n", - "392 : #define FxaaHalf3 half3\n", - "393 : #define FxaaHalf4 half4\n", - "394 : #define FxaaSat(x) saturate(x)\n", - "395 : #endif\n", - "396 : /*--------------------------------------------------------------------------*/\n", - "397 : #if (FXAA_GLSL_120 == 1)\n", - "398 : // Requires,\n", - "399 : // #version 120\n", - "400 : // And at least,\n", - "401 : // #extension GL_EXT_gpu_shader4 : enable\n", - "402 : // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\n", - "403 : #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\n", - "404 : #if (FXAA_FAST_PIXEL_OFFSET == 1)\n", - "405 : #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\n", - "406 : #else\n", - "407 : #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\n", - "408 : #endif\n", - "409 : #if (FXAA_GATHER4_ALPHA == 1)\n", - "410 : // use #extension GL_ARB_gpu_shader5 : enable\n", - "411 : #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n", - "412 : #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n", - "413 : #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n", - "414 : #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n", - "415 : #endif\n", - "416 : #endif\n", - "417 : /*--------------------------------------------------------------------------*/\n", - "418 : #if (FXAA_GLSL_130 == 1)\n", - "419 : // Requires \"#version 130\" or better\n", - "420 : #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\n", - "421 : #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\n", - "422 : #if (FXAA_GATHER4_ALPHA == 1)\n", - "423 : // use #extension GL_ARB_gpu_shader5 : enable\n", - "424 : #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n", - "425 : #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n", - "426 : #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n", - "427 : #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n", - "428 : #endif\n", - "429 : #endif\n", - "430 : /*--------------------------------------------------------------------------*/\n", - "431 : #if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1)\n", - "432 : #define FxaaInt2 float2\n", - "433 : #define FxaaTex sampler2D\n", - "434 : #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\n", - "435 : #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\n", - "436 : #endif\n", - "437 : /*--------------------------------------------------------------------------*/\n", - "438 : #if (FXAA_HLSL_4 == 1)\n", - "439 : #define FxaaInt2 int2\n", - "440 : struct FxaaTex { SamplerState smpl; Texture2D tex; };\n", - "441 : #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n", - "442 : #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n", - "443 : #endif\n", - "444 : /*--------------------------------------------------------------------------*/\n", - "445 : #if (FXAA_HLSL_5 == 1)\n", - "446 : #define FxaaInt2 int2\n", - "447 : struct FxaaTex { SamplerState smpl; Texture2D tex; };\n", - "448 : #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n", - "449 : #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n", - "450 : #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\n", - "451 : #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\n", - "452 : #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\n", - "453 : #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\n", - "454 : #endif\n", - "455 : \n", - "456 : \n", - "457 : /*============================================================================\n", - "458 : GREEN AS LUMA OPTION SUPPORT FUNCTION\n", - "459 : ============================================================================*/\n", - "460 : #if (FXAA_GREEN_AS_LUMA == 0)\n", - "461 : FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\n", - "462 : #else\n", - "463 : FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\n", - "464 : #endif\n", - "465 : \n", - "466 : \n", - "467 : \n", - "468 : \n", - "469 : /*============================================================================\n", - "470 : \n", - "471 : FXAA3 QUALITY - PC\n", - "472 : \n", - "473 : ============================================================================*/\n", - "474 : #if (FXAA_PC == 1)\n", - "475 : /*--------------------------------------------------------------------------*/\n", - "476 : FxaaFloat4 FxaaPixelShader(\n", - "477 : //\n", - "478 : // Use noperspective interpolation here (turn off perspective interpolation).\n", - "479 : // {xy} = center of pixel\n", - "480 : FxaaFloat2 pos,\n", - "481 : //\n", - "482 : // Used only for FXAA Console, and not used on the 360 version.\n", - "483 : // Use noperspective interpolation here (turn off perspective interpolation).\n", - "484 : // {xy__} = upper left of pixel\n", - "485 : // {__zw} = lower right of pixel\n", - "486 : FxaaFloat4 fxaaConsolePosPos,\n", - "487 : //\n", - "488 : // Input color texture.\n", - "489 : // {rgb_} = color in linear or perceptual color space\n", - "490 : // if (FXAA_GREEN_AS_LUMA == 0)\n", - "491 : // {___a} = luma in perceptual color space (not linear)\n", - "492 : FxaaTex tex,\n", - "493 : //\n", - "494 : // Only used on the optimized 360 version of FXAA Console.\n", - "495 : // For everything but 360, just use the same input here as for \"tex\".\n", - "496 : // For 360, same texture, just alias with a 2nd sampler.\n", - "497 : // This sampler needs to have an exponent bias of -1.\n", - "498 : FxaaTex fxaaConsole360TexExpBiasNegOne,\n", - "499 : //\n", - "500 : // Only used on the optimized 360 version of FXAA Console.\n", - "501 : // For everything but 360, just use the same input here as for \"tex\".\n", - "502 : // For 360, same texture, just alias with a 3nd sampler.\n", - "503 : // This sampler needs to have an exponent bias of -2.\n", - "504 : FxaaTex fxaaConsole360TexExpBiasNegTwo,\n", - "505 : //\n", - "506 : // Only used on FXAA Quality.\n", - "507 : // This must be from a constant/uniform.\n", - "508 : // {x_} = 1.0/screenWidthInPixels\n", - "509 : // {_y} = 1.0/screenHeightInPixels\n", - "510 : FxaaFloat2 fxaaQualityRcpFrame,\n", - "511 : //\n", - "512 : // Only used on FXAA Console.\n", - "513 : // This must be from a constant/uniform.\n", - "514 : // This effects sub-pixel AA quality and inversely sharpness.\n", - "515 : // Where N ranges between,\n", - "516 : // N = 0.50 (default)\n", - "517 : // N = 0.33 (sharper)\n", - "518 : // {x___} = -N/screenWidthInPixels\n", - "519 : // {_y__} = -N/screenHeightInPixels\n", - "520 : // {__z_} = N/screenWidthInPixels\n", - "521 : // {___w} = N/screenHeightInPixels\n", - "522 : FxaaFloat4 fxaaConsoleRcpFrameOpt,\n", - "523 : //\n", - "524 : // Only used on FXAA Console.\n", - "525 : // Not used on 360, but used on PS3 and PC.\n", - "526 : // This must be from a constant/uniform.\n", - "527 : // {x___} = -2.0/screenWidthInPixels\n", - "528 : // {_y__} = -2.0/screenHeightInPixels\n", - "529 : // {__z_} = 2.0/screenWidthInPixels\n", - "530 : // {___w} = 2.0/screenHeightInPixels\n", - "531 : FxaaFloat4 fxaaConsoleRcpFrameOpt2,\n", - "532 : //\n", - "533 : // Only used on FXAA Console.\n", - "534 : // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\n", - "535 : // This must be from a constant/uniform.\n", - "536 : // {x___} = 8.0/screenWidthInPixels\n", - "537 : // {_y__} = 8.0/screenHeightInPixels\n", - "538 : // {__z_} = -4.0/screenWidthInPixels\n", - "539 : // {___w} = -4.0/screenHeightInPixels\n", - "540 : FxaaFloat4 fxaaConsole360RcpFrameOpt2,\n", - "541 : //\n", - "542 : // Only used on FXAA Quality.\n", - "543 : // This used to be the FXAA_QUALITY__SUBPIX define.\n", - "544 : // It is here now to allow easier tuning.\n", - "545 : // Choose the amount of sub-pixel aliasing removal.\n", - "546 : // This can effect sharpness.\n", - "547 : // 1.00 - upper limit (softer)\n", - "548 : // 0.75 - default amount of filtering\n", - "549 : // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\n", - "550 : // 0.25 - almost off\n", - "551 : // 0.00 - completely off\n", - "552 : FxaaFloat fxaaQualitySubpix,\n", - "553 : //\n", - "554 : // Only used on FXAA Quality.\n", - "555 : // This used to be the FXAA_QUALITY__EDGE_THRESHOLD define.\n", - "556 : // It is here now to allow easier tuning.\n", - "557 : // The minimum amount of local contrast required to apply algorithm.\n", - "558 : // 0.333 - too little (faster)\n", - "559 : // 0.250 - low quality\n", - "560 : // 0.166 - default\n", - "561 : // 0.125 - high quality\n", - "562 : // 0.063 - overkill (slower)\n", - "563 : FxaaFloat fxaaQualityEdgeThreshold,\n", - "564 : //\n", - "565 : // Only used on FXAA Quality.\n", - "566 : // This used to be the FXAA_QUALITY__EDGE_THRESHOLD_MIN define.\n", - "567 : // It is here now to allow easier tuning.\n", - "568 : // Trims the algorithm from processing darks.\n", - "569 : // 0.0833 - upper limit (default, the start of visible unfiltered edges)\n", - "570 : // 0.0625 - high quality (faster)\n", - "571 : // 0.0312 - visible limit (slower)\n", - "572 : // Special notes when using FXAA_GREEN_AS_LUMA,\n", - "573 : // Likely want to set this to zero.\n", - "574 : // As colors that are mostly not-green\n", - "575 : // will appear very dark in the green channel!\n", - "576 : // Tune by looking at mostly non-green content,\n", - "577 : // then start at zero and increase until aliasing is a problem.\n", - "578 : FxaaFloat fxaaQualityEdgeThresholdMin,\n", - "579 : //\n", - "580 : // Only used on FXAA Console.\n", - "581 : // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define.\n", - "582 : // It is here now to allow easier tuning.\n", - "583 : // This does not effect PS3, as this needs to be compiled in.\n", - "584 : // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3.\n", - "585 : // Due to the PS3 being ALU bound,\n", - "586 : // there are only three safe values here: 2 and 4 and 8.\n", - "587 : // These options use the shaders ability to a free *|/ by 2|4|8.\n", - "588 : // For all other platforms can be a non-power of two.\n", - "589 : // 8.0 is sharper (default!!!)\n", - "590 : // 4.0 is softer\n", - "591 : // 2.0 is really soft (good only for vector graphics inputs)\n", - "592 : FxaaFloat fxaaConsoleEdgeSharpness,\n", - "593 : //\n", - "594 : // Only used on FXAA Console.\n", - "595 : // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define.\n", - "596 : // It is here now to allow easier tuning.\n", - "597 : // This does not effect PS3, as this needs to be compiled in.\n", - "598 : // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3.\n", - "599 : // Due to the PS3 being ALU bound,\n", - "600 : // there are only two safe values here: 1/4 and 1/8.\n", - "601 : // These options use the shaders ability to a free *|/ by 2|4|8.\n", - "602 : // The console setting has a different mapping than the quality setting.\n", - "603 : // Other platforms can use other values.\n", - "604 : // 0.125 leaves less aliasing, but is softer (default!!!)\n", - "605 : // 0.25 leaves more aliasing, and is sharper\n", - "606 : FxaaFloat fxaaConsoleEdgeThreshold,\n", - "607 : //\n", - "608 : // Only used on FXAA Console.\n", - "609 : // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define.\n", - "610 : // It is here now to allow easier tuning.\n", - "611 : // Trims the algorithm from processing darks.\n", - "612 : // The console setting has a different mapping than the quality setting.\n", - "613 : // This only applies when FXAA_EARLY_EXIT is 1.\n", - "614 : // This does not apply to PS3,\n", - "615 : // PS3 was simplified to avoid more shader instructions.\n", - "616 : // 0.06 - faster but more aliasing in darks\n", - "617 : // 0.05 - default\n", - "618 : // 0.04 - slower and less aliasing in darks\n", - "619 : // Special notes when using FXAA_GREEN_AS_LUMA,\n", - "620 : // Likely want to set this to zero.\n", - "621 : // As colors that are mostly not-green\n", - "622 : // will appear very dark in the green channel!\n", - "623 : // Tune by looking at mostly non-green content,\n", - "624 : // then start at zero and increase until aliasing is a problem.\n", - "625 : FxaaFloat fxaaConsoleEdgeThresholdMin,\n", - "626 : //\n", - "627 : // Extra constants for 360 FXAA Console only.\n", - "628 : // Use zeros or anything else for other platforms.\n", - "629 : // These must be in physical constant registers and NOT immedates.\n", - "630 : // Immedates will result in compiler un-optimizing.\n", - "631 : // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\n", - "632 : FxaaFloat4 fxaaConsole360ConstDir\n", - "633 : ) {\n", - "634 : /*--------------------------------------------------------------------------*/\n", - "635 : FxaaFloat2 posM;\n", - "636 : posM.x = pos.x;\n", - "637 : posM.y = pos.y;\n", - "638 : #if (FXAA_GATHER4_ALPHA == 1)\n", - "639 : #if (FXAA_DISCARD == 0)\n", - "640 : FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n", - "641 : #if (FXAA_GREEN_AS_LUMA == 0)\n", - "642 : #define lumaM rgbyM.w\n", - "643 : #else\n", - "644 : #define lumaM rgbyM.y\n", - "645 : #endif\n", - "646 : #endif\n", - "647 : #if (FXAA_GREEN_AS_LUMA == 0)\n", - "648 : FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\n", - "649 : FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\n", - "650 : #else\n", - "651 : FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\n", - "652 : FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\n", - "653 : #endif\n", - "654 : #if (FXAA_DISCARD == 1)\n", - "655 : #define lumaM luma4A.w\n", - "656 : #endif\n", - "657 : #define lumaE luma4A.z\n", - "658 : #define lumaS luma4A.x\n", - "659 : #define lumaSE luma4A.y\n", - "660 : #define lumaNW luma4B.w\n", - "661 : #define lumaN luma4B.z\n", - "662 : #define lumaW luma4B.x\n", - "663 : #else\n", - "664 : FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n", - "665 : #if (FXAA_GREEN_AS_LUMA == 0)\n", - "666 : #define lumaM rgbyM.w\n", - "667 : #else\n", - "668 : #define lumaM rgbyM.y\n", - "669 : #endif\n", - "670 : FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\n", - "671 : FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\n", - "672 : FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\n", - "673 : FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\n", - "674 : #endif\n", - "675 : /*--------------------------------------------------------------------------*/\n", - "676 : FxaaFloat maxSM = max(lumaS, lumaM);\n", - "677 : FxaaFloat minSM = min(lumaS, lumaM);\n", - "678 : FxaaFloat maxESM = max(lumaE, maxSM);\n", - "679 : FxaaFloat minESM = min(lumaE, minSM);\n", - "680 : FxaaFloat maxWN = max(lumaN, lumaW);\n", - "681 : FxaaFloat minWN = min(lumaN, lumaW);\n", - "682 : FxaaFloat rangeMax = max(maxWN, maxESM);\n", - "683 : FxaaFloat rangeMin = min(minWN, minESM);\n", - "684 : FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n", - "685 : FxaaFloat range = rangeMax - rangeMin;\n", - "686 : FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n", - "687 : FxaaBool earlyExit = range < rangeMaxClamped;\n", - "688 : /*--------------------------------------------------------------------------*/\n", - "689 : if(earlyExit)\n", - "690 : #if (FXAA_DISCARD == 1)\n", - "691 : FxaaDiscard;\n", - "692 : #else\n", - "693 : return rgbyM;\n", - "694 : #endif\n", - "695 : /*--------------------------------------------------------------------------*/\n", - "696 : #if (FXAA_GATHER4_ALPHA == 0)\n", - "697 : FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\n", - "698 : FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\n", - "699 : FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\n", - "700 : FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n", - "701 : #else\n", - "702 : FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\n", - "703 : FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n", - "704 : #endif\n", - "705 : /*--------------------------------------------------------------------------*/\n", - "706 : FxaaFloat lumaNS = lumaN + lumaS;\n", - "707 : FxaaFloat lumaWE = lumaW + lumaE;\n", - "708 : FxaaFloat subpixRcpRange = 1.0/range;\n", - "709 : FxaaFloat subpixNSWE = lumaNS + lumaWE;\n", - "710 : FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\n", - "711 : FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\n", - "712 : /*--------------------------------------------------------------------------*/\n", - "713 : FxaaFloat lumaNESE = lumaNE + lumaSE;\n", - "714 : FxaaFloat lumaNWNE = lumaNW + lumaNE;\n", - "715 : FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n", - "716 : FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n", - "717 : /*--------------------------------------------------------------------------*/\n", - "718 : FxaaFloat lumaNWSW = lumaNW + lumaSW;\n", - "719 : FxaaFloat lumaSWSE = lumaSW + lumaSE;\n", - "720 : FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n", - "721 : FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n", - "722 : FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n", - "723 : FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n", - "724 : FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\n", - "725 : FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\n", - "726 : /*--------------------------------------------------------------------------*/\n", - "727 : FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\n", - "728 : FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\n", - "729 : FxaaBool horzSpan = edgeHorz >= edgeVert;\n", - "730 : FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n", - "731 : /*--------------------------------------------------------------------------*/\n", - "732 : if(!horzSpan) lumaN = lumaW;\n", - "733 : if(!horzSpan) lumaS = lumaE;\n", - "734 : if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n", - "735 : FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\n", - "736 : /*--------------------------------------------------------------------------*/\n", - "737 : FxaaFloat gradientN = lumaN - lumaM;\n", - "738 : FxaaFloat gradientS = lumaS - lumaM;\n", - "739 : FxaaFloat lumaNN = lumaN + lumaM;\n", - "740 : FxaaFloat lumaSS = lumaS + lumaM;\n", - "741 : FxaaBool pairN = abs(gradientN) >= abs(gradientS);\n", - "742 : FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\n", - "743 : if(pairN) lengthSign = -lengthSign;\n", - "744 : FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\n", - "745 : /*--------------------------------------------------------------------------*/\n", - "746 : FxaaFloat2 posB;\n", - "747 : posB.x = posM.x;\n", - "748 : posB.y = posM.y;\n", - "749 : FxaaFloat2 offNP;\n", - "750 : offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n", - "751 : offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n", - "752 : if(!horzSpan) posB.x += lengthSign * 0.5;\n", - "753 : if( horzSpan) posB.y += lengthSign * 0.5;\n", - "754 : /*--------------------------------------------------------------------------*/\n", - "755 : FxaaFloat2 posN;\n", - "756 : posN.x = posB.x - offNP.x * FXAA_QUALITY__P0;\n", - "757 : posN.y = posB.y - offNP.y * FXAA_QUALITY__P0;\n", - "758 : FxaaFloat2 posP;\n", - "759 : posP.x = posB.x + offNP.x * FXAA_QUALITY__P0;\n", - "760 : posP.y = posB.y + offNP.y * FXAA_QUALITY__P0;\n", - "761 : FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\n", - "762 : FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\n", - "763 : FxaaFloat subpixE = subpixC * subpixC;\n", - "764 : FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\n", - "765 : /*--------------------------------------------------------------------------*/\n", - "766 : if(!pairN) lumaNN = lumaSS;\n", - "767 : FxaaFloat gradientScaled = gradient * 1.0/4.0;\n", - "768 : FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\n", - "769 : FxaaFloat subpixF = subpixD * subpixE;\n", - "770 : FxaaBool lumaMLTZero = lumaMM < 0.0;\n", - "771 : /*--------------------------------------------------------------------------*/\n", - "772 : lumaEndN -= lumaNN * 0.5;\n", - "773 : lumaEndP -= lumaNN * 0.5;\n", - "774 : FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\n", - "775 : FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\n", - "776 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1;\n", - "777 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1;\n", - "778 : FxaaBool doneNP = (!doneN) || (!doneP);\n", - "779 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P1;\n", - "780 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P1;\n", - "781 : /*--------------------------------------------------------------------------*/\n", - "782 : if(doneNP) {\n", - "783 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "784 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "785 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "786 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "787 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "788 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "789 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2;\n", - "790 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2;\n", - "791 : doneNP = (!doneN) || (!doneP);\n", - "792 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P2;\n", - "793 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P2;\n", - "794 : /*--------------------------------------------------------------------------*/\n", - "795 : #if (FXAA_QUALITY__PS > 3)\n", - "796 : if(doneNP) {\n", - "797 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "798 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "799 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "800 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "801 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "802 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "803 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3;\n", - "804 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3;\n", - "805 : doneNP = (!doneN) || (!doneP);\n", - "806 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P3;\n", - "807 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P3;\n", - "808 : /*--------------------------------------------------------------------------*/\n", - "809 : #if (FXAA_QUALITY__PS > 4)\n", - "810 : if(doneNP) {\n", - "811 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "812 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "813 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "814 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "815 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "816 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "817 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4;\n", - "818 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4;\n", - "819 : doneNP = (!doneN) || (!doneP);\n", - "820 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P4;\n", - "821 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P4;\n", - "822 : /*--------------------------------------------------------------------------*/\n", - "823 : #if (FXAA_QUALITY__PS > 5)\n", - "824 : if(doneNP) {\n", - "825 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "826 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "827 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "828 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "829 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "830 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "831 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5;\n", - "832 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5;\n", - "833 : doneNP = (!doneN) || (!doneP);\n", - "834 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P5;\n", - "835 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P5;\n", - "836 : /*--------------------------------------------------------------------------*/\n", - "837 : #if (FXAA_QUALITY__PS > 6)\n", - "838 : if(doneNP) {\n", - "839 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "840 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "841 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "842 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "843 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "844 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "845 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6;\n", - "846 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6;\n", - "847 : doneNP = (!doneN) || (!doneP);\n", - "848 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P6;\n", - "849 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P6;\n", - "850 : /*--------------------------------------------------------------------------*/\n", - "851 : #if (FXAA_QUALITY__PS > 7)\n", - "852 : if(doneNP) {\n", - "853 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "854 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "855 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "856 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "857 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "858 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "859 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7;\n", - "860 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7;\n", - "861 : doneNP = (!doneN) || (!doneP);\n", - "862 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P7;\n", - "863 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P7;\n", - "864 : /*--------------------------------------------------------------------------*/\n", - "865 : #if (FXAA_QUALITY__PS > 8)\n", - "866 : if(doneNP) {\n", - "867 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "868 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "869 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "870 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "871 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "872 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "873 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8;\n", - "874 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8;\n", - "875 : doneNP = (!doneN) || (!doneP);\n", - "876 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P8;\n", - "877 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P8;\n", - "878 : /*--------------------------------------------------------------------------*/\n", - "879 : #if (FXAA_QUALITY__PS > 9)\n", - "880 : if(doneNP) {\n", - "881 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "882 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "883 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "884 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "885 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "886 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "887 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9;\n", - "888 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9;\n", - "889 : doneNP = (!doneN) || (!doneP);\n", - "890 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P9;\n", - "891 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P9;\n", - "892 : /*--------------------------------------------------------------------------*/\n", - "893 : #if (FXAA_QUALITY__PS > 10)\n", - "894 : if(doneNP) {\n", - "895 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "896 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "897 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "898 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "899 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "900 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "901 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10;\n", - "902 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10;\n", - "903 : doneNP = (!doneN) || (!doneP);\n", - "904 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P10;\n", - "905 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P10;\n", - "906 : /*--------------------------------------------------------------------------*/\n", - "907 : #if (FXAA_QUALITY__PS > 11)\n", - "908 : if(doneNP) {\n", - "909 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "910 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "911 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "912 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "913 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "914 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "915 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11;\n", - "916 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11;\n", - "917 : doneNP = (!doneN) || (!doneP);\n", - "918 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P11;\n", - "919 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P11;\n", - "920 : /*--------------------------------------------------------------------------*/\n", - "921 : #if (FXAA_QUALITY__PS > 12)\n", - "922 : if(doneNP) {\n", - "923 : if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n", - "924 : if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n", - "925 : if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n", - "926 : if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n", - "927 : doneN = abs(lumaEndN) >= gradientScaled;\n", - "928 : doneP = abs(lumaEndP) >= gradientScaled;\n", - "929 : if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12;\n", - "930 : if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12;\n", - "931 : doneNP = (!doneN) || (!doneP);\n", - "932 : if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P12;\n", - "933 : if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P12;\n", - "934 : /*--------------------------------------------------------------------------*/\n", - "935 : }\n", - "936 : #endif\n", - "937 : /*--------------------------------------------------------------------------*/\n", - "938 : }\n", - "939 : #endif\n", - "940 : /*--------------------------------------------------------------------------*/\n", - "941 : }\n", - "942 : #endif\n", - "943 : /*--------------------------------------------------------------------------*/\n", - "944 : }\n", - "945 : #endif\n", - "946 : /*--------------------------------------------------------------------------*/\n", - "947 : }\n", - "948 : #endif\n", - "949 : /*--------------------------------------------------------------------------*/\n", - "950 : }\n", - "951 : #endif\n", - "952 : /*--------------------------------------------------------------------------*/\n", - "953 : }\n", - "954 : #endif\n", - "955 : /*--------------------------------------------------------------------------*/\n", - "956 : }\n", - "957 : #endif\n", - "958 : /*--------------------------------------------------------------------------*/\n", - "959 : }\n", - "960 : #endif\n", - "961 : /*--------------------------------------------------------------------------*/\n", - "962 : }\n", - "963 : #endif\n", - "964 : /*--------------------------------------------------------------------------*/\n", - "965 : }\n", - "966 : /*--------------------------------------------------------------------------*/\n", - "967 : FxaaFloat dstN = posM.x - posN.x;\n", - "968 : FxaaFloat dstP = posP.x - posM.x;\n", - "969 : if(!horzSpan) dstN = posM.y - posN.y;\n", - "970 : if(!horzSpan) dstP = posP.y - posM.y;\n", - "971 : /*--------------------------------------------------------------------------*/\n", - "972 : FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n", - "973 : FxaaFloat spanLength = (dstP + dstN);\n", - "974 : FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n", - "975 : FxaaFloat spanLengthRcp = 1.0/spanLength;\n", - "976 : /*--------------------------------------------------------------------------*/\n", - "977 : FxaaBool directionN = dstN < dstP;\n", - "978 : FxaaFloat dst = min(dstN, dstP);\n", - "979 : FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\n", - "980 : FxaaFloat subpixG = subpixF * subpixF;\n", - "981 : FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n", - "982 : FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\n", - "983 : /*--------------------------------------------------------------------------*/\n", - "984 : FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n", - "985 : FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n", - "986 : if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n", - "987 : if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n", - "988 : #if (FXAA_DISCARD == 1)\n", - "989 : return FxaaTexTop(tex, posM);\n", - "990 : #else\n", - "991 : return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\n", - "992 : #endif\n", - "993 : }\n", - "994 : /*==========================================================================*/\n", - "995 : #endif\n", - "996 : \n", - "997 : \n", - "998 : \n", - "999 : \n", - "1000: //----------------------------------------------------------------------------------\n", - "1001: // File: es3-kepler/FXAA/assets/shaders/FXAA_Extreme_Quality.frag\n", - "1002: // SDK Version: v2.11\n", - "1003: // Email: gameworks@nvidia.com\n", - "1004: // Site: http://developer.nvidia.com/\n", - "1005: //\n", - "1006: // Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n", - "1007: //\n", - "1008: // Redistribution and use in source and binary forms, with or without\n", - "1009: // modification, are permitted provided that the following conditions\n", - "1010: // are met:\n", - "1011: // * Redistributions of source code must retain the above copyright\n", - "1012: // notice, this list of conditions and the following disclaimer.\n", - "1013: // * Redistributions in binary form must reproduce the above copyright\n", - "1014: // notice, this list of conditions and the following disclaimer in the\n", - "1015: // documentation and/or other materials provided with the distribution.\n", - "1016: // * Neither the name of NVIDIA CORPORATION nor the names of its\n", - "1017: // contributors may be used to endorse or promote products derived\n", - "1018: // from this software without specific prior written permission.\n", - "1019: //\n", - "1020: // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n", - "1021: // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", - "1022: // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n", - "1023: // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n", - "1024: // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n", - "1025: // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n", - "1026: // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n", - "1027: // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n", - "1028: // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n", - "1029: // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n", - "1030: // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "1031: //\n", - "1032: //----------------------------------------------------------------------------------\n", - "1033: \n", - "1034: precision highp float;\n", - "1035: \n", - "1036: uniform sampler2D color_texture;\n", - "1037: uniform vec2 RCPFrame;\n", - "1038: in vec2 frag_uv;\n", - "1039: \n", - "1040: out vec4 fragment_color;\n", - "1041: \n", - "1042: void main(void)\n", - "1043: {\n", - "1044: fragment_color = FxaaPixelShader(frag_uv,\n", - "1045: FxaaFloat4(0.0f, 0.0f, 0.0f, 0.0f), // FxaaFloat4 fxaaConsolePosPos,\n", - "1046: color_texture, // FxaaTex tex,\n", - "1047: color_texture, // FxaaTex fxaaConsole360TexExpBiasNegOne,\n", - "1048: color_texture, // FxaaTex fxaaConsole360TexExpBiasNegTwo,\n", - "1049: RCPFrame, // FxaaFloat2 fxaaQualityRcpFrame,\n", - "1050: FxaaFloat4(0.0f, 0.0f, 0.0f, 0.0f), // FxaaFloat4 fxaaConsoleRcpFrameOpt,\n", - "1051: FxaaFloat4(0.0f, 0.0f, 0.0f, 0.0f), // FxaaFloat4 fxaaConsoleRcpFrameOpt2,\n", - "1052: FxaaFloat4(0.0f, 0.0f, 0.0f, 0.0f), // FxaaFloat4 fxaaConsole360RcpFrameOpt2,\n", - "1053: 0.75f, // FxaaFloat fxaaQualitySubpix,\n", - "1054: 0.166f, // FxaaFloat fxaaQualityEdgeThreshold,\n", - "1055: 0.0833f, // FxaaFloat fxaaQualityEdgeThresholdMin,\n", - "1056: 0.0f, // FxaaFloat fxaaConsoleEdgeSharpness,\n", - "1057: 0.0f, // FxaaFloat fxaaConsoleEdgeThreshold,\n", - "1058: 0.0f, // FxaaFloat fxaaConsoleEdgeThresholdMin,\n", - "1059: FxaaFloat4(0.0f, 0.0f, 0.0f, 0.0f) // FxaaFloat fxaaConsole360ConstDir,\n", - "1060: );\n", - "1061: //fragment_color = texture(color_texture, frag_uv);\n", - "1062: }\n", - "1063: \n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: shader /Users/dpsanders/.julia/v0.4/GLWindow/src/fxaa.frag didn't compile. \n", - "ERROR: 0:431: '' : syntax error: incorrect preprocessor directive\n", - "ERROR: 0:431: '' : syntax error: unexpected tokens following #if preprocessor directive - expected a newline\n", - "ERROR: 0:432: '' : Macro Redefined FxaaInt2\n", - "ERROR: 0:434: '' : Macro Redefined FxaaTexTop\n", - "ERROR: 0:435: '' : Macro Redefined FxaaTexOff\n", - "WARNING: program 4 not linked. Error in: \n", - "/Users/dpsanders/.julia/v0.4/GLWindow/src/fullscreen.vert or\n", - "/Users/dpsanders/.julia/v0.4/GLWindow/src/fxaa.frag\n", - "ERROR: One or more attached shaders not successfully compiled\n" - ] - }, - { - "data": { - "text/plain": [ - "Ptr{Void} @0x0000000000000000" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors\n", - "println(\"Visualization packages loaded.\")\n", - "\n", - "cube_particle = HyperRectangle{3, Float32}(Vec3f0(-0.5, -0.5, -0.5), Vec3f0(1, 1, 1))\n", - "\n", - "window = glscreen()\n", - "\n", - "vis = visualize( (cube_particle, positions), scale=scales, color=colors)\n", - "\n", - "view(vis)\n", - "\n", - "\n", - "renderloop(window)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Solid torus.ipynb b/examples/Solid torus.ipynb deleted file mode 100644 index 8bb593d..0000000 --- a/examples/Solid torus.ipynb +++ /dev/null @@ -1,209 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x, y, z" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solid_torus = @constraint (3 - sqrt(x^2 + y^2))^2 + z^2 <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0.987539 seconds (7.34 M allocations: 235.045 MB, 11.95% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-5..5, -5..5, -5..5)\n", - "@time paving = pave(solid_torus, Y, 0.3);\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "28176" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(paving.inner)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3D vis " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/GLVisualize.ji for module GLVisualize.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/GLFW.ji for module GLFW.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Mustache.ji for module Mustache.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/GLWindow.ji for module GLWindow.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/ModernGL.ji for module ModernGL.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/GLAbstraction.ji for module GLAbstraction.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Quaternions.ji for module Quaternions.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/DualNumbers.ji for module DualNumbers.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/GeometryTypes.ji for module GeometryTypes.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Reactive.ji for module Reactive.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Packing.ji for module Packing.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/FreeType.ji for module FreeType.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Images.ji for module Images.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/ColorVectorSpace.ji for module ColorVectorSpace.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Graphics.ji for module Graphics.\n", - "WARNING: could not import Base.view into GLVisualize\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near /Users/dpsanders/.julia/v0.4/GLVisualize/src/FreeTypeAbstraction.jl:18\n", - "WARNING: Base.String is deprecated, use AbstractString instead.\n", - " likely near /Users/dpsanders/.julia/v0.4/GLVisualize/src/FreeTypeAbstraction.jl:18\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Compose.ji for module Compose.\n", - "INFO: Recompiling stale cache file /Users/dpsanders/.julia/lib/v0.4/Cairo.ji for module Cairo.\n" - ] - } - ], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "inner = paving.inner\n", - "positions = Point3{Float32}[Point3(mid(x)) for x in inner]\n", - "scales = Vec3f0[Vec3f0([diam(x) for x in xx]) for xx in inner]\n", - "colors = [RGBA(1f0, 0f0, 0f0, 0.1f0) for xx in inner];" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Visualization packages loaded.\n" - ] - }, - { - "data": { - "text/plain": [ - "Ptr{Void} @0x0000000000000000" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using GLVisualize, GeometryTypes, GLAbstraction, Colors\n", - "println(\"Visualization packages loaded.\")\n", - "\n", - "cube_particle = HyperRectangle{3, Float32}(Vec3f0(-0.5, -0.5, -0.5), Vec3f0(1, 1, 1))\n", - "\n", - "window = glscreen()\n", - "\n", - "vis = visualize( (cube_particle, positions), scale=scales, color=colors)\n", - "\n", - "view(vis)\n", - "\n", - "\n", - "renderloop(window)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.6", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.6" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Surface.ipynb b/examples/Surface.ipynb deleted file mode 100644 index 82596df..0000000 --- a/examples/Surface.ipynb +++ /dev/null @@ -1,380 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using IntervalConstraintProgramming, ValidatedNumerics" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables x, y" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "disc1 = @constraint x^2 + y^2 <= 0.125\n", - "disc2 = @constraint (x-1)^2 + y^2 <= 0.125\n", - "disc3 = @constraint (x-1)^2 + (y-1)^2 <= 0.125\n", - "disc4 = @constraint x^2 + (y-1)^2 <= 0.125\n", - "\n", - "# x_domain = @constraint 0 <= x <= 1\n", - "# y_domain = @constraint 0 <= y <= 1\n", - "\n", - "# configuration_space = (x_domain ∩ y_domain) ∩ !(disc1 ∪ disc2 ∪ disc3 ∪ disc4)\n", - "configuration_space = !(disc1 ∪ disc2 ∪ disc3 ∪ disc4)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1.506502 seconds (4.55 M allocations: 158.780 MB, 4.58% gc time)\n" - ] - } - ], - "source": [ - "X = IntervalBox(0..1, 0..1)\n", - "@time inner, boundary = pave(configuration_space, X, 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/dpsanders/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n", - " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n" - ] - }, - { - "data": { - "text/plain": [ - "draw (generic function with 5 methods)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "include(\"draw_boxes.jl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "PyPlot.Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(-5.551115123125783e-17,1.0,0.0,1.0)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "draw(inner, \"green\", 0.5, 0); draw(boundary, \"grey\", 0.5)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables sinθ" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "angle_domain = @constraint -1 <= sinθ <= 1" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Separator with variables sinθ, x, y" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "phase_space = configuration_space ∩ angle_domain" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "145.724099 seconds (1.07 G allocations: 32.050 GB, 13.68% gc time)\n" - ] - } - ], - "source": [ - "Y = IntervalBox(-1..1, 0..1, 0..1)\n", - "@time inner2, boundary2 = pave(phase_space, Y, 0.01);" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42644" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(inner2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3D vis " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 16.633983 seconds (35.20 M allocations: 1.012 GB, 4.16% gc time)\n" - ] - } - ], - "source": [ - "S = @constraint x^2 + y^3 - z^2 > 0\n", - "Y = IntervalBox(-2..2, -2..2, -2..2)\n", - "\n", - "@time inner2, boundary2 = pave(S, Y, 0.1);" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "using GLVisualize, GeometryTypes, Colors" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3406" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "length(inner2)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "positions = Point3{Float32}[Point3(mid(x)) for x in inner2]\n", - "scales = Vec3f0[Vec3f0([diam(x) for x in xx]) for xx in inner2]\n", - "colors = [RGBA(1f0, 0f0, 0f0, 0.1f0) for xx in inner2];" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Visualization packages loaded.\n", - "Set inversion finished\n" - ] - } - ], - "source": [ - "\n", - "using GLVisualize, GeometryTypes, GLAbstraction, Colors\n", - "\n", - "println(\"Visualization packages loaded.\")\n", - "\n", - "\n", - "println(\"Set inversion finished\")\n", - "\n", - "cube_particle = HyperRectangle{3, Float32}(Vec3f0(-0.5, -0.5, -0.5), Vec3f0(1, 1, 1))\n", - "\n", - "# function cube(X::IntervalBox, inner=true)\n", - "# lo = [x.lo for x in X] # what's the good way to do this?\n", - "# hi = [x.hi for x in X]\n", - "# #color = Float32((hi[3] + 2.) / 4)\n", - "# #c = Float32(abs(hi[3]) / 2.)\n", - "# #mycolor = RGBA(1f0, c, c/2, 0.2f0)\n", - "# if inner\n", - "# mycolor = RGBA(1f0, 0f0, 0f0, 0.1f0)\n", - "# else\n", - "# mycolor = RGBA(0f0, 1f0, 0f0, 0.1f0)\n", - "# end\n", - "# return (HyperRectangle{3, Float32}(Vec3f0(lo), Vec3f0(hi - lo)), mycolor)\n", - "# end\n", - "\n", - "window = glscreen()\n", - "\n", - "# create an array of differently colored boxes in the direction of the 3 axes\n", - "#cubes = map(cube, inner2)\n", - "#boundarycubes = [cube(x, false) for x in boundary]\n", - "\n", - "# convert to an array of normal meshes\n", - "# note, that the constructor is a bit weird. GLNormalMesh takes a tuple of\n", - "# a geometry and a color. This means, the geometry will be converted to a GLNormalMesh\n", - "# and the color will be added afterwards, so the resulting type is a GLNormalColorMesh\n", - "#meshes = map(GLNormalMesh, cubes)\n", - "# merge them into one big mesh\n", - "# the resulting type is a GLNormalAttributeMesh, since we merged meshes with different\n", - "# attributes (colors). An array of the colors will be created and each vertex in the\n", - "# mesh will be asigned to one of the colors found there.\n", - "#colored_mesh = merge(meshes)\n", - "#view(visualize(colored_mesh), window)\n", - "\n", - "vis = visualize( (cube_particle, positions), scale=scales, color=colors)\n", - "\n", - "view(vis)\n", - "\n", - "\n", - "renderloop(window)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 0.4.5", - "language": "julia", - "name": "julia-0.4" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "0.4.5" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/coloured_solid_torus.png b/examples/coloured_solid_torus.png deleted file mode 100644 index c835d8ed15519b002e1bd56505560f9ef788b2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264667 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

g3t4-`VzF?yF@jB3#uF7WlGKy3y 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
&zhT_H)F@%Yj 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�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

!5QS|-# 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%0A{}KWBC$q>2V=5cD+amZqJK9|gU-e_ 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 diff --git a/examples/draw_boxes.jl b/examples/draw_boxes.jl deleted file mode 100644 index 79226b6..0000000 --- a/examples/draw_boxes.jl +++ /dev/null @@ -1,47 +0,0 @@ - -using PyCall -using PyPlot - -using ValidatedNumerics -using IntervalConstraintProgramming - -@pyimport matplotlib.patches as patches -@pyimport matplotlib.collections as collections - - -function rectangle(xlo, ylo, xhi, yhi, color="grey", alpha=0.5, linewidth=0) - patches.Rectangle( - (xlo, ylo), xhi - xlo, yhi - ylo, - facecolor=color, alpha=alpha, linewidth=0, edgecolor="none" - ) -end - -import PyPlot.draw -function draw_boxes{T<:IntervalBox}(box_list::Vector{T}, color="grey", alpha=0.5, linewidth=0) - patch_list = [] - - for box in box_list - x, y = box - push!(patch_list, rectangle(x.lo, y.lo, x.hi, y.hi, color, alpha)) - end - - ax = gca() - ax[:add_collection](collections.PatchCollection(patch_list, color=color, alpha=alpha, - edgecolor="black", linewidths=linewidth)) -end - -function draw{N,T}(X::Vector{IntervalBox{N,T}}, color="green", alpha=0.5, linewidth=0) - draw_boxes(X, color, alpha, linewidth) - axis("image") -end - -function draw{N,T}(inner::Vector{IntervalBox{N,T}}, boundary::Vector{IntervalBox{N,T}}, - color="green", alpha=0.5, linewidth=0) - draw(inner, color, alpha, linewidth) - draw(boundary, "gray", 0.2, 0) - axis("image") -end - -function draw(P::Paving, color="green", alpha=0.5, linewidth=0) - draw(P.inner, P.boundary, color, alpha, linewidth) -end diff --git a/examples/draw_cubes.jl b/examples/draw_cubes.jl deleted file mode 100644 index 33e3a1d..0000000 --- a/examples/draw_cubes.jl +++ /dev/null @@ -1,58 +0,0 @@ -# Taken from GLVisualize example "Meshcreation" - -using GLVisualize, GeometryTypes, GLAbstraction, Colors - -println("Visualization packages loaded.") - -using ValidatedNumerics -using IntervalConstraintProgramming - -println("Constraint packages loaded.") - -S1 = @constraint 3 <= x^2 + y^2 + z^2 <= 4 -S2 = @constraint 2 <= (x-0.5)^2 + (y-0.4)^2 + (z-0.3)^2 <= 4 -S = S1 ∩ S2 - -X = IntervalBox(-10..10, -10..10, -10..10) - -@time inner, boundary = pave(S, X, 0.2) -@show length(inner) - -println("Set inversion finished") - -function cube(X::IntervalBox, inner=true) - lo = [x.lo for x in X] # what's the good way to do this? - hi = [x.hi for x in X] - #color = Float32((hi[3] + 2.) / 4) - #c = Float32(abs(hi[3]) / 2.) - #mycolor = RGBA(1f0, c, c/2, 0.2f0) - if inner - mycolor = RGBA(1f0, 0f0, 0f0, 0.2f0) - else - mycolor = RGBA(0f0, 1f0, 0f0, 0.2f0) - end - return (HyperRectangle{3, Float32}(Vec3f0(lo), Vec3f0(hi - lo)), mycolor) -end - -window = glscreen() - -baselen = 0.4f0 -dirlen = 2f0 -# create an array of differently colored boxes in the direction of the 3 axes -cubes = map(cube, inner) -boundarycubes = [cube(x, false) for x in boundary] - -# convert to an array of normal meshes -# note, that the constructor is a bit weird. GLNormalMesh takes a tuple of -# a geometry and a color. This means, the geometry will be converted to a GLNormalMesh -# and the color will be added afterwards, so the resulting type is a GLNormalColorMesh -meshes = map(GLNormalMesh, vcat(cubes, boundarycubes)) -# merge them into one big mesh -# the resulting type is a GLNormalAttributeMesh, since we merged meshes with different -# attributes (colors). An array of the colors will be created and each vertex in the -# mesh will be asigned to one of the colors found there. -colored_mesh = merge(meshes) -view(visualize(colored_mesh), window) - - -renderloop(window) diff --git a/examples/ring.png b/examples/ring.png deleted file mode 100644 index 33f30389b6abd6b33e044b8aba5734b2de26bf99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24921 zcmeFZbyU<{`#w695)vw)A|=uwAcAx%T_fEf-5}i{3J3^Dm%z}S64D?7(hbrgF@$vY z*#r8#ao*?qet&1JbN)K4rLzWRKC$<{@B6y0``VuXsH_+^CJ`nC0>PFLe=ZM!ppZi# z$g1eqz;EImeQdxBs-3WeB0BhSM>lu}-ecH^tJy&yxGxd^kg^4`Od$|*h{SUtMdy#d zrYvoU7ZMLnlG#G}oO$&`JwFgwJT-S|CV9qHG57XE1Xa%D*jq_)pF{~A%lDpUo>ZU9JOn?;;8G!EY}d6AuihDNAc$Wy za-iZN-q%0yM!aldBcXy9Z)74$&Q+@a|$ndUc-vR_uO!>W{K))?y+4_9ZdT4x{$ezoD92IY<7V){`ftY%H z`+E=wqXe$NX>t8w3-dLtYeeWssO%d*gP5b)T#;+%!=;dOUXB)ORbQN+pt!87xAYpA zm7m%j?Id61%jYO=aSpQWeY-e$C#oDuYxbOhh$oV4!1^M2#%!W|BGN)enQf$mq~)64 z@vk<4JVkn?epLze52AI2?#n0BAjxZ3Rw2E+xiopaw{#79OqoBnR8 z5~FDw@YH&mSR6Y?k-ivSsB|iwS@B&UW_o%$w>2&^N2g)ad?Dy4u#IpnRdzS=!{CM@ z@5n3SsE^^(r)LQS{&yq-L!R$>RbPbu6s`SPa_?bULSaKr?q;b`cYI)*qEAC|&X!$V zKA|V|U#j>Z?=QUv}^;-m?aym)TD%9SGn`AiV z6T=gcRkR9Qhfq$+hiXR&WDM4HCwj^>a!L6saDt$g$aY0-W{9pMh?>nY_d>m2V+~ok zd3U1?bKn`IS}sRXl1B731d{Sf`jiqkbGU}`yF~7l7g*=5-&HEM)JVLTqBH+4|I?=f zMdgtWACkAL7~xs}q3U7!YflqAPi?W~< zmmD!!xrMwJE>v=FvaSuEJ+BlFgSO1&EpUd&);UNfhB_#hV=9*~o}7t_rP@l$HW$>R zLCU>BD&da@*N}5OoK4yOs5g@8*@%B}Py-jplY2d7f+Beq9m zKS(sr@APMbMd(e%kR3ALbzx$W1Ru7z?g+_71Lt%onC1?Tk)*;-B8t>7NPYFtR!e2k zR6$E%Ri0D*NQ#lUk8`-S2jjmPW98|sQf_3S2yXAeZbx3!_Z(% zc!JQdC&oQXI_C>ILt|q(Jw39C{2uDKe7heC8_ti_+SX?pbU3D+=hD|?WMo!WR|h+y z81AGQ480~-E-hu0;$z;U^>C>^J|Y$j{+C62M@bj$5yX?i8%BYGf>M35UQ=#0#cerW zCeh2gBP}wQ5Fc-UFy*ugl1x%@T}FoCY~a`M$KV1xXgX|NiCt}B51f-|+U)SX2=v*`9(%iDw z}vQf6!2;q)~*48wgoN5fKr|S7~Z{2ZHf|%Au2Q4uAXhuCR7n@{vxx zX25gd@Om_55Y`1R1L$1bY1E-i99QN=v z#79u;RSUs!<8^*mRCzuNpEM8fNA^X2Iv8%plA;1GyU;+YaFc)*w_k0zM^>V;?xAKKgO z>G9x6*&J)xm>+ksK6ShsGtxLpFmR) zcl6~>J*?RucQvNrG=s5IUPB|H{(P@!bz##6>K^&aDu z)-!J{ou(XO*1@q_=&``6aqyO10x$nJti^I2wXs%dqFs|{tzNS%2ut%Oq=BLwDZclt_ATyIuH6{T8qMpBF`m>U^6Tv!i)20a(+k?a<9uY?wYpJyC7$Y%v{ zLz4lfTQsas?CL~Bjns<1JF9@Rudnf;h&hlu8 z(2yy2UGh0Cad;RTJ*n}+BZ3gZ+-h4aa#e7kxm%AgsGhV3wkbU^(tM67B0L;=9WNWo znSO-=nv07LKZ_M{^N}QAE9d+dzescCf%q*9#KN)g5uQzVPrD?{(>nc&()og zP=Pu^tuYYNg@%Nh{Qxn1!B74gKC@awHAKN)?i`df3RfaQft(slRB&I^D2xbI1%n(h)2slPRY=x*JkOIu;6L?a;lOa!rOqO?bZ z!2fF`B*CT+4Z_*UCR0_YvGrM#iDvbE#&$`mpDeBtFF%;-b~-vYUX88qM*#aQR3&Zn zV(GqgreZF(Yjf|>04s8T>F5(tiK=v*bY^ZzqddS3glg8-8z1-oF{FoFfi0=7+G}Au zr63tgZ1c*!dGlt)Ggl+UCOcPO5nyDx3rB653+I7RxUWE|hZ>g%%?FNbRd<@u$xDhu z@2+X#5US=VhD#1)%2^KN?&Z0AogXDt3a5Oy(VXr4F{)CLQ$2enkR5`I4z>HUtf`ca zV%1;0TokrE+9fm`vE_M|*1iYdoe=ZPvrL|9ZLmh^*nAl!Sa? zQjir8!h%1*!C5Wis1B|f<-8M3J3V>I(qKJ-3cXN8L!`m~N;!Q3KXTcLI!(J|@$cox z(M7apS5>K9$03g0aRyYSyvRd_L8Wl0)Ub26B-BHix&H7ch4Kw>TyjjPF%f`o3|U0eEJ+wGwLtSHdcpn6siGb*=xOT&8RmFE-ag17wJC% z6ajciDDU>WB)4@g5^j6(QBAvGN>fm4#*1IRS+CuZ77csdqr?Z!C>gTRe5+KLFCkpoZyZZZ|nC|=W(3d;!qW6s2j8qTYyPo@v9LDlwL z-Q0}bC)s4y#u~(q^gKuO|EdxN2GmthDr5*@tXA>x*c4r7Nu)TX(UgF`f&Jhf2VIn; zOigb*yE$R$b6Dn0!5<0r_55dhIv0ECYnGOl;i5BLqZ*L7;MMAmJ3FjQ?2#sMMFJ)D}yw31}AkTpMq{{fz)Qy*P z6rePV2^<)`7sw8uw1+`<*v=t>GzzoGw|*>Cy`#99LIm@~6Z~<%nT3s)m)F#-L={nf zZ#1LB=!cMt=0Vurx4&2aDyWd+)difV8}9OK_QQLF1+TOU)6k2`4+W<(;2!hp=~Y7o z;I0vCogH>nW>_#*RJ_B?f&v*2508k7P|Jk1^HHrDN119bM?k8^tL)%k2ry=<3K^bQ z=dRkseCcl$paQgJkxn6JBoeTiDc+6Td3pzXds?C(Wwt_>&uSZzbyD44R>~=rrI4RD zcvgO`M-I*_vdQMoB-_=20VN{78>unBpX%!LZ&0gnOK0uHlc$#B>Bh+(jsyGfWG`)i zSMNWyh<$Z>b}%EbKZ40(se1~b*+2@r#-BO?Y%06+L8h2ka zD$h5~L7>Is18m7cfvm!3T2hOFat{+$Q0g9vg_v|kKSEM^D=G?UN?qF6h%t>RUQvDZgP0#JlW&C|7>=`=X^axu)77K< zH`jYLfTKn9zg+TL<4`1^7@wH%&=D;I(=c;*%#j;k3+mWzb06+-eah5<(t^+70k%Bt z;RI@{6j(4;G1% z%>o}$-#Uc3-t8*0Shn~ns;NAkYi3byCl`Ag3GxX6;|`|Xil$vxA4$lA6-erJ`ik%T za4tN3wXjCE-9R2NDKjgpB$h&umE`#LBCYE7l+S)#7x-W~FuHA^H5)Yt8o9P&2oOU-cdvzJHG?hDA^$$d+71(-i>m9=jix9- z$$Ex=ZKBe8U|*3wqt5NXY-74E=mimUXYmQV<*DT|`|z-(qENem==}yIx0C1v)j;d_ zo#IN4a}b20l`2>EhgIXK-{f-c&fC{u(%Gx-#TPj4M z#tMP*Sr!VU9=?+UTAePr8aWWzy?K1L+DRU)3=t|Z*P2;|w$^bLUkw!>^^m=ilvQGg zO7Z+GqO$0nQ%F;TkJEduOivWpLB|u=HaEB)@mSPrBeTY#cw7*BhyqkCs!@k1=0!tI zGur;}SjUE4|H19ru_6l=7l-BSwgsD*_#>u^pjN^Fu}Jl>fstNICD*-QWRzgd-fP`W z8S2oWCw`i&wd!l8^jv1Dg8Nd=FL6Ad%^_r zJfxWAGcq!{&Cc=-eln~6g5&7QBYR4*xt$u68n%WRxLJwwHE%P3@=(p{6PxlDqIl!7 zq%+hNFh%Ga_AGN8D0R$M3Q$hmy^`}mZjBA9n+a(a>t_(9jp7PB|&M_qZmnMT*gc@&jyP@?YELYXf9!8!v2;jV=FSD z$z4=DL3uEN>6V$MX1(WppbjX6l>8+e_`DuT2*8^`n}1;P2pzmj`2Y|W!iTDUFSF;SNOrdc zyJM|!Z)VMZ6IUJ)KrL@#aIuXiZsBN+GEH{ZF4>L-p`>(X1u1_ALGGde)3=S;*4GDx z4C_7+(SPCU0?X{m@)w_c$E-_*?i0qES(mE4rSur)_ZWi&jMsm~BL7i24+a8j4}(hw zX>X5<7lI&%N}o8>633T6EQ_jKJareWi|yPf*D79!sx>7`UfWpJ1k9P&=~y4BQ4yWo zn{tqCp?dwTWtFDv$UUhAeM9WTq{%(rOLVHV+v-9MCoKx+fC#B&6UmVZ)a@U|E$5=X2aw}PFP@?ZFJ3jJDR^Ft-OP`irv9Bh4Yl?} zk1mVSwogw;uVPw@TL;86v0wEwNK^R0!~~CNf@%EtC$G@$meaRuEqX8biuS*`xWwNv z>mB^@1E>=#N&CSzRIMSSN6Cpq9oXGR*n)WU9uce&@;Q`I=`zXV=}N0A-PKTD&k?`{i{Xfv}(8@}g3u{TuW+a1|FFwuwC8{T0W?Cbkbeep>nr4RYz zh15oEQkPAw2`zorFIv)2x$jAjMK9JAa)#cn4g0Az;-ca)y8MFyQ9Yh5xy&o~tdwlD zL@2NhOcPhD=?$<5>X6WdGpyx}c$7y|mXlFdJae*Q!Ce z6P3-)SKs?nxWmFeUR<;129-Z<|9yDed}OG9^Gi@Y?M~bx?XM8`X)oF*kIzu7)*cTH zflo@E6Vc3vM_!q8zKE3dwa?^|ZW&=G2^N4>&W3myC3PJ+4f`I}uHH(}uF~l>a&#;; z{Q}Q%3|+?*sL9J7v`_Azp$x6P9;@bQt#MXWC}sqCx(IszcRe8L6qIbK3e&s~iM&VQ z*WNV#$~@sIk(q!?LKsCr7IL7%$1w$KZ#Q1i*=}W6$Aslwh6$4gnUSTcYGmre7s{C^ z#o3_9tOSO!4fXdw)=v}qa-F4ojEHd2mWzu@Ow`skLKvb-i#QYwQBco!lMkCn($*Dz zzONqg&&@$tbpFVnh2FXnk7euz3a*1#5vjQg6@fq$d+#|$b}mp`hPLQwVvBYIjq>H* z{=V$t_+J3{i(_Z$(2jiQKulIt7v&k_O^A2y7@9`nRAMQyRKRn+FZ%cN?dyB1Dkr-Q zQ;;tw``$k$d*N3=^&gCjoR0(X?r^4(lZ{9_Z2io-W?bZWCC{7QxexIHU@1JpL_+%W zz+*Nxd|h@3q$@Oxm0GJQ**4A)CWJIkYZr5lMP9yYHUk5PwOD+P8oe%V@aDC_E*mbcY1#SBv_BA&l0itAEV& z&|yE<;0gf-etqZ}g9!@(T01HeJ|^8@^b0`ewk)sk!|yK}gD+pM*RJ%cYbiG0LQ5fR zctkf5sqybt&~F*N7?Y4F+BE)lba>Z-ZE24xJsE@f((c$goNXW%8?nInCY-$e-UzO7 zU2F_IUGt`Iy4$-K>A}E|_{p}^ay*>xxZ0@@R3dtxYz$O9w)dcGv~|JpN8BKrQD!6@ z-Z2aP7-O2QBn4Qfa(RCE^asp3UyRUx8@$aK#bC@Vb7*!dK1o0+zO~?FDuZ34;%I~x zraw)6Mvz~sZAZw@t;55L_m9Wnh88&saq;rVK>|)`H9JBF8>)hTpY} zjTqJJyEHatV)(;{rqWMt1<~CKr7fq(C`g{j-CYTQ_d;nYn>kN5^ezLO`s_Zk5IGRw zbrU-@l^^E3iE-3c7bjyYiZvtQ)<_;R`J z_KOkV`0ouDc{;djFcJ=`)Nd2;9ZcE*wf5`BkSA9$q1s)k^}!2E6svKTj?bhN z<>fNFiL?-895kt7~c;W;_m-0~reY!XAnZO;6XyW}tu* zgJ5JauCQbv43Zh=ulSm5Dc3-H3UvN5&|BRqDyly=^Z0o?xlfFL`=-Z++sxqlRLz}w zU2u;>#K`E2T`V`SadG9wwHXQ9$cnxasA#6(y8l3NJzmbblg@wGX=nZ>uknu;fX^`0 zn8v~`Xg#v?UUCf|K8}oPX#`m1X9+{FV%<)LU?vy-m>nNV!_Yx|LRETn^4L!m6%};W zpFo2qLQ(5kS`bq;g5Mv1+@C@;1PsZ4Hw2VVYh%eqZ4HfN9QYh6j-vjc0cu8b_w#+F zcBPf2B`6yq$&5cDrV`BG2m>@{?3DG98Yp)WE**-w>>1Gck2_!RC!{jMuYG!B`{-B^ zb@oTo8*b;#A8!H1yQYXu1UhJT6{dsKd^=rFK({5H<>uKDJXr-$AwXUgw;o^YW(k(Q{PYMHS{ z#iGFHE;@>0@NJ%L$1dp^tG5_qC75QEHscmQgshAzVq@M8c+0wW4;vesju?kwFgk9C z);f1hzvv!>=ssdhEGM3>eJ^?DH2KP3Hi?&O8sn^+V`iw{8^ z@LNt*E9EFkf?fw`2_%mcXk_uMf7TaTc_L$XssIGatW+({4|B+nKJLe+%M&utKLLh9&HM)79Y7{_q2oo0% zXKh`2WS^s$o9psXupIPA#My|3K{ThitydY3dw@O)$86v`$|;9YEzsGhAuM3}C;kOJ zdafoL`lKEc1g%t@%Jw`P7a*t%gGphRLSrn8*Y!;-Bvfpw{%|O3#1H`LeHoySXZJqx zv8Qq4_YOnv82}vIUnW$y1@)LW%%%^kdY$hJY5c?u&a8&qzo}=IR8{$prOzDmlafn^mwipbUm}B14}cj-drY zWaCWe5JEHqzWq~_w^0%@L}B#}Vf^{4<@%o``j-TZL+pcWZ85H8f2!FBpzs2_0)Wb& zNI^3J1SP-X#3Apf0sywc4^y@bISOhCY?L5Aj_WRsOy4_5;k7l;)}9($<7sBM)5Osh zr~PsnjnWJd9?Oa6kMiZwlR;b8321s$!G57vq&ZKOF&92e%EinRPT9M|#>ttzo>gsZ z=?&mJ8z&2GC1>Z@{U^3Tg@#s(SN%_51pSl zH<-NbdTVAkyR4UM2Y8BtF2)L=Cc6%g|IqA?yJ=?{@;O84i{XvJKoYU4D$H|#%seOm zEH3)}0GVv(PAx{L7)6*`Xapi~p)nL&V+Sp}6kG4)8RW+g1A?nJcYWuAuT$OR_oiBz z%zQhrl(iPE->z+%2lqO#nNG|q*;&8j;tsAOXT4rpH++RzZ#=t_4^L+>R4stTrS7?u zaJ#g;1XUh?tA&aL3ouNH16l5;qkHWZjPlF%;R_S08D-GlC7Bkr>~Beh$c~tj9N~!r4esS-@>L z>IY+VdKij`sRrIr%|)!Gx0et%<$lEsOp3WKauZ26yrlIlFp)%FtvM-VJfN(5qusug zo-oKDnNgA%^VNl5)h)?GP~Sp)s`U|m6(!(S>1P6BJ!lhN0bI&DyF6kt%9l5RIK&~F z$ep30?ILp36pQ)io{mt=b%>x=DOLq{4UZvLG#CvKzy-FAdWf}3@KPQobY+|PCS|Av(o5k-*GD>B`g!?jJ zO#mV)w%G9*&UAD<`W(m{Wd8L&Ml~hGp|wK;oILQE2zC-_B-~cyzA7dd82Uv*tvHlS z&yz!IhsE7{mWQ3#uDx#4Y0-v{%&e_(t9c>p7N9dXcP3cMY_yj!b1sVT8T|NyWe+}G zC1Q1kgs4M;Emtc_-RsEpY_>{Z3HS{%FRpuY@l=wDTd`!#G#tA*XildH@E?eY{0xJ2 zq7;L!GbHyGrhgf4o#w1f>^T{P{^>L>C8-K0@yPbBEq5A<6zc!Xe*S@7S6TsO1mb-D zljx4Nj#9>;OeJ8o@-A5{b^H=-K?kH1O)ye~MEFRk4s(4G{)!u%w1&RFhn)Xud)DeG)*ecAAv=`G}p>}{rLk3 zcWFQHcMC68wW_z9RXTQf7mn>#xQ9drb0IBE?{d=8o>iWnJ=%pJK})2m(;6nuojS(2 ze3^edl7P0xcUqlIDrcx<5n%eVvGS%yTsW{U4fMed&Be4N$|xhdDBBt`O_erVU(#*w(e9PnR5)j#S}ph3J_7NdBh6fvuBu+jdW_$SDdEt5Z<{|wkphsU`S((S)p9@6KsA6v_ z?<=0*b=u~o=;l^~0Ii2jxGT$9$w`B%f7hr|dEcT-i4C&zQglOuFDdBLKZScybfVd}P8@AE5#`aZ|SgJ78+Z7%>12&@zG;|*wz!aVIA9apjh z&T`gkHu%@Z%ca8YK`l3(YYnbmtC-mR^{H2uXFp7gwBN3mFAE|2$D0?1Q6hj3XjSwj zI!)*JlX-rR*+2*gO+PWw7k~AOktu=bQfW9I-m(O}Q=Ov@mEB3Z-en-*4~FpBFMUuh z(&i)Or_3oYS4zG(h3|bzK6?*5SpXvdm}9qJGjk@3I5=qOQCrLaoOL)i=mNM*xy#O? z#6+d#1a)WW?(u37vqcH`PPPPstLW$?1Dr!`X>D#k2*v`G%RC|m(^kX>Oo+h;;w&cu zTl69-+UB;l+Vbx4u(Gnwse(VU;ZUdO_uOdi+uYnt2fEd((=D^sr|j(AoR05#e$l(} z@|-(VFf+6{Qd{J;3X>S845{-el*njwH@kZx>AoZYHboMijFiD=LNTlv>O2C*p$!VX z8fvDb3UpcAvir`;>nuA@N;v-l^-%~=Pg$V$$*8qN|3rz~v1`K1Rl}c*Gk>vf>Hdsu z6=Tt_oSk-Ak-1@xW;ES;-dD>&1uQF21e)Q&e=5r!Lgqk&0vfkiV0sYFv3*@P_Rf*V%p;aDf_E23!B@ zP!w^ah;vdWi_y)Pc==^d*qT{%_D;xC>W+s7c#PSIL5_^eVQ!64P;d-69BS`Uu#l48j6N;xw5O zK_h2&cD(1hl;Xd;m|$%Nd_8j~Q=TVl+%`YF0e8#<>`amfn;a3Q2!mPO>2@cg(+jvG zsONi$8}2l)4TPWC6F?{mf%C1X|Ju4aiwTT%!(#I0-audj)KOue+U^dXGRhY1DZ?PpAhU7%I-^iQHLQDt1Z1%art z0{>qh6-?+i48gwRzl?^gJALi?bwiB`-WY;n?+gI{VR}~mQCzw!-})aO>s%aMq~1aI z&aFcjleZoUjO1C@(%UsgYS_PF!a$h)Ala&vq%X`wBx6o{r2tjgMMi?Mk2J?-#OZFqE68B|h?62jPZw90K0}BJUguz^+AX*nnAq4rMQXBHtR;|vCk1e5DkuA>=9|`(OW}Qupm0x#x5$_3 zlpz}US?w<_bw6^MJY+U^BUQ2L&?UrlS-YRzuLf3cA0`aJ#HF>hC?L*X44xgIZFm(O z6na?qQ9V-A?>4MS`Xvui_3xfGX~=agqAT1fhRL{{$egKW&rSnmf!%of=KcGMOfe2N7frCvXDC3FwPMt$ zkY2V|zf!vW{QOMR(IAb;=)TV+i)78mN)3PO;yIxBGP2PE%^3{kf6)^`X+~hsIO_y@ zE-J7DqB<8MyN%v3VF@O($S44Tv%)ZMKGLAxasUAfRQ>Jdb7EAy$81xP1N%qo5(*f3y>w-XH z{jbQ#fO)vnkiuoJ$F0vW<@GBxR0k>mATn32!+}d0do`e2J$h)G4WQy> zE5+V*x4B+g)Vlu2s4pW01QFB;u)D*HwqR%PC|l+-Q^#cfCbH7(hkv)knA6QxTuW=`ey>*%{Noq`KTp# zoXh3{7JUUHp*;q~j2MogYYJlYzpskE>!=RB9U9@HC(w^I>1i7F1OZ}3B*_R1h#IEt z0{~6kb+o%3KiO7I9`36$iW+O_2C&N5xvQ;T`opO5dVki|2wpLEHvg#JOFH_DHN5q3 zmG;LSWb~CDRfU>A{WPJm*?hpX7TCDLMcw3Mf46mopO6+Q(wo}oLaoB;33g^L$&c%K zo>+jYu?K~D(m^yOkB#VsyQNbeJ!F5{DT zM}xa}&j2SDk$~_?J+w5VG&6vu0Q57dC@{e4*m-%=9RYAV3`A#!stb9JbK4lUT2u(Z^2&WqyWAh z9tjL)0E2)Lf%NcgWU6EtPjZ|nD+5^}c*8uQ;wsW3WwS8IHVME&eiS7ceBpKJFGw?> zrjx+*Z|*2F9I7a^9GQFXLG<2weJ4qM}K zL8FOaO%Lp!$$pHAr}&jkX3BN7;5hW+5EodZ5cL!xaRYg-UaigZpk`*+2}sfs6LVXi z8H1SegF66M0KT3D)if!pOdmB6=Ua^4SP;Q6F5s(+>Ke*9;84D!rWQ{M_s`-BTS&LB)y6Iy+zz7gIhXR52S_~>b z(D)DqA2CMthxl;0{Rc$e>-rwteI3yAm4VHgHEsx~f?1U_o;54+2%|r{`ABwMoz}gF z4>z*2zF1=pn9Bp|3yqzqfj~eZP><52s-q_GRQT{GsqyS={@}4{`tosaZ*RHi;<$(g z0q`T(xNmL&1O7(Y9CPiau*cl}nZAV>9ncxd)VVkwJ+AaR;i%jEg0-@;G5|P4ZsDVd zdx_t99SMNjp`DJ4HC%MK4HW`=araUhtbTcdJy$7ISy}ms{sFQOL@iZRRCJ!R=i`2G zi(WY8L`B=hh31yCCg?DfuEklqRUa)T(71bavyU!;YTAIz^+JeWc#`3%T zi#a}_*1r3w**f}s0*!9O zC-5B3O$^3lwYhn9E!2`rjLoSzT-0iWeVz9xIm|p3-1rvuaJso$kSs0#i1p?sNoCE18= z68jU@qXK7x0(7LtE%cxP2f(#YV7ffr+Ek5-+rfI`s|FC97x875y-9pQN`&B?E2xS8 zx@Tb0$Jftjp#Vc?0?p0c^xI>E2PS4wMab4Kkvy8ud-da=Q`psFtb=a~MIQ=T zCc=r9i)`abYW50qMrc)*R|;HP$-?&IKKW232Jr}vK*?XHxKk0e@RYJ4M9bp8ah=jKa6VwnX) z^S|0wkne*=ZUZRCzO&<(rxRsV8f>(v?oYLvh5mTrleLZlMGLR&XS9I7Ey`Sa)48`I z@v%h~B1u~2wlF3@1D(@P)VFar(~OPNsM_z%AFodw`08RP!nqJ8{yYauVSIZTH1rak zl^)__wzIs)m;m>~m;?q#QvSHv)Mff>9toQ*8WbDI;f=t`0towUBGc}-*L)j)ayQJv zC=tDC9il4aY#^sff#9Wfw@h#p1n88->(VN4($sZSWQQ=lz+NT_;F1G}w7vmwug4x@ zxV`|pM33-sAy5?{Vk%RqNEAu*s0qeRI75`k=+W<`jqHDJE9TX30u#zW ztPv#yQr;#`1c-GX_JlPs=_GC51*7{O;zMOvtrP*0ddC_7(xoPhx%S)zBO@ai6BuOK zhHMmIvl!?U0W6%&(^LG!@XeRUZ1kv^97<_Tk1vfXOLiiVXd-Z<)q0nVy2F-{>Q(^V zL0rL$*}Fu9sbO71x;9<*!PnYU|Lo`CGrgz%+Y{6B&lb0+H;Az}GGn8aSh#J-#TQZ= z&e385Q3cLCh(o*hy+Kc5sWf3-BL#M%$aEm`Kys0ahgkkca~t@pvp*PL%THMQ@AH~~ z(=yE2pvlZ8sPLK`Zti?!BwvzN@f=f`g^pvBSr=lTME+-#A%>#)M_pAv4td~Fm8J5* zOnOf1Ro0JtE}oDu4am?feTW}4M zSfk8j=t&8;Gtr$J!y|<2 z5#@T~8S-e$b7Km|<<@Y1lA{K(Qdg7+2}AqyNf)$)te6rJhpimzF9MZ4k* zvr0BRN>4IFo_oelyGa18e0M@>p`j!Bz{BsHgKhS#<>9Lwjqx(0h|}{hL|P00rbxE+ z`_Q7%JVA5aN!Qyr{?A@7ddC~H-$^HHK5(*pxn3mCc6h(cVDA>1kI}8wSqk$I>{1o4~dR~Ab?Q?W#iV?E=c5b}4DnHZEmd)$R z&)R%f)QIU6LDR$6q`dWlKB}Wi3rrtH60LBkZiX{up^1t8>!B@ee{V?<2ohy^S=syX zMcXR;O;r3dPHxARUvKBxK9=%iBWnhL+RuHS^{k{Rwsx?Vs}k24x!P;)Z2QQatCGaL zKE)O6plMaC0lNuw>W`)NXpZfy?gzEl@1~_~&&)GhWZ0>GSuf7ZDU?`=PNivct_zzl z*vl<1kHY1L5}=aH?v#Y(GBqYA)<^Bp&;7mP~gu7m$^( z6G=OcQn%d~?fAdcy;Pn?{_q4O>Ts}H1KkN=itx*MZ*9E|@w8WLPiy};vB;C$EtxgQJ>#UEgDNGD@{JVqsU(I+MmkhB z2E&J?@MBHaDv@)ZOO{*Nk=>afaa3T}&3+(1wVku@K;k^%G_&EwH)H+;f)$LMonYC{ zP%K#KUrWenpf3(3)9>21m zR4@yFBjI50NNbvKnmPbV-46V7tR1~L4z-$4Uf05>aHY#73YC=)h@^m1V4l;_`s;63 z%F8&&00}cb|leSVL z2d@^p?(uDZd+55;&A|?=VM=+*rU-Y>V!V0a_nn{Us7!?hZ2bw5Hk|pYtkehYmAv%< z%&IsCegqb{wvUaYg4*U*4wG?OuIX>fcAilfD))70(>aV;vicy1ge*CEpHA;?m9{Zc@00tzBq9FCQ`6V{!AXK^RR+Yw7B!XRgVB46o6Lzs;ebh`& zV^X60Ums=_x#yQ+z*-}Bpvj~%-3DfHZaQXSjkE+8x+bY~#K(3w_w!)owiXTtGix)NG#`$YhVYCyp|$*eE3&Q?}_$!7~thH@M# z8fKVdIx~`zl3rA5jXxdZT1?=uCUsapu69^0vzn@|J@FrCKZt)P86jb8U%yeyJ+oA{ z8?i0TohGjHTx?KGhGf)~lOV+3u6~~~Og#I2RD0cW4#NXjPSpsuPiqmMrA-Z~ zBZ&^Rqr1A2VSS)GjDuZ4?<~W_*JsJTiS9Lw>q`Uo=lJJWX@+fJbkvJ=U;8xu$euvR zJzRE+(ymCyz_KNl5A$95u)%&aiZ)6-YM$t|dx-h|ctri6N1*53D7(TZ@M@ayBlE}U z9mH_SW_IRb{e0Zr>gwt;gZA)Sd+5Ue5~p&4?lRb`4b~AyttIeo9JkAPrWO_!&XV^7 zlN}I!G=O1`PD$m(HAx2<)WD4a)(WH5B&bYn*Q;(U$Zd4;Z|$J9Yw&5z{@3@%U@?Gw zc!;)EczS_GCC)}A@Pn>_r&T|LV8e^5~BUnd{NKq z{oUf}@X*kE6CRIa`#NBk9j|ryl;pCAF#MSg=PJ3LAHf+aIL8e}3xF>VjTcEoAVgNX ziTl+SuUpLl)Y==wdLAC=~4b=P69PS#hahswq~Q=?%~;Z zUj-hC0lYfD=nP^y)X8m1HZ`7hzVmB-Ni`^;03Snv{oWCIiHWj@+Sw)X=5_*+P* zw56K4vI#j>*pT9+!G*|~4HbR;x%3lYpbRskoSjiBza9&w~Z&!{iHU zM(o`_^(1lU^$I7`9l~M6vPt2>_MwGhW9-TcZ9SNsV)A-XKe54X#|2=@?(QR8Y3{ z9=LR_7k4Va+p7}C;HHo}TV}ZUYEn{C$|qHS#+5$TM79mom*M`gl=MfYnL!=tPXc#E z=FNB8waqyk$c#V)(>;2mSqGIFeX8bafv@wKBmY^0K>C6clgf`3LBvUU+*b1U*Cw+b zT9bt7H^8=;VTN=%|+%2^4y+N^Jk;Kq`IP zUZ>8v&a=VVf1qa7bLz*F_mzwJvH^}XOB%LVE_sQaHJBr4=RIQ`WrogX(mpD+Ga1&q zqs)6NraI#a)xal{Hj!e%X7P@9z3?YfBddG#eMC?#SdXHcfAfn{jsQph@|kJ~Epg41 zb}2l>J*hG^B|DWSZTsZR%)+9pif>fs2zpzjmm+Pj3o(vknXl=;bDMF330DhVIT~r*@qAs$#U8avC~) zmmwj8Y>&7ic3cXQLw`&o#e!{7*~qU21rMxib#fFt6i+}6 zH{hm|OU!EIL-GE(>C9`E0GtPxKro>i_sexC*whA-Jan(G9k1bAN8Uq)l3EgYN- zfB$Zh3r2+&o9XgNIR9tZ``-qMJ_Y42;c94{*`3hVC<$Zfa_qggkrHv{Sg>8z<@dr_ z!kH5Ql)0?%a#cP#aYuvgg4GgbVru$$YUB?_QhXs|XO=)LotyUQnS{o`P|4tOSx+)g zks^g*E}!>+1OSh_V)&7l0w@x#O*>b|13jWTqLkd zsKh{e{m9D2y~-=_-a0nJcT&ZIny2szh-4nfEcMrtquo6MkX7KM$UnnA4?VI}|0Lnr zAOPQgiwk1~AW=Nroj-ZGLc2)i^@#ThvP0%LxRXI}CUwUett$!zpL|LbNbkx@-!N0u z+S>YY;x@l`$JhTENrUGjfv(HnLvA$N64&g9vcVmVk~tuX zPXSAkke8AQ0()*_q>$tU`$N+L=?^%_CBlZ z#|ndq+rEX4YJbss0&J4f<+%RMl9>^JKwwTjfwU}cIS)O}`kgdEl6Z@&y8?3k--Au% zwPe>7IzHg1NUNxsvTD(D$JS|g=hx9*n<903?Fz13Hb&u!5oV5qVaWk)j(i6vr`0jz zWQ0Zzo}uIlo|eM`KPeuwK6ET5et*!?!bFoPyaxucJnT9)R6qS6DAxK}##~ zsl|7goWNPx&=eSZZ;``msL`e-CYPR=1gmNZFqA;J?F(YA&j!z-VYqw4?09!MV;$k~ z2z(Fu4Xyw<0gnVBZ*vD2LhSScIL8p}kTTCRSA=~FQJufN0$+gE{~e}E-PNC}b~pyz zigchF2SHd{;tJDAgBc=vV$BjH(-l_>*@vH!WpG>3y>%6qqz=bS#Eb&mBuZ|Q90;Ci;%x=(bLEu2w zAi2`sl+Mk~6Io_>U^%@2!ji({<`I!c>8N@ozI{%J20hq#?QyZJ&~~2$Jkcg&UAA9o zrPl1XI#M|4^?x;Y<>657ZFt%j<+Mt;}e}4ZC?>q1NdVkMzKlksxZ^vyk z3WOn_sU5U8$Ist1+#@%#ktVt9>r(Jc9-G}*aLuVopU`;h%9dNUEPDUlOI7W z)Yj4Q0MZ~Fc}B^Jp?j&MrSX9#G{DSfu=*^sbh6%`suA2SaDsa^e-Ma4_h8cPUR&C{ zPO^H#X$0YL00?Ew0YJ&8H&I|Gq)u%EBHn|SB0&~B20_8q8+U4ZE-nbbvazE_+q-=q z4+MM&9PB2PBA#?KY1(t*T}{aNvo$Ia``|Tr1Y@cWak5UqozW@l{N$)0#m+^1VPL{?6#bI!lM8dO>J7W!N zVyM?O#oam^AB@J06x2kHc>L990=_wJD%L~U-$e91gO0~!VG^e;Y)IZ2Uz<~+M z37)n>N2HBXC67*-lOHY?Yanm`RoHB|G zB3zW&OOI75rM1pa;pB&$&9Q~cFRud(lC?6Q{#4b3YFIxxCj%tJt?R!H*Z)5Ia%kdY zq6F$jG_)0Y8;4cXe~dv)KE856%Zue-cL3AherM zO5yVPzG;@jWNf$cg&~>0mZD?06C*zL#sJFFY2~I}Lde>Ol7ivI7CtA(sHFQV*{-@6 z&2pm|Tw<l8YnQJ4Dz6ir zd9qzv{Ln$mLYynDHnAaIw8I~w5VhIv2iPk)*L;tno}OuwR?;8wM;)C75Bt%piiU#C zGPnV!Y)6giIV`~I?8by)+eeLbWA_a^+WJwKHGt2%yneD~fB0*gN-)f~SC=?2=db{z zH4+b0t;g!;S#c~1I z=tOV{VL;|b^BBZcnP=*#^zW4!+NA#KNEU(sPpLyEmB3uUTW|m9 z3TbtRiIcy9b15y5dq#PPcoGxS;CWvn$+Vy{)g?O8;IVj=TXMzLr-tFMWD()jyf(13U*P%;zB<62=r|ll`1~fKNWKGE&pBp zB{SLK#xzZb%8L)7#tnR){nF$cZoRlLQ+=}y=WV!WGZGSq$S$;Cz*`c0K#)kGm*enf z*)+2e$OL>0{Q2Ni2x8qFd05(0PxI05$2K>{)j^WU;rC9DxMOo)-dL!7AWk@y`TckV zEQm!RQ(l1GU~KdR_vNY50(SYW7P8G}r)O;jyA6I11iRrBD5hyJ%fZ%lm9Uf^`EwY| znTQhf4p1=T+JN|95*+sSs+a!_UP+3jc42<3ln?1Dt+!PiMb@qad!jIsmFVp3JO?3k zYQteRlX|nwmzX(7I0!^0R!nz!7Y7cRBeGP)VMbuizW3*fp6RYn=~PctZN3WWgboak z7OBToOeXUhT9p|%)I1C#bipUA%710nGVn_zJZHk3qSjfGz2v^HEaLktIC^;27nP*D=-k$*D+qgW*dX_6br6XX@H-F6`7a}1te!lLO2>SW+MB10EGcLmI;66+&2#_ z;<+W3{aC`Jcv1r>l07{=bM1LWPCh;l5e>ezPhJpxKvO<7ucZ76^(tz)NTi$C9Zioo z0PLVs0sCu|5-FVSCN?+D`l0y3aH~}*l3)o@Hyu}nwqsr~zJ)@kmRZh`Ye?O12c}v? zK5X(S=j2cw_*#Jgb2^c!ANFDzY!E;6>fbYnanz~zF#GLhpxa=53bKx#xD+7aR02p^ z+~*LX{9|!*N~pS><;JqrD-|C_MXg4Ed3CH}n36saP<{dObgCe77_k;2gsZnwoM5l|^H)?11TIRCp7IhlgKB2s$ESyTWI2OL4!1dCWZpG#cH%pudszDoxWv z{(O2%SxR0g`vre$1hoBh>_dn9;+pte2E)1qJ(GdWx6h{2Re?I$#^Af>ISgU+$;!Fg zK&Yj~QcE_IXLJEKEjmC3E^_?ZVlQAxhm!MY?FFs{5c-4U6s^*UJB5um(UX#%VRjQ{ zu7zQ08p$vEC;X+8+{BXfDFK-ZThl%~cCFx_!x+gsrxfW9>@;=>VkK1?&vUd;ppJ^1@`w%}xhC-!c|LEwm)4-rc z3rn`brjc>mGsRV!xI!ol5RFO7DXCsun4b)(x}$rEPGu%H=%u~9-?a+LgACo4xG0zb z>-3Z?&MLo$l-%v|Z>7fX~CE>HO)B zJl!W_(1AjLun(%0yp&r~axs`x+>``bGsU~+e8hz^UUF6g2~Zt@Xg3MwrjpW9JMiDu zpVg4*!s`-JWZ^QsRlzG8VddfB(b;m#B}eyjJ`c=1~ebV~-1M+n2x{YmZ#9rU;6yibK&) zpWp$G8&Ol_;p@c2Uj1rx6Kc}bhn)EOK0i;`@qqD9I&?g8dF186cm;&_oSRIo&If2e zj2LQgxEy#fvk^Vfcppm!J4Is?17P)h01@HOQpAD8K3eay)0W61f_H1TNmtRiq>E!+ z_mL(%l2>p$nOkPNgMrh4LV;Y2X{u@p44UBZcOedn!qTJV2^}rmFMW&sa>^qo!_Jwp`G58i}Yk%DfjqjX~1B;6;~>B z{6`$@N<;zm1)-J-9WT*Qw zbSjjs?oE*3|)*0t`A1?I>q}j&8X30+IGf@qL8u*rbKHngmOHE(!#X3*g zz^d^cn$$QH2U5H~f3jC#%_!Ms9=iFngMZ)@me&8kD*$Hx6EX7Vl<`ly#V(_T8{v=+ pD{R*rR}b`AAB9^)nHZTH(hW{u`3L*(H|hWY diff --git a/examples/robot_kinematics.jl b/examples/robot_kinematics.jl deleted file mode 100644 index 24cfc82..0000000 --- a/examples/robot_kinematics.jl +++ /dev/null @@ -1,19 +0,0 @@ -# Example of robot kinematics constraints reported by John Gustafson -# http://www.johngustafson.net/presentations/Multicore2016-JLG.pdf - -using ConstraintPropagation - -d = Domain() - -@add_constraint d s2*c5*s6 - s3*c5*s6 - s4*c5*s6 + c2*c6 + c3*c6 + c4*c6 == 0.4077 -@add_constraint d c1*c2*s5 + c1*c3*s5 + c1*c4*s5 + s1*c5 == 1.9115 -@add_constraint d s2*s5 + s3*s5 + s4*s5 == 1.9791 -@add_constraint d c1*c2 + c1*c3 + c1*c4 + c1*c2 + c1*c3 + c1*c2 == 4.0616 -@add_constraint d s1*c2 + s1*c3 + s1*c4 + s1*c2 + s1*c3 + s1*c3 == 1.7172 -@add_constraint d s2 + s3 + s4 + s2 + s3 + s2 == 3.9701 -@add_constraint d s1^2 + c1^2 == 1 -@add_constraint d s2^2 + c2^2 == 1 -@add_constraint d s3^2 + c3^2 == 1 -@add_constraint d s4^2 + c4^2 == 1 -@add_constraint d s5^2 + c5^2 == 1 -@add_constraint d s6^2 + c6^2 == 1 diff --git a/examples/set_inversion.jl b/examples/set_inversion.jl deleted file mode 100644 index 6401804..0000000 --- a/examples/set_inversion.jl +++ /dev/null @@ -1,15 +0,0 @@ -using ValidatedNumerics -using IntervalConstraintProgramming - -S = @separator 1 <= x^2 + y^2 <= 3 -X = IntervalBox(-10..10, -10..10) - -@time inner, boundary = pave(S, X, 0.125) - -@show length(inner), length(boundary) - -include("draw_boxes.jl") - -draw_boxes(inner, "green", 0.5, 1) -draw_boxes(boundary, "grey", 0.2) -axis("image") # set aspect ratio diff --git a/examples/tangle.jld b/examples/tangle.jld deleted file mode 100644 index dda890296a7ba6fa167d235f7aece7dffb4ef51b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4023672 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

VKkOrZ$a8;PI?n^Z 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�q)t>P+Xk z4LD<0nzI9Eji)&WaPDq2m*4wx{9cNE1@z&`X3fsNxIHSUj+Nv?DfGh}L>-k}$3>wZ z+ef(n=stq$zazd6XC2RbZu|<(w1uyj0_zwh>4$y94SBBaLFc£|m=LIgUH_iEg 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

ZkjU#Cv2fP3vh<5GXLLI=LIhLSDNzy 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 &J>5}l@?VI)nYE{S+USIS{ zjfETV^B(!@Zz4S}DEV&}ydT9nO~3vN`-ltj+`om+b2o6wTWQV%T>3Ve^8&YiJI$%J zf8cc~SI4psZ<^XTY0sdLP;*Y@@o!c?!|#veiy!^|h^!y)BmZSTBI~!c_RyEk`|^bQ zH;j8=*@+PM-xc{!UI*fS1oy>SI#*h%Mk066#GG#3OekVSJL;EcOz4)a>A z-<9hlk$uR|6|SU@$ojE;L`!vC68>ZLcEYyZIOQm&84KEytPe&p-v|F#}P z{rGzNO7xTW!>F6IuRAQX$*q3&kJ0>ndFVb;SiksI4>n7RKO%hIbx_Tp;!avn$5>v+ zU?1^Ao+q85^E?2YH$-zm;6i6&_mQi+Pt5Aa`^c5_5&3-v zPmbH#df!92LeG>o!!P#Ae_k+giRX8V-y(ev#PoVvx%!p$Oa1z{iQQM76+9JwyW`N| zoPy_pQAaKG5d(Zqx$_*I=SKWI^NTcR0?w+FJ_kKg{^RGVr^V4+r1@(3y%IiTUq^RO zjZ>AjKbI$zt7xA4=PNmal!LpWj)T08^UXlLPhR!m-*jyKLawmo?Li-W_!B;F6o7NV z-CRFLKj~ah&cP=iH{5*Usk6e2d2{-$d;bjgU%p<^pBI$%!~1inqn7Fy_aipQeV?Ar zb31Uh>uAmaoU1g=If3(+p*gkmi%8d@L?4M($G8qeKZ@7J&-dB${m6C9^}DhhY;s4h zI&XwC~Q?EdSM>mM7s{fv=|{olm!P44dXZoC}}- zkW=XMB>C$Q=^TuvALbwGDApoh$H?m#RzJM2B%QDB6Hqs)pTzd(&|x3(L!Kv>r}I1j zT%ZEY1%WeGq`44q_DVFTmVOcGI+W-m(R|43n9f0IKX*Yu9kG6;dfuU_I#$AeHMW2L zK%b`~>&N|9JpWw_eZ;UrT-E7x?px?QHv*Svq&X9CDYw#`8Mut9G#4qq)$)5K>X^+z z)`z@~={m;#A>C&xydUAuyIq}rxQ<30#aiV1kt^Sipl(tf$M)xd;eNyhd7f2`&T~6( zj@xO@0i5R!nsWjdOr$xr^ovN>p+p~HbCB&LypHJ{Wcx6?AJI}BE8)Lr`f>ji&wp(F zYRP}tM_iESraS38cLSGMi{?DQW!I)TFK|hB(OjhbR?F{8qK;V~@;avLxadB-rr>!? zEuBv*;lDYzJ$b6tnzO>uc4>9Sz8(@J|H=CC{qTSB-;M$uwd6nSBYw#9R1=-&0pLRS z&|DBWb3K|10q3kwb86`qk*-6DI_^5T-V-NZ&J}{4hkjLWNe=i=_93rhx{mh_Dc5Y# z?(+rrN7x+HQXMPdzoc@3Lt_q|6DGfRD7E^n=L+%QY_TTq^{QJh@bou_0&T}Jh)`m1^0xqo)&6$DoHKsZAu3EqM=+>^CPFG#$dP90$jq8B) z@4@E?5^s~nX6T!an$p+_L0d>Fewh50bfnhf*TNb^n8VLpsgzlHfQ_RfR(FxD-C`D>;5wk0qh#_7Mnd>9A( zFdxQO>pLZKK5yNU$2~L83%ReHvCJBh$JZJ8ec zsjX>FjlCoMno6#YWgqf7rt5fj?fO3tZhlhupw-2vx)`zxy}rm=I-^bMO8!2m;tsy3 z_d!kD^Vrxr=T8V9?>-Y8Jo9*gew&sqto_W8ox6)NGs^yM!lR9SIK7@gE(*t@$< z6nb7T=U6Y(C&&5yrAYUeuzpcTsea}An_4&IDZ6Aeu7+m*}85HTI71Yf_?*U>#qcgR&3#euVBLxE@3u**>DBI#$Ae(e&f~ z`!D{J>sL$u!~KX2@;v1kI?wIE1)rrk2XLk#H0K1)@jT6iXSN!DF1b3EeaP#WuH*Md zc|R~ea!$Ch^rU;XY(87)c_T?b{yA}x_9OlmhJ4cW`8;7>mD|hg&dDvLpR^z5pKB3G zzd9FuZyS5%2{S_-KU(<(zVDFyyq1>yhke8adF~lX=eZlWq+vAY0WS4Ln)3peIh^Ly z*gL|nNr^tv&iF*vvAO33^kdQYM|ciKs^j+-S1+64&lN`eGjE5Z?pZjOk?WY}Al-+j zFRb3pH1nKr_CWKI31jg66u5rjbx*yY!l>l0zTA3qj?jO{kqYiF&J^myp z?-R>)tflpg68hmf5Ow5zxOmTN)qUraC$@IXUq?UZ=>4wlH1EUt!Bd>~Ty+4tvReaP>#)9YzgKdFzLE2w8JJug!d{$usy{-gaT-PgPzl=*w+M? zEAXB4{JA#!hz;^QZ7iMVcHj(e(3}G}+nY4!1kUvq&4p*S8h=)zj?sshhrEvzZ#~HB z$L1jKBUhG#=s#9J-bZNt4t1;2`Qhtwg;49?%yUg4A=s;z!`V~bk7)5ey9@H%@1pbE z4P5fOH0J>>{XLrV0=NEsnp0!%2)`yJ`p6d}9=#a2Cs)`Me1GS{yd2@WE@xhx@~Z4Z zexIGL;~IOb^-bK8E7aL~WPkVD@N*f?38SVieJ1|;vx1iDSPB1O|G?+Au#ePwqw0+d zc83J+KiYq|j(IP)O{dXw3hzg>{uAd`NR4;EW&BTzF=y z@n-5nh$v$Us)ah_4we7x)t(x zAIUGA;yiD}`j7XK;_0_&?w<1Z&dL=^cm1*Txn4N}+efstAIANN3-UZTmCkcFaH(I> zoCmnf88qhwF8gbmQ)BN4za}O6$Y(Ea9`NTMxx(q^8V$IqPGKMNa|ODOOzrS}lb3GE z6}mR{HXM12d|wIcSxa@Sg#T(yU$X4*1Noo(U4CxoiowGBIqpB&f7pk6yi>N}qT2bd z=VZ>cwB$eRBYw#9BoCeE0pPqdX)Xv{XcoGjM4OXikm2BmA0_sN-lp1PR;9>u47g|>?7XFRl7F~gfw-Zvn2e7`k@cG|7ibV-Qs@ap<7pe)aGuv zkF-u|xN+fqr!Cb653uiV9I}YH7OU@>c6Pq(mLFKCDsxWR+jK$v(t$1@vPq`>-VR`}e0qhq_cbC!Fhe@9w^h`RhkSzfkWF z#rhBXh{hB zLj5Dg?70O$Jj44)H2v5< z%-(0$;<=V#o%pV)I-Pq3o##g25?9fj3AmKiG-n1bV-3w+x;Pd8M~NJa=0kq2K<6N< zAD#zdJ!`3sOTvGwe%ybw|JXi^zLWNK8h!l;gO zZXuU0O^G^==0je`bRGXV(Qv?WM&8e{Imr76tsm<@RzL1PT0eFj!}bw850rG&$o&z> zbJJ!z&)vXfZlO63aM^#+oENyHtu%Kn_K|2lGU0m-{6TqmFJvp(c? zOxN*}n%@ogUpOt)^*>rMyX{F~`mP==`c6Jo@OrRcOFg=B>@CH1o6AzR#&d zAK4JPW$Z%_$T|4wfFs{++Aiyd{zDzb8s+!r$ThjCUHn7>JyZ|Vv2VVv3r=EK)+# z-F~S*p-0&7cHlgRXwCs#@G#9efioSYIrci#HddmJqxlduz&sSkypPCzgw>DDLDY@+ zk^J`+i_>3PfQ3KT98Ev&Ke~@#|A@3-mG=AE`rKs~c{pG)J@Vc7}MuYCE-6-Kkh%ekFb51-H&L= zfA~68KjeAlX*$mXz?nld7X;3EmgYjhd2?w_t^EV9ONly;=0je`#j9gB2enkkCE-6- zKkh%;f9yJjz5gxgr?LBIaGxZUN9VZ_xU>s2X9CW5k>>DzjxJ8RUxB$CYu}Zq<4l8R z!;J@Xg&W4LY~Sae!tV!-8lfM>G2f3w-jCq9G}bffhIz>KyZrU~Y!0&easSbMWNEL4 zzPs|y3#cRdPU^>p1ugjx_aipQeXE|%b31VUQZ(lP&QO}>oWR-2&>VVJt>2aCBd?8V znQ_n8=Y^Da{+aOivD|{^(9nmd1^Q7O^FAW?5q3Yv<{;|E`^c5uA7S<5{-gT{_7A*2 z!uAm@?T4|CxFFA620G8(z$IKya~|N5Z=g9ZaOpSF9C}u*-<9Yi(R_&chkg{b;eABz zBdmUG4x(<7j{N?J=%4WW?9ue&{-gT{yNc^wz8j(Hy`-se5C{$usy{-gcJzRs7u&o1ewvHK(NIuPS6be2ZX<7hraEqEU(`h1_& zkIg~UP5K_&uQx9V|FQaU|IvK}`-ilzEBtwxS~^!PxIY4U?x{iNxf{5oS~TYYF10qz zd4bEULv!d^wSHHkj-&Yy^AG(fYQy&^g?s zk7&t%*hl=3=h=7Bc^&}Hc@ND6f%Dd-xe#!ndNe0`T+Lrf^pR*j9itED-Xq+$@`Gan`f%)I-CaLcJRzVaQa$_m>#_3%313fRAD-CchTAR8|Nh zv3j0>`w<)DdD?w+p4)*l+)r~3;B01^a{}jTMsuRZYW`B9jxh(ZpRhheJs`YzGIv3}g-($o2YIo~=v)hloz3mg{En^%nFYaAg zXXSmks6H&~_o*$tYttL`1^PX{q{{D`-_Nz6j$FUX^}~ILRLA>;Ut9cRtCgfp|KWbb z0H5Pw??C6d5xA^}XwC#&Vn>=Y1DDc?<}k0-`dx`W!uoJat>eCW_v?M=N336-gGE30 z%j$=^VISc+NcUk@Kh}R-KUzQRACiu{gqB;!&aczqqOy_F>k4 zTB={{BQD7EV0Svt-N26IGJDaS7r1OY&0$`v^}7-|$oi12V=eixB=lqJnCD>e za**{O*N@hZT?bD2^^-ECo5lI`f7@$}d0yxHwR62^>eP#~-Zy>h0}oczTg7aP)#qfe zkN6?alOChayT-ajlqH(qb$`qAh6zkgff#gk$8m(YKxBiHY8 z{n+|#Vch7nl-BuhKU`{-Zfv(can^qq-L-ShYq9M=>>~#FoN{Lho##gUJoElEX9CVT zfac7=r46Jx(W7eqQX&UgAF}IdtYh?}s1NTW^6S}I{n+(1>i57G_N5~`$62|4m**hc zhgtu9J!jU_6~@F_-c{#I^;`Hz?j5b4iEaI`kJup3eS_#c zw*zN;hUOf=xdzjm6FC2~G?)J;QuUV-eT4NPTgRA#=tof?-bdsxe(^4HP=RdiR zu>LF7Oh~1%We;pt%rmb|=kU zyM09VAzQ~h2d}P*%%)n)gp}A|fkH|h`>zLhlf>sGPd=@K4ODB&w7o{ zb31U3u{7rZ&NGhYoWKRg)7-V&N8~zo)S2B&-$s5N6V~zV2VHsR+r+jHOX6Gx^AC00 zJA1IDYc-wKpK-M8%9>oiXgP?w;qyl5zY6ca(5&xxu3t3$SpT7ZKN-{Re}7xX^B z1$l0Ilg@KDaG5Te^8lCqHqCi~OL~{)uH8OzRKVwsPEA_Y@99l?AHJ@*`|R1d=WCp| z9PsVwcH+s4{QZ9OO;UJ0DC_rha^CD8vSj^mKY}`n9^>aS?757r-(lD0zirE9{hGDi zer{G1oz+k_adw|sv3Ce?Hm$ z?}4SPvFtzWBYw#9)c5E-4*(bXfaZe0nbT=51e|js&50VT`AZ2OO3%w&5YUf%-fj8h zOLYtT@cpL^{;x*Hwhxui4|S9JaE{RH!ph~TZ^`>PtYgR4f%b!UaQ(#k3h%?Lewcr# zBkFhk*Q+1@*ueE;^<(Q7b;JD}>esQ!oHwhqh;99_j~KQ{_eZ=R(s^zK&iV<>nSe|C zl;+I9`6khvntOhc4@vX5$3}k_u))!uqez?^T>erm1w+<2?_=jZ!XdB2M5 zvyM||o>*r%C6v0o${p_=I$!YqVRcrfuG}yn-rAvQX8DG5xqhO5!q;j08;xy$ao!oB z{hs0F%B(phlqp}S%RgN&3JGui{@$lwUJxD}SM#@{lj5z9ElcQK`?J{A57!ws=tsKG zqL}_TtLqr-BQD5u$5cAc-N0o}r#TOBNi%593tZ~gG$(4T=C6{-LAH*y{pwtVi+`j6{J_mOD+(^CCnAMrz;XMRKHc>p-`OqvS<=bS}zA>h2TX->^O zM7*|=$U(M_wd6x3^kdh9;~tvaxXv{B{u$3fItN+(a2<_0a{Y>@AL@qp&$Lv(*hdU- zpCmMg&T}JhX_+)<0?s#|=FGt97SPE!8jf5gX*W^?N$c?ZEjL(VPP~gO}!*K7wzkWOAr{?_rl2~KZ{gKf8=4XHSP47b;QNNLke-57Bt+$Hv zWA%K$B>cyotKxYo>KM!VVIOfpp1Xdc^V|(w!p}740WNtd&3S=K7idn@Sj}H0;Y0RZ zOG`dfLO-?-51w@Mn({vt?j!izmgp~@gYxrQtbXfGnO|yiQ13$>G5=Bye74qmPH*M< zUEYUT{jP;R;)gt6@1yfP0Gxd}%>{vT|4MTq-~zwVoaj+Cf0aZI@;*|$a|L!k!k#N& z4)Q)y^nG?#KXyON^`p-PS^Zf5X=xpZ`w;`Y4#c>E&T}Jh87pbd1YFiCnll5JxQ6D` z+(X1`Q=*TsK4j}yOFmRWKXyIH)-lgPItN+(SpRYTil-mzKP}ZS_7NN8dCFQk&+Whk z|DZVsaHb73=LF8Nk>;+&J`$~twd6x3`Uv|vMD|>P-)E4yN21lSmVBs0AHmmSqmFDH^Bkmekkya( zk>Z`Jvih<9(^CCnAMrz;XK$tRJOG??2h9b6^X{a%5OASgGsaJs!TX9mu? zkLIq$J`$~twd6x3`Uu;H**fMqNarA{AMYbqw;y5sr=|MEK4ODBPy3h7b31T`12pFV z&UTRIoWQvb(cHDzN21lSmVBs0A7T6OEbHLZ>)YuI-d}5PgS&?LSHxKpZ*H+_UU<7eaDZ_>V2pq>i5#6ndBRCL&jY}@Pt#lwxWE~j3jt>g(VXZ}HGe75N7(fYyD!H2otALx zV>2rA^|a`Z@Em0IW6xz!KX01#+f`@vR&hShK{*Fm{aF8LDF;iUep&x%Nk8l(2KXEg z`&l~AjlgB)(VPjm#Pc+VpEr_nf#$>-SM!$=K4jN}Y#n0`^4HN7{W>~UKemohza!4B z16Q}^eORoo@IK7y$NEo8Iam_)%lc1C`e7fjLGEWDXy>Hm*fey@ZN+1DWs+_wDr5s#Ge;r^K4C#LTcv-(ZjbFAY#Ps;l7`%AQb?CY1# zA2?Ni`g5{=+<(Q>uWg492aFvl>!&6EVIOfpo(Hd^^V|(ws)6P_z-5-DIWKV8=q zelzt}t{<&m-aCV@J5^2YBj`WWF_!hiKH`TwPr8B5^8j$(n`kZwT&O(Fg@7|xpgB=v zHGe75N7(b}JKueCX_HBE4&r+7_wJpO>XhT3=O_9j{9K0Bul%^3kF3n^!?>T*(t1z{ z|FP#<)o-r7?9~&pe&|2ULs5Uej*-_ftbTV-{rIoWI=PQ%$$!{K4DdPS&YS5xH{$1+ z-$HXH;H;Ht&J0{y6`B)0s^%{x>X^;JxXr!J9o{F`G1hN<<3*pPEsE{u29?l{t>e0f zmiKt2wp_=k-^G>>te;+9Zx#K;bCAu!{erYF*(F@qQPnf1b)0Y5m?lq6cv0v3>Cbg} zU%9g_?bc5GxbMM}7Ovmr>ln#@vVNX^$?1bF zbDxpUb31UhYBc8n&Q+b}oWS{Sqd8GyHGe6QgZMgZ^yB}8=h`0lo!4==53bAKfyCwi zLLa9Wzg@N;DWu;c_O8uemi5z89V_8K^j$$8(eH2d`3LgnNn-x-K2o&*SpBg7UH~1n zq#yPX7v#C&4m!`>z@^uqIS+8_@1!{|a0#_&E<8Kb_;X3r@z`HlZ>Z5(u4A5q^nFgY zj&GYXFVv!}&WAd3{b>EzK8*Q?p9`y{98{uyS^chsKH`TwPp(bpc>uV;T{IU2&UiP? zg@Ci)Lvw2E9pTqh5nCD>ea*(ZKt{<%*+lN1{Jo1Uer}VxGr$1{j)2H*T|FuW` zsx5LXl8(9jTq{2i!tc+q`fY!);kz$1koCiT9O@|MNvxi$;(o-ip!j^y`N+IFzY`p)i3rD z7v#CgOy{{9xXcG=&I4R_bDHx4m(-Hx)Y(1ct5TwlSs$`>tR)|ognn!t^BgQ*4zm8^ z`dx{B>jX@Rl%7A2t816{BU-w@gnh&hd7knbQ|788#OMgz7(p~369ko=y*hdUIrTZh^wsf8wfwOj?ITLVcHkva7=X;3e z)Y?Drx_WeL*G{Lau5*1My|0YxqV(^<=LixTOJg(iO-D0n?1XWqMH+iy9BK#iVQlRL z^Fc39510?*?8jg}jLlEMd>E%a4fA(Ne`o&?m=EKG;V>V@_E9h&#u;fa|8Hr2@J*Nx zSp`8EZb*_2j177QgalW;)cTI8+;Ll-*SrPsI zt*qa~*CwnfZ;$iYx7J&FI$u96?e}q=VS|38>nP=Gq&&3)=jlpw4&Z{xH0K1))Q#pM zU5{FRuUs9=>)qsL`h=VQ;B_4SH;-P&vVN`!cO;l6$@*!jj+OJDoP)g^raPyY2=-spQA_$^A8|pRJG#?(?glQqC(U_)OX@{)Uf@#gG#8#7YW%q*>iFH(J9W>6 z)iKY(;??n(_pC;1{yGqKI{Pjiofk3^!=-HaRGK1rxA zo##g2()!Vy2{>PWnll5Z8%T5EnXSg3mFpu%1+3?c*+JWIi+rxY>zK|#_Ib$f+Gj03 za)Zu?I&%Grr(dl$`v1q?xxmR(zHxkZ)@7))LWWf9+C;R7M$!(sjEGHSqS)M;M3$5x zu}L-ESVbn`ze+U`wuF((Ii)h>vMy;{+ejwYb=|S+^51cuXU}-;JY(`X+u7sY&*$In ztMB{o`0elcJ@5OTGc)a;`RF2Ze@+`Ys6_p;??-NIeTQ#l^%(J?61h9Z-KnkjufslK zg*>+mp!3`YoYziscHj&HY0d$h^?908WA6yPrlRoS@z-1ZmRnOVq93*NJWx^Shq_@M z^XC-kKEmc8>p!j^t)H}xxgem9tpBuBzt~5dkmt@pbe_9_iyK07Zs3wqXwCy%+EAJc z&1^OPtV9m7K4j}yOFk?L{n$F@IT&3Ivi{@x(fU1gXhEet8*+sXXKYXRyDLXn>zupn z{Riap1TEDs_7N}SdFC)W&waqzUZOcaaITkWE&!Zw1kI_jcZ6P(5;=(L80lOqN5FM7 z`cX?hEDHTlH@r{GbCAx#NdDvc(fZ*!u=y!*(YaE2*F_&O!0SMaBk4Rh0+;>@&6$A9 z8clO%;Nr*7Txe#i@nsGtVADSeaN0GXvv2~ zp&whv{CTbDa**{O*N@hZT?exM(^CCnA8|sSyWgPm+yz{MljhvOrMyjZ9^f+Gp*c17 zj?imTA_rL?vURK_9~OmvY#s9)j4lUR|8f0j{YHH><+i)G<_gchDKx)1{>u9!TB={{ zBVNe!?04xr_W|daKy!ZJJQHay09+uA=0Y=DjXx`qgY15UJy+0@50%g_Y46>gjj6dp zvvV7sTAy}h9rGNdb1;(sxPG*LxDG78cu>$~xvbcy&1#&VO7#TED%u z>#rEt{3N^&>QRB+4{PZ;8SEog$n#Veo#!^-44=@P9XRWBnsWf>oI!J;nXSg3mFOd^ z57~1CE%~r0^z&!C_w70)zYdJwC#G`{?+>F7wVZ=W_>a|3%k_(W#0h!sok{1p3%I0N zH0K5`?Ngfb0GIh0&8e|>gkDoo_>iq*o`cclAX~>=KUzQRAJV?~sHUG=Rib`b{n+ya zEv*Bwk9Z-^<36YJ+y|WNOPcco=X29s0660unhVWrHU3-_KIG4>Mt80isg8Lcq5H`9 zS(P)7$L0vABkMmc<)9Mv%kD?6hdyF}&+)L$rSsefT-H3AGXWRBfac7=C1=o_8hc0R zH5G*q**fMqNatXrI_CP(`eFaT{Rq1s*3x}qCF+;ekKGSzNk80=SRv2TzoGNo2At_T znzI9EUqo{b;M|L8E;O^%_;XSCkga2WpEJ4~Wb2sgN9)J-Vb*_I%0VUSm(`E;pO*B) zKH`Kt_b;LI+yz|9_cZ4QE@K(Zd4S7aPIGGP9ii7$6h36@nCD=0Imp&A*N@hZT~D+7 zVJ+pL67|dK$DV6xNk8l(UdZ!=m2{r_fb)nn=LatE1I-11Gq0k#(9Blj&qd)wwvKrY zMwf$Z9drF?{ibfJ`_FA($OXa*OrnXDCs>?0$sxAL=KauNH6pu#Xtv zbIKh*(Rpsf&of_5b0**{UYaulm%4`L)Yv;huc;_~Sf*r|vtB!Xj?l?O^keXPZpr^7 zo#0pSQ|g~9J*c}*mmVCd{!0n{@O2MZ&(BRC@Yl?@V@2GT@cYDcA7S-7m;B%_PdzH@ z$L}xE`mwM7TAymGc+*$1ep>P$_7N-Oxww|ja~p8h^)zP(&bfi+9Kd-u(wy3ZP>CF5 zeK>4T`?%wSWgqf7rt6r^!CCr5W1o9u{jmRPVLhmX|5*KUc8GU1FI7TB9l3td`S1JN zmOu7;xe^8I7%lCGv5z<*&kdXCJa++?wuR>0z-4ZwIS+7g+h~sWkz8T^lUqkU_5jbp zP%lLDe!uO0KbzdRP6-ipUd}_5IAru9SLN&V!gFy!zP$FqjY{?pPr z2K$I%U+_d-r*rM5^V|qrd=|}_fJ^?9=FGsQ@1;34_KwhNQX&UgA5NKN7!@0JyJkQ!k=eZ3y``l*@vhD`Y|}>_u0*tWQo-!=-6|GLv^ckyuYkolXa|w|5*J-m?xz*KEnNnbr<|j zovX6-YcoH!`0gF@=jvkJYN?MnAV}`Ii#|dfgJa%@Q>#d0^M2{~?7b7_!#J)E%!je<9+(f~ z^hPlMZ)v{Y4D(@}kO=c(>}Uh?VJvol`3I!=hAuE4#z{7q4`Wv^m=EKuelXuJ%{M&{ z^I@Da6z0R&GXmzrST_dd|0B(}j)(a$PJ0LD!`PPw^I?3gzEfhI!RFN6-@aZw&`-`O zT<2n51^*7bPloT4t)6gyIBk`zAL=IQSiEyy3IDO{jBce(Z_a*K){pxyx^>2_cP#0# zqtrzK&r7uAzk>T`(2sQIrG6GJS8c$#W277o$Jv4N>uC=Aq^ShWh5PTQ<=JG63WmV z?ypkH(wtiQMY!uwA_rL?vURK_9~OmvY#s9)j4lUR|8f0j{n+P8xBu_C;qm2S#8-RG zyzrt$o6qxkA@?(Gp!3`ZoVgs$`GIrXOmhL?JaIG^F2B|C=St)t`ta_-i{lQzdQuqO zID{G>_! z{<41Df6?`kGW$CJF{Y=spXW2ceUd<%o>l92C2|n^ z2-Y+95A-9?!E38y^b+bA9P>UR_mN2c4v5>vtvk2HZR!|$BgW+@Vt3d;9%Q&meI#$AeY#-S$dQ#e^rLumwkK_K!f6g>Uf9U}qgHHAz zTfd&#V`q+>DDOv5H%Z6h{hUX^{SnA>=N)vOyMT+UPIGSHl4{VL2e`DFG^f`7f!C!( z9kV{fbqxAZOFk?L{a#tOxY2~Mavk#=jBY*Ma;AM-UJsp!I&%GJ{n$Q?b&Jn=XsLd& zk9Z-^Gi%X#?gP$t7tQ&BbD3x^0G#h`n!~(S>vtt`ko6(&BhkISh}Dm+W1fT2eXSEhtnFQWe>KkgRV{7~Y#{!8-`U#;+BR`q!o_LUq8nI zSRv1o8`61h1J2)==Ip?kn$VmBID1o?3u>(9FD3d&Bp+fOqaTC%6jvWApkWO85`=!RSL)Kkh%;f2bSw z5q2Ge{iEuLf6@-!r?&)iq`0mF@m$Lbd7j;Z&T}7d4hzlsf%CMaxd3p1Rx}sXSj}HW zQODtYxM}bsgY;Q3mY_bx)rU&x*Y3_+o=g8iK38CKaIJG$y!H7Q%ZK&nTR-Zm=lbRQ zC-hv4%|TW_%t6#Ke>(SH$n#o}`f!1MZ!L&h&`fVB&iY{=F~Iv=nOoC&ZUjzjOLHdR zbXJ-(17~SZb3u*O{G~(=)@#zb`MIWg(b}}b+OC6R;Cz3*fI5gRPtNUpHZL(_z$b$j zJjBoUgSv#~;M+;A&nxy|_1i5-dAMG{^>m#@OEY#Z;rg-q-9O@$U0SsAEvq;<^sRK4OJDPkn^Wa~p7mM`_LuoV63pIe>F^raAPk zTE8pd!-o5}&MosG>q9vQ(SNwEDb7ArLcdqje)_PPExdkOs$(Veo1WV!Htt7uKPRta z(07Tw%Jr$dl<$Xw^%uI18QP;{t5QG4h^QmmhewZFd2da>&a(dgM|w3#F5dcKA8|sS zdz0uqcLA65IL*0%OY2H=9^f*&(VSZQ2VR#Fb(}ootyVj>uyri=5v=12BbSbUDp0(A zsDyrvtG0e_ME>WRp^j1=%ldW9e0AUYG@YeghkJXLn922Hb1-AZih;K+lKq!fYEa&` z`*PvA)ic6f9X@UUY`<8Gxte*B>=U;QH2 zv6O@71@t4{rnzeIDqk6eIrY59Dg??>p@fw6VWuBW+vw0>+KVfE8e4i-fp(XxKn zM-1>e<&Kx>JU8O!nUAD76L6MMG-n1b^%a`C9{b4RgyDTNPlvxh;^^wU#eXEm^6h~N zFIMix?{fw{5_+HAvgP2S)qP{b-e1D=K-4ifpP%o`=ldV-a-Qv1QPz*m!CJ!2Osq{zDy$vwqk|tdQs8Xgberz*)!AoEhc$-XF@G$7J$p>hAEAAOT~D*;GFZQ_el}u4QeWPO zS^e1kTsZxP{_n=_-!|giGzNZaUw$CG(RnxRERD^ZZIxzGG(F=Hd0@_eW^`YS-T~ztccjKYU&veW<1TbJ#}= z2ZL_X>0A@(JU0Rt{{hXJfJ^?6=FGsQPo}v`7pLNXD3OEHzJ60bW0ZWp%KDJkF zpGI@?Z%&;*DbYvRa~al$ypPa*BvKu7{b>DI|FL~oOY3PR>X-GOmi5Cv;)FamO{eqR z1zg5VnsWn}{Xd%X0GBX}=G56e#rvYfXZQT3^z0Z*)zsRaG2`@>U^VdP-Q?%pUR=6jMIA4xdf;;r<>vJcty%p=>sz3`7W z#?s=Js?*Em=`BHhcpb}iT-C6uf0b(C&!@4DQAe)d<@bquKmWk(-9p|kna#oO*|(P5 zzCXq?sr(ZIPqyIq*@OO}?z6M{q5n|F;_N@{BZfoL{Sl9w&T}Jhmbo-%0xtDynll3@ z&ZD`Y#%liR+NDh!ovxbBd9l%@%XId=@6vaCjv#)j^!GDE-?Yz=#ts-~d?t-OFb;er zjj_*KGGIRF<@UgQ7-z49`7k#B4D(@}`YX&oEd8Fnn_xbS<9sk5#sD!OJ|@jK-463% zoKh3!!`O2-%!jcq0p@2*^Q}!`K8({Ig!wS`wSxIDzE&MTH>2u>&!$U*&!FF!G$e|R7A zI;QLRsTS|}w~v+eWBUl!Z|tDIrw%Qlw*>uFT;crSsedoOd0~*?}`` zpg9L{){QiGJ@%0jt1Fe;oEYARxQ;&N;}%j+22k9Z-^Gq=%s?gP%Yo#y<&xpvT8 z065=Hn&W*$Cu-S;MbSrC{df-2Imq@Au3vQbmnJP6`Rnq2@_t0pZ@qw7rpfyw@H!CV zZaUA6z@`5|b0*-jvS`i>T>M^|L+#c2U5Om5cC5Me)%mOscf)=5_5412z8R?Zzxw?4 z8Y6P7I`N*VckcD|yIAmi0@gD>->3C!{cgumN8e}tC+8qP7o_!DHo2aCBV|gy^YzYQ;p>>Mr|CML zqqM+m~LIQ<15yG@;XLKIjBVa-n_8wOCuJ=h^V9FKW*xVeZ&cQ z?*50)a~E(4hiT3YT*?ue^8lA|l;+ghKk&Mg@L{8^N8VaJF?=2K9HetFV}FxsHTvd1 z_X|3*betl&kuvp*N>E0 z-?3rt?QH!XDbP{!-(Q;05BrE0@;v((o##H_94Bbb51i*D%>{r9oT53*Yqfq?qL0iN zd;Y0!#$FU^x85+T!U#N-*F1nj`Bctz*s$=tC{}5BrD#-sj4E zhR$;%aAJVwOu*@KY0eCsC6DIR+CT8Rl&Iq>fjzBT4G!-^UdMDDKQ(mcfO?|59>n^U z*41bD{iS^KQumjz|Dujuzv%9>qi*=TAgiC2>KFTn74kgw9G&Mj;0zaO&JLVaC%qpc z<}Lf(0h}|2=Gb{^8!ORABGs{$e5izeY#nQPJ*b3!tpB)v*Vac^{j^lS*hid@=UzRX z=PuxqO46JgxU^C<=K(IWG|j24Z?M<%U(~Ude5izewX&*iEz!7ym~`Mkvo~#5o@?>@ z#Poio-}fW>E-n{dKYo9S*3Wa~Hhs@-vVLqI(USkLk9Z-^4xzl3bDI)YdoH>-jJ0SW7-sLO;wuJfGI` zdQb`d*gnGbi|$-2lK-?+zt~5tko)PC=sdRpXEM^99XNXxnsWf>u1a%kZmVtlU(~Ud ze5ize_qC~_v1zgGbT$n}eEKVq9u zH8$SLY^nop!3`ZoTnDe`GE`6rnvxc=DTQ)&26=fmFOdNYi?*e{F@jN z{m9m_mVBs$erz9M`>>YQgG%Vf_7SdMbbTa}|Fl%U*hdWTIpq!$o##gUJo9=qX9CW0 z56zi@ORZ0HYU>;9_52rgtR){Rp`W$W`yZNz#EJv@ywajmj9z5>FuzYs??*Z$ogLh# zZFv3oxhk#S=xrZ5R{bjL$M#_@`49Vu74lqcK&V$uYOZAI= z#0hzBXhP??3%IoVY0eE?rkUnEz{Nd4b871w?DhN?b*v>HDxn`+$68(wDxn|SN4S31 z)<;xZ^$*gy;IHsLc{}<0ljRpx==%)jr6*b%yJAGtk?R*-A6fg*sxe)i;r)jhhCU3A zZ^{1+1ixbP|My(!LEUw_^x#nSU)VIQt_sX9v#Rf#w{*`8(1aYOdDr zO5|Xl1r@3;{3=F7Ki2$k>n9hF$nO`5T3{Xq$HjF$qlA7t-kq-VPtuDOXYBmx!uXgg z-tSl1&uQa*yOq%Il?uDNKhiC{e%OCeNAADN`*73GZr{~Rl=Wl#FzP1hSiIkNANzD%hVE$=ozF{%UhjG$!m=9yuk1!v`Szefb zMw)Nh2=if_@*B*Dv1cdDhp}!i%+HbLTm3K}#%V`kK8$^*U_Okm)p!3z&TA>Bl+f?5 z_BE^j`J_$^?4CHkuJ?k#K9?)$$DhLpR*XJIf2nXn@1K3JZO}uXCg{YRRX4`m-TmSf z`eDtWj=?cMcQ;>>C03W9JKt-5>-TjrBJNk&=lM`KtmERWAFea3(2sP_Ncnn6j6(il z1J2!_=Ip@v2hf}YIFp^`3b_ zK-Q1#BmCTxJ~s|Df4u$BrZFPw$n}eEzuIxw=(mT&%YB5^5BmrDusGK*_7NxKx&1jh z&t1S}KTmUR;1UMYoCmm+7ibPMQ?1{X=p#MWzErQq961NsK7#&}{8+s2<0_%ws29K5 zP;y6%h&popqRYV@&i;1|4SBAa)lW+~sD%H?2;t^Nb;Mp8J3^ z52HChaE=#gE&!ZoIL)cGf8cc~;lpQE%{V#!?O5@~p;aSJn@8K7tSEoHXW!-ZvWgqe!q|as8 zI(~KCnlH1OaQ#B-hTy+5HGx$GnfwImqru zxPH;)AnQNAj)_h`)_+>o5BrE0@;uW?=eZ9!+q*R92hQ~#%>{t-y-#zYnXSg3|BF7N zrS*&w`muG)_7Sch-G?Lf5w0JtAL~E1k7!9h>>~zv9f)xvo##g2(kIcJ3An5eXwD2= z{A8L_WA6yPCM9yP=Eb@%)YzsMXKzS&rv0}u;u{a?N45#MPmK3BYmRTKn`(-+1h0qR zXP57@fBn_&DdXOepLbinNTC-n6roApEQE%|ATh&p!f zv*wgPIyUaw^<=i*5}eQdC;M;YMn{d^4*6V*UB{sR z^6Y~SIF=S~|6w1oLY^m2q4V4ZoPR3K*?}{COmhz4?9*s2=utI)DbYt>?|8`H?Lpax z?0N=$_beW-+fOGo)`U$d};*ym)Q56pLz5PzN3Ebq@Z_2SEG zmdy87)r+l+i^|vj>0;t5hyTzW+jo(Fu0XzzL;Fb6ZhyC*H>ZU7K(9FC}vD z%&hgdtY4-Vx7Dc9VcPRCV%&SZYdrjyUJS%ssJ3`UjF|Y!y0%LjoJbs7|HtZcH=X7= zm~W8K9GuX1*7=J=Wc|LMW_{2;P1aAU<0FZvW6)nb2jv|6Wy_|r^`4c_1@&hWvy5NL z`k`*ze}%t(1nU-c9DHD9+0h?pQ$Oq@26&$N{-4#;=gIrI3wxIws4!nX7ZmWoEm#a=rt)(#}&T#aqTbTWFNM@@7-hN zCdZ2CM=kkK3H^FhNxALEVX}TXb5iH@I4##P-XBICgTGIHpIyGsUSh?8FIVQjpBw5} zRoqnPU8i0=JNfR(=8Z8T*N^Ta>^i3PjX!x$hCC;OzSB}4u|l4wucq_d2ApXv&Dnvo z|4MTX;N0tIE;O^%__Go@$gT&q>_a8=W9!(q;qD)suZ|T_M=jN{68f?JYirOqNSwy? z3(X(uK0E8bs-pP74f(Gt#(lAt`Y`TCoRH`K^>m)QfJ@1wIX7?_n`q7hT=r&~3;o@x z@#mtbV=eno3H@HK-?3}+N96ab9n*QupWmE~6;Vem)v*%#;XVZW345-}`!Ky9c`$wX zyH)aE&yG53SwHL}UdZ!=t#qFIfb(plIX`fL-)SxYoOwIVsj+v2UXv1ad}5&f#E&WR zxeTsj(2u;1={ny0X5zGg!(v6$k?R-TePYbNaD9aLVcLI@`iPeF!#-kw&nb88p!3{_ zpJ%?C=1jm@_RyRexYR#rE;O^%__Gpyxp?ErgN}E?2jJ~ zI36qB5nH$4*h#VCODpQMopVAbqK?0wm|cC@nzM=1r;MF4aNxOO{oJY&{yW-f@j&B0 zv0}pV_np1-KOg&prN7j<&wEk8{qT$u7aJ_ye>xF;7|gZe`n(|a5ijI<(h)k(eZcvS z(VQPR<8hh`0B1Wvb874zq1U8@4;v)ha86vV7kB(K@t*$2V#H;C3^700MknrF(J?)6 z1mEXvJv@KDo7ZvvFC_H+wTAq8*W&pz^kTpA(;ho;t6p63<*(%iRnm$5A8Xw2=){Wx z{{E!rF4uGY82v;~-&GUekYA6zYGa>X$6azCM%|?E+jyEsr z)p=S=ZR&@8#1II+JAzKG-m=XIfv%Vz@-Oh?$X7n_#aC25qHB^Ds2jR z-ssHtt?rLE>&4_*wa2acTqp86rq|Q&TII7!h^6XUhw>Ow;Ma7v9TQwXpUD-iP!3LOu68Z&jD7=kAc77wq%##{R#Q z)QhKkf8Ha0icSprE%>Dc|6w1oLY`-xrSsedoc$cl*@1JPr#T03{tGlGDX!jsDpALK z10PH|kpH^5QeU*+zOkBK{MI;e_RBUo2c>hZ{jeW7!q?OJ_6S`M_A$=fT_*qilGlz* zGnLNYm*jnu-s_9HF$Fqu{pcL*(fGyhn|&hpVVh_7+#g2i#rS)3T71w9Ux%w-MZ zrp{XV-DCNmKZiP2|7d8}6-~9NANCO^c~L6( zmrC@J%*0b^FASIKxXwK}50);W7i)jnWBRUb>w}R?!(95e`6$ z(3~GQb6J`T0Oz=Y=0d%%#-EkwBZrzbJ2q&2Oo0!19Y^=vCDt!KcgfZh2YtoQ zwdD6j$v*ee>O;=n3;-EItGC&q?zQc9;+2q!(a5j9tTFK8&+Q!Tj^m zeA8<%AI2$f!F(8d-iP@x)=h@_7o_>tX)qtgY3VQ@#=b9LK8!4!da#V>dNk{Bq^F<3X; zf3p9ix;-ikom1k*oqG;kQNJ&?PW|NQ&eOu1ofn))pK`KT`w!O{R_I5%3R1p?%TgO~ z?#eW02hMM#IR|j2sx%kwderjgO7s!*A=We2FZL0vWAtNC3tq=p)-mdbeFSw}_u2rL z^T*S|#l3OPN7@wcIxY(TvHGF^P)F{+%lk0aZf?oLJ~~*S-=Stdj%_(P zU%!c^h7PeD7Y;a&l*rn8v{=`%lKPIZkmez+XX&cC$xI0 z$+Ruqa)jjLM=F$aoGI4+!~KXC@;swDo##H_%(ZCF51gYm%>{t-)S`K^{eSE7z_ z9WCYI9--RsFFUjvnk#I3d%%Pbz7Gh)jPGCAdhcFAS{M3?wGWFzzq-{=Ropo!Pbgc# zJpZ>>azHnKfsQ-}3(rCHVXvnQx14z9tnm4Qd3`p#f2Ke;?!Wx|x-t4o2kN2cg1C-B z{iHs8PCy;CRKM6q3~-+$a2K8DM&MHG(wqr6u^!Etfz#EeIkohQaMz(k4zfN(|6v_V z^~-ZGSit|Lj=6sHa|Epa(09Mgym|J%7AJWh$@d-gJS6JZ)O_N?G8|MQ)P4rdubnsKH~S6!rxyy`TF)&``hOV-I5<3ez801 z=Yu?ybmaQU`l0WnezHe6{bkcKk1q(oeUj6{8`EcRS%3d&=*K6D^?3sJ5hvui^FBJy zUBJcNPjhbIlFT&c0WPf>&0(FZ^}7;%B$5xMJ`yPKV^AAj$KmT3&lRwqwN%GN;XhVC z?!V~PG3Yz#IS+025ijI<<^yz|`+&2xpgBKqu7_wY0Guz8=G59h@VbGKVf~y z>o~ePW^<7Dk!#bB`;XQS>o(keWToj)7fL(bX}YOJhB2sg8@nf2@Aof3*MDK8(JT`tjj{`-pYH0KA-)1Br5zy)kHr`G;~*QG=qNAe-Bp<)u<_UWpNu`ez>vL7?BL;Y%D{~Jz&yB!|PtlwSI9)HAGXrPoO>>ynYW=Q6A7Oon zIr!eKUmcv;UA`|O)iXce4|*f?bztH2!*wCnF`iQg=NH%Ypc4KIw~jgfZc?A}4;?PJ zFUS3Nb+2DS-{F2lOa8+?Vud_UO{VkQ2ArWU&Dnvo_M@QtyXq z49*d9{>+TKsZ5Tr@}7C)pZYNW^$$BH%^mPJKUWQAROq>Cxc$hs%yRet++ThjJL(vm zUtG^sv5y$wb3AM>(s^zKF6$+lGXWPrg67P?B|B&?sIi*AilUD1*z%XJR{1>PwZ&7a zFWPjLpHJr-BJ%qi$vMdOVScW4HTubYxZJG93Ht^Fgqrhi9sg#vGu(ey;(o5>g*;Dqlg@J=a2_Yk`GE_(O>+U@%k<{&Y zg=(jSo2q{|rHyz}81dUjqnj)`CbXRTc-iW|A1c=R;klLpKBwIA9-Ze#{5EvKgu(~{Mb3+rczVuZrghH3jL%$%s>AooPO^ut5zo6n=6d? zbHOfqy|V@Hha%PSeocLT3-%E!ol0}Tj8yZN5;^$U zqH0}CbIu88|7kulZcLu0eW-+fbuNf+8@uNTa{?VcT=Plb3jKHv()*D%#-}@v%RMik zj(8q}Imq>+^&6Emd*=3Aa)iFSj+A$OawcpaE_>g;fi0ihtBL)H6Y|{fF`efw;L<*! zIX7^b(`n8FT-;2WQ*#dqUYim*Snr)FPjBy#pMQhwPrj==eMJuP^)y|_18%5aV?x{+ zVdB(P7o2lWUZEe)L0UiTzo;YcBhj6!wy+QT)O$Erklt4z=ZZd}rTd$>AMrw-C;gAk zb02WNSv2Pd&iEP41%R{7rn&2}k3{mJl!N?ptiqiuu==q%sHHkqVjUAnKkh%e4@<8f zxgem9xQ~;3xJ#4o(`dLDtVW&A^*NpAM&RPzG-m=X`74?;1D8IB=B~#+63K_Wj-#t% z-bbQaPqY4G_2d4d{fGS{+#>ip>p^y3%E1@;C(N(bgqhh z#0zoj#ftwbLw+<&ru z+<&zH3h%?(?jr`B{!&zXR?>NH1kUmU&6$8p{gLL(z=^A9PVIf9YnL`{bh>IfXC>+H z;T+lY(k0__1o88vKQ}|)v@ev#4j5-FmBtE(x3G-v5-?R4s%!hH@QJ4>7+bNh20i0N%q%VW5BrD{^4z|j&T|)V*&Auj4P3$|n)3jcvYF;kd$oR7qK^L>T(;Tb zz2^&_D`n5$c^%VroVQ{5Q|>wEh1^%pB+ea-uk)32P)l{Jg#W(V`1c#j(&Xm|B>&0! zasSc&+grQ-ih<2f!sq)Oy*^%F1bLpZh0b#yaOQ0^=LgR5JIw`v^Y~~^t^EV9ONly; zPb=iPC5z5;8*tveG-n6S@E6TFfV1wW zIkol=ye=jB2(Du$w7mFCCqs6D5Al2f&lS**!E52~<7vM1D~Z)5=up3gH@x}N$fu88 z@xD3yT#L>@)K7Zec{;@`w#0j=ga;R+YQdX;y(Ks@#CtU$D9^EGEV#Tky6F`^L?<7cp=X-57T+>1I~7g z=KR39vS}^=obNczsknt)x-=!~7=3v8dQg5|3(pnMkHHJ!`;ja6BbVzZ-zV16`E=3w zPu36phdOfq6}}(AI+psdT)(Ir_T%ELANCOgybi>8lFoA@aOtOM&IDZ68JaT#7ayRx zpvG$cQlgFvUr)ip-bIQ7KTllXq*a{XfeNJy{w z^4uQ9`*Y&3k60nklh4w5ZUfGrM{{=IOy_CN0i68;&8fME1g}krI$rm`7sr3q{EX0F zH*egMVW(hUEY~qVm!a!8ZPiP0l~l<*(+ zVbl@t%i+2j^+O*9>wxcv<^3@G`mfVpHZAk`f&knnIjzahIdejuyD!pt?gB1BFTEZ- z=$*p8+`y&8(wqmlj1n|g*ndM!f2KqoNAjVx9^{`_7~SUzoD;B~r5xm+m-%n?J0gN>HOz`WAv9kSj3={*VC;3SpB&FX#ZW^I?!A2zMjF~OL5)L;klLp z-sj4EBc10);KXt?X97+aM|1doT$b`Q7wUaA{;WhFxjG;E1gV}SKNeRX7KMI==b$#~ z_`lPS`|oP|FuNZKty|2r;#$AhN34+hskhL1ZUfFxiRSFUS#PB|2XM~HG>1B?^}7;v z%&rFu_aU$2tF2?+N1}TjBJ01x_2d2v=RbBGxM2To*ZNt<3toq#rE^v6BTmS3uaVAk z7jQ|p(VQE&v}!cx0WR})np124!0S??k3{kzKUawETmjFev7WV5$3@{kRzL1P+J9^x zM&C*O_^>ALvwI=W3Vu*6&KxaU>t|I*zW6*&O73 zaRGb3AOd={z?AmvtA-nShJG zo94{GCD)}nwe}CZE+zWN)$K?4xx&?+E3kb;OLbfn{wrKR?!R#U8#|^&dfhM13(4>N zIq{EUxz|M>u|l4w*Q4{?2Art@&Dnvo-%E22;M@r`hk32m?@HA1%I*!tyYl4sjW2vX z!|OO)9kctn!gEj?>p>;_cXj%4|Aq4(zK&he@o2&G=IBE$?T2wc;)Fc+H>C621zgH~ zH0K5`qY2Gt|a|QZbfz^+_PpqXnE(-s#`f>l!{=?UCq7T{U zWVGZz>?2;t^8_=U=RV*(573++xIlB73jk+sL35bbYW=Q69Y^vZujAk-^WW921GV8l>?2mlbFnp@=QiN1?P$&poYP8k z4&c1)X%6#Rt>2ZXx4WvbfELx1zg&rH0K5`vlGpEfQw6_Ikol=ye=i`7=4KQ;==E<^Y_<^ zRL7_v-rqzW`MFkf=Q6B*{9KFHk6j0%@1%aL(btbao+mv<=eZ9!-{Umr2hP}y<^sUk zo}f9*Yqfq?qK`!KA+O`;>X^+z-bb!YKkh$TKU@dSuPfZXX2P+8_xT++U3b^g3MVdm zKO@Yw;{LuUhEn=Ve-&4EI?s*3#rL2&6L85rY0eB>`cpKAI;-`&5`6@H$gZdNRyz3Y zijK#@hx}Y2+FU{j+xZt#yb+5 z$@<}XTIwU*f8qRx`e7Zj>ljHtZJetX+#i8F&w859a~p8>WSX-B=YEFf9KiYe(41QP z2VR$wbxiw^*KxQy{$#`x7kzbeg)RQ~cQ4Az5lVJC^WuzG<>wpUv}40m0wByWP=E)=$d8fPgv%YoWNVrPP3f3%HB{H0K5``&pXv0GIF_&0$`v^}7;2tp3++z2mp#3U#(0Iq>-H zIq?2&=Y&zSRz4Sd!&z8Q%YNi_eEH{^O8dAALf}-J=ax*&yW(|Vn15QRV(n16#b-?Sg*!#L#- z%!je(ILwE!E&%gyl;&G6zwcwv{JezrU#-uU|8V$$T)}_y{6{PJa|)j4!{@`blpj+`n3AXYnRF^ zc%Dz{$A=4^AHaSb{N3{B2(J9x<*x6PX}GxdmHKi2U7i0NzqW0(VO-vI(MP({;?A3u6DpKBA@j z7fSdql785KQAgf~>HBAR-xhs{x=D3hyzk%Qe#8LxNdoWEd2R$Qbpp+qfDeFXb3<{{QE?<2B{OX>`|aL?68 z(vSNuI{#e{eZ&fRZux-Da~p8p$uwsN&hQbikKGK7w`p`%?qc>y^K9 zKf>#nu48;%mZalRq591yEC1LDkTsuj|m{{SnA>r;E;W7jSW((3~5%r0F#0 z0WNI@&8f3{$X8Vqb^Q1DhYoeBd`>vm;oiNy8}ru}1=Xk4)BnWpzwmnXGXmCg&b`J* zPHxT-ZrJ|&=+~y57JSoR6*6LZ9|^Y~`TUUqzh&<|E&SE5Q^#*dofOKfS#oT*D@Uk* zr0mqg$MW@Cc4X?75jh1q27e#CkH~!lUyp$P6H8ZVQs?hH;r-{&EnM=PHv5Pd@;q}U zo##H_Y_n+251i{$nhOBu`;6v-9#!*~5`AREnE?m;-n^^b80Qsu@e4kHh$}jtbOu+Zu3{U&;Ik4 ze6Gd)7oGpu`qh&E@IJd0@;rGio#!^-{PSqe4xDKL%{hRxXVBdB*hknLL?3!?t@?OF zU!dSzAN?5Ah@UIS=L&2eX796W>3mv=J`zbk{=6XFM_B!E{enK!lK-%eI3ds7-_UvP z0xsb@nsWn}vWVt9z-26^x$CiyMDii8W4eyV^h?@PzNCCEi1jP=WB&S)U`Ym zAJ=_{ydPop<8IW({WUp22klp&E@Y$ZO5B8oe`|!yTTc*zW zI7dJ~1~uaQk*nX2;66?Z&+q>i`w@PwMfZ_N>p(5}5BrD#-sj4^lFoA@aH2?aCg5~G z(wrGM%PN|?9{WfnAM!e;>zF+kWY^PLs$(VkNF@EZ|Dy9Bd#HY#pDN)Okp!t~!y|asKnHG5X-kAjlkK>$pdyAO1HXkSCZM+&!pU{j)p=Bk0Ha z@4K6O+G9V>E%=;Ern)3ta+e&i*;Eda7 zE~v4ZzmzyvVEYK0gXllJ-x<`0*Rfp3k@VA29T$cFcpr)G^*5~lSpBr*KkOq0_#6-0 z?{uCUfy>%Xb0*;8cha00xa3_lr{*3Kyf!84xZ0fg={>g`fb*Djm)6a}|7Oz>4O)&G znJbL0c+(GMzu@cXpeCW`GKJUit^yq!&d6DDp>m$^%%U4g{Pa(N??(#NZx5UcZUEg5 z7n~2a+xO5sN9l7yW1;PPQ=8;*{TTi5JWKN7o+~~l?w?2ml^YqQq2@0o`bZ=nmau*BLFG<55&am{hwn$^ z{Rpd{v>rTHP|v8F7V5Yt{Kx9Y{YT%QW7je4>tMCyKkOq;$aDWbI?r9erTk5EZs0Nw z(3}UjY(LGZxrYR=O^G^=aKXx6%_L1SOx2?{4LL2v& zu#b2l&l3*PdF}(wbC~A*zy*%bTmU%pF`By``$!}o;yN1r7}SXGN3MQ9g1YhhOIP=t z0^3Kp|L8u#t^@b}G}heqN%?(cwB$eRBL?`Kaz{3u=SKWI^OH1Z0?u-Z=FGsQo~F6$ zv5&AmWY;sij-#t%%)u?ciL)OpeOAy?9sd{m5$-?Qf9yJtef`q3&AySdhHLEp2;{kV zhR$;vaMrUlX9v!iOLGq3ym>TtJ@%1EKJ1ZIF?(8Lorr$q`;p7|A`9z zWl^jLSs(H`j;@Z`9Mn=B7lr>={kZ>V|FP>Bwtls=AI3i7g*;D+rSseeoUbI!`GGT* zrnvxcHUrJ6pjD8UphO)<@*zK0h^~&=9Mn=B7lr>={kZ>V|3%u5Xvu%rM+`UVFXg1G z44vmj;NowjITLWnH_@CKxb$)~M~1ix{-qLi9La~gj-#t%HV3s-$3@{kRzL2)tMT84 zg4cVo_cyh)AI3gng*?x?na*p)>0i8h5uOnxc{!kfAZ@%(RbL7wd6nSBTmS3)2(!#yMW6u(wrN(>?$p(5}5BrFr zoOFN0Q-jWPBXE}5G-m=XwGPdhffMhdIWojm@GrY|Y12lhtEO{~l%8XA?w0;O_#8oe zd1-8hzG<&4jU6z~xLq21U>v9k^I>eM3-duQcO#e&<7_j`hp{;k=EFF(4a~n;`aOF) zzE%KhWRk|Era|(`|oP}C+`#3=lOnktLG<2yI&MKR&G?sJxe3+zXttC zcej+U;d0dmoVz~F*@5#npg9L{rUaS`cRgzPbLHw-_933TqaP>sed@bj)pa7)b5INZ zeh2dV9Z1iy$bA@flk)JeFyP|3`Q?7SsEPMcRL+00eysoax$)KXk?{Iy>D(Cit4_#s zdqXa(UMp?9 ze^XKFhkaz`tcmU8YMv|5k@w-tU*{|JVcCCdAL0ACtLY=*^~3ca>R6ophke8gd7g1U zo##H_%n#6&InhOBud64G9<+ob?T)7;S*E85hFbC0p{QbiUfB&#Z`w=bGaZ&h> z_mO||`80CIq&YKix`$~_E&U?gbtqBC?CVt7 z=SpYJ8W7j%nHUlG$H8mk=UVc)RwVt#1lm9Pd=bH20sE_ZN??2G7IQtL#h!yhO(wfe58*tvXG-n6SV5K<+aMt!T7t~nI zUrO{5_I0XkA34^i6VfQ(VWbdJ%Oj&i=zb;)FbRK0@cY3%IyPY0eE?QYV`80GHO8=G5Fng4d=* zA7R&n?77x6H$A!G>4#&)p!OxgV(`xP|iVCKlWTDc=Ly(HypZRaNpzn3fU`YLbAI4lU1=@=oUa?r1v663 zUrO{5X+0?4r(^dcyDv^Y-f$tWW4exI{n+*3*ijEw>bsBYN9!k_@3a1!kWp8+?+DlL zYV~9N_siFT7LQcZRv$6I>p+a%={z?Am;NNpnSjgcL33u{;-8{9HTRIBmrfJw871^iKHK{qfy6TW%B*V)$d18H!VE3kNXiXZL>zM5$ypHKU!uDZyKcb~NR>FUg^yB`E z&VOwEYRP}tM-1>jSLPHt&yB!|!)VR~oNhSHnSrysM00XttMjL#sAJZLypHKQF1!z~ zEBL$+EuAYU;lD`w@%`|>@!u{uS6!#6`*YYwtdQraFVlH$1I{p#=Ip>(N70-EIOi)g zr_SynUsci7vFt-$$8;UD>uISE^FAWG_S*F0{`)uj$@QzHbqw|qC*-+zG@a)z;F8AD zoEx~bRGRYum-!mag?e9&KP%Bk3eQ2=hrEvII*zoS*3!9x68?*%AKwrE8~@4mt0n(o zAMrw-$GuMHxeqwk8#Lz!&i5wG1%NX;X-kYKayWig}pyiB>iU8Uoh!`@j4N8 z4Av!oUQ2#ni`9?4zp2G@Ei2@C`b0X!0i1g>&8e|>gkF;peI$|( z`MDO|NAP)H)RBE&OG|aEg#RMx$Nd+b|E`BV;)Fc+PoeYN1zd`Y=G?$#d`xp5;IgOD zTxe#i@#mtbW7dbfj_Eqa{t<3JqNQ^MCHxmjKfWK1&VOwEYRP|iuH}V1Pnb^Uxeqwc zOq%lp7x*8|1%NZpqB%A8j?il=iaKU}$m^J{<4EgiE!D9S{)?m^_g{4WW9wH-{=+_E zfX^v+d`joJ5kJrTbDA>&XZeEW%)q67Npqo@t;U~=qK;V~@;avLm|agx`pNg%WB1&$ z>yOp^{k6iqp1pAWv~hn9`-m0t zTy)cUZUfFbm*(uiIlrbk2XNkbG^fVi5qeEU*GJ?WTpd?wOWs>L5&g*PxUkP*$`LRR zr8<^#kl!Dn`*7hoDC@`1RcZaucX+PK_7N@aN1Tx7h6Qw zqq)$`R^!h~^pQwD#C0J0k@u0y`$*yX$vKF+Y2p2iiq3zse%ya_A1S;K%j-Zb`49Ia zUdZ#LMRcC~fb%V(IX`g5r8E}+&h|acsj+v2UXv1a9La~gj{i*^%Q>i}Ixaf@$@+2s z(f(s!$H_h~_}IMC)kluei@2{V&g($zBZi9lOR?x$M(4Q^xcHScX96x+pgA*e=_1XA zX0{rCR-%qsA4>aT`SS~A3~M|7>HN>J(t;2F3;jwj&CRPlRWG8B#kr1^(2so`BAbIX zn*Xu7&unevU{UDD*6;YZh5=Xp=SgazezA{OA*d_5Shj@kPo?0WjGT1}EZ?Ght?x?y*V_crm*w-45pK_@?N z#OlYcr@bF1-1pT?ZRDU5^~;`1v;KSKw+Xd=*sTryu#b2l&r>$gdF}%)kV$iX;LMw8 zE&!Zk3(cvqcZ6P3QTULpS620lrz`YMh+@bzwCaF z{e1hytv9~i=+BG7*XBDWmwV#;rOz`cuFp+lA2C#t?vHr3(s^zK&hk6WnSe|6(VQ7L zaXZan?W^^B*Dh_^=ycU|&U(_{!#Pn}*Wq&n@vEdiH$&gFuaU+M7-wvh#vT|4ev`)7 zXDz#6KIrBC3+BT(`ykARvH3X6hjD5S%)eFoJ$ui?d>F@-kgnGQV_R9cei*06Nn>+m zX};D)!+aR0 zbcXpb_H={!FxEW<^Q%hpt$koVjMMBeAI82HU_Okm)p!3zP9>Yf#ClC*M9iz;-=VnX zR8ioRj;@Y*AIX2ePQB~a(3&Zkze5eT-)H^D>c{;@ z`!B2E=i=6bXN4x+dXD?FT|n^u_JpNgvjDuG>}lcCdj`)uxKacJh&I%hRi$4dB*J-1`~ z2=^b|N3ahcEi+N5@nhZ<^^0|@h1a)XAMrw-XZ%Cwxeqw=VVd&;=Qu)h0pL7GX-ghx<6JXDyvi7lr>={kZ>V|KU0ieTcr3`mr|qh!yhOa)!=x8*ttL&Dnu7z{OppIX7@g@Op*N%nkk716*2+bgmux?~2pUO7sz2$AsG#^K&h_ zj&J_e9v_!?R=73wn^H^elkab0J!`3smGEEPzg9e7c4w}zK|f>qs9SRi?hm7W+<&zH za2@#Niq+FUYMysp^bs%Qd8VGub02WFk~HTB&Q*%$0>Jr7)12CSiV}5l!{%d}A+^MhY zofM>Vg`>j!zt+~Oe^WqsqhsIPEs3XvpDnj-Y`Y;>I6J$~-K!rBXyW}2oRItON_3vP zfJ-paoEx~5Dm3Q-E~6^VU5|YP*D>frc0GgV3h2k6M*Q_7l8=I~A7S;I(YtfaDhDdI%q!MDR6@TxmRSqN z9hLQ~bj%W0YfhffDzoF_U%ujfBv?;W9|^Y~N&G#zw`E13;C;h*AIab6#pr`?3vk){ z*Rg$=y}zlYb5(p^%K-0lWv)Tzxe++A7R{M})77ClGjNu>XfF6WQuCJ*IT*=@{9J*~ zK~_Kh+;4Q}T9NeQ{-gcJ_TlTHk60nkQ%!W9+ki9Fqd7Zp)_Z8q0i3fw&8fME1g}kr zJ`%}?ypE%*W8O!i>m#iHSpB&FX#cT&nC&CDkJHloqBtSXy$$F*cLA5wkmlULr8S~C z4{(`{Y3_RLBawWF=UV8;pho=uh~%Tf?vKRG8vIa|+fEle$B(*cp^lYU$FTlm`v~_R z-A7ie+CH+;a`{~Kdgvow$n&@+be{WwbKOsKe&Bp&nhOADe1PVz$3DWY2U#ETI;QKm zSC!2|+x@47`HSlee)#2+f}ze2-`9HWR6!qkHMyYP_veBc75e!;__{BwWA-_j*Bh1E+QnQ#y!YABtrqr-6@&AO z>pHOD{s?@IhpjoC=SJYNTF{&cxcEexGXs}wp}C;OYW`B9j#(eF&&xd4_qL>6Hf{J& z3H{jDak6zhbamMI9Y^vZ zujA$B?z6N0WA)?yqy5LO1KD%wvijA()qFx*`w=hXc|s>T&wapol4#BkT;MU9 z3jk++oaWTrLxR_)L?4Od!`+pK?#jA1RzyDruY>PLBp(Iuv$OiK=lg4y-uh44OWLU8 zqVON9-`9^F+;R5ZSP^yP{=5AC2-}C*KC;$!AntU3ZTJuOBL?`Kaz|G>&yDzb=G|$| z1f0c2b7tUDpQO2))+Vdv?6>vrvyU&r9bpgz2hNInYo5mrAo2R%dX8MR@& zHtM)2{Kx9|toQkEZ(9&6qK@2um-i9&c{ld{h@nY`>D_GF@E`UOE9AM@gU)jsaMq`3 z&JLWj7tJ|<^Y*4WHTRIQ9;8pMj|M_$Kt9kb^$rB06S^4dUc)NxVx zkJazSQ{OM>&@Wa*9l8H5_a8o|g>}sK5&O1u)0sE5;XmvnPRMh^GjyK2fJ^I3b8g@= z`_Y^SxVQl{7xbu_zm%xsNIuNEd2h-$(_=;SV^ANyACY_%+>fyOu{pS|+rvNH?b1da z7lr>={pPnx`Npv!Rzw}S|1R$%*gvFw@zH|k%_SWV3kPbp8`gc2HvETu#0ze5pv*z@UO;-lY| zzsU6q_uMM0AL~DJ*+;&yJ;?R@xBAs?zp3NKnz8?9@9YCztpESNv*Tvc&7?FpF}KbA zP@3E=xmi(0s!?f)EGcsnqp%{aR3^$&G$AX}x}nL4p0Bs- zbY*XyZ@=q&cCIde^f=e)`Tl&?)9dwoUDx}%wh7F~l01jm9MM(Po{8$fL;O59kk07l z>rA9`4(01Cqzew?>(0EmEdGalIk<;DcY0U!!GT-bKlIzl==7Iwa9%dyWVF-9snhS- zyE}T`dCn2>h&D@ zP`tl%Aj*8KbAz_ay)T`Pvg;DH{`k*pvFi}#UvN>!BzG=`t&0n&vZ&hPiBX=rz5G0nlP>)PUza4EWg=gfCY|R=zAlSL$eEW`9CgU* zkL@d{IastDl=iXeAKyRed5pCFl$3*V^sm%EY5gh5KQ>2n)o_0#GKrt(2GUud=IczP z^FG7ZSx6^L=IgS3j`Zr;sgp)iP2<~n?U|SAyS~*KvgZhlkKn)0LUYsgD2_dJ9DW?f z5jsvkg=02ntR6wQ(Rw;IZ>IHh?D>k;)3NXkt*?Rgx*upg9ov(%o{j?tXgwV#ey8pmcf!`52j+7<;=~#0yjx9B@-gX&|J#_4^LhI=`Zlv{e{BP^8IC4sw^Xi-|+MJZ; zyy_p{Kk4;WsGogqxxE@;^M)557_dtteDu|((L~e=ClZy9mPkmb@ zG_FIAFl^j4_f8qE5!ikw^RXoR$IdfsG>L6WcDqrU!UGfFK&O&cei7sniVt%sv~>ycs|vid_F?p5#q+>VmZScpbL5GS zJ8Y?Wv$*f6)?d-)@RhUPNw+Dd5txrk@{i3CALY60MSh+KNSB(y*M&%DewnX}kj_1m zugjKsk?D05M<1Wk?zw*E^I{(>>3pU*{A2Tj`KbEG&q3)NX1=j~cO~VZ9Q7ylPg;LU z@{i4t80C5R6@H$_NoSeO*Ck2kd5y12lP(hE>oVncw*0<0>QLIpY7Q1H2c>F4j~B0p)%q*i92xhl)nLt^AIwK3 z`N!snjq=1=QFb=f>a3SL`r^l|TIe$U)OeXQnS(fXL3 z2QnX3|Ne=8;&}}7jqPhGDF@~2U(r8l{VB;mHb;Dv=f1`KJP(jg|1Mt_BAxv`zAi#K z|NDI1e|L_Ebtvs)H3y59gVH`${re~WiPs~Io5aT*pL;qwbLqaWyT3gVRnq>xd~-zf z&w1O*2@M_M^_-ISRoNVgQJ&|0z|ZqI=^P*ObxG0%B79w%bn#_;-G6tEh;>+g%*5au z+fGMWJu0aV=|MchPQ)lPM zeZ9YG+czRpCt#45hdLOP?s z*Zp_rh**b#RV($gZq*2^9@RO*&q3+;oYjACLd|r4t?y#Il=*mDS<|F>lSTi~zsjgTc0FRFJa?|<=edJ)$u)eP zi*%+>_&N{iT#)P^p=mSMh;^v;ana^TrRpE{*-=LQ9LmDI#CzU|rYAj%jQUo@;tSXpXYJX zdGh$WBp}Z2Vb{9F*4Kz6O=MU3-C6l7ng= z|I___hvlxN^>>K(IWdQo(Z_PspLC9}`OAD%{o`McNd05J{dHeU8U4%Vh>h~xyMv$S z4$|p%@^voK*>>@D9@6=~p35s68srG8=Q@|ynxa0hRnSMg9F+Rk%=5jitvg3(G-u<=hexn| zLG^j9Ommn$pTKJz6>(Zn%{L0s5 zn&ikqX&t^f`2MQlqhcMZ_eYABgO7f`wE6ReJ`X@ieJn@)vHZh%^?~U1vt8Sc z_t6N zXZn+`bCJ$jPYt)SeHr!s$Uohe+5XxCBa9d4Nc>axRWtb~y`FQ9e&w3R1H|_)p?{T8e{7EU zD9@8e`FS27o%;k|7b0EwBwrUHUFsBHS2(k?@n<=5P+Euj{uOqVTQ03bwU0CPv2+fX z+ui-Uad%4h6_nA(a@3#HKQ@1vk4nnH;_#38#;%9qpECNF&5;=8xmknno6VHfaneP! zd|i@s>0G`pO*%_yzAn@2$(G+2M;)HKkCjn}a`-2G?$Xe)dVE#Q9HCvQV>_Oxp?-fx zLGSSHvrGN^Z9<2yj@8x*%ts}CUhV&){xC<5MVXHUe;+0F{Wolm=;(XOJ!SZLZeZVM zUXHIbkr-CLfoEATj*{}e|ZO8Zzzbts2_(&sK&{;6|B>?GbCk@_dCKbC*E zPjXoOUgvyU|Nc3R;^!$y>rYAj%jSrUa$mTRpXUzJ*)HMhT%_~q`8p5jViov0vGTL? zr{c&#X&)=84(0IA{zLul2Jf+Gs}q~<+UP$L{mi#;`E%Ea`&w!a7VUb3&0prD>L1^~ zF)zJXwf@#)(FZ3*TVG=Qd;KY?f7u-IQJ(86^7A}EI{)Q-U5IpfmH4^{>GTG^E<2}( z_^RZ{LFvANw2zfkhjRGG&ZjSF{hq(VO~=(al3%X>=6!V1`cvl!e~z&FtFUz0gnPAr zuRkUAFPkGV%5!^VexAok7q80KB}r$vlCMjX&QYDO6B9c-f08o?**uZ$B%B)g0vKpwvI<^|0z6-@m)|y>t1lO~;~L|8(5l|Ej;=A5l{OvN__TJU2Ds z=Xrp1;U;`th;*r@d|iZe=4O0dc1{oRRTW1LO8Zzzbts2_((^%ej{N_8W>C#v8bxG1$TJm*i(s{1s>%_#)&Yy}S2h}-J zv>cSak5js@rQRpz=b+R->GiPcU(x)N)}NB@Z?ZX}tBw035eq-h4WzTS=IczP^S0sZ zETj|K@^#rcJ;Yblt7oT98cj8gZwlU*?>mhD9`+o8@hTi!Xl}Y1*?6@6s@OY;W=7g59@W)X+0g=XVQ8)4g_gE9VgzP^;coN>1|q1$L{xO zJsn4u(Rw=82(;dW^|p1io{s&W(|S6Ne?jZ%Sp1v*zx^b~dB*v2UP(D6hktCplldsk zd38?m=cLp>^*p0!=ebh>45rNcz&}K<+*UFf71ODbq@3Au+%^4zPpn8m(39$ z<+-a1KhFcCOWnxVg-B=a%GX6m=kCVWWy`$C^g409}EZXlia zcD~L;I^hn!&O$m(Z@w;D=0&F0A;%n%)}geIl~jkt;h(gR)f_BZ4od4!^^fnLbPluY z5GB4Zfz1&c<+-&FKhGVci`~W7xk#t$%h!2GXS;{5%aq^Q@_RXQP+Esd|ili_WpcbgmnG^d|kH8i%hRW zjyWQ&LuntYbA;c=A0@8H`z<%~{=S-neE-f@f2x0c|D^Bp{iy1S9$#NvN?_M@N_tL# zU5~^l&-3o*=XsoTjtBUyJ`lr0{5&_1E;xj*Gm$Rg=Ibn^GY;eHvSnUmdL6}4hl_h}9n<4Fv5(apELskB z`TD4{MZHo2^HKGW?;o2V?7HNHv(37@ZWilLy&f)_e-FHR|Bthu7X4Gw^&FccHp+A7 zaDJXUNSAzsuXB;kG>WhDkj~}d>oVncw*0<0=E$(YH|l?TNUTG(kNJHpJs;fYbzFAQ zo1%Y8>SH!9-G@7610n(Wt z!a%5U*CVj<}dSc-J3OsA3h=0pY`47T~&H2qyE?&(b4Bz zStjxG+(0_P$Jd!ir+J32vyjd@nXfCT(QN)B#~hK?;lOTYXY+tqhueC8xaPz}t-$KB zz#laSGv{F2?N7X0ucP?A%cT}-p6Gd}GWuAK`eXUW<}jPT%*X3qajY7Bv+7??e&11cbHqk@?tPY@=MK{8rtozx z(%JlcoriS3seE05$JzWxjy{&o5!Sz~4&Qit;lK*x)IQGC$5Q{KIjH)_zn+u&C#}CH zr`){RIYBEh9}D`kq~>68^slu3mh?DQqr(Hr@Q=+AALV)M1%93fNN0bMuM3gR{}Nvp zAzj`KzAl?*NWp89qYkC#GcVcv-CJIyJ-aWnsPhxmJKlXV%J%sSUWeMpnXgAuPgOLT z3hgVf{Ve9A>fc|_r=@dbZJY0Hbbz<>+6jf2?nrk4o~7%@G}akB8$mex4ghmzcxXnMh}x%hy>*=bXpaW%CRv zcx}Z|hphhCzLuJUMaw~HAFKZH{ga-@Nb65YIVeZ}O8t}8pOXAzbHqk@9-Pn5a|h{6 zA->Ko52tPHPw&~jD>is$X{kdKAyx^wjg?}tvSb4DMpVj~Cu!?<^;UAkLKFagtLVlhH zNatS6*M&$IeuuA%kS-PG>sT#kE9E<%5&PIxZ_ypv8^q_0s_*q3KY4>P>aaNcWBJE? zj0F#rTVFdz_;Jyo_T8(h&;1tkmQEwyU&48en1jqWc0F9-xuLD@nW)y^Kb<4e`uoV> zz4o~Q%J7fPkr?H<`8|G~$4M9YfUirEF1>`WOOwv>AzzoR^Mk#v;>f|*ZyYwE>U{M+ zC-c03rSp@I-^bz{?yyUH;;R=#|J3V|f8w7wM=tAn=|yWcivB5SUq-(E75(dDy8ZcM z%SHc`RDW!a=;(XOJrRDM8`$@mFX!t_q_eKz>nx=6uH@?qXGb>vEMFapIVj!NQv3Ly zrY8JSRDN;t-l3BMm{s4qDEkKSdeQa^?6G+M{Jbm!YY2AJ4k0+ z&DXg|=lhti^N=pKhOf)U*-`j4$ybNs`HZxWS^cTcUGkp06#bL-vFhJHnIocq()v^9 zNYVV0)}NC6V{^nud9M3}pXUM6`9J0BLZr)!@pTc>=|AJ^3TJjU{w&`dIS^&f5B}=g z`kif!R$$Ms>dF}x-MLUBwCecHiG|mw`}+lT@%R0G(Z7NA_QL5*hf zpW>*)ex>Vt((tfWVD+e^IxG(VX76o0VdC3jANPLaY3E0+bIR*1{oa=K@@SMV_DD#o^t&-=6uD<5s@T zL^|hJe4T}K!EJoqnHQJE|BxdGrFE#zk^Fwu1}YUUgY(~K7yEe7j7vYi)ygUai1feEj%4zW%@6D+9Enc2@zoafUKgLYRML4M zyB@Joo+rNM=edJ)t{r@xi*%uH_&N{ilHc-mg|j0Yf0kp8Nb8WD$FO=-QXLkDf6O=b z+^RZ9`1||kt3TC0zJJp5KxzFcsejoV@ll?ecJcE(K)P^(uM3eb^*vt~A)R?QUzd%u zqws5zBL}5*sLqjpcReEQV>JhhmV?szQ~l%nC!NF6eXYk{Z2f7|>B_i2$L2_k^4$F+ zKhNW&OaIK*B}r#V@^xv_d4A#R3TJjU{w&8Fk=CJfUrR}KSRDRI`G*~`y!1L>^$`8pHnya)I?3+aS|d|fuq zj>500SI3A_FjZzOGErU$1393L&y3mw4RO~Mp{qD!Fsg55!NRg z(Rw;Ix1jZO>}f^o=~!q_>lrMC2dOCIwp!IYd zd63rAv1S;pZ;JIc53Q$T|2SGt$MK1@o{kIuUH@NxmSavzb4r@?O3JC?@K2ia>YOav zoRrp|>L1@f>2-p1zeGv>%g!@wG>pY}0rTMx{uP0l6 zFGmha>rlGyq@+454*#Tmtma_Ra!^`-s(*a{r00Rs`cqQ>vN__TJa--C=Xrp1spEWI zh;-(Yd>y;Ka-ZVsvSnUmdL44)ptKI9eXOK9EDryqeXQnS(Q;5)f2x0c|9+_3c;%qh zhv{=X4@9>PGOk`YM|__2$0k<|i+!rF_ZLy_hfnkKJWe``7W+b(ay3ahPcC1VCS9Zy zUzh3sCtH3mM-EEsa6z*{6Slvu6<9q!S!>#Ycb`^99Ttaw3$26P6R~b1^^)HiuY<}Rn_<*9{A0tQqO8t{w&na<^*eLg{7xMGmLAuz*e4UGQ zIz3;Iwlh&V-{A1T6KFWRHrTjb(kWPO&Ul$^sy%Jv+A)WsUzAjtlMW)wL9Caw| zWA*(V{Qc?k_3?gB_W>I^sB<{e9Fd++OZTvbz&+`oYJdcyk zQI)Stk}gnL1@f z>3NLwdRUz!Me|R(ucaja*!75w^4wXMpXUzJC9mS^T%C8>|x)AByP5HVA>B45d zE?eeBrq?0I9Ff+cw2##sELsjq`&jjl@1OL2u-)#jUF+DfT!CHJUA*YFr>Ew>AAQM=)8cc}QvbaDckC}WKUe7V*5zyGS#yQZpU1R|$7luSV@dXpU5~^l&r{9#c^)U7 z=W4z#NxH~2d|jG!>6Uz5ru@#9-^(#ar0+vK{>-4#zgI1FwvRW}w!N|=|NB@1Mb$N3y(JJCRkj)Vr<+-;VKhGVc(_PQkxkzX0 zz}I<5=evQg%aq^Q^84cG<4Y#&?6E%ox|r=NsB?tBFC)#tT9YTOx@Lyx-@03GHrKmA zBQPHeYDwLf5%*=JIaq(r^sjH$h&jl7Q_o}0eLXDouiB+`SC2g;)}NBjW7r(=QJ%*- z^7A}EI(rwsE<`%NjjxN4F7HOZE?eeBrq?0I9FguTZ0l#OQX&8RWy5I0?g4`}!kn-A z-um5uQUZG)iJF5NjZP!xp!9lf_vE&HA89E1_uN2TY+nBLo$BAYb5L4;cbr2Vl;`@c{5+47E^sqnmn2>M7QQY` zI)k0B%aq^Q@_RYvh%^UT{ju+R?0U`Hldfo^j5;h1|D=69c=D%r*UsN(Q0K_G=ZN%r zZp`6@cTQ`0I=V@}?ReeoC!#lWo>M0`|GvBG-?{x`*CSo$yme@k?)PY^>Q~fwcHhY; z>)$Rd!%N>T zw3|@-lLPttH6^(Y@J)Q7KgkxIvp#0^Sm2Mkzc21BQnjBtr_Se+yJ`!Cu+rNX^bI{ykJ)BZl2zsyI~zoPlad}HT~-$>)P|_$RGD)xUo? zN2LBKsejoV(b4ymdj|3I+`zui{2{*1L^|uke4T}K-XVNlHqMU1ujzl$$4aV0IsBV< zYT;u!<#W#N3rf!izpL5gqb+5BJG;+c@b{_i3yS-K&6hWSa?pL5ujkl)4D(U-@2~q> zclzD$cdM5pFdwD$rzHQ_9I;WJ3vPa%J4k06&eyp}=NrM-c}N#~gs&@{+1dEB969*> zg|oYt@`!ybJ)dFyi+Qq7-QUkIjKcScTfKPQwO!ie2+T*-zoMN_-_mwcorA&5^{1p9 zl%szaO<%fo(Te={X_Al9`csmBY>xOS&vm2tc^)90e>7hgB3<4XzAi#K{bPJxHqMU1 zuSt$NELZxOMc)jQ_VLCu^P=GYTS@onVx!afn z&tb3DP< z6|Vhk{8^41Y`%5>Q=d+e_VG@7esJU2=VaJK_O}XrQRj#_N9JEyYt#{& zMrbsn#t-rS?D>6hjxgWQ&+5KlLH!io7p!)$wQcNTY5j@*srARd9(lCl&O2_pE&qK= zv%Xn-YGRJyFEjY~wyTfPbNhcP^Zg@~=ZUBJdF~*c>sh|eMY_;)e4U4M$>;gHf*Q}} zKXS~G9g|{oGOncVOS3tmYlizHkyrV7ZXliYHNMV7I&YA#vye`h!`Ef|9O>1w zQzwn4n#Omy)tQ&-yQB3PvgZhllkwkYp}FarienEQhiBk8LdWS@IA(L!I*-w?2Xd;=Jyx`^Jsq2WqV;s_ z*+=W?Son?BUyb#;G_9v&`zcya$AMDh9~~zyz_H~TtT$D_v4@V`SKv58$B`>(JsoT6 z(E65GZ)-s7>DX_k^>iF>N$ctO-`1ZTbMj8lPr*j_=LjsX&V9Y5jGU6gzYmPJgxUno zm-FAy`-|XXNzHjV{5u|OZ*39C5txtXu0PekOrICw`gs2Ccjk)qckc5vW%MsQ&#=)v z(#%EPXUbIv=|T(mIv44ZA->K-I@4QxU8dKQEx(tekNdq-vC8{z<_N4FYfszy%IW>$ z{U0Tr@52=7FgQk1j zgPyrx%t2`#s{3~QeY#M;g|8 zOPnLpI#lNfe~ye9{^q9AJ8}f(qv~JL=Ew`%2Df|NtPzf^xiF{x9jBvge&D)f|6le4 zSs$wVg5vuUe!Q`E&F_0_g!IlSiyOpFW$;fK*K=%+=;%I4`a^!68%XE$`e_Wl_4^EUYBF?AAEww7v<**}~ID&u<@*c`D@o?BP(^V~tYn84S$ zNT>Uluk(=3wuZ0E*7?C+mmGau;mF%xe9}y;L+Sps+Q3w#!{`mFB<}dS6$^Nl9;-ftGt>x!=fOPs#`MMD4>@mJBLOTC?zK-Q} zw(@_`$7&A#yFOO^ub*SbbKL^j($EtsP|2mC-RoL4xSJ3utl>5q+f8WK-Ixq)=SFZntX=@MJ{It%HH+xR+` z*V#%r=1ArAu8tiZ66;VpM_BzK5BI5`o0DH0g+DiE;fCj4z3Q#Z{wb-C<*2{AhJJH@ zLm~6NmRf)OIl|^I^HI95r6m8@9I;WJJHO`Vxr21c?R=e!bf$0kIuGew-|}_YIzQO! z`d{?1nuGtYk5&Kp{;~Yaw6CS49F(JfrE^5d=YedF_$bdqJNbDYAe}kE*M&&u{+_Rk zkS_cKU&rz~TPa5!p0AJ99OUQV`TAJ(kMCbs`_YH`bJi)bL4z|toq0IkL4fR*HX`8 z{@ol=vVUxj*eK7vDSn$V#G`>Je? z_$bd~fAaG@Ksx(TzAi*M|1rKULb|-;d>zZ{Y^5A?rk45Y9I6a_^NKT zH*3n|p6z3)e@g0OIqJ{xe3e}Pvzhm`)cWJsUxV74I*)iaM_@im_qCMdADbgF%5(im zexAok7dXw=B}o_8;Pcrt<$s!V1}$HgX??c*UXDJ#zuL}S_f5^*$7&Ap`}pj6Ao(cm zW7R*tf71Gs&S53xpd9@xtv@CE$L5HRzQ@Cn%g=KI=@O;+Iuq%PW%)YxeIrgCUzaWO zBGc=TqYls4$7&ApbMSn9toq0IZ{*8MXYI?so|`Z^UapiyD zyvvg9ADbgK%KczDex5r>XS$HDbCJ$<5ntyaUFc%IE>nJI%kSlwBle3b87IH46`mWh z<-*Gb{k;zF9^q~N@NcK0zuKP?>!sE>p9lHc#eN(w92So{QIuf z3Xl0`oO-33MkuJIlKOsPIqHwi59XuPzby~lG+3L+QT@xW8*PrZ;A=?!GDnzi>^TM0 zoj6B6^DQ^p9#n>ZY>xOS&y$z%^E^O0_oaMYh;-qKd|iZesmu7fg1@6|{v$^pcd2pd z1Hm`M9F*4Kw8o2VFZI$2tR4&eQFBoI+-_+OO8xunsdx16v{L6trte{r=Ad+rOka5L z=*VA{aXu|a|DMl3cK*VAEXn=L=17e4++2yD=W)_S418UZbm_``U7B>3s(f8G&ya%G zCPy6}pZ&vU>rUqgtRB@qF52@(eVRAy`O?ps{ZmpO%Ta%xLX|<0t?aQ>N((!>&7ib0MBl=kMuS?gacb1x+BXr9f zyL+R*WcRTgIoR-;j;&9$)C#tiT|evfP!8QE7IQFs|0@r@)9zGMxc>0M?ng`ZePTKM zd)gkDe_0=?e`5XBTe2+t&4;HHb)Vfwd9JI^&+`E3{0;fK5b5$7@pTc>>6`F%|HU~n z@8qVZd`-mf^OK&>sMjO>>yc|mJ-T92h0Ok`*CTxY#`@PzYvqvoC+479e|-O%{j_yq zxi*>oQ&Ro0>ya4cxxFbr&*P+vH{(ZoiT+P@07w5>y`@)CX^wbC+_($7T zbqIYU+3~P4>W|G4-L=|+GSCFB;pe%5bVdtbXCj@m6<=o|UGO@- z?#zqJ;(y3-U0lBRh8{ce=LD-qX&u%YR(oIB{P_dLCoB z<*O@C)KtcOVmZzOkFWZ4>-?v31?HoY{bO?^MtSbG@$)=Ry7WzaU6OQ`ZhT#ube@~} zy8q%FVfDxIP+EuVJdpLXdOh;j>yh*IvFaax4omA#I)_=^sqY^-_w|Uh{*>$=npl+MeFHUm`m$hW4-PzT2IIJFs-NK zz*1UI$B7lRz75u!*3f!7cCV-PbR5}C>*-jtjn=otdfT_Oo{s%L(0V$KCuuz$|J(YL z<9zpgIj_!1{+v8t&a3|M{gdu{O3!oE^9;U!?D~NDsAT`xd4`SVk>)n!Yo=UvkS^4l zuXB+u*@v(5kj``$Uzh3iWXtd6m?NzIGTlE@bMW8wvFab+KWY6b`Fcx^{*}%VCHu$b zh>!BzbvHlH1Efpc!`FpKXTF!Oi;&LUkFU#?d6DUL$We#q>ti(s`8jyLK34tX`!{^q z%F#DP#QSH`?`1Hi?tHiGJoS0fO!pr*UtsNWN&fp(U#ocI%pptv{yk?^ymcevp3n-+ z$AWArsn3(LITE8h58ubn^El}&_w#j0(s>5*b!pN?Tzp-o{LYr&%P~i)=++FVTupqg znLUro`uV2q@16Q3ruK2BJ~sc+_Nm}fF$bmowY{{;s}~>F3e3ln+{bd%pY%M2)g8{O z_ebwYRVuyxC$;`E)t~e{M#=uMIijQcByV?5?|JaLD{m|GesgIZPOWhJpu=r*1=i1M4*vBy3~3HZ=ZN}TGyi%-nuDr;`OjNu z1C;=I6PCbg^N4or`q35qzD8bhbzM zy25{V+4!>@bL4z|Jm>e59d1u+)%O?W7sR=~AEe9`)n|8ZEnd$_=dgO8m_J9Z%bhoU zR-MfLsr!O_|7I?lq@6V;^YyTj>W|G4ALY4kBtOpsq|=Y)>q4ZnkKyYgr1L+@*Jb1E zDEyk_m?K{v`F7WrkL3!i9;N4lN~%LS{Hxpe%f+`05_3@MpPGaG9F(34H!4btcj!Ch>I^(iwexT{g~+!mp_~ z=7_Wo)g1hHeXRP&_wTN@&m^~xFD0<|;Yi>AkURM28AD6uKX0Ud4(d7gRXf{X|2;lK z^iTTSZ}-QSCttft8UC?3Vxv5FKF!Z_2kDZN`8pTrOwaLk9@4p<=j#e*b~gSj#~iu; zCf(aJZV>BG+Q;hoAU_AkPaQn8y*aagr8f*{oVZUTFdqx*s-!-5DM$TjhmXAd{sE$Y z(i~*Ish@Xn?)!5cMl5qa+%vO(Z2mGIOLG0OIpU){4^83cd4P207x=mm>D<%!x(MmQ z)A_n=oE?QwzaHZrgq0%=Z|oIVgUfad_6s zK~Cx#_1M41mLX%l6hFuF(h>gFjmwu3YIJ#cm}j`! z$I?Dtv!c@BYah@E>Dv2-_G_XMq;q&lJ7Mhg2XlqQdwXYJnSVdNV7)qr#X0=IzPZQu zeWek?gZiv`ddsP(bYFGC`r9vV&{!EcC`bSPkbdFCJ^A17Q|65uw{Nbd72Y#UnK#nG zzGv!W^z_uXzkdFT{n7D_Kd!lO%TFcxJdn*19evJ~J`yHM`Y*1)%nk{8k-(z`$DT6 zL9IXjzUquQt3K%QUXH+gtohQ=UMusz$6AU0u{mO+JomoN&vOUqbo2Q-7wK$o@O2*2 z`4;eX**rrEUYi_!-1qXmTRw@3eY~upZ)>2kcs`@%Ais}OCmxwMZKdcR>tE)h>L1@f zb{@^@(A{;@JIxQO^;bBHc<)1GzOm28V|B;&x0E!8*&Ojvp2tG`JP(l0zL2jAkIU>_3!ZWJWjg6yL?@ebn*B2x-{twAMka|=WL}MecZ%c{)DhXEA04XN}~Y>bA;vJ z4Y9Q8q!E5t*)5pfe~RjG=U?ivq}HJv{ylTLZ{;r@7OzKc`@T+#Hoe62Y0P0|^syZN zEe!W)yPmk)xS)ii}LoGo>fj%&k@-5NWYgi4_H@P zEBtZK{65APHMB3N4FA|1(b4yKIF|79+(5d-hkTuhbjD?TorQGHkNCQ5ogeIV$Nk57P>s7iupY^iYm)wC{&x6bPdF~*cX%%1RBAqMB*Lg@668O5p zwV#bY%P~hvt=zL<)%CdotH&zBmU@$YTH)yQ`qM3&l~spw_;>Yyxec}XpXbZ^_|y*{ z?y0y~>|!9-xtgEn0n)kG@^vB7g+JlzBBV>L)mn2#t34#pKE!aX&%H z{;@ftqwgvAY~ts+fqkF(7QW6zI_npForQGXFZsH{wV#bY%P~i$`6u?w>zR9YUxDqb zvU*henBT|e%RzMx^Zh$t4yyj~{W~;Bd+1}gxGyN}UnTj+=7^2*T-eIba|h{cU-NY? z()r?ioriR>?R;G}&W^&bNsc-4#iaH#2Mx;=SUoDa4(0Gqx-Y}#FMEDpox}VbWY;0g zN7cWgJ@?CeWBY>A{#8=_u{q+SJlB20&+`E3{5$!&5b5%E@pTc>=@Wci;mpp)pXJCw zX&)=O4(0Gq+Q-ryRMPpN9R5k`PxbHr?;KH5{joU`qdd2N&(HHX>EgTjx+LigKk;>G z(m8(S>#}in6n;&`(Z|v`qNF;M!@uY6n{)E?5UsGSR^_fUAIuRxnrUm}nkn8VZvW`# zotHH^boO(O3jRLT=e5M=wf>y5@zRa?pUcDi(?5Gpts4s6XJ^kDF&|a`{`xtM>%QD_ zLBoOK^IFqip7{Fg?aHh_Hb->rv}a;5u!o=L2GSY#@^vQCIrs5(7SaWOD2IQ{H@2^!J=#8DSRneR<{*DxOIm*q?OAofV=t)w6^8}YL73au&!@~_{&dL>79V)5**c`D@o+tM6^V~r?SBkH5kuLNbU*{oR@(^EF z`0p+of0iQ$XFCQ@tyE6D&o13pVCR9jF4yo6ioZ{=!r1PBS>k4OfHvas-m?KI$pOM2qX&+0k=T!grIe5M~qWZ`8Pg;M{Iie*0 z*c{Qd$NiCrrVTfy4WzT?@^vQCc}wwi7Sai&`8w{4%7TB{t7oT98qGx--yN8Tr|A!S zj=*>jzqiobbp3&24;_b(<2XXc=^XgM=B!nRW9C;#k7Ez{m#T#02pwClr1k9Yp*F3z z;_o?DpVrf{-c0N1*wK>K({Zp3>95E7q@P|teGi#=2EBgvJ!i9U%)X~gn2TczeJ-c& zEm}{<_AsrdDaxV*3)rhGp(m%%{E$3&vn?orS){||AE%i zaXd-u>GhHRz%5G$8GgwX%qyPr-Sc#=@WQfn^{$Scj!K_vo>l5}lVv}Z?9bhh z!#~$(?bWU-r3CgqnaA&#wmDf>e4nNI91DL=cFp~G+Wo)f3e|HP^dCPpS9oM)z0PkP z(g@7QS6>|e;-En%q8kp)tGRsrQFY%vKSTpNo@}Qb z-RaU?VcPTG#D*Np5o%9tshMHQ6?VPaVsqKcwL(D#mDJ~e*m;JH=8>i>=1IYS)4BdQ zNEa&4*SScSypXSBbJBD%Uw5w8l1;ypBL^3~x%0&*o)PckuGlgE>m?P%I{bOGzOS}{ zGU`wc|Gv-;ZCd*E9D(_GN5A#I$Mc`3dZqVe-@njAD|BnotJmR_R_JkP)q>w{DA|21 zhkv6tdur{>f4}~PD@HaMBjgCf?mYH#*)ifAKJFU4$FoeWzf7OwIicIWk@vR2S}Hyz}JOHXRgTCvFj`MWqe&W&5U!s7CHLZ8T6i* zIaQn^tp3>b$i;7eTXpq%Wz?Y@{;~XHK1%(&uH}u%nfaefsf6=EIs9Y3vF9PBIr!`G z)ZBKXRsS;05o!IEdb#BcHG)wiFiH7`j`1wP){XwUqO!glg^QuH^2D#1Nphf<_YtS z?GLK{{k8sB-7z1>e!hM|;u>Z8$L5HR?vtde^7Gt4I&XEp&O|z)2480(ou(#VS5Twb z{6~&Ht~h5>*Uq<#-w(3xKx(wC(Xf1 zkuQ!O8=?AFIEQ%eFY5fnu0y-x;(4I-dRR&Q%jSrU^4waBpXUzJ#p>{NF4F1h@pT^3 z*{^z$JsH8rY!@ouI zD!QvI7yV4$e@ga`&5;=8 zd0rEKp2tb&XvWtiNf&6&*QH4pZ^73U&g^Xb`F}A-lyp8LhkxgrBdUM=96a9~QT^ll zC#^r}98r>gm?Jukj@~z7xQ3tS2GRwuvt@^voK zncDMp9@4q2e4QLQxNJ=P%JuJ;68atP_kyK*DPhB$R>!}eq!mW4|8Q}vidJ~^*Y7k3 zcb|@SFf6H1ckOBQK70NNM&bMHkF02G8uo?gU*eTf{XUqe5zM)+AC_)86&>9-a`M5; z)aMj3J#Wj&Kb#=$RSF3I*LDRLj@AVcM;no&YJ_!DLI{LXG@6MW)a|GsN z!TDWDe@;PDU`GC*9E}0Y!7mJT&KznOb2WNRZvL;d+OQt~2LC*JzeKA&vrw1+zfrEkt6<)2P#*;C zb3p&=pkY4fcmwp_0}4*ib{`mc4~)ML8kT^;55YtPG=2m+mxIZbpy|wX)o5G-jzgup5m32pWC{9ecpUFQ9QB==>E7?gvdN(DfS_Is_&UgW+Rf>NsdV3A#^#X$n*e z;!xws%{lWgBBelUSs;#Jm|X!j9m=s^q{Q*m{$?hUk=(Uf&ME%Llw|b6%14Z z<5z-CO5oCMRSK#K;Sui(i6HKjmnY0z5+6v~3O3qW6aFm@rRyBPHA!MqBfz9MM9 z42)L-4F=Fr84OebjaP!s>R_-2m@tB_+F+;-n5+w$t^&jL!Bhj#+z50x2GdPJOEb{Z z9E`L8tt~XV7pX=(q_CbOqzx zKxcO_Xa^HLK;x}o=r%BUJ7{u%uHInkPSAWesA+@0XKPz9)*jSd5866_z8gTZ4RqfK zhHnB>T|v(+V5B?feg^+P;mM%odC)TjjQGLyRM0ye6kY^1GeBzqjLigfuY$H&pl>#) zp99)o2mN!wym_Ew0T>8@@i#%kLNNF?m{<%N!=UqBF!?@cS^~P3f}syV^GBe2IT&66 zrdEO;0gS8$(;tJDwV<#L)WksRdeHkBsM`qIHi5p)U@Q-`e+l}xf_Yzo`me#jb}+sJ zG<*v>c7loTK;!qI^9L}v8#Mh4y7qvfB$)gKbpHy5_k*bepg9Fb4uR>zpydzH^Cze| z3R;hW-s7Nf0<@h5eP^ylHJVsX?wJz(wZL>8&{7ZdTm?ocl3sUe_e7#JB2rbmF5k)YrKHDf^QqoDUOP&Xd5c|qUfVC)Id{v_z11m-;j>YoM! zlfn42py7GYF$GLa1&z}{=X5amB4`SLu9v~kOfdNh=$;LRUjtJ?(EK_WnFprlgO&xL zCj@F1g4RW#_ia#E4BFlWeeZ#>_d(qf(ElNr7XkGjf%fHKd?jdzf(`);tOkv1LFXr6 za2=TV6m)$ChBko7&q32BFq{Xbwt(g@LHAZLy$!U)LCNKU!}t?{E$Fv^d96Tw zYcS9jjJE>~R?u-hn79Enb^@K9!C)8AbQ9?63WmCY$(up99SrvXQ$0a*FEDaDn7#wF z^aeeBK+WBtwJ+$s2Nay3?LN@gAB+tEbpt{F17O}DP(K*7KLo~yfQF%lH9H3pBq5x`SYN4rrMNdgjx=?~C(^@I9cVALzLcjPwW713<3}6dnLI z4}#XgVC-Q~=LT&VGQjE@BkrUP{sfVT3W??O<2324`Y{t95;rJ&<-Fi;7M zUjZ5_gTbm`q8ezd4mxXq$(o?4Ht4DYhU$W56X>oFh8uvXhM=bj7-<&8ZV6X>h z>IJ%P14Fli$vZ%IA256;n7Ruz_XQ(PFnup*xexU82Q>phs|)l#01AUZ+e4u5VK6oX z)C~p0kASI>pxFbuM}z4{LCaXsGY*W52dz(l-U*;E5!6fqeLgVuG^m>l+MWgTo(J`Q z&^{IPzW^Fu1RXDdff-;t06Jd*gRg>#S)lPXFf<2Dz7Cq^fv)*rY5{0|6Lh}?h8KdC z#h~XMFcJpS?}FYBKw$}}`4F^5z}QEiZUtyt3Hnxn`qiNQW6-|_%v%dOJ_Q3YFuoo% zYyg8B!Nexem;%gXteY%a5S&GpI>| z)?YyHUQo9mv>gC_2fyijzk_*yfchg~;3ybB1{zL)j+0>GG-%8zb0!C!S}>Rk zn#zE#vS3IDCd+~D3&HS3VCrJftOp~Pg6WE&<#Nzd3Di^utyMs8RZyq~+G>D4BN(d* z>S}}GtH6{AG&ca<4Z(C{(9#t2n88Rh(0VoKy#^Fof*K3xyAF)C26b&gTRSk%3hFz6 z_8UNdN6^p(blAYajbQvH(0MZ$yah~j2aP?z(5+yy7ihX2blm}_dV}UWLHAu?_-@eR z1U>hHk$zzMKG1tVC=3KO4}jJ|U~Dj`dlj(E)DF=6E$H3}roRI%--DhXz{qaU`ZMU=0}4q{vlsOJ3dZ(>x`UuC1?C+B^}mDm zKS2MVpy4R!I0goegYgrf^E4RLls%Jwi5$?F3x-OA$ugix2fE6Esq&!tBG7#?7`_Cw zTnc(Bf|1L>^yQ$}01A~sO;ylZ4UAO>bwsmeJ%dTJ(A*Amw+F*kFm*lX=?F$Tf$7em#RdvDftqfh z^=8m}3#jV>+IoV%TftZ_(0&K#cYt}lLH(Uz;BGM97c@9Q$Gu?UKF~M-blwjJ2ZE+S zpzA>}G#E@i1iIZ|cqo_}2AW5Jk&$3}6lfU@dd7g7v7mJv=p7FVUeGoH^i2d~PlCFq z!0==+^(<(99&}Fu(^EmqG|)30jJyb11EBY1P?!m7UIl%#!Psk{ZVqUB9n6~t>fZqE z3qXGeG%N%ii@?C!V00J92PWPJjZ47LhhQ=Snmz(u%fZx2&>RKb0vKKmTGoP| zPr%4JF#Rd${R|W~fSQe;mK8frjtF z;BGMSBWU~?bnXF@zksHFpzBvKv>!C5K=*H8_z;*n40`?qBS*k=8nhe(g%hCW6lgsS zdh?&8Ecm0#1#P83UuiH_2DFz0{TG0FPK~E!4(-gFtL2olqXb#%00evmO*tMXp z6&P*{rrLpKE9kx+Oy2-nI)R?fV5AFZy$SSo1%+;)<`&Rr2V*@z-L0Ul7npZDsCR(& z-k`q^Xt*16^aTU=fN>}2yblca2NMH8<3KR<0GJ#Eng)ZehrrYj&^#1$4+F!)LCZ+c zGYX7&!1QR)`xq#U1vTSAs~3zt0qQ1#wkJW~BvAh}XnzLuPX_az1szksfFF!c1r5`{ z;EQ15CD0fEoiBsQS3uJ&&@~$jy#|_J2ip|ydU~mIy+61~b zgP}Yyxdn7@1;bx~scoP+4n}r>>2E;GPSCRp)O-(Ge*nF^LE%Txwg>bj!PqaLZXXyv z2&Ph?`4H$n45t48Ek{648jKtTttUY5Nl-WiYBc4}%%+rDT3qX5$ z(0?IlxCC_Q!9WEtektg@91KOO4F3|cN=uLpS-JtD9(DxG<`x&(V0{ZuYdHX>9elTzljHf`uA<%IcO#A^F zkATiJ7(5D^PJphHpyqr0Jz9SNV?TnrpF!Im(3b@D`#}4zpnpG@cK~$!1_lm+@x!3u z4^TJ?YL0`}6QK7bsMB0uY27_I|gbj3c1w-AyIZ}N zhd}?spkXNJ7zPH0gYglda}*f#fQiwd@lh}|7EF!t3Y4WR3DFtia&ZUWs~!0;Df>Pyi46&U#%OvgdX4$$)rsM!TtzXQDqQ1~9S{RsMg z0%Jdex+Lh|3+C+u_4`5l0Wh8d4TnI-VKDGJXgmTs(_ru@m^cQyPJ*FRVDdC*$|-*) z7sI(=suXB01G>wC>2jc@Jm|R)j9dg-^`N%`C|n9^E(3j)z}OX_t}Up z4bX1{4Yff>9WYQAjMoF5^}%2RFwqb+HU>jY!K4{9H3wZSz|=LM`C8Cz0mH38OB>MB z7L2q5)9pcT2T-^H)N}%^oxzw5)ZGNyx`MuLpuRh3w}bv3U|vtqaT^%89gN=r8hV4m z-Js?k(CP%e_kz0qpltx?yB~}V1nq-B|AS!OU{L=s7;uB}p`c+n=okSeMuJ8U=o}3O z$AG4>plci$8V@GDpnC!so(QI%1kF!@k*C4*Goa;J(DNLq@q^Z>p!Wq(mU zSOC<`1pTjqd9y(MYoI*{#$N{w^FYUZFz^Owd=qrO1qK&_iAA969WWFIlkbA2_rdTI zFtrpkM?m*7FufeKtOPx)z(^FdehhlofWlf(vkvsdz}R|Fw*mZrEZu(?)#Cs7@ugx4 zEuvM*5;{_xNS!1`rIpeuvM5bSi|B+hiYCPpStX6cB6X57KdK|q5?Lry(jq#EoP>@@ zhsgKy?fJg{d0hK@*PhqC>$+z9p4(QArHGn5qc&&0F^ z%4ef-4wf>gv_kVd3|eF60<^MNXp7|wF@G_J?Xl7UvmLS639FZ4?lQD5N8w6TyP(q* zqi(2a==Q+4CyKq$y9Sd!DD_3XAEwu$JOGXB(Kk@J5zRpu493z;Xx)s3p;#V0<0+c1ASR`0;vXteWK9E0jT=#0f^911qN_hURB#RpJ(5EBQbNvJ=J-ei;?MZ-mZ zDyEO2`2+^jvGgP=Gq5lV%THnEX|(2G4JrBSiTA~8d^QDay4dqWBwWp`(Umg z+WoP3Emp5X$G~VH3OAxU2;-YjG*P=5-JvKANBvgxMqpy0aXb2>Fueoi(HPy0!dO(t zp>r>a_oFr*-3b^!fVzX;LzqlLX)^kcVEQP^Q_*+~OOK;69nB{(@GvtAt*5Xs8_Q2) z{uvCP#mZdF&coshSPd}uBHAyZun^Tn=oBzojM}T{F2#5miXnP$VDctP%TZr}X%XdB zXuN~|YE;&s8DX#%OYfugAr{tS`6JA1!0;2Se2UpknEwo`pJQ$d+FxLCE2=3v+cEkI zg&pXAi}6krccJzjCf}p92lXG(E2F#*ji1r~1=C;A{0)NxSo$56gIG9(AKnm={hu+QYC0=4zo`8;i$c^*D6uU{n`{6Hz@0V+qBRQ9A|Q1}HT|T}H1FCXLZ( ziheUp&p^33MrWhY64eYk=c3pewKnLUkMRYlUx?mCn6yKwJ^DFJJEGhPjZ3j~87eB8 zS72}@X1bwu6&AWOgdE!01NQZbEkm#wLnG z(Ypnc;V6wj-NN)Xlt-a)2l{uSG6v1NFt{5__n>tz7HllvhnevhK7f@6G3#LdA*?=( zxhZHrg2hKseGHvx7(I@{baXw8XP`I>wWlz78YLg~XV7~V<#}j4kNyjo257#7!2&G3 zjLIS`EXMLHn0XbgrC50lv#(?R4GiDJ+zPZ;VzG$Tx6xUR(Yq+DK{dkoeH1@H?L&0e zqqG6_kJ0-ClTXq34E+St&r#lj(KZyeqxuy(U!(XfYCF*_VZ00V@6r1KlRYSv(fW-rA2MOeKUa~;smVX-5sm!i`dqsvfG(Y+GmE+}?G?J7((lzO6mHF~{J z?t_MoeqT)cp?Mt!1F&>GDg&`_BbEnY<|ed;VC81a4#WH{7!Jprh4x4+-iFoN(YX_& z(I|{T^)8I>L2(>v_o8c~G#>Q{=skeRgJ?X2{v=EvMtKTGQ&E_P>f`7IQ$FUW~~Gls-ZIQ%pCZoS^YJ`kPVNisqLX zY{OED*4J3rf#q*7vlGKzSosdK-(&sCo6TA+Fs#^<1zLG4_0TcOkj_4CoY0Fx{l7opz{(~D8=fKewD zI-`0SI+vq(C2C#J?TT?X)HU>aVA2z%Ug%$gX&;pPqR|ga*P=22&Fe8RFmoeXgRn3d z%Qs>EW(B68IRHfs6U9Q zgYqOa9!7sMDvzS+VlWj;kD>Jh7N%qQNzBZ^a28gc!tB$SpM%wBFgF+N=dd^r)c~FO z7`=$X0(2K*ya>g`sJ(*8t0*l){WbLdH`Y*olV{^C^p|700?oHEScRo`P2euViL!ws1G6zz>z+=SK7(AkX978JIk`X$CGieI7jHM%=c+KGAzyvTw9jJ`P!Wb;yg_(QM8jF>CF?%28@5gXF<{m_QA{HI2K7`I>jHaOQD5@^TkD>TD zYEPg$9i$I3^T-GIeUu=*+HHlh6) z3Y$^gg3cEhZAC3bcRR*kp|}IRZ!y`4(k|4$!}NQU_n`43`eju1q4_fgzhLQCw0^_F z0WANHnS&S}!b%mhe`EeIR{zD^e`x>TgyH|ciZxKJg-&gZjzvL4w+_a2Q9Kc~lQ5A` zIvMp-&})ElLo{Uc8)4cQ&88SM!_pb3G{-^!$8baR;PjQPtj zyc{bk+Fh{N6|3Da*BzrCC|r$dFLZjNsH4^w-F_JNM|}W#*JEO!bOZW>FddBY5Hw6I z4MpV^G>2nwD`rNbbsH9L$MPu5kH#>Ml`)vT8;fJHIu3I-+V`O_0o4c4c@U$Cs7*rm zVT>oE_y~F~CR0(GhWg`}PDj~8V+Q&&QJIbA(-_Rbl8@G0EIfzhd6;{%M4Wkf+H_&|xM6HO)DwI~E{w{j&p}ZE2_t9U6=?7?j zgh7m@4XAvAg^gI=gqZ}b&#|%vvs*F$C5GED_Z8Y-V{r#ozd`TiQ;zm5S%^{r^~IPj zL3t?}%g}!f)wj@Dj?oGfis-Jw_#G7AMeRLIB9z`oeI0rqp!^XUG5Q-Y{TR)S7;M7Q zXQ+IRg)LbA0yAHtwGAuVG5a;Ips5U|8bQI4(O+mLg#%H2_HhSk^(h{X}(LWE<)+nEk#syev zi^@f4w!`3J%;eDOh=ohA+zIoSVR$)KRLow9#jaTGhPm!&YbaceYAT?)Bk79t@d~{z#>1EUxqPGZ>0vb!ue-+cED8Gim>sWdNmABAbj^&k@c^j=& zSa=7s?_quoh7nfQqWu9DKg8;K%*7aejKZg=ZbWAjil3vl8Qm=ye}Vco^ioW=qx3cU z-(dPJ$|W>*VQDuiKcKk>gC8;T6I%PQ@H3Ww!F&b7->`B3vwvXmPplro++S$_jl#dE z9zo|njD%B<_E4*dZY_*!qj(&8$750lr4vv;5z~4o*GJ=I^iM%mMyC-*jZruq-DVh{ zfnsyi&cx&_l+HoDC3+c@&qJd%`fV^hAI-KHT!^KMP`MZj9k86k%q3`b!b)e%UXFPc z!z(b?742?Vyb7z`(dmiN)hP5v^%{(I6#JppAKhzFx*l}{y@8nAfW~0-Z^Cp4$~R*$ z3`@75ax0o6usjkox1%)*3wK~PkNGhe-i4LB(H@7zd$DR`?tY9Wpzt876VY){d>FOK z=uW}-5!9!m_ZTMAP`wB}*qc`Uzx`4=&K2`dXQ zyAX>7tS-jf60~1M;Wbo4bY92k4b+ySy8`2tD87x}JD99S={?lfV7eCNb!dEm{)ec3 zjLs(*eTu>+bQ6p}M{x^kUtsbjN-65w(fbPJZ_xM_{hgSW(A%Ggz35<>xT-JX$YcWjDef^L?eU#xu~9x&IK4{QMeG@b{JobVh7Z6m|TL= zrKopC?=qCHK;ugEyI|TC&F&azSn7ew)mZ3_8PuLdcP_@yq5cAT z0VeZNdI|lPFrE`Yh2`a#FJkyMR#stlH5T8)>Ke?g zMf-geK16jrIv-&aqxK29pJKcb#m~_D9Fxr`eS!K`Ot+!D9gVNh{~Dd|G5P_8A5kr1 z{1b{lqxK8BzoPUT>IcyK9g{!MID~!`)4xzYjKRNHI)cjo?u|5S$VaEn%@fR!_!U1B^~XK}NL^I*n0midr*t&%jtgy#;z_VRAM~Ezv(0 z(^e?AMxzauE)d34REO*5Gr5JX`%4L{Uv3Mm`yI`&x+E<~_1J$1B zT#ZpL)cT;SW84?T{^(tY$pDlL)CXdEBg%u(xC#9ss0>AO7zVdsX*gOI7Di(EHq4B| z@J_6Z#_Sl(--XqCFgFhEd$DMvIv$+~7(IZ(M06j*coK?}QJaFvqbN;9{W0{Wp*$Up zC(-vXoq^8N7|lW98C0Le_&F4xN9_f41C(AueF1teW3mv9#pu6+=@OKeV(=Q4LR8*B z^Gz%-$IME!idc9Xv#T-xE{5-6WewWzV{si;Kfv62jA9f%M)ebPK1J~})Dm<*$9Oa9 zThaRxlWiz%NB?U~ccA<&8auJH3zgkyeviQqm?@*R7YjdOc^~F~#c)4XDwsWh#Xqom z5OasnuA*=l)ql|W7o#Jn)o66IgYGdH*F>>4ddFcRqErXL8^y{P20L@b| zI1Nh;(Q1r^CRjclGtDqmu+ki}Eiiu;R?op)2JLgP*b3D)=$wzy1t_#d_acnjq1Ya^ z4w!UAsT1m#qSqN^6^$#Y5hF+Uo^JXXe_eGeALVs#wmY>e(lVFIcT zpz|P#51}>*-G?!rjQXSKxtL5vX&U-ZU^*RT4~-dEnuW@2G@r&`4rZQ3Yc3X^!}2`L z2N=%B%8Qs?fW?JaU4*&CXupEOQdF0r^BP7WYHyn5;r+HR|tTx(4O7 zXuOa9I#kx9`4I*&mNuaEDHb+jc@t(53^!wC3ud=s{!6T;nEMLtud%oT)t%^+FxrK} zZghXZcn^wY)b?Vs52asF{}sLcC?7!Mcl7_j^dLHaV{{mWe^EVxvC#Nv|HNZZtBGzc zl#WAPMDKV^>Y#BV`X^yp59Rt8oPwnWsGNpoLo7GKOcS(D$3j!gDwuDM;h9)zf%Z9A zY>Cwj=2~IY8in&wy#SpoiWi~Q4&93}ZjX9L^e(}q6H1-YzZ_E)C1=KEpTA1l{lb^sO)tPaH7jc5--VF;=wIyYl96t&^#-iq-E6i1?W zJ0_!0x)b%$n2tgDZZz&ee=I6Cn)hLFKbFR$^&l1|V%fpWBn&5GWeR2=#k`Bv$1wLe z+D~9{I;u0!nTgRX6lSA42V)<_XHlDr$vl)^Ks`WjKFSNwcp3eLm@Y!+Rg9LR@EWQi z#&4kb7HZ4UU4hcusINlr9ZXiEu?GDJ)3qqC!{9?Ktw$wBa|4z?!OTXqHeum2%x=c~ z77V|@%2u>fEN;i@SD4#@(YGj+P~C;jcPRdV+8%U&#JG(5KJ%mn6|q+>Gi_jBi2lR@6qIYoT;I>Z8!R1Cu+^7=!*@nBI-@SPbsPl8ws!XpYD7 z1DKhJmVNHi$H+rrCaSa0c?!ijsQKtVgYmPd&qMEd zOkO}~KKd_Vx&Y;cXe`3gVpNu(`6>oWF%zQoIu_o*@|&1nf#FK56fwIBi>tBvF6P#t z9igxe)eq455To^|Z9w;9j6XqfBYK}G9y5C|EMsLaX7^$KXRQ8;xeD69VetT}2hsTxqeCeCh3;XD|3UExYX4zUt4V0k#^EeuCu zOEb`V3JbHb{4{2K44=iyT+GhH{PS21F!v(bFJW;3s*BJmV6+&8CFm~2 zco~WzYOiDRCQ8duUxD6Alvkng4*IJxeHWegFhvJdTFvA7?r70eyL z=noYBMD-9lRTK}S_7A%MVtfSk8cmP(&pQT_nkdyq|2RxVl2lF~s`(f@{w6DYB z08|H}a|1>NR&sRaR>T$Vmca~doUV{!o8^47~hZL z1k@ft_d%2%LVXf?4`VVJjYrXUF`bI?Gz^}=(sWcjG-qIW7G`Fn^)wddVD?$e&&BXL ztjt3@z~X$YzKFR67%fDhfa+p&UO{mwYRk}l4dW2?H_>|wljSI_ME`9}SE0Nbjd!uM z29>pFzK_8=%&bT2BP_&N-hlZ}G2DoiO_)uvxEZTkFt-)$FHzWz>R0G|jnNL&cA{It zco&Mh(fa|DJt&n?-;3!!lz&0vSM>LzasbWWG57;Z2hplx;V&%zjhTNiJc5<~Fk7S9 z(H`cH!D=nc9gFsHSQJsMi_Qrcorpp`bn9b$GKvjQI~9|LC^bU8F?vlO`j=qZ3FXchT#h9bl`GNgg5_?Q z>5i6$g&vsgh56nXUW1iBX!pZnf2>}Mxd9j%DBOVRjpz(QaR_QAx;JAy6!qcg-HOQw zlt!X|JEo&hz7vhnSQ>-M-Duu}!C1`LXx)c}`>{M8^ABP;5i1U6Ct-0iR;OU@QM6qY zrlI;cI!|CU9km(g&ct{YinGz1gNcvQv#8I-bRNntpb?-yAC(1YzKp>_EGrwj%lMN_+g8HZE zZA3Xi<8$;kW4Z;M6r=4Ze2wZ3jK4*(gxW52zeDK<)c2tGBPL}u_M!hXroW)PAA{ep zbO4n<&^(CcLzwvst-rBw7_&z({~w0J8Atn9seyJaEY`;Av6vGvs)ND_sGf+Sl( zG20G{?XlVca~;vX1clD1UWU%)7^$drLANW$-B9d~UJp!qqSOoZ-kA15xi1?1(C?4R z05q@1z`)W#v<6{eFqUt^jEUh;tPI2KaLnI|RSR>sp?y0RN1-|zojgWkP`Df2u^5j- z(MIh)Ova=10O}8-HxcDYXgrMmWK5@^^B6|cP=@@$`&O~h%x=*1r2X!C4XE1pd zjd|!lkLe32&&S{;EG7^$qBKjL9b`ZAAYwOcRthqp<}`TT$7DW{Saf%N7ATyJZcB_aD7HfFJWSf4bOGvF^xC4_4vmY^Z;xpQbS}lHGYXfZs$zU4id|9b zhVE4;^+3HRdRJr83ynVL>zMXMxjzQiVQBy=2ATu0d?RKCqjeJ&hG2Fm=7(W;3s#1s zZDDaFR&T@HD2(nzA&=@9bnZfNENbJ>y%%E}_3`LUz~ljxCZhikrjt;fjK&l!J&MXy zG#|rY8fK=W^&}QNEYHCFQy9+1%F~$jvG^=j=VERi+RvjfAJrGpc?qKhs4YUbfbn7! zm!P*4lVvD{sK1WsnBN5oR}F{$s3u zin&c_e}=^b)h+0JfzehJwxPQn_ll7>ffQa8|6J{{D^)T)4k~YiqU=) zena&D#($vrCu)b#t)g@o^?%U&7n37s)MzgJ|K%TpX-$-CV{janL{#daSr^MEVx}Hi z5*F%XwgKi(#qcz&G(@{G7Mo!8bj&rwNI~IDR9m2P7K$xV%b!DX4laoA()ozU%!@ntBg zs9k|c7nHi8eieG%QSOPx)#&%av^P5aFzS!Ob*K)&*g)|H)NVv~5K2Q(H_^Kplc8t~ zNB>q#N1!|sgWIt*3Y9z29F65Mn7JFRd$2GTvo_}M!|;Brj7R%HEKbC#gSklmC_h|os#XYF*Mdv4s z_Mz|#y8AJ%pm+ea-!VCe(jnBV=>3KAKWO}m{t-<7L#I}Yqdkmjqi`ImBF1%4JOQ;6 z(LD*J`lz3b-YJ+gK%*i0GNz4CZh}EmEHy(#L9;oQTVUpFw9dgoOU$;y{COC*#!4Hs zvsi44)eAA#4x{!czM(r|mFUMF#y$gC>G3kaGc9^;j^lJP`APFdU4Pn=or)aVS=YVQx6ux1ul-)!Wdy9ivgGjYc<*@fZ~E zMsF-8<503uzYo*#C_jM4gXm90WfGbXV=x&@Q_ym;Fcr&>VdilRr(@+w%+A34OsqbI zxu?;dgGC?Jx#&EH(L5AhKzBaIFQT{rwU;qjgwkTvUqNpP%FEDr4gC<)*U?#l(MlBF zMs*d&t5JLpwKeEQD6K>N1N1(`WIY-i(Ek|IPf*^7!Dm=XP}z*;7A$YY%r>-AENsW@ z4$Oap;kQ`XiS~C`+>O=mF}DY!G73MTx(}V7QQVJO1>N5;K7jf`^!~);5K4cce;Ct$ zP(Fgje^{z<*3tecHPNhvL2b;4XdRD*I#{lY`I9iLhZPC4Cu6YzR!_xTL$qZSnxJ|* zI!!TZhFWuU&&0R|if5zO5|a!{tx!J?(>5qyfJPSmwy3m2^I{CzW2pmLmtdh2mM_K3 zWf-bhxdO9YFy9rcS7A;=y9X9~qS_msYcT4ALSJOHRV-9d~6&gLz?}_QvDEG#o50-RP z`k~n$%hzG%dbA8I48-gp%n!!!CaerWdngu%Vf7Zw-HMTg!fmMDj?O3)N28WUcMQgN zp*|M9ahTkT(tYTU$8-Y9527&t*Kae49n9nKOMs-vEpHNCKjK< z>TJx-LEA@RE~?L=GY_NZQJatMix|Iz;>+kQ!lZ!GE2uBQbScWOp%J40Ix26Wxg3KP zSXznJDlEK%<<*#Z55ov6YcabH^B-V!J?3JxH(>E&R5zlt38T+Y_#E9W7=MA{m#A&S zWIIY_hcujDJP3g4%EB9zf|J>VKkl2$L!rhtdBB z(|=L^4}%*2n?HLDDz(t8jpgGob39sguuvDXCt{B+hBS=%2_npV(B7OE=IFG1|2YS30j@7a4D8M zV_wDZ3ang-*{)c;3ai~Q*8}aIDD+148g%+#q@&g!-D@$v4#n%y8;HpbC=Eh=Fs4IL zz8Q_7=nq5XRy0RoU}0$_TBERV2bS-|Odi9#uyQwM$6|gQR&C7PkM?*hPC#`cIu1q; zq3|%eQ!su6MHjWHm`p?I3Dl>f_aw?Q(U^t)Q<%<1=UI&AqA(BD=P?dYd=a&m(Cg6h z=)Ot51dUGUUy5mGG*t|)z|xhdbj89|SniIQ9%%K%N-xY_gZVxf>X_?~_O)2N4yyyu z8HmvhC=5b%FvderycxBj=ng~aR@6tJXJIlDjZx^|f$5zn=P|eoOLwC(7R_;3wlQ-* zTH~=W0kab^?_l^4Rwki61&fbh^-;`C#b_D|PoO#-ohMP8iP|i5pTc-H>OOkUVDc6O=cju?77vP}zoNiotd)eTD8$j7unf zhuUsTen9C*)XV7YMfqnmenJ0NO!uRC0E6GL^am<`VxfxVzc6zct$(m`1hYcs==Ywl zf#ETjtBv-tSUe7^B06<3Ist`~P_2h?eH2eYtpU2Hq9mi<2))LbG(n>o`e$IOpnN6< zXJP4VR9d2$!E!6iv_`897S6|PTg+dG;YCXL+<=+EXx)T`Ay_ssKMccLureI8 zBd|CUtG8ip6xw&7kVkb4I(K1oH)`Y1y%%E}#rx5lfXM?WO+?+nbP~#w(U^k%BdAP8 z^DzvjVd-&nXJ9-N#ivl4jmaF8ocA7DBk%>@{|jHQLB6tM6LmX}~= zDO$_05@PlZ%)g1@TbNskb`gtjV|5ie?_%^G3K6PnF-73a^q5cng|6+0kCE?toJ@k*kv?j{6(Kr@MA}V#ztc$@3n5l=B zgoXN8J{j|;Vt5)>8e+B)7Mo!8bj&qF`wSG$M70GvXJK?UY8iCT#kduUtOEKt-rOVLmf^kmWh?2n7sw_!!f)Sb0g8d4U4y9brd?IG0LNG7piw-JQl@! zQM1v#52XpHKY-qYm`p@t68aBgIvM3hFmSOn6_sgdK91$-nDNk>frXivosIdYF`R=H zAMLqVd=9JgF!usR^HF#S)dlFhjA8+`#pu3*@ewP?MMg>_i|0P`PV7-MAvW6^Xd7x@q5Cz) zJ5c-SBi2zvja zd`zpO9W-j9UklUPXo?sdkEJ@OoPdRsuv`x__0c*RD-AGv8s-~fC}XY(+NWc&DOQ`I z(;TBSQ8)|LvoUUo;<>1`LiaqB&PV+M^s<<=MWY@17h~EUZAND8gtQq4wV$XOFkOk}Dh%Gi(rQ%R!$O4RwU}9l)(2QwkJ%XW8!-GB za~sj#gvHOWnxL}|dDw8^gm``3LR)uqd2&w1d?en5&6VZ4{0}RYd1_6i-0y zM08KWxE|^!qjw4>4Ny7_eHqh6C^tdlbSyPPMM1MU24`aCY_!h7LQ5=XFn=C~t+CPu zvln2oEmkkYTsyQcMj?l4M|3X1s1s_Jp?f*TDvDR4*AJ%!0^ zG<@`*!Sq>_pTppJEWLord^BIg@&e2(L~9Wi3YcAj`ByPqij`$(zmCN>u=*zEmSeOM zg||^%h0Z%DzK7ZxbR&${qW%GTA7Zi|r5OE>G5rMPjc9DbQi956G`C>z1!lIPm11E# zmcPRMHyD14m7SQ~g~i=i{T_3B(EbsHpHSV0&d(VAf?5UL-!MLa;veY!iOC_9{zCn4 zO#eao2pa#PFSI_|L!~B~wJ@lSrDM^pi}494o`hOGOzNX_3hE8eI~8RajYjA<#|c`cR)V8%deAQo=G>|o5_gy9gZ zm}n2f;w@Mmj=2#SjYQ#gR7at62a0*r#-Mu_#&@GW4!wIZu~E7o{Rx;pfbv8%94t*j zWipymFn9zrQ_*@13)8UtIOd@(i0(@m zFFV-@*NsKpuY#xA5q?m!9Fbg zjLNTQ?#J?PnE4&8Kd^8RvsKLhh2h^=IgIuZEdGa8q0Q0m<&MFq77E9rdK@|;igi&t z0o@ZZJ_+^u=$(woDJY$aenU)UlpCYb1WQd(IRi}vgXWky3$3%Ua1NGRV!joI=V7Ha zX3xiB7OQPBcM;m{Q0Rba4xNq|U4mL?bT7mBaulyXuL~w!QMwBC?wIyK`D!$Jq2C)7 z9nHQN^utnrv<6_|dMq25xdFpLSQ(7jA(%I@IuvuapgkOmx1u@{o!c|LEp#p8Il;qx>lv8?p2mDxagd8G|jD`4X*d zSV*zF9rHUd{01xEVzz|E@36WXb3dTH2Zg<;{)EmxjDALKKe`o+e?#$i^bTV3CrVY+ z|HAYz%KxHq1pWU|Ip+MMJv3`#Pzy`7(Gsz6JeKQV<^&8+!b&~N*2nzGSZ#p0)6i~+ zMH$s5=$wvGQxwj?LJKUPg_(2EYKfI|F?$~7TVvP;b6K?8V(~((UW872j5?su5!FjD zz7)mFP`eym6{RkycSWxoCRd@+1O1+uUX5~Z4EkV6N2MQ{{jq!h0)^LUA-|d348Md>86t(Hn=!y(ry>{&-9$p!^^j z6S4FVDi5PM8G|X9anYKJg~zZw4fE46d=e`jW@lpYDXh-M+#Ixh6y~D(96IwbdLFg; z=)Q>YODMjK-Xcs2D7}LE5=@t({2Ce|`mdw%7Mja3Sb?RLXsyD+J6K+gnfEY^u(B4j z>oETTR@Y-LMtcJmKSp&UI-4;14293JuocT+VkSjvJ668N>^GSI7Q>yG`ws2hSo|KV zKcG{_XfF!;Q2iO>Us0@}_8YnfP&$bEpXeRJq>9F2^#8&1UzGpDpvDD9`&T*!m0D=l z#`1BPIUcP#Sg4EHlQ3ToLkTPO(QbgnQ?Ys)=46Z-qi{N^P0?wFVsq5aM7IUTXQAE_ zy$mMjqI4emZ7@9_w$Jp6ndk24LW@=(oyS=?zI?ShvN0<4aDRIlm?+b7}Fsr-;Bmk^oOBxE1DxPu&^`| ztx;IG1Iu?}CXeA=Sh*XsV=+Gtt2XBDM|(ULC!jhJ9S5U_PB?hBGkt6xy?~_%v4Mpz|z7b5WRw>hl-}D87i=OXw~@X%XrL^cG|C3K~n%Uxw*x zD8G)un^<}al@(~N#PZvic?Yf4Sa|pUl~BijI1`8i#}~;Xjz>}}m4_oMr3qOi6UQT| zN#)_lBc-WiUs6-bByLi95_!b&sANYnrL4qFDoe@4@knZsEJs%2Cdv2p^7-lgAG}fa z(O8e}N0@9t^HcOTVj7^b3H>in_!8AEXoZ;BhWYJi{|AE|sO`ei*BI``>>ezCht&wh zy;#_X(SFPwz+#M*pHMo4`eAf_#`p*tzoL5-liyH2j$VrC2~rMei_!)$%j8ep{{ijA;vK9(C}PQ>CxSh*OZCa7PAPE(9?C^bj7 z1tu*~ZiR+~>6NHlh33`hwL!HlTGyiA4uuZrT#s=llx{%13npDr?uN!q=ype?Cz`#` z%VXLbty|FVi^6TFY8c#(nL99lC)#&mb|7klu=IBf2V-Fp zX#9rmF;r4CPoVcZrYF(*6aCXDoYnTsgK7;7&c@6+n6Hg?2D5chtB0k(U|1gu4Y7P4 zRvV$%7%LZIBx3GjEH=UTQk0saoj>B@Oj{=-iHRe>Cnw zcK{{@ln0?V7}FuB3`Mhu!f;gYMe9EFM__&=+7DpxAZA8kX*7lgX2+m57OUe>d<+XF zmd9gm0v4ad%2OCkMEz-WCS&{zN>kCbF`0()bTppB^aWH(XugQvOjKv1^)mW%P?(F( zKQUf_QU&!zn7oGaVl>`BcL^#>(Oib!o0u*~%SC@B3h$u03WN7B<6-`Nv_HV?TGZBI z>E9UoSlEE&kFoj*iW{-=8Ah8h_XQR=W4r~Wt*C#6&Nh^Hps^F(Dki(o{06-}n0|{& zg#KO>en53UT0dguC(Iv2`@a|*LhT5a5)6OA>`^Qq!|HJqQ!Jdo=p^P&VewC_oJOg} zwP!xmYoc>D#IGg;pN@-YE1z=QfNrlx|18KPGpgJOGUXx&u)ejOGyZ?#6T|TKAwo9EJN(9f5(4 znFlccAleUMb~I`Rmi`aJF<2OfeVu@&rZ`F!vM|Ct^GarOBv2gU%F`Z8WB# z`z$8Y(R=~D8JLz(nTh@^6kbMk4q9c*%)|VAwEv000@M~^=~WD0!|Y-#FTtvV;!-Ru z!)Q6?R$$S^%1V@0q5dv9?_s|uS3trbUi8?(EJ#Mji?4_eTM!f%x^~f zOANMPW-FGqVYnT$J5bw+)m^#{zZC7uFxw2Z=2-eGhAptr3d<5!uRyUiR<6dV4d!Glw#B#| zN*z$Y4xNrDcS55xx;J3b1x*#bZkXPLN)PmVqL4?mH(EDirZ47iMf)}kG}QWI=?)C< z#Owep55(#q6bEBr2u4FOHw=sSU}ZQ;BT&B|9UbG5Xgq}OC`=wk*+6d$rejeVhvuUw zj7Rlxw4OkJ0_G>8ZDBA8Gn2721;eSBwNaaf)#)fckA)YoJOgtxvG@{JW??iN^)fnh zF@6Q5`RFddWFg9n(0CQo*HL)`%_ZnLs4he6P4t(eumYWTFkXeyd#JC*+977Qp|%}M|G{tv7ItCzYpm`@aSv9$ z!zjYsUM%jzct1)9P><313FSj*97gwNOpc)WD|$yU{SB4l=%*%nR+$ zJZPVVK@HSuVd)$UYh$(!mg{1*9*Xs`&;X-`m}`W^^RdzxB@y+D(771nCTLuSZc|Kh zC^tv11*R=gX@#bQLTgm7LhEYu+hD#e+Sg*x4l^CF)Dc4kvz<`ujMXkEcEy5<Hty@i>Tn137XcQ9Cm+G;F$7`~6$HCSGY)paQPSXhtI2F!he#ZR%a5v5J2e~!)< z7;i=+M0YDDU!lAmy&ahDL}eG6U!$-G)o;=I4*dx8`_TRYgZ-E}fTf=>Jc!vts2#@Y z5fp#H!mn69in-%h{2x|Qj835b2Rf%P{u3pk!0;EIU~(zSP0`4q+YFT!XtqS}a!gyHbtU?(QMek_HW5H<4Mn80K$D}`+ zccC``(*i1k&>xJ#-KY*ltB9H5n7Cf9fjr5ST#@_gN3mejl=!J@(jvT(X%m~hRSp_pF?2=swK2uM1LmcXQTZx26Heo z7fbUnoR8TBs4c|mA{1Z4!s}RGj5!C3|H8^rjFzGP7CI|1c2Rm8-Bp;pi}GqTJWM}8 zrqPGs!^=N&B{st62LFY4!H=*YFjyg7Q{0zCw2!Dm&2JiCz`cU1)uS{vH&* zLp8!+FJ^wg{C>25#OzO~9mLXqF+7BYBUnzb`U{Fjv2qNfgXy`b)I+~M3RzSeqIDi-8e{$fv@gU!M6C&yF2V3p%r?bx zGpsg8u>}@dV$=$AS77lK$LPGaU1mQG_RbUgE5wgzf7v04ko+E~b7xen&)Vev0m zsgF?u)Xzhw5yt1EbOE{|CKsXH1dU5Dy$qEcn$6H_j%rJ^E=Ru=3Rj?WHO6gFl2LDq zNjsD~pm80#9Z~6oW@q$nz_bfmD*D|}=#FX+40>WFkNMtc-;CM5sNIUC+c4Cy&>zcp zVD(NE2Vi9&MuRXn7>h$N9*WX1)bBxOILaf?xF1~|laXjXgx)AjA4bJMe+&wbpgIn% zM=>)V^N*wb1O^jOn}{U~!%3K(jO8gbj z&iq$83&R>%sDw?#Jp#6d%OGLs%Y#IRlIThm|oHjYa)YbRNUlMCoyKCt&g<$`jGBFnt=8XV9F2 z-c(elq4g~K(@}UHofk2liP9|8XJax4<+*6Qg6=$27NEHhy$Ys_(0U#H#V9O6)xlsX zX5Pg7a`K($#?m_&uEN4A360Ou z{Q{HCXol!*#q=vwwxhoTg(|AM(E1uPdocek+TURip|%f8KVY~Yvj?#J6IKtRcnAxJ zF*<^|U$FQqR*s@{9QFU9lVW@VjX%&mg~^{N3)i3d(5r!IO;l>3c@7G7P(2r|y6D%# zd;_$z7&OF8BP=z>@B++=s9l8BCMaHth0Czq6m!k7_*bm7z^Ena5;|94d?iX(q1y(N zYfx^B#mmS9H2#+ykYasQ1F8H_Cm`xCPz5sAy>RL+^G> z`=fOi`U6lHi0U8=24m)K%nwDoh}q$&-HWCBFdTt}kyw5Js}G_$3M->AGB7s=i(@e! zhtgxHo9K*3c>)?wqWcsk6VZGcy~&t9gUVF&Z4{nGbvjzlVP*#AOK87{!A#U-+@s5$0ZV6i2}tx&oG^()b7jdB|_u0dDEq%E55(d&Teb*L!lcS7L?RJ)*cBWAi` z{wB1$W6%S&URcUw*c-Ebu-q4`x1y+Fp&v&5F?S~x@50Ielm?;xcXS40JOqs*y2CKJ z2jzRw8-eNlsEkDO0Tf1|`Y>9f(Kj$Z7VSqc7>Ak1urwaS$1ytrwI{JU5yeSZcpA%- zF*g;9|GcznUDSg6e_4LLhDt`EXMpBXfMIQL2Vh9-o$V@W>;W&C05@?aTONc#b`C= z-pAqxSXqP8I@JG-j*szrG(JZ66HGouIY4g{rk|s-8O<+I*ox{`Xl+A(JLY$yUBzG* zW_Dv~4~E}jHbU)ttnNc`KNfz(@&U{p#NvOkatNcts3++Bg7L2?{f6#wO#X-R2{eAk z^bb`2MDsLy!VPCWRBNJjHu|+tsEtltjO(FPAN2;9G(@=(8t0?i7!?uCi_p6m(g50 From 07c085a279847be06d79873930ca7bcd968aa071 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Mon, 26 Dec 2016 22:48:10 +0000 Subject: [PATCH 2/8] README points to docs. Update NEWS for 0.4 (#43) --- NEWS.md | 10 ++++++ README.md | 94 +++---------------------------------------------------- 2 files changed, 14 insertions(+), 90 deletions(-) diff --git a/NEWS.md b/NEWS.md index 9b75500..5cf112a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,15 @@ # IntervalConstraintProgramming.jl +# v0.4 +- `@function f(x) = 4x` defines a function +- Functions may be used inside constraints (only functions of a single variable, + returning a single variable, for now). +- Functions may be iterated. +- Local variables may be introduced. +- Simple plotting solution for the results of `pave`. +- Major internals rewrite. + + # v0.3 - Renamed `setinverse` to `pave` diff --git a/README.md b/README.md index b94ae29..fd30e89 100644 --- a/README.md +++ b/README.md @@ -11,96 +11,11 @@ The package is based on interval arithmetic using the author's [`ValidatedNumerics.jl`](https://github.com/dpsanders/ValidatedNumerics.jl) package, in particular multi-dimensional `IntervalBox`es (i.e. Cartesian products of one-dimensional intervals). -The goal is to impose constraints, given by inequalities, and find the set that -satisfies the constraints, known as the **feasible set**. +## Documentation +Documentation for the package is available [here](http://dpsanders.github.io/IntervalConstraintProgramming.jl/latest/) -The method used to do this is known as *interval constraint programming*, in particular the -so-called "forward--backward contractor". This is implemented in terms of *separators*; see -[Jaulin & Desrochers]. +See, in particular, the [example notebooks](https://github.com/dpsanders/IntervalConstraintProgramming.jl/tree/master/examples) for usage examples. -## Constraints -First we define a constraint using the `@constraint` macro: -```julia -S = @constraint x^2 + y^2 <= 1 -``` -and an initial interval in the $x$--$y$ plane, `X`: -```julia -x = y = -100..100 -X = IntervalBox(x, y) -``` - -The `@constraint` macro defines an object `S`, of type `Separator`. -This is a function which, -when applied to the box $X = x \times y$ -in the x--y plane, applies two *contractors*, an inner one and an outer one. - -The inner contractor tries to shrink down, or *contract*, the box, to the smallest subbox -of $X$ that contains the part of $X$ that satisfies the constraint; the -outer contractor tries to contract $X$ to the smallest subbox that contains the -region where the constraint is not satisfied. - -When `S` is applied to the box `X`, it returns the result of the inner and outer contractors: -```julia -julia> inner, outer = S(X); - -julia> inner -([-1, 1],[-1, 1]) - -julia> outer -([-100, 100],[-100, 100]) -``` - -## Set inversion: finding the feasible set - -To make progress, we must recursively bisect and apply the contractors, keeping -track of the region proved to be inside the feasible set, and the region that is -on the boundary ("both inside and outside"). This is done by the `pave` function, -that takes a separator, a domain to search inside, and an optional tolerance: - -```julia -julia> S = @constraint 1 <= x^2 + y^2 <= 3 -julia> paving = pave(S, X, 0.125); -``` - -`pave` returns an object of type `Paving`. This contains: the separator itself; -an `inner` approximation, of type `SubPaving`, which is an alias for a `Vector` of `IntervalBox`es; -a `SubPaving` representing the boxes on the boundary that could not be assigned either to the inside or outside of the set; -and the tolerance. - -We may draw the result using the code in the `draw_boxes` file in the examples directory, -which uses `PyPlot.jl`: -```julia -julia> filename = joinpath(Pkg.dir("IntervalConstraintProgramming"), "examples", "draw_boxes.jl"); -julia> include(filename); -julia> draw(paving) -``` - -We can get more control with -``` -julia> draw(paving.inner, "green", 0.5, 1) -julia> draw(paving.boundary, "grey", 0.2) -``` -The second argument is the color; the third (optional) is the alpha value (transparency); -and the fourth is the linewidth (default is 0). - -The output should look like this: - -![Ring](examples/ring.png) - - -The green boxes have been **rigorously** proved to be contained within the feasible set, -and the white boxes to be outside the set. The grey boxes show those that lie on the boundary, whose status is unknown. - -### 3D - -The package works in any number of dimensions, although it suffers from the usual exponential slowdown ("combinatorial explosion") in higher dimensions. In 3D, it is still relatively fast. There are sample 3D calculations in the `examples` directory, in particular in the [solid torus notebook](examples/Solid torus.ipynb), which uses [`GLVisualize.gl`](https://github.com/JuliaGL/GLVisualize.jl) to provide a 3D visualization which may be rotated and zoomed. The output for the solid torus looks like this: - -![Coloured solid torus](examples/coloured_solid_torus.png) - - -## Set operations -Separators may be combined using the operators `!` (complement), `∩` and `∪` to make -more complicated sets; see the [notebook](examples/Set inversion.ipynb) for several examples. ## Author @@ -110,8 +25,7 @@ Departamento de Física, Facultad de Ciencias, Universidad Nacional Autónoma de ## References: - *Applied Interval Analysis*, Luc Jaulin, Michel Kieffer, Olivier Didrit, Eric Walter (2001) -- Introduction to the Algebra of Separators with Application to Path Planning, Luc Jaulin and Benoît Desrochers, -*Engineering Applications of Artificial Intelligence* **33**, 141–147 (2014) +- Introduction to the Algebra of Separators with Application to Path Planning, Luc Jaulin and Benoît Desrochers, *Engineering Applications of Artificial Intelligence* **33**, 141–147 (2014) ## Acknowledements Financial support is acknowledged from DGAPA-UNAM PAPIME grants PE-105911 and PE-107114, and DGAPA-UNAM PAPIIT grant IN-117214, and from a CONACYT-Mexico sabbatical fellowship. The author thanks Alan Edelman and the Julia group for hospitality during his sabbatical visit. He also thanks Luc Jaulin and Jordan Ninin for the [IAMOOC](http://iamooc.ensta-bretagne.fr/) online course, which introduced him to this subject. From a8413b872bc1d7f0dd3f52297cc611a8b477cc17 Mon Sep 17 00:00:00 2001 From: Tony Kelman Date: Tue, 27 Dec 2016 01:23:17 -0800 Subject: [PATCH 3/8] add FixedSizeArrays to REQUIRE (#24) if it's being used or imported, it should be depended on explicitly instead of assuming it will be present as an indirect dependency --- REQUIRE | 1 + 1 file changed, 1 insertion(+) diff --git a/REQUIRE b/REQUIRE index 98cb550..754f498 100644 --- a/REQUIRE +++ b/REQUIRE @@ -2,3 +2,4 @@ julia 0.4 ValidatedNumerics 0.5.1 # plot recipes from 0.5.1 MacroTools 0.3 Compat 0.7.14 +FixedSizeArrays From 2433de5f54906ae61e5bc6b9bf3729a08b48f192 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Wed, 4 Jan 2017 12:21:44 +0000 Subject: [PATCH 4/8] Multi-dimensional functions (#44) * Parametrize Separators * Fix test * Fixes for the types of lhs and args * Multi-dimensional contractor seems to be working! * Make multidim iterated functions work * Remove debugging output for iterated functions * Move parse_comparison to separator.jl * Escape name of contractor when creating constraint so that it is available with name _C_1_ etc. * Convenience constructor for ConstraintSeparator that automatically extracts variables * Factor out content of into make_constraint function * Parametrise interval field of ConstraintSeparator --- src/ast.jl | 41 ++++++++++++++----- src/code_generation.jl | 24 +++++++++--- src/contractor.jl | 19 ++++++--- src/functions.jl | 9 ++++- src/separator.jl | 89 +++++++++++++++++++++++++++++++++++++----- test/runtests.jl | 20 +++++++++- 6 files changed, 171 insertions(+), 31 deletions(-) diff --git a/src/ast.jl b/src/ast.jl index ef77949..67e0ba8 100644 --- a/src/ast.jl +++ b/src/ast.jl @@ -139,7 +139,7 @@ end # function process_iterated_function!(flatAST::FlattenedAST, ex) function process_tuple!(flatAST::FlattenedAST, ex) - println("Entering process_tuple") + # println("Entering process_tuple") # @show flatAST # @show ex # top_args = [flatten!(flatAST, arg) for arg in ex.args] @@ -161,19 +161,36 @@ The name a is currently retained. TODO: It should later be made unique. """ function process_assignment!(flatAST::FlattenedAST, ex) - println("process_assignment!:") - # @show ex - # @show ex.args[1], ex.args[2] + # println("process_assignment!:") + # @show ex + # @show ex.args[1], ex.args[2] top = flatten!(flatAST, ex.args[2]) + # @show top var = ex.args[1] - push!(flatAST.intermediate, var) + # @show var + + # TODO: Replace the following by multiple dispatch + if isa(var, Expr) && var.head == :tuple + vars = [var.args...] + + elseif isa(var, Tuple) + vars = [var...] + + elseif isa(var, Vector) + vars = var + + else + vars = [var] + end + + append!(flatAST.intermediate, vars) - top_level_code = Assignment(var, :(), top) # empty operation + top_level_code = Assignment(vars, :(), top) # empty operation push!(flatAST.code, top_level_code) - # @show flatAST + # j@show flatAST return var @@ -183,17 +200,23 @@ end by rewriting it to the equivalent set of iterated functions""" function process_iterated_function!(flatAST::FlattenedAST, ex) total_function_call = ex.args[1] - argument = ex.args[2] + args = ex.args[2:end] + + # @show args function_name = total_function_call.args[2] power = total_function_call.args[3] # assumed integer - new_expr = :($function_name($argument)) + new_expr = :($function_name($(args...))) + + # @show new_expr for i in 2:power new_expr = :($function_name($new_expr)) end + # @show new_expr + flatten!(flatAST, new_expr) end diff --git a/src/code_generation.jl b/src/code_generation.jl index 07a5fc0..73fbbb0 100644 --- a/src/code_generation.jl +++ b/src/code_generation.jl @@ -1,5 +1,11 @@ function make_tuple(args) + + if isa(args, Symbol) + # args = [args] + return args + end + length(args) == 1 && return args[1] return Expr(:tuple, args...) @@ -10,19 +16,24 @@ function emit_forward_code(a::Assignment) args = isa(a.args, Vector) ? a.args : [a.args] + lhs = make_tuple(a.lhs) + if a.op == :() # empty - :($(a.lhs) = $(args...) ) + args = make_tuple(args) + :($lhs = $args) else - :($(a.lhs) = $(a.op)($(args...) ) ) + :($lhs = $(a.op)($(args...) ) ) end end function emit_forward_code(a::FunctionAssignment) f = a.func - args = make_tuple(a.lhs) - :($args = $(esc(f)).forward($(a.args...) ) ) + args = isa(a.args, Vector) ? a.args : [a.args] + lhs = make_tuple(a.lhs) + + :($lhs = $(esc(f)).forward($(a.args...) ) ) end @@ -43,7 +54,10 @@ function emit_backward_code(a::Assignment) rev_op = rev_ops[a.op] # find reverse operation if rev_op == :() # empty - return :($(args...) = $(a.lhs)) + args = make_tuple(args) + lhs = make_tuple(a.lhs) + return :($args = $lhs) + #return :($(args...) = $(a.lhs)) else rev_code = :($(rev_op)($(return_args...))) end diff --git a/src/contractor.jl b/src/contractor.jl index 426e453..862321d 100644 --- a/src/contractor.jl +++ b/src/contractor.jl @@ -136,6 +136,15 @@ function make_contractor(ex::Expr) # using an IntervalBox and intersection of IntervalBoxes end + top_args = make_tuple(top) + + local intersect_code + + if isa(top_args, Symbol) + intersect_code = :($top_args = $top_args ∩ _A_) # check type stability + else + intersect_code = :($top_args = IntervalBox($top_args) ∩ _A_) # check type stability + end code = @@ -147,7 +156,7 @@ function make_contractor(ex::Expr) $(forward_output) = forward($(forward.input_arguments...)) - $(top) = $(top) ∩ _A_ + $intersect_code $(backward_output) = backward($(backward.input_arguments...)) @@ -157,10 +166,10 @@ function make_contractor(ex::Expr) end - # @show forward - # @show backward - # - # @show code + # @show forward + # @show backward + # # + # @show code return :(Contractor($(augmented_input_arguments), $(Meta.quot(expr)), diff --git a/src/functions.jl b/src/functions.jl index 2945e3e..d54ffe1 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -26,6 +26,8 @@ type ConstraintFunction{F <: Function, G <: Function} output::Vector{Symbol} # output arguments for forward function forward::F backward::G + forward_code::Expr + backward_code::Expr end type FunctionArguments @@ -92,6 +94,8 @@ Example: `@function f(x, y) = x^2 + y^2` registered_functions[f] = FunctionArguments(flatAST.variables, flatAST.intermediate, return_arguments) + forward_function = make_function(forward_code) + backward_function = make_function(backward_code) return quote #$(esc(Meta.quot(f))) = ConstraintFunction($(all_vars), $(generated), $(forward_code), $(backward_code)) @@ -99,7 +103,10 @@ Example: `@function f(x, y) = x^2 + y^2` $(esc(f)) = ConstraintFunction($(flatAST.variables), $(flatAST.intermediate), - $(make_function(forward_code)), $(make_function(backward_code)) + $(forward_function), + $(backward_function), + $(Meta.quot(forward_function)), + $(Meta.quot(backward_function)) ) diff --git a/src/separator.jl b/src/separator.jl index 8768771..7e12cd8 100644 --- a/src/separator.jl +++ b/src/separator.jl @@ -6,20 +6,22 @@ ConstraintSeparator is a separator that represents a constraint defined directly using `@constraint`. """ # CHANGE TO IMMUTABLE AND PARAMETRIZE THE FUNCTION FOR EFFICIENCY -type ConstraintSeparator <: Separator +type ConstraintSeparator{C, II} <: Separator variables::Vector{Symbol} #separator::Function - constraint::Interval - contractor::Contractor + constraint::II # Interval or IntervalBox + contractor::C expression::Expr end +ConstraintSeparator(constraint, contractor, expression) = ConstraintSeparator(contractor.variables[2:end], constraint, contractor, expression) + doc"""CombinationSeparator is a separator that is a combination (union, intersection, or complement) of other separators. """ -type CombinationSeparator <: Separator +type CombinationSeparator{F} <: Separator variables::Vector{Symbol} - separator::Function + separator::F expression::Expr end @@ -50,11 +52,69 @@ end +doc"""`parse_comparison` parses comparisons like `x >= 10` +into the corresponding interval, expressed as `x ∈ [10,∞]` +Returns the expression and the constraint interval + +TODO: Allow something like [3,4]' for the complement of [3,4] +""" + +function parse_comparison(ex) + expr, limits = + @match ex begin + ((a_ <= b_) | (a_ < b_) | (a_ ≤ b_)) => (a, (-∞, b)) + ((a_ >= b_) | (a_ > b_) | (a_ ≥ b_)) => (a, (b, ∞)) + + ((a_ == b_) | (a_ = b_)) => (a, (b, b)) + + ((a_ <= b_ <= c_) + | (a_ < b_ < c_) + | (a_ <= b_ < c) + | (a_ < b_ <= c)) => (b, (a, c)) + + ((a_ >= b_ >= c_) + | (a_ > b_ > c_) + | (a_ >= b_ > c_) + | (a_ > b_ >= c)) => (b, (c, a)) + + ((a_ ∈ [b_, c_]) + | (a_ in [b_, c_]) + | (a_ ∈ b_ .. c_) + | (a_ in b_ .. c_)) => (a, (b, c)) + + _ => (ex, (-∞, ∞)) + + end + + a, b = limits + + return (expr, a..b) # expr ∈ [a,b] + +end -macro constraint(ex::Expr) # alternative name for constraint -- remove? - # @show ex - expr, constraint = parse_comparison(ex) + +function new_parse_comparison(ex) + @show ex + if @capture ex begin + (op_(a_, b_)) + end + + #return (op, a, b) + @show op, a, b + + elseif ex.head == :comparison + println("Comparison") + symbols = ex.args[1:2:5] + operators = ex.args[2:2:4] + + @show symbols + @show operators + + end +end + +function make_constraint(expr, constraint) if isa(expr, Symbol) expr = :(1 * $expr) # make into an expression! @@ -65,15 +125,24 @@ macro constraint(ex::Expr) # alternative name for constraint -- remove? full_expr = Meta.quot(:($expr ∈ $constraint)) code = quote end - push!(code.args, :($contractor_name = @contractor($(esc(expr))))) - push!(code.args, :(ConstraintSeparator($(contractor_name).variables[2:end], $constraint, $contractor_name, $full_expr))) + push!(code.args, :($(esc(contractor_name)) = @contractor($(esc(expr))))) + # push!(code.args, :(ConstraintSeparator($(esc(contractor_name)).variables[2:end], $constraint, $(esc(contractor_name)), $full_expr))) + + push!(code.args, :(ConstraintSeparator($constraint, $(esc(contractor_name)), $full_expr))) # @show code code +end + +macro constraint(ex::Expr) # alternative name for constraint -- remove? + # @show ex + expr, constraint = parse_comparison(ex) + make_constraint(expr, constraint) end + # doc"""Create a separator from a given constraint expression, written as # standard Julia code. # diff --git a/test/runtests.jl b/test/runtests.jl index 0370f2d..09f35c0 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -30,7 +30,7 @@ end X = IntervalBox(II, II) S = @constraint x^2 + y^2 <= 1 - @test typeof(S) == IntervalConstraintProgramming.ConstraintSeparator + @test typeof(S) <: IntervalConstraintProgramming.ConstraintSeparator inner, outer = S(X) @test inner == (-1..1, -1..1) @@ -158,3 +158,21 @@ end @test C3(A, x) == sqrt(A / 16) end + +@testset "Multidimensional functions" begin + + @function g4(x, y) = (2x, 2y) + + A = IntervalBox(0.5..1, 0.5..1) + x = y = 0..1 + + C4 = @contractor g4(x, y) + + @test IntervalBox(C4(A, x, y)) == A / 2 + + + C5 = @contractor (g4↑2)(x, y) + + @test IntervalBox(C5(A, x, y)) == A / 4 + +end From c4c137dd2b87b9fd481f03549110dd6a72eb21a4 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Sat, 7 Jan 2017 07:45:46 -0500 Subject: [PATCH 5/8] Refactor Contractor so that the call is a standard function call (#48) * Refactor flatAST with methods * FlattenedAST -> FlatAST * forward_backward replaces forward_pass and backward_pass * Working NewContractor with action via function call * Make contractors in separators use new syntax (accepting IntervalBox. This seems to break pave -- when empty? * Finish rewrite to use forward_backward. Contractor call is messy. * Clean up functions * Clean up contractor code * Clean up separator code * Add for contractor call * Make contractors return IntervalBox'es and deal with fallout * Correct sqr_rev --- src/IntervalConstraintProgramming.jl | 9 +- src/ast.jl | 131 +++++++++++---------- src/code_generation.jl | 67 +++++------ src/contractor.jl | 170 ++++++--------------------- src/functions.jl | 63 ++-------- src/paving.jl | 2 +- src/reverse_mode.jl | 10 +- src/separator.jl | 71 +++++------ src/setinversion.jl | 10 +- test/runtests.jl | 38 ++---- 10 files changed, 203 insertions(+), 368 deletions(-) diff --git a/src/IntervalConstraintProgramming.jl b/src/IntervalConstraintProgramming.jl index 463f989..1736530 100644 --- a/src/IntervalConstraintProgramming.jl +++ b/src/IntervalConstraintProgramming.jl @@ -10,6 +10,8 @@ using FixedSizeArrays: setindex import Base: show, ∩, ∪, !, ⊆, setdiff +import ValidatedNumerics: sqr + export @contractor, Separator, separator, @separator, @constraint, @@ -17,8 +19,7 @@ export SubPaving, Paving, pave, refine!, Vol, - show_code, - plus_rev, mul_rev + show_code include("reverse_mode.jl") @@ -31,5 +32,9 @@ include("setinversion.jl") include("volume.jl") include("functions.jl") +import Base.∪ +import ValidatedNumerics: IntervalBox +∪{N,T}(X::IntervalBox{N,T}, Y::IntervalBox{N,T}) = + IntervalBox( [(x ∪ y) for (x,y) in zip(X, Y)]... ) end # module diff --git a/src/ast.jl b/src/ast.jl index 67e0ba8..c4f8088 100644 --- a/src/ast.jl +++ b/src/ast.jl @@ -1,4 +1,3 @@ - const symbol_numbers = Dict{Symbol, Int}() doc"""Return a new, unique symbol like _z3_""" @@ -11,10 +10,11 @@ function make_symbol(s::Symbol = :z) # default is :z end -function make_symbols(n::Integer) - [make_symbol() for i in 1:n] +function make_symbols(n::Integer, s::Symbol = :z) + [make_symbol(s) for i in 1:n] end +# The following function is not used doc"""Check if a symbol like `:a` has been uniqued to `:_a_1_`""" function isuniqued(s::Symbol) ss = string(s) @@ -23,6 +23,8 @@ end # Types for representing a flattened AST: +# Combine Assignment and FunctionAssignment ? + immutable Assignment lhs op @@ -35,88 +37,98 @@ immutable FunctionAssignment args end -immutable GeneratedFunction - input_arguments::Vector{Symbol} - output_arguments::Vector{Symbol} - code::Expr -end - # Close to single assignment form -type FlattenedAST +type FlatAST + top # topmost variable(s) input_variables::Set{Symbol} variables::Vector{Symbol} # cleaned version intermediate::Vector{Symbol} # generated vars code # ::Vector{Assignment} end -import Base.show -function show(io::IO, flatAST::FlattenedAST) + +function Base.show(io::IO, flatAST::FlatAST) + println(io, "top: ", flatAST.top) println(io, "input vars: ", flatAST.input_variables) println(io, "intermediate vars: ", flatAST.intermediate) - println(io, "code: ") - println(io, flatAST.code) + println(io, "code: ", flatAST.code) end -FlattenedAST() = FlattenedAST(Set{Symbol}(), [], [], []) +FlatAST() = FlatAST([], Set{Symbol}(), [], [], []) -export FlattenedAST +export FlatAST ## +set_top!(flatAST::FlatAST, vars) = flatAST.top = vars # also returns vars + +add_variable!(flatAST::FlatAST, var) = push!(flatAST.input_variables, var) + +add_intermediate!(flatAST::FlatAST, var::Symbol) = push!(flatAST.intermediate, var) +add_intermediate!(flatAST::FlatAST, vars::Vector{Symbol}) = append!(flatAST.intermediate, vars) + +add_code!(flatAST::FlatAST, code) = push!(flatAST.code, code) + export flatten function flatten(ex) - flatAST = FlattenedAST() - top_var = flatten!(flatAST, ex) + flatAST = FlatAST() + top = flatten!(flatAST, ex) - return top_var, flatAST + return top, flatAST end doc"""`flatten!` recursively converts a Julia expression into a "flat" (one-dimensional) -structure, stored in a FlattenedAST object. This is close to SSA (single-assignment form, - https://en.wikipedia.org/wiki/Static_single_assignment_form). - - Variables that are found are considered `input_variables`. - Generated variables introduced at intermediate nodes are stored in - `intermediate`. - The function returns the variable that is -at the top of the current piece of the tree.""" -# process numbers -function flatten!(flatAST::FlattenedAST, ex) +structure, stored in a FlatAST object. This is close to SSA (single-assignment form, +https://en.wikipedia.org/wiki/Static_single_assignment_form). + +Variables that are found are considered `input_variables`. +Generated variables introduced at intermediate nodes are stored in +`intermediate`. +Returns the variable at the top of the current piece of the tree.""" + +# TODO: Parameters + +# numbers: +function flatten!(flatAST::FlatAST, ex) return ex # nothing to do to the AST; return the number end -function flatten!(flatAST::FlattenedAST, ex::Symbol) # symbols are leaves - push!(flatAST.input_variables, ex) # add the discovered symbol as an input variable +# symbols: +function flatten!(flatAST::FlatAST, ex::Symbol) # symbols are leaves + add_variable!(flatAST, ex) # add the discovered symbol as an input variable return ex end -function flatten!(flatAST::FlattenedAST, ex::Expr) +function flatten!(flatAST::FlatAST, ex::Expr) + local top if ex.head == :$ # constants written as $a - process_constant!(flatAST, ex) + top = process_constant!(flatAST, ex) elseif ex.head == :call # function calls - process_call!(flatAST, ex) + top = process_call!(flatAST, ex) elseif ex.head == :(=) # assignments - process_assignment!(flatAST, ex) + top = process_assignment!(flatAST, ex) elseif ex.head == :block - process_block!(flatAST, ex) + top = process_block!(flatAST, ex) elseif ex.head == :tuple - process_tuple!(flatAST, ex) + top = process_tuple!(flatAST, ex) elseif ex.head == :return - process_return!(flatAST, ex) + top = process_return!(flatAST, ex) end + + set_top!(flatAST, top) end -function process_constant!(flatAST::FlattenedAST, ex) +function process_constant!(flatAST::FlatAST, ex) return esc(ex.args[1]) # interpolate the value of the external constant end @@ -125,7 +137,7 @@ end They are processed in order. """ -function process_block!(flatAST::FlattenedAST, ex) +function process_block!(flatAST::FlatAST, ex) local top for arg in ex.args @@ -136,9 +148,9 @@ function process_block!(flatAST::FlattenedAST, ex) return top # last variable assigned end -# function process_iterated_function!(flatAST::FlattenedAST, ex) +# function process_iterated_function!(flatAST::FlatAST, ex) -function process_tuple!(flatAST::FlattenedAST, ex) +function process_tuple!(flatAST::FlatAST, ex) # println("Entering process_tuple") # @show flatAST # @show ex @@ -147,8 +159,6 @@ function process_tuple!(flatAST::FlattenedAST, ex) top_args = [] # the arguments returned for each element of the tuple for arg in ex.args top = flatten!(flatAST, arg) - # @show flatAST - push!(top_args, top) end @@ -160,7 +170,7 @@ end The name a is currently retained. TODO: It should later be made unique. """ -function process_assignment!(flatAST::FlattenedAST, ex) +function process_assignment!(flatAST::FlatAST, ex) # println("process_assignment!:") # @show ex # @show ex.args[1], ex.args[2] @@ -185,10 +195,10 @@ function process_assignment!(flatAST::FlattenedAST, ex) vars = [var] end - append!(flatAST.intermediate, vars) + add_intermediate!(flatAST, vars) top_level_code = Assignment(vars, :(), top) # empty operation - push!(flatAST.code, top_level_code) + add_code!(flatAST, top_level_code) # j@show flatAST @@ -198,7 +208,7 @@ end """Processes something of the form `(f↑4)(x)` (write as `\\uparrow`) by rewriting it to the equivalent set of iterated functions""" -function process_iterated_function!(flatAST::FlattenedAST, ex) +function process_iterated_function!(flatAST::FlatAST, ex) total_function_call = ex.args[1] args = ex.args[2:end] @@ -217,7 +227,7 @@ function process_iterated_function!(flatAST::FlattenedAST, ex) # @show new_expr - flatten!(flatAST, new_expr) + flatten!(flatAST, new_expr) # replace the current expression with the new one end """A call is something like +(x, y). @@ -225,7 +235,7 @@ A new variable is introduced for the result; its name can be specified using the new_var optional argument. If none is given, then a new, generated name is used. """ -function process_call!(flatAST::FlattenedAST, ex, new_var=nothing) +function process_call!(flatAST::FlatAST, ex, new_var=nothing) #println("Entering process_call!") #@show ex @@ -245,17 +255,14 @@ function process_call!(flatAST::FlattenedAST, ex, new_var=nothing) end - # rewrite +(a,b,c) as +(a,+(b,c)): + # rewrite +(a,b,c) as +(a,+(b,c)) by recursive splitting # TODO: Use @match here! - # if op in (:+, :*) && length(ex.args) > 3 - # return insert_variables( :( ($op)($(ex.args[2]), ($op)($(ex.args[3:end]...) )) )) - # end - - # new_code = quote end - # current_args = [] # the arguments in the current expression that will be added - # all_vars = Set{Symbol}() # all variables contained in the sub-expressions - # generated_variables = Symbol[] + if op in (:+, :*) && length(ex.args) > 3 + return flatten!(flatAST, + :( ($op)($(ex.args[2]), ($op)($(ex.args[3:end]...) )) ) + ) + end top_args = [] for arg in ex.args[2:end] @@ -281,7 +288,7 @@ function process_call!(flatAST::FlattenedAST, ex, new_var=nothing) new_var = make_symbol() end - push!(flatAST.intermediate, new_var) + add_intermediate!(flatAST, new_var) top_level_code = Assignment(new_var, op, top_args) @@ -291,7 +298,7 @@ function process_call!(flatAST::FlattenedAST, ex, new_var=nothing) # make enough new variables for all the returned arguments: new_vars = make_symbols(length(registered_functions[op].generated)) - append!(flatAST.intermediate, new_vars) + add_intermediate!(flatAST, new_vars) top_level_code = FunctionAssignment(new_vars, op, top_args) @@ -305,7 +312,7 @@ function process_call!(flatAST::FlattenedAST, ex, new_var=nothing) end - push!(flatAST.code, top_level_code) + add_code!(flatAST, top_level_code) return new_var diff --git a/src/code_generation.jl b/src/code_generation.jl index 73fbbb0..9ee0a2d 100644 --- a/src/code_generation.jl +++ b/src/code_generation.jl @@ -37,19 +37,17 @@ function emit_forward_code(a::FunctionAssignment) end -function emit_forward_code(code) #code::Vector{Assignment}) +function emit_forward_code(code) # code::Vector{Assignment}) new_code = quote end new_code.args = vcat([emit_forward_code(line) for line in code]) return new_code end - function emit_backward_code(a::Assignment) args = isa(a.args, Vector) ? a.args : [a.args] - return_args = [a.lhs, args...] rev_op = rev_ops[a.op] # find reverse operation @@ -95,32 +93,41 @@ end -function forward_pass(flatAST::FlattenedAST) +function forward_backward(flatAST::FlatAST) # @show flatAST.input_variables # @show flatAST.intermediate - input_variables = sort(collect(flatAST.input_variables)) - input_variables = setdiff(input_variables, flatAST.intermediate) # remove local variables - flatAST.variables = input_variables # why?? + input = sort(collect(flatAST.input_variables)) - generated_code = emit_forward_code(flatAST.code) - #make_function(input_variables, flatAST.intermediate, generated_code) - return GeneratedFunction(input_variables, flatAST.intermediate, generated_code) -end + if isa(flatAST.top, Symbol) + output = [flatAST.top] + else + output = flatAST.top + end + + #@show input + #@show flatAST.intermediate + + input = setdiff(input, flatAST.intermediate) # remove local variables + intermediate = setdiff(flatAST.intermediate, output) + + flatAST.variables = input -function backward_pass(flatAST::FlattenedAST) + code = emit_forward_code(flatAST.code) + forward = make_function(input, [output; intermediate], code) - generated_code = emit_backward_code(flatAST.code) - # make_function([flatAST.variables; flatAST.intermediate], - # flatAST.variables, - # generated_code) - # # reverse input_variables and intermediate? + code = emit_backward_code(flatAST.code) + backward = make_function([input; output; intermediate], + input, code) - all_variables = [flatAST.variables; flatAST.intermediate] - return GeneratedFunction(all_variables, - flatAST.variables, - generated_code) +# @show input +# @show output +# @show intermediate + + # return GeneratedFunction(input, output, intermediate, code) + + return (forward, backward) end @@ -133,16 +140,10 @@ function make_function(input_args, output_args, code) input = make_tuple(input_args) # make a tuple of the variables output = make_tuple(output_args) # make a tuple of the variables - return quote - $input -> begin - $code - return $output - end - end - - - + quote + $input -> begin + $code + return $output + end + end end - -make_function(f::GeneratedFunction) = - make_function(f.input_arguments, f.output_arguments, f.code) diff --git a/src/contractor.jl b/src/contractor.jl index 862321d..89b2b75 100644 --- a/src/contractor.jl +++ b/src/contractor.jl @@ -1,67 +1,20 @@ -type Contractor{F<:Function} - variables::Vector{Symbol} - constraint_expression::Expr - code::Expr - contractor::F # function +immutable Contractor{F1<:Function, F2<:Function} + variables::Vector{Symbol} # input variables + num_outputs::Int + forward::F1 + backward::F2 + forward_code::Expr + backward_code::Expr end -doc"""`parse_comparison` parses comparisons like `x >= 10` -into the corresponding interval, expressed as `x ∈ [10,∞]` - -Returns the expression and the constraint interval - -TODO: Allow something like [3,4]' for the complement of [3,4] -""" - -function parse_comparison(ex) - expr, limits = - @match ex begin - ((a_ <= b_) | (a_ < b_) | (a_ ≤ b_)) => (a, (-∞, b)) - ((a_ >= b_) | (a_ > b_) | (a_ ≥ b_)) => (a, (b, ∞)) - - ((a_ == b_) | (a_ = b_)) => (a, (b, b)) - - ((a_ <= b_ <= c_) - | (a_ < b_ < c_) - | (a_ <= b_ < c) - | (a_ < b_ <= c)) => (b, (a, c)) - - ((a_ >= b_ >= c_) - | (a_ > b_ > c_) - | (a_ >= b_ > c_) - | (a_ > b_ >= c)) => (b, (c, a)) - - ((a_ ∈ [b_, c_]) - | (a_ in [b_, c_]) - | (a_ ∈ b_ .. c_) - | (a_ in b_ .. c_)) => (a, (b, c)) - - _ => (ex, (-∞, ∞)) - - end - - a, b = limits - - return (expr, a..b) # expr ∈ [a,b] - -end - - -# new call syntax to define a "functor" (object that behaves like a function) -@compat (C::Contractor)(x...) = C.contractor(x...) - -@compat (C::Contractor)(X::IntervalBox) = C.contractor(X...) -#show_code(c::Contractor) = c.code - - -function Base.show(io::IO, C::Contractor) - println(io, "Contractor:") - println(io, " - variables: $(C.variables)") - print(io, " - constraint: $(C.constraint_expression)") -end +# function Base.show(io::IO, C::Contractor) +# println(io, "Contractor:") +# println(io, " - variables: $(C.variables)") +# print(io, " - constraint: $(C.constraint_expression)") +# end doc"""Usage: ``` @@ -77,15 +30,25 @@ TODO: Hygiene for global variables, or pass in parameters """ macro contractor(ex) - # println("@contractor; ex=$ex") - make_contractor(ex) end +@compat function (C::Contractor{F1,F2}){F1,F2}(A, X) # X::IntervalBox) + z = IntervalBox( C.forward(IntervalBox(X...)...)... ) + #z = [1:C.num_outputs] = tuple(IntervalBox(z[1:C.num_outputs]...) ∩ A + # @show z + constrained = IntervalBox(z[1:C.num_outputs]...) ∩ IntervalBox(A...) + #@show constrained + #@show z[(C.num_outputs)+1:end] + return IntervalBox( C.backward( X..., + constrained..., + z[(C.num_outputs)+1:end]... + )... + ) +end -#function Contractor(ex::Expr) function make_contractor(ex::Expr) # println("Entering Contractor(ex) with ex=$ex") expr, constraint_interval = parse_comparison(ex) @@ -98,82 +61,15 @@ function make_contractor(ex::Expr) # @show top, linear_AST - forward = forward_pass(linear_AST) - backward = backward_pass(linear_AST) - - - - # TODO: What about interval box constraints? - input_arguments = forward.input_arguments - augmented_input_arguments = [:_A_; forward.input_arguments] - - # @show input_arguments - # @show augmented_input_arguments - - # add constraint interval as first argument - - input_variables = make_tuple(input_arguments) - augmented_input_variables = make_tuple(augmented_input_arguments) - - forward_output = make_tuple(forward.output_arguments) - - backward_output = make_tuple(backward.output_arguments) - - # @show forward - # @show backward - # - # @show input_variables - # @show forward_output - # @show backward_output - - if isa(top, Symbol) - # nothing - elseif length(top) == 1 # single variable - top = top[] - - else - # TODO: implement what happens for multiple variables in the constraint - # using an IntervalBox and intersection of IntervalBoxes - end - - top_args = make_tuple(top) - - local intersect_code - - if isa(top_args, Symbol) - intersect_code = :($top_args = $top_args ∩ _A_) # check type stability - else - intersect_code = :($top_args = IntervalBox($top_args) ∩ _A_) # check type stability - end - - - code = - #esc(quote - quote - $(augmented_input_variables) -> begin - forward = $(make_function(forward)) - backward = $(make_function(backward)) - - $(forward_output) = forward($(forward.input_arguments...)) - - $intersect_code - - $(backward_output) = backward($(backward.input_arguments...)) - - return $(input_variables) - - end + forward, backward = forward_backward(linear_AST) - end + num_outputs = isa(linear_AST.top, Symbol) ? 1 : length(linear_AST.top) - # @show forward - # @show backward - # # - # @show code + :(Contractor($linear_AST.variables, + $num_outputs, + $forward, + $backward, + $(Meta.quot(forward)), + $(Meta.quot(backward)))) - return :(Contractor($(augmented_input_arguments), - $(Meta.quot(expr)), - $(Meta.quot(code)), - $(code) - )) end diff --git a/src/functions.jl b/src/functions.jl index d54ffe1..b028b82 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -1,21 +1,4 @@ -#= -Want to process `@constraint f(f(x)) ∈ [0.3, 0.4]` -where `f(x) = 4x * (1-x)` - -Given code `f(f(x))`, we need `f_forward` and `f_backward`. - -Each "copy" of `f` uses the same actual forward and back functions, -`f.forward` and `f.backward`. - -``` -@function f(x) = 4x * (1-x) -``` -should generate these forward and backward functions, and register the function -`f`. - -""" -=# doc""" A `ConstraintFunction` contains the created forward and backward @@ -53,24 +36,10 @@ Example: `@function f(x, y) = x^2 + y^2` @eval macro ($(:function))(ex) # workaround to define macro @function - # (f, args, code) = @match ex begin - # ( f_(args__) = code_ ) => (f, args, code) - # end - (f, args, code) = match_function(ex) - # @show f, args, code - return_arguments, flatAST = flatten(code) - # @show return_arguments - - # @show root, all_vars, generated, code2 - - - # @show flatAST - # @show return_arguments - # make into an array: if !(isa(return_arguments, Array)) return_arguments = [return_arguments] @@ -84,34 +53,23 @@ Example: `@function f(x, y) = x^2 + y^2` flatAST.intermediate = [return_arguments; flatAST.intermediate] - forward_code = forward_pass(flatAST) #root, all_vars, generated, code2) - backward_code = backward_pass(flatAST) #root, all_vars, generated, code2) - - # @show forward_code, backward_code + registered_functions[f] = FunctionArguments(flatAST.variables, flatAST.intermediate, return_arguments) - # @show make_function(forward_code) - # @show make_function(backward_code) + forward, backward = forward_backward(flatAST) - registered_functions[f] = FunctionArguments(flatAST.variables, flatAST.intermediate, return_arguments) - forward_function = make_function(forward_code) - backward_function = make_function(backward_code) return quote - #$(esc(Meta.quot(f))) = ConstraintFunction($(all_vars), $(generated), $(forward_code), $(backward_code)) - #$(esc(f)) = + $(esc(f)) = ConstraintFunction($(flatAST.variables), $(flatAST.intermediate), - $(forward_function), - $(backward_function), - $(Meta.quot(forward_function)), - $(Meta.quot(backward_function)) + $(forward), + $(backward), + $(Meta.quot(forward)), + $(Meta.quot(backward)) ) - - #registered_functions[$(Meta.quot(f))] = ConstraintFunction($(all_vars), $(generated), $(forward_code), $(backward_code)) - #$(Meta.quot(f)) = ConstraintFunction($(all_vars), $(generated), $(forward_code), $(backward_code)) end end @@ -120,10 +78,9 @@ end function match_function(ex) try - (f, args, body) = - @match ex begin - ( (f_(args__) = body_) | - (function f_(args__) body_ end) ) => (f, args, body) + @capture ex begin + ( (f_(args__) = body_) + | (function f_(args__) body_ end) ) end return (f, args, rmlines(body)) # rmlines is from MacroTools package diff --git a/src/paving.jl b/src/paving.jl index 50189a0..34970c3 100644 --- a/src/paving.jl +++ b/src/paving.jl @@ -1,7 +1,7 @@ typealias SubPaving{N,T} Vector{IntervalBox{N,T}} type Paving{N,T} - separator::Separator + separator::Separator # parametrize! inner::SubPaving{N,T} boundary::SubPaving{N,T} ϵ::Float64 diff --git a/src/reverse_mode.jl b/src/reverse_mode.jl index 4321c97..ba13f33 100644 --- a/src/reverse_mode.jl +++ b/src/reverse_mode.jl @@ -1,18 +1,22 @@ export plus_rev, minus_rev, mul_rev, power_rev, sqrt_rev, sqr_rev # export due to quoting issue +# export sqr +# sqr(x) = x^2 + const rev_ops = Dict( :+ => :plus_rev, + :- => :minus_rev, :* => :mul_rev, :^ => :power_rev, - :- => :minus_rev, :sqrt => :sqrt_rev, + :sqr => :sqr_rev, :() => :() ) function plus_rev(a::Interval, b::Interval, c::Interval) # a = b + c - # a = a ∩ (b + c) + # a = a ∩ (b + c) # add this line for plus contractor (as opposed to reverse function) b = b ∩ (a - c) c = c ∩ (a - b) @@ -94,7 +98,7 @@ function sqr_rev(c, x) # c = x^2; refine x x1 = sqrt(c) ∩ x x2 = -(sqrt(c)) ∩ x - return hull(x1, x2) + return (c, hull(x1, x2)) end sqr_rev(c) = sqr_rev(c, -∞..∞) diff --git a/src/separator.jl b/src/separator.jl index 7e12cd8..c16d1da 100644 --- a/src/separator.jl +++ b/src/separator.jl @@ -5,21 +5,19 @@ doc""" ConstraintSeparator is a separator that represents a constraint defined directly using `@constraint`. """ -# CHANGE TO IMMUTABLE AND PARAMETRIZE THE FUNCTION FOR EFFICIENCY -type ConstraintSeparator{C, II} <: Separator +immutable ConstraintSeparator{C, II} <: Separator variables::Vector{Symbol} - #separator::Function constraint::II # Interval or IntervalBox contractor::C expression::Expr end -ConstraintSeparator(constraint, contractor, expression) = ConstraintSeparator(contractor.variables[2:end], constraint, contractor, expression) +ConstraintSeparator(constraint, contractor, expression) = ConstraintSeparator(contractor.variables, constraint, contractor, expression) doc"""CombinationSeparator is a separator that is a combination (union, intersection, or complement) of other separators. """ -type CombinationSeparator{F} <: Separator +immutable CombinationSeparator{F} <: Separator variables::Vector{Symbol} separator::F expression::Expr @@ -29,25 +27,25 @@ end C = S.contractor a, b = S.constraint.lo, S.constraint.hi - inner = C(a..b, X...) # closure over the function C + inner = C(a..b, X) local outer if a == -∞ - outer = C(b..∞, X...) + outer = C(b..∞, X) elseif b == ∞ - outer = C(-∞..a, X...) + outer = C(-∞..a, X) else - outer1 = C(-∞..a, X...) - outer2 = C(b..∞, X...) + outer1 = C(-∞..a, X) + outer2 = C(b..∞, X) - outer = [ hull(x1, x2) for (x1,x2) in zip(outer1, outer2) ] + outer = outer1 ∪ outer2 end - return (inner, (outer...)) + return (inner, outer) end @@ -135,32 +133,25 @@ function make_constraint(expr, constraint) code end -macro constraint(ex::Expr) # alternative name for constraint -- remove? - # @show ex - expr, constraint = parse_comparison(ex) +doc"""Create a separator from a given constraint expression, written as +standard Julia code. + +e.g. `C = @constraint x^2 + y^2 <= 1` +The variables (`x` and `y`, in this case) are automatically inferred. +External constants can be used as e.g. `$a`: + +``` +a = 3 +C = @constraint x^2 + y^2 <= $a +``` +""" +macro constraint(ex::Expr) + expr, constraint = parse_comparison(ex) make_constraint(expr, constraint) end -# doc"""Create a separator from a given constraint expression, written as -# standard Julia code. -# -# e.g. `C = @constraint x^2 + y^2 <= 1` -# -# The variables (`x` and `y`, in this case) are automatically inferred. -# External constants can be used as e.g. `$a`: -# -# ``` -# a = 3 -# C = @constraint x^2 + y^2 <= $a -# ``` -# """ -# macro constraint(ex::Expr) -# ex = Meta.quot(ex) -# :(ConstraintSeparator($ex)) -# end - function show(io::IO, S::Separator) println(io, "Separator:") print(io, "- variables: ") @@ -170,15 +161,9 @@ function show(io::IO, S::Separator) println(io, S.expression) end -# show_code(S::ConstraintSeparator) = show_code(S.contractor) -#@compat (S::ConstraintSeparator)(X) = S.separator(X) @compat (S::CombinationSeparator)(X) = S.separator(X) -#@compat (S::ConstraintSeparator)(X) = S.separator(X) - -# show_code(S::Separator) = show_code(S.contractor) - doc"Unify the variables of two separators" function unify_variables(vars1, vars2) @@ -252,8 +237,8 @@ function ∩(S1::Separator, S2::Separator) # Treat as if had X[i] in the other directions, except if empty - inner = tuple( [x ∩ y for (x,y) in zip(inner1, inner2) ]... ) - outer = tuple( [x ∪ y for (x,y) in zip(outer1, outer2) ]... ) + inner = IntervalBox( [x ∩ y for (x,y) in zip(inner1, inner2) ]... ) + outer = IntervalBox( [x ∪ y for (x,y) in zip(outer1, outer2) ]... ) return (inner, outer) @@ -299,8 +284,8 @@ function ∪(S1::Separator, S2::Separator) end - inner = tuple( [x ∪ y for (x,y) in zip(inner1, inner2) ]... ) - outer = tuple( [x ∩ y for (x,y) in zip(outer1, outer2) ]... ) + inner = IntervalBox( [x ∪ y for (x,y) in zip(inner1, inner2) ]... ) + outer = IntervalBox( [x ∩ y for (x,y) in zip(outer1, outer2) ]... ) return (inner, outer) end diff --git a/src/setinversion.jl b/src/setinversion.jl index 81e340a..a896cd1 100644 --- a/src/setinversion.jl +++ b/src/setinversion.jl @@ -37,17 +37,15 @@ function pave{N,T}(S::Separator, working::Vector{IntervalBox{N,T}}, ϵ) inner, outer = S(X) # here inner and outer are reversed compared to Jaulin # S(X) returns the pair (contractor with respect to the inside of the constraing, contractor with respect to outside) - inner2 = IntervalBox(inner) - outer2 = IntervalBox(outer) - - inside_list = setdiff(X, outer2) + #@show X, outer + inside_list = setdiff(X, outer) if length(inside_list) > 0 append!(inner_list, inside_list) end - boundary = inner2 ∩ outer2 + boundary = inner ∩ outer if isempty(boundary) continue @@ -77,7 +75,7 @@ function pave{N,T}(S::Separator, X::IntervalBox{N,T}, ϵ = 1e-2) inner_list, boundary_list = pave(S, [X], ϵ) - return Paving{N,T}(S, inner_list, boundary_list, ϵ) + return Paving(S, inner_list, boundary_list, ϵ) end diff --git a/test/runtests.jl b/test/runtests.jl index 09f35c0..11e6e2f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -22,7 +22,7 @@ end C = @contractor x^2 + y^2 - @test C(-∞..1, x, y) == (-1..1, -1..1) + @test C(-∞..1, X) == IntervalBox(-1..1, -1..1) end @testset "Separators" begin @@ -33,13 +33,13 @@ end @test typeof(S) <: IntervalConstraintProgramming.ConstraintSeparator inner, outer = S(X) - @test inner == (-1..1, -1..1) - @test outer == (II, II) + @test inner == IntervalBox(-1..1, -1..1) + @test outer == IntervalBox(II, II) X = IntervalBox(-∞..∞, -∞..∞) inner, outer = S(X) - @test inner == (-1..1, -1..1) - @test outer == (-∞..∞, -∞..∞) + @test inner == IntervalBox(-1..1, -1..1) + @test outer == IntervalBox(-∞..∞, -∞..∞) end @testset "pave" begin @@ -60,7 +60,7 @@ end S3 = @constraint x^2 + y^2 <= 1 X = IntervalBox(-∞..∞, -∞..∞) - paving = pave(S3, X, 1) + paving = pave(S3, X, 1.0) @test paving.inner == [IntervalBox(Interval(0.0, 0.5), Interval(0.0, 0.8660254037844386)), IntervalBox(Interval(0.0, 0.5), Interval(-0.8660254037844386, 0.0)), @@ -110,7 +110,7 @@ end A = 0.5..1 x = 0..1 - @test C1(A, x) == 0.125..0.25 # x such that 4x ∈ A=[0.5, 1] + @test C1(A, x) == IntervalBox(0.125..0.25) # x such that 4x ∈ A=[0.5, 1] C2 = @constraint f(x) ∈ [0.5, 0.6] @@ -137,12 +137,12 @@ end A = 0.5..1 x = 0..1 - @test C(A, x) == sqrt(A / 4) + @test C(A, x) == IntervalBox(sqrt(A / 4)) @function g2(x) = ( a = f(f(x)); a^2 ) C2 = @contractor g2(x) - @test C2(A, x) == sqrt(A / 16) + @test C2(A, x) == IntervalBox(sqrt(A / 16)) end @@ -156,23 +156,5 @@ end @function g3(x) = ( a = (f↑2)(x); a^2 ) C3 = @contractor g3(x) - @test C3(A, x) == sqrt(A / 16) -end - -@testset "Multidimensional functions" begin - - @function g4(x, y) = (2x, 2y) - - A = IntervalBox(0.5..1, 0.5..1) - x = y = 0..1 - - C4 = @contractor g4(x, y) - - @test IntervalBox(C4(A, x, y)) == A / 2 - - - C5 = @contractor (g4↑2)(x, y) - - @test IntervalBox(C5(A, x, y)) == A / 4 - + @test C3(A, x) == IntervalBox(sqrt(A / 16)) end From cdccb4ff472983eee7a24c19b4d677e94f5ba3e8 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Sat, 7 Jan 2017 08:13:42 -0500 Subject: [PATCH 6/8] Unary minus, repeated addition, power_rev for odd powers (#49) * Make unary minus work * Make power_rev work with odd powers for intervals with negative regions * Split up repeated addition and multiplication. Needs test. * Add test for power_rev with odd power * Fix rebase --- src/ast.jl | 4 +--- src/reverse_mode.jl | 9 +++++++++ test/runtests.jl | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/ast.jl b/src/ast.jl index c4f8088..5683c87 100644 --- a/src/ast.jl +++ b/src/ast.jl @@ -259,9 +259,7 @@ function process_call!(flatAST::FlatAST, ex, new_var=nothing) # TODO: Use @match here! if op in (:+, :*) && length(ex.args) > 3 - return flatten!(flatAST, - :( ($op)($(ex.args[2]), ($op)($(ex.args[3:end]...) )) ) - ) + return flatten!(flatAST, :( ($op)($(ex.args[2]), ($op)($(ex.args[3:end]...) )) )) end top_args = [] diff --git a/src/reverse_mode.jl b/src/reverse_mode.jl index ba13f33..717a2ab 100644 --- a/src/reverse_mode.jl +++ b/src/reverse_mode.jl @@ -35,6 +35,7 @@ end minus_rev(a,b,c) = minus_rev(promote(a,b,c)...) +minus_rev(a::Interval, b::Interval) = (b = -a; return (a, b)) # a = -b function mul_rev(a::Interval, b::Interval, c::Interval) # a = b * c # a = a ∩ (b * c) @@ -48,6 +49,8 @@ mul_rev(a,b,c) = mul_rev(promote(a,b,c)...) Base.iseven(x::Interval) = isinteger(x) && iseven(round(Int, x.lo)) +Base.isodd(x::Interval) = isinteger(x) && isodd(round(Int, x.lo)) + function power_rev(a::Interval, b::Interval, c::Interval) # a = b^c, log(a) = c.log(b), b = a^(1/c) @@ -65,6 +68,12 @@ function power_rev(a::Interval, b::Interval, c::Interval) # a = b^c, log(a) = b = hull(b1, b2) + elseif isodd(c) + b1 = b ∩ ( (a ∩ (0..∞)) ^(inv(c) )) # positive part + b2 = b ∩ (- ( (-(a ∩ (-∞..0)))^(inv(c)) ) ) # negative part + + b = hull(b1, b2) + else b = b ∩ ( a^(inv(c) )) diff --git a/test/runtests.jl b/test/runtests.jl index 11e6e2f..4a40c4f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -158,3 +158,9 @@ end @test C3(A, x) == IntervalBox(sqrt(A / 16)) end + +@testset "power_rev for odd power" begin + x = -∞..∞ + a = -8..27 + power_rev(a, x, 3)[2] == Interval(-2.0000000000000004, 3.0000000000000004) +end From 4cf25d93a2083b0a14e88130487c12bee8e9f411 Mon Sep 17 00:00:00 2001 From: "David P. Sanders" Date: Tue, 10 Jan 2017 10:56:48 -0500 Subject: [PATCH 7/8] Update NEWS.md for 0.4 (#53) --- NEWS.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index 5cf112a..7b11c78 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,12 +2,22 @@ # v0.4 - `@function f(x) = 4x` defines a function -- Functions may be used inside constraints (only functions of a single variable, - returning a single variable, for now). -- Functions may be iterated. -- Local variables may be introduced. -- Simple plotting solution for the results of `pave`. -- Major internals rewrite. +- Functions may be used inside constraints +- Functions may be iterated +- Functions may be multi-dimensional +- Local variables may be introduced +- Simple plotting solution for the results of `pave` using `Plots.jl` recipes +(via `ValidatedNumerics.jl`): +``` +using Plots +gr() # preferred (fast) backed for `Plots.jl` +plot(paving.inner) +plot!(paving.boundary) +``` +- Major internals rewrite +- Unary minus and `power_rev` with odd powers now work correctly +- Examples updated +- Basic documentation using `Documenter.jl` # v0.3 From 58caa0a14031b3940b70c0908c846f93d57ae93f Mon Sep 17 00:00:00 2001 From: David Sanders Date: Thu, 12 Jan 2017 08:16:31 -0500 Subject: [PATCH 8/8] Add back required version for FixedSizeArrays --- REQUIRE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REQUIRE b/REQUIRE index 754f498..e4f20be 100644 --- a/REQUIRE +++ b/REQUIRE @@ -2,4 +2,4 @@ julia 0.4 ValidatedNumerics 0.5.1 # plot recipes from 0.5.1 MacroTools 0.3 Compat 0.7.14 -FixedSizeArrays +FixedSizeArrays 0.1.2

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