{ "metadata": { "language": "Julia", "name": "", "signature": "sha256:b67a7ade922b732322b9df8e3f194601a6ced7b60273648cbc081eb71271c0b2" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Unparsable Unicode in Julia\n", "\n", "The purpose of this notebook is to check for Unicode code points that do not parse in Julia." ] }, { "cell_type": "code", "collapsed": false, "input": [ "using JuliaParser" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A. Load Unicode data\n", "\n", "### 1. Read in official names for each code point" ] }, { "cell_type": "code", "collapsed": false, "input": [ "unicodedatafilename = \"UnicodeData.txt\"\n", "isfile(unicodedatafilename) || download(\"http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\", unicodedatafilename)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "true" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "character_description = Dict{Char,String}()\n", "#Read in category descriptors\n", "open(unicodedatafilename) do f\n", " for l in eachline(f)\n", " tokens = split(l, ';')\n", " unichar= char(uint(\"0x\"*tokens[1]))\n", " character_description[unichar] = tokens[2]*\"/\"tokens[11]\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Read in the category\n", "\n", "The first part is to read in the general description of each category. The second part reads in the associated category for each code point." ] }, { "cell_type": "code", "collapsed": false, "input": [ "datafilename = \"MathClass.txt\"\n", "revision=13\n", "isfile(datafilename) || download(\"http://www.unicode.org/Public/math/revision-$revision/MathClass-$revision.txt\", datafilename)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "true" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "category_description = Dict{String,String}()\n", "#Read in category descriptors\n", "open(datafilename) do f\n", " for l in eachline(f)\n", " (length(l)>0 && l[1]=='#') || break #Only parse beginning comment header\n", " if contains(l, \" - \")\n", " tokens = split(l, ['-'], 2)\n", " catcode = string(tokens[1][3])\n", " desc = strip(tokens[2])\n", " category_description[catcode] = desc\n", " println(catcode, \" - \", desc)\n", " end\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "N - " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Normal - includes all digits and symbols requiring only one form\n", "A - Alphabetic\n", "B - Binary\n", "C - Closing - usually paired with opening delimiter\n", "D - Diacritic\n", "F - Fence - unpaired delimiter (often used as opening or closing)\n", "G - Glyph_Part - piece of large operator\n", "L - Large - n-ary or large operator, often takes limits\n", "O - Opening - usually paired with closing delimiter\n", "P - Punctuation\n", "R - Relation - includes arrows\n", "S - Space\n", "U - Unary - operators that are only unary\n", "V - Vary - operators that can be unary or binary depending on context\n", "X - Special - characters not covered by other classes\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "categories = Dict()\n", "open(datafilename) do f\n", " for l in eachline(f)\n", " lt = split(l, '#')[1]\n", " tokens = split(lt, ';')\n", " length(tokens)\u22652 || continue\n", " codepoint_or_range, catcode = map(strip, split(lt, ';'))\n", "\n", " if contains(codepoint_or_range, \"..\") #Range\n", " lo, hi = map(x->int(\"0x\"*x), split(codepoint_or_range, \"..\"))\n", " categories[catcode] = append!(get(categories, catcode, Char[]), [lo:hi])\n", " #println(codepoint_or_range, map(char, [lo:hi]),\n", " # \") : \", category_description[catcode])\n", " else #single codepoint\n", " codepoint_or_range = split(codepoint_or_range, \"=\")[1]\n", " codepoint = char(uint(\"0x\"*codepoint_or_range))\n", " categories[catcode] = push!(get(categories, catcode, Char[]), codepoint)\n", " #println(codepoint_or_range, \" (\", char(uint(\"0x\"*codepoint_or_range)),\n", " # \") : \", category_description[catcode])\n", " end\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## B. Try parsing Unicode" ] }, { "cell_type": "code", "collapsed": false, "input": [ "isparseable(s::String) = try\n", " JuliaParser.Parser.parse(s)\n", " true\n", "catch\n", " false\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "isparseable (generic function with 1 method)" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "printcharinfo(c::Char) = println(\"U+\", hex(c,5), \" (\", c,\n", " \") \", get(character_description, c, \"(no description)\")\n", ")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "printcharinfo (generic function with 1 method)" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Find invalid unary operators" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Check that all operators with category codes in catcodes parse\n", "#in infix expressions where they are used in a given arity.\n", "function checkvalidinfix(catcodes, arity::Int; printvalid=false)\n", " for catcode in catcodes\n", " println(\"Category: \", category_description[catcode])\n", " numvalid = 0\n", " for op in categories[catcode]\n", " #Generate expressions of the form a, a+a, a+a+a, etc.\n", " exprtokens = Char[]\n", " for i=1:arity-1\n", " append!(exprtokens, ['a', op])\n", " end\n", " length(exprtokens)>0 && pop!(exprtokens)\n", " append!(exprtokens, [op, 'a'])\n", " if !isparseable(string(exprtokens...))\n", " print(\"INVALID: \")\n", " printcharinfo(op)\n", " else\n", " numvalid += 1\n", " if printvalid\n", " print(\" VALID: \")\n", " printcharinfo(op)\n", " end\n", " end\n", " end\n", " println(\"Valid: \", numvalid, \" Invalid: \", length(categories[catcode]) - numvalid, \"\\n\")\n", " end\n", "end\n", "\n", "checkvalidinfix([\n", " \"U\", #- Unary - operators that are only unary\n", " \"V\", #- Vary - operators that can be unary or binary depending on context\n", " ], 1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Category: U" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "nary - operators that are only unary\n", "INVALID: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "U+02200 (\u2200) FOR ALL/\n", "INVALID: U+02201 (\u2201) COMPLEMENT/\n", "INVALID: U+02203 (\u2203) THERE EXISTS/\n", "INVALID: U+02204 (\u2204) THERE DOES NOT EXIST/\n", "Valid: 3 Invalid: 4\n", "\n", "Category: Vary - operators that can be unary or binary depending on context\n", "INVALID: U+000b1 (\u00b1) PLUS-MINUS SIGN/PLUS-OR-MINUS SIGN\n", "INVALID: U+02212 (\u2212) MINUS SIGN/\n", "INVALID: U+02213 (\u2213) MINUS-OR-PLUS SIGN/\n", "Valid: 1 Invalid: 3\n", "\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Find invalid binary operators\n", "\n", "Check infix expressions of the form\n", "\n", " a + a\n", " \n", "and prefix expressions of the form\n", "\n", " \u2a02(a, a)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Check that all operators with category codes in catcodes parse\n", "#in prefix expressions where they are used in a given arity.\n", "function checkvalidprefix(catcodes, arity::Int; printvalid=true)\n", " for catcode in catcodes\n", " println(\"Category: \", category_description[catcode])\n", " numvalid = 0\n", " for op in categories[catcode]\n", " #Generate expressions of the form +(a,a,a,), etc.\n", " exprtokens = Char[op, '(']\n", " for i=1:arity\n", " append!(exprtokens, ['a', ','])\n", " end\n", " length(exprtokens)>0 && pop!(exprtokens)\n", " append!(exprtokens, [')'])\n", "\n", " if !isparseable(string(exprtokens...))\n", " print(\"INVALID: \")\n", " printcharinfo(op)\n", " else\n", " numvalid += 1\n", " if printvalid\n", " print(\" VALID: \")\n", " printcharinfo(op)\n", " end\n", " end\n", " end\n", " println(\"Valid: \", numvalid, \" Invalid: \", length(categories[catcode]) - numvalid, \"\\n\")\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "checkvalidprefix (generic function with 1 method)" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "checkvalidinfix([\n", " \"B\", #- Binary\n", " \"R\", #- Relation - includes arrows\n", " \"V\", #- Vary - operators that can be unary or binary depending on context\n", " \"X\", #- Special - characters not covered by other classes \"U\", \"V\"\n", "], 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Category: B" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "inary\n", "INVALID: U+02044 (\u2044) FRACTION SLASH/\n", "INVALID: U+02061 (\u2061) FUNCTION APPLICATION/\n", "INVALID: U+02062 (\u2062) INVISIBLE TIMES/\n", "INVALID: U+02215 (\u2215) DIVISION SLASH/\n", "INVALID: U+02216 (\u2216) SET MINUS/\n", "INVALID: U+0228c (\u228c) MULTISET/\n", "INVALID: U+0229d (\u229d) CIRCLED DASH/\n", "INVALID: U+022b9 (\u22b9) HERMITIAN CONJUGATE MATRIX/\n", "INVALID: U+022ba (\u22ba) INTERCALATE/\n", "INVALID: U+025b7 (\u25b7) WHITE RIGHT-POINTING TRIANGLE/WHITE RIGHT POINTING TRIANGLE\n", "INVALID: U+025c1 (\u25c1) WHITE LEFT-POINTING TRIANGLE/WHITE LEFT POINTING TRIANGLE\n", "INVALID: U+027ce (\u27ce) SQUARED LOGICAL AND/\n", "INVALID: U+027cf (\u27cf) SQUARED LOGICAL OR/\n", "INVALID: U+027e0 (\u27e0) LOZENGE DIVIDED BY HORIZONTAL RULE/\n", "INVALID: U+027e1 (\u27e1) WHITE CONCAVE-SIDED DIAMOND/\n", "INVALID: U+027e2 (\u27e2) WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK/\n", "INVALID: U+027e3 (\u27e3) WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK/\n", "INVALID: U+027e4 (\u27e4) WHITE SQUARE WITH LEFTWARDS TICK/\n", "INVALID: U+027e5 (\u27e5) WHITE SQUARE WITH RIGHTWARDS TICK/\n", "INVALID: U+029b6 (\u29b6) CIRCLED VERTICAL BAR/\n", "INVALID: U+029b9 (\u29b9) CIRCLED PERPENDICULAR/\n", "INVALID: U+029c4 (\u29c4) SQUARED RISING DIAGONAL SLASH/\n", "INVALID: U+029c5 (\u29c5) SQUARED FALLING DIAGONAL SLASH/\n", "INVALID: U+029c6 (\u29c6) SQUARED ASTERISK/\n", "INVALID: U+029c7 (\u29c7) SQUARED SMALL CIRCLE/\n", "INVALID: U+029c8 (\u29c8) SQUARED SQUARE/\n", "INVALID: U+029d6 (\u29d6) WHITE HOURGLASS/\n", "INVALID: U+029d7 (\u29d7) BLACK HOURGLASS/\n", "INVALID: U+029e2 (\u29e2) SHUFFLE PRODUCT/\n", "INVALID: U+029eb (\u29eb) BLACK LOZENGE/\n", "INVALID: U+029f5 (\u29f5) REVERSE SOLIDUS OPERATOR/\n", "INVALID: U+029fe (\u29fe) TINY/\n", "INVALID: U+029ff (\u29ff) MINY/\n", "INVALID: U+02a2f (\u2a2f) VECTOR OR CROSS PRODUCT/\n", "INVALID: U+02a3e (\u2a3e) Z NOTATION RELATIONAL COMPOSITION/\n", "INVALID: U+02a3f (\u2a3f) AMALGAMATION OR COPRODUCT/\n", "INVALID: U+02a46 (\u2a46) UNION ABOVE INTERSECTION/\n", "INVALID: U+02a47 (\u2a47) INTERSECTION ABOVE UNION/\n", "INVALID: U+02a48 (\u2a48) UNION ABOVE BAR ABOVE INTERSECTION/\n", "INVALID: U+02a49 (\u2a49) INTERSECTION ABOVE BAR ABOVE UNION/\n", "INVALID: U+02a64 (\u2a64) Z NOTATION DOMAIN ANTIRESTRICTION/\n", "INVALID: U+02a65 (\u2a65) Z NOTATION RANGE ANTIRESTRICTION/\n", "INVALID: U+02af4 (\u2af4) TRIPLE VERTICAL BAR BINARY RELATION/\n", "INVALID: U+02af5 (\u2af5) TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE/\n", "INVALID: U+02af6 (\u2af6) TRIPLE COLON OPERATOR/\n", "INVALID: U+02afb (\u2afb) TRIPLE SOLIDUS BINARY RELATION/\n", "INVALID: U+02afd (\u2afd) DOUBLE SOLIDUS OPERATOR/\n", "INVALID: U+02afe (\u2afe) WHITE VERTICAL BAR/\n", "Valid: 153 Invalid: 48\n", "\n", "Category: Relation - includes arrows\n", "INVALID: U+02223 (\u2223) DIVIDES/\n", "INVALID: U+02234 (\u2234) THEREFORE/\n", "INVALID: U+02235 (\u2235) BECAUSE/\n", "INVALID: U+02236 (\u2236) RATIO/\n", "INVALID: U+02239 (\u2239) EXCESS/\n", "INVALID: U+0223c (\u223c) TILDE OPERATOR/\n", "INVALID: U+022a6 (\u22a6) ASSERTION/\n", "INVALID: U+022a7 (\u22a7) MODELS/\n", "INVALID: U+022a8 (\u22a8) TRUE/\n", "INVALID: U+022aa (\u22aa) TRIPLE VERTICAL BAR RIGHT TURNSTILE/\n", "INVALID: U+022ab (\u22ab) DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE/\n", "INVALID: U+022ad (\u22ad) NOT TRUE/\n", "INVALID: U+022af (\u22af) NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE/\n", "INVALID: U+022b8 (\u22b8) MULTIMAP/\n", "INVALID: U+022c8 (\u22c8) BOWTIE/\n", "INVALID: U+022d4 (\u22d4) PITCHFORK/\n", "INVALID: U+0237c (\u237c) RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW/\n", "INVALID: U+023b0 (\u23b0) UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION/\n", "INVALID: U+023b1 (\u23b1) UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION/\n", "INVALID: U+027c3 (\u27c3) OPEN SUBSET/\n", "INVALID: U+027c4 (\u27c4) OPEN SUPERSET/\n", "INVALID: U+027c5 (\u27c5) LEFT S-SHAPED BAG DELIMITER/\n", "INVALID: U+027c6 (\u27c6) RIGHT S-SHAPED BAG DELIMITER/\n", "INVALID: U+027c7 (\u27c7) OR WITH DOT INSIDE/\n", "INVALID: U+027ca (\u27ca) VERTICAL BAR WITH HORIZONTAL STROKE/\n", "INVALID: U+027cb (\u27cb) MATHEMATICAL RISING DIAGONAL/\n", "INVALID: U+027cd (\u27cd) MATHEMATICAL FALLING DIAGONAL/\n", "INVALID: U+027d3 (\u27d3) LOWER RIGHT CORNER WITH DOT/\n", "INVALID: U+027d4 (\u27d4) UPPER LEFT CORNER WITH DOT/\n", "INVALID: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "U+027da (\u27da) LEFT AND RIGHT DOUBLE TURNSTILE/\n", "INVALID: U+027db (\u27db) LEFT AND RIGHT TACK/\n", "INVALID: U+027dc (\u27dc) LEFT MULTIMAP/\n", "INVALID: U+027dd (\u27dd) LONG RIGHT TACK/\n", "INVALID: U+027de (\u27de) LONG LEFT TACK/\n", "INVALID: U+027df (\u27df) UP TACK WITH CIRCLE ABOVE/\n", "INVALID: U+027f2 (\u27f2) ANTICLOCKWISE GAPPED CIRCLE ARROW/\n", "INVALID: U+027f3 (\u27f3) CLOCKWISE GAPPED CIRCLE ARROW/\n", "INVALID: U+027f4 (\u27f4) RIGHT ARROW WITH CIRCLED PLUS/\n", "INVALID: U+027f8 (\u27f8) LONG LEFTWARDS DOUBLE ARROW/\n", "INVALID: U+02919 (\u2919) LEFTWARDS ARROW-TAIL/\n", "INVALID: U+0291a (\u291a) RIGHTWARDS ARROW-TAIL/\n", "INVALID: U+0291b (\u291b) LEFTWARDS DOUBLE ARROW-TAIL/\n", "INVALID: U+0291c (\u291c) RIGHTWARDS DOUBLE ARROW-TAIL/\n", "INVALID: U+02921 (\u2921) NORTH WEST AND SOUTH EAST ARROW/\n", "INVALID: U+02922 (\u2922) NORTH EAST AND SOUTH WEST ARROW/\n", "INVALID: U+02923 (\u2923) NORTH WEST ARROW WITH HOOK/\n", "INVALID: U+02924 (\u2924) NORTH EAST ARROW WITH HOOK/\n", "INVALID: U+02925 (\u2925) SOUTH EAST ARROW WITH HOOK/\n", "INVALID: U+02926 (\u2926) SOUTH WEST ARROW WITH HOOK/\n", "INVALID: U+02927 (\u2927) NORTH WEST ARROW AND NORTH EAST ARROW/\n", "INVALID: U+02928 (\u2928) NORTH EAST ARROW AND SOUTH EAST ARROW/\n", "INVALID: U+02929 (\u2929) SOUTH EAST ARROW AND SOUTH WEST ARROW/\n", "INVALID: U+0292a (\u292a) SOUTH WEST ARROW AND NORTH WEST ARROW/\n", "INVALID: U+0292b (\u292b) RISING DIAGONAL CROSSING FALLING DIAGONAL/\n", "INVALID: U+0292c (\u292c) FALLING DIAGONAL CROSSING RISING DIAGONAL/\n", "INVALID: U+0292d (\u292d) SOUTH EAST ARROW CROSSING NORTH EAST ARROW/\n", "INVALID: U+0292e (\u292e) NORTH EAST ARROW CROSSING SOUTH EAST ARROW/\n", "INVALID: U+0292f (\u292f) FALLING DIAGONAL CROSSING NORTH EAST ARROW/\n", "INVALID: U+02930 (\u2930) RISING DIAGONAL CROSSING SOUTH EAST ARROW/\n", "INVALID: U+02931 (\u2931) NORTH EAST ARROW CROSSING NORTH WEST ARROW/\n", "INVALID: U+02932 (\u2932) NORTH WEST ARROW CROSSING NORTH EAST ARROW/\n", "INVALID: U+02933 (\u2933) WAVE ARROW POINTING DIRECTLY RIGHT/\n", "INVALID: U+02934 (\u2934) ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS/\n", "INVALID: U+02935 (\u2935) ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS/\n", "INVALID: U+02936 (\u2936) ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS/\n", "INVALID: U+02937 (\u2937) ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS/\n", "INVALID: U+02938 (\u2938) RIGHT-SIDE ARC CLOCKWISE ARROW/\n", "INVALID: U+02939 (\u2939) LEFT-SIDE ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293a (\u293a) TOP ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293b (\u293b) BOTTOM ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293c (\u293c) TOP ARC CLOCKWISE ARROW WITH MINUS/\n", "INVALID: U+0293d (\u293d) TOP ARC ANTICLOCKWISE ARROW WITH PLUS/\n", "INVALID: U+0293e (\u293e) LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW/\n", "INVALID: U+0293f (\u293f) LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW/\n", "INVALID: U+02940 (\u2940) ANTICLOCKWISE CLOSED CIRCLE ARROW/\n", "INVALID: U+02941 (\u2941) CLOCKWISE CLOSED CIRCLE ARROW/\n", "INVALID: U+02942 (\u2942) RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW/\n", "INVALID: U+02943 (\u2943) LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW/\n", "INVALID: U+02971 (\u2971) EQUALS SIGN ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02972 (\u2972) TILDE OPERATOR ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02973 (\u2973) LEFTWARDS ARROW ABOVE TILDE OPERATOR/\n", "INVALID: U+02974 (\u2974) RIGHTWARDS ARROW ABOVE TILDE OPERATOR/\n", "INVALID: U+02975 (\u2975) RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO/\n", "INVALID: U+02976 (\u2976) LESS-THAN ABOVE LEFTWARDS ARROW/\n", "INVALID: U+02977 (\u2977) LEFTWARDS ARROW THROUGH LESS-THAN/\n", "INVALID: U+02978 (\u2978) GREATER-THAN ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02979 (\u2979) SUBSET ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+0297a (\u297a) LEFTWARDS ARROW THROUGH SUBSET/\n", "INVALID: U+0297b (\u297b) SUPERSET ABOVE LEFTWARDS ARROW/\n", "INVALID: U+0297c (\u297c) LEFT FISH TAIL/\n", "INVALID: U+0297d (\u297d) RIGHT FISH TAIL/\n", "INVALID: U+0297e (\u297e) UP FISH TAIL/\n", "INVALID: U+0297f (\u297f) DOWN FISH TAIL/\n", "INVALID: U+029ce (\u29ce) RIGHT TRIANGLE ABOVE LEFT TRIANGLE/\n", "INVALID: U+029cf (\u29cf) LEFT TRIANGLE BESIDE VERTICAL BAR/\n", "INVALID: U+029d0 (\u29d0) VERTICAL BAR BESIDE RIGHT TRIANGLE/\n", "INVALID: U+029d1 (\u29d1) BOWTIE WITH LEFT HALF BLACK/\n", "INVALID: U+029d2 (\u29d2) BOWTIE WITH RIGHT HALF BLACK/\n", "INVALID: U+029d3 (\u29d3) BLACK BOWTIE/\n", "INVALID: U+029d4 (\u29d4) TIMES WITH LEFT HALF BLACK/\n", "INVALID: U+029d5 (\u29d5) TIMES WITH RIGHT HALF BLACK/\n", "INVALID: U+029df (\u29df) DOUBLE-ENDED MULTIMAP/\n", "INVALID: U+029e6 (\u29e6) GLEICH STARK/\n", "INVALID: U+02a59 (\u2a59) LOGICAL OR OVERLAPPING LOGICAL AND/\n", "INVALID: U+02a68 (\u2a68) TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE/\n", "INVALID: U+02a69 (\u2a69) TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE/\n", "INVALID: U+02ada (\u2ada) PITCHFORK WITH TEE TOP/\n", "INVALID: U+02adc (\u2adc) FORKING/\n", "INVALID: U+02add (\u2add) NONFORKING/\n", "INVALID: U+02ade (\u2ade) SHORT LEFT TACK/\n", "INVALID: U+02adf (\u2adf) SHORT DOWN TACK/\n", "INVALID: U+02ae0 (\u2ae0) SHORT UP TACK/\n", "INVALID: U+02ae2 (\u2ae2) VERTICAL BAR TRIPLE RIGHT TURNSTILE/\n", "INVALID: U+02ae3 (\u2ae3) DOUBLE VERTICAL BAR LEFT TURNSTILE/\n", "INVALID: U+02ae4 (\u2ae4) VERTICAL BAR DOUBLE LEFT TURNSTILE/\n", "INVALID: U+02ae5 (\u2ae5) DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE/\n", "INVALID: U+02ae6 (\u2ae6) LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL/\n", "INVALID: U+02ae7 (\u2ae7) SHORT DOWN TACK WITH OVERBAR/\n", "INVALID: U+02ae8 (\u2ae8) SHORT UP TACK WITH UNDERBAR/\n", "INVALID: U+02ae9 (\u2ae9) SHORT UP TACK ABOVE SHORT DOWN TACK/\n", "INVALID: U+02aea (\u2aea) DOUBLE DOWN TACK/\n", "INVALID: U+02aeb (\u2aeb) DOUBLE UP TACK/\n", "INVALID: U+02aec (\u2aec) DOUBLE STROKE NOT SIGN/\n", "INVALID: U+02aed (\u2aed) REVERSED DOUBLE STROKE NOT SIGN/\n", "INVALID: U+02aee (\u2aee) DOES NOT DIVIDE WITH REVERSED NEGATION SLASH/\n", "INVALID: U+02aef (\u2aef) VERTICAL LINE WITH CIRCLE ABOVE/\n", "INVALID: U+02af0 (\u2af0) VERTICAL LINE WITH CIRCLE BELOW/\n", "INVALID: U+02af2 (\u2af2) PARALLEL WITH HORIZONTAL STROKE/\n", "INVALID: U+02af3 (\u2af3) PARALLEL WITH TILDE OPERATOR/\n", "Valid: 528 Invalid: 129\n", "\n", "Category: Vary - operators that can be unary or binary depending on context\n", "INVALID: U+02212 (\u2212) MINUS SIGN/\n", "Valid: 3 Invalid: 1\n", "\n", "Category: Special - characters not covered by other classes\n", "INVALID: U+02064 (\u2064) INVISIBLE PLUS/\n", "INVALID: U+03008 (\u3008) LEFT ANGLE BRACKET/OPENING ANGLE BRACKET\n", "INVALID: U+03009 (\u3009) RIGHT ANGLE BRACKET/CLOSING ANGLE BRACKET\n", "INVALID: U+0301a (\u301a) LEFT WHITE SQUARE BRACKET/OPENING WHITE SQUARE BRACKET\n", "INVALID: U+0301b (\u301b) RIGHT WHITE SQUARE BRACKET/CLOSING WHITE SQUARE BRACKET\n", "INVALID: U+0fb29 (\ufb29) HEBREW LETTER ALTERNATIVE PLUS SIGN/\n", "INVALID: U+0fe62 (\ufe62) SMALL PLUS SIGN/\n", "INVALID: U+0fe63 (\ufe63) SMALL HYPHEN-MINUS/\n", "INVALID: U+0fe64 (\ufe64) SMALL LESS-THAN SIGN/\n", "INVALID: U+0fe65 (\ufe65) SMALL GREATER-THAN SIGN/\n", "INVALID: U+0fe66 (\ufe66) SMALL EQUALS SIGN/\n", "INVALID: U+0fe67 (\ufe67) (no description)\n", "INVALID: U+0ff0b (\uff0b) FULLWIDTH PLUS SIGN/\n", "INVALID: U+0ff1c (\uff1c) FULLWIDTH LESS-THAN SIGN/\n", "INVALID: U+0ff1d (\uff1d) FULLWIDTH EQUALS SIGN/\n", "INVALID: U+0ff1e (\uff1e) FULLWIDTH GREATER-THAN SIGN/\n", "INVALID: U+0ff5c (\uff5c) FULLWIDTH VERTICAL LINE/FULLWIDTH VERTICAL BAR\n", "INVALID: U+0ff5e (\uff5e) FULLWIDTH TILDE/FULLWIDTH SPACING TILDE\n", "INVALID: U+0ffe2 (\uffe2) FULLWIDTH NOT SIGN/\n", "Valid: 9 Invalid: 19\n", "\n" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "checkvalidprefix([\n", " \"B\", #- Binary\n", " \"R\", #- Relation - includes arrows\n", " \"V\", #- Vary - operators that can be unary or binary depending on context\n", " \"X\", #- Special - characters not covered by other classes \"U\", \"V\"\n", "], 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Category: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Binary\n", " VALID: U+0002f (/) SOLIDUS/SLASH\n", " VALID: U+0005c (\\) REVERSE SOLIDUS/BACKSLASH\n", " VALID: U+000b7 (\u00b7) MIDDLE DOT/\n", " VALID: U+000d7 (\u00d7) MULTIPLICATION SIGN/\n", " VALID: U+000f7 (\u00f7) DIVISION SIGN/\n", " VALID: U+02022 (\u2022) BULLET/\n", "INVALID: U+02040 (\u2040) CHARACTER TIE/\n", "INVALID: U+02044 (\u2044) FRACTION SLASH/\n", " VALID: U+0204e (\u204e) LOW ASTERISK/\n", "INVALID: U+02061 (\u2061) FUNCTION APPLICATION/\n", "INVALID: U+02062 (\u2062) INVISIBLE TIMES/\n", " VALID: U+02214 (\u2214) DOT PLUS/\n", "INVALID: U+02215 (\u2215) DIVISION SLASH/\n", "INVALID: U+02216 (\u2216) SET MINUS/\n", " VALID: U+02217 (\u2217) ASTERISK OPERATOR/\n", " VALID: U+02218 (\u2218) RING OPERATOR/\n", " VALID: U+02219 (\u2219) BULLET OPERATOR/\n", " VALID: U+02227 (\u2227) LOGICAL AND/\n", " VALID: U+02228 (\u2228) LOGICAL OR/\n", " VALID: U+02229 (\u2229) INTERSECTION/\n", " VALID: U+0222a (\u222a) UNION/\n", " VALID: U+02238 (\u2238) DOT MINUS/\n", " VALID: U+0223e (\u223e) INVERTED LAZY S/\n", " VALID: U+02240 (\u2240) WREATH PRODUCT/\n", "INVALID: U+0228c (\u228c) MULTISET/\n", " VALID: U+0228d (\u228d) MULTISET MULTIPLICATION/\n", " VALID: U+0228e (\u228e) MULTISET UNION/\n", " VALID: U+02293 (\u2293) SQUARE CAP/\n", " VALID: U+02294 (\u2294) SQUARE CUP/\n", " VALID: U+02295 (\u2295) CIRCLED PLUS/\n", " VALID: U+02296 (\u2296) CIRCLED MINUS/\n", " VALID: U+02297 (\u2297) CIRCLED TIMES/\n", " VALID: U+02298 (\u2298) CIRCLED DIVISION SLASH/\n", " VALID: U+02299 (\u2299) CIRCLED DOT OPERATOR/\n", " VALID: U+0229a (\u229a) CIRCLED RING OPERATOR/\n", " VALID: U+0229b (\u229b) CIRCLED ASTERISK OPERATOR/\n", " VALID: U+0229c (\u229c) CIRCLED EQUALS/\n", "INVALID: U+0229d (\u229d) CIRCLED DASH/\n", " VALID: U+0229e (\u229e) SQUARED PLUS/\n", " VALID: U+0229f (\u229f) SQUARED MINUS/\n", " VALID: U+022a0 (\u22a0) SQUARED TIMES/\n", " VALID: U+022a1 (\u22a1) SQUARED DOT OPERATOR/\n", "INVALID: U+022b9 (\u22b9) HERMITIAN CONJUGATE MATRIX/\n", "INVALID: U+022ba (\u22ba) INTERCALATE/\n", " VALID: U+022bb (\u22bb) XOR/\n", " VALID: U+022bc (\u22bc) NAND/\n", " VALID: U+022bd (\u22bd) NOR/\n", " VALID: U+022c4 (\u22c4) DIAMOND OPERATOR/\n", " VALID: U+022c5 (\u22c5) DOT OPERATOR/\n", " VALID: U+022c6 (\u22c6) STAR OPERATOR/\n", " VALID: U+022c7 (\u22c7) DIVISION TIMES/\n", " VALID: U+022c9 (\u22c9) LEFT NORMAL FACTOR SEMIDIRECT PRODUCT/\n", " VALID: U+022ca (\u22ca) RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT/\n", " VALID: U+022cb (\u22cb) LEFT SEMIDIRECT PRODUCT/\n", " VALID: U+022cc (\u22cc) RIGHT SEMIDIRECT PRODUCT/\n", " VALID: U+022ce (\u22ce) CURLY LOGICAL OR/\n", " VALID: U+022cf (\u22cf) CURLY LOGICAL AND/\n", " VALID: U+022d2 (\u22d2) DOUBLE INTERSECTION/\n", " VALID: U+022d3 (\u22d3) DOUBLE UNION/\n", " VALID: U+02305 (\u2305) PROJECTIVE/\n", " VALID: U+02306 (\u2306) PERSPECTIVE/\n", " VALID: U+0233d (\u233d) APL FUNCTIONAL SYMBOL CIRCLE STILE/\n", " VALID: U+025b2 (\u25b2) BLACK UP-POINTING TRIANGLE/BLACK UP POINTING TRIANGLE\n", " VALID: U+025b3 (\u25b3) WHITE UP-POINTING TRIANGLE/WHITE UP POINTING TRIANGLE\n", " VALID: U+025b4 (\u25b4) BLACK UP-POINTING SMALL TRIANGLE/BLACK UP POINTING SMALL TRIANGLE\n", " VALID: U+025b5 (\u25b5) WHITE UP-POINTING SMALL TRIANGLE/WHITE UP POINTING SMALL TRIANGLE\n", " VALID: U+025b6 (\u25b6) BLACK RIGHT-POINTING TRIANGLE/BLACK RIGHT POINTING TRIANGLE\n", "INVALID: U+025b7 (\u25b7) WHITE RIGHT-POINTING TRIANGLE/WHITE RIGHT POINTING TRIANGLE\n", " VALID: U+025b8 (\u25b8) BLACK RIGHT-POINTING SMALL TRIANGLE/BLACK RIGHT POINTING SMALL TRIANGLE\n", " VALID: U+025b9 (\u25b9) WHITE RIGHT-POINTING SMALL TRIANGLE/WHITE RIGHT POINTING SMALL TRIANGLE\n", " VALID: U+025bc (\u25bc) BLACK DOWN-POINTING TRIANGLE/BLACK DOWN POINTING TRIANGLE\n", " VALID: U+025bd (\u25bd) WHITE DOWN-POINTING TRIANGLE/WHITE DOWN POINTING TRIANGLE\n", " VALID: U+025be (\u25be) BLACK DOWN-POINTING SMALL TRIANGLE/BLACK DOWN POINTING SMALL TRIANGLE\n", " VALID: U+025bf (\u25bf) WHITE DOWN-POINTING SMALL TRIANGLE/WHITE DOWN POINTING SMALL TRIANGLE\n", " VALID: U+025c0 (\u25c0) BLACK LEFT-POINTING TRIANGLE/BLACK LEFT POINTING TRIANGLE\n", "INVALID: U+025c1 (\u25c1) WHITE LEFT-POINTING TRIANGLE/WHITE LEFT POINTING TRIANGLE\n", " VALID: U+025c2 (\u25c2) BLACK LEFT-POINTING SMALL TRIANGLE/BLACK LEFT POINTING SMALL TRIANGLE\n", " VALID: U+025c3 (\u25c3) WHITE LEFT-POINTING SMALL TRIANGLE/WHITE LEFT POINTING SMALL TRIANGLE\n", " VALID: U+025c4 (\u25c4) BLACK LEFT-POINTING POINTER/BLACK LEFT POINTING POINTER\n", " VALID: U+025c5 (\u25c5) WHITE LEFT-POINTING POINTER/WHITE LEFT POINTING POINTER\n", " VALID: U+025ca (\u25ca) LOZENGE/\n", " VALID: U+025cb (\u25cb) WHITE CIRCLE/\n", " VALID: U+025e6 (\u25e6) WHITE BULLET/\n", " VALID: U+025eb (\u25eb) WHITE SQUARE WITH VERTICAL BISECTING LINE/\n", " VALID: U+025ec (\u25ec) WHITE UP-POINTING TRIANGLE WITH DOT/WHITE UP POINTING TRIANGLE WITH DOT\n", " VALID: U+025f8 (\u25f8) UPPER LEFT TRIANGLE/\n", " VALID: U+025f9 (\u25f9) UPPER RIGHT TRIANGLE/\n", " VALID: U+025fa (\u25fa) LOWER LEFT TRIANGLE/\n", " VALID: U+025fb (\u25fb) WHITE MEDIUM SQUARE/\n", " VALID: U+025fc (\u25fc) BLACK MEDIUM SQUARE/\n", " VALID: U+025fd (\u25fd) WHITE MEDIUM SMALL SQUARE/\n", " VALID: U+025fe (\u25fe) BLACK MEDIUM SMALL SQUARE/\n", " VALID: U+025ff (\u25ff) LOWER RIGHT TRIANGLE/\n", " VALID: U+02605 (\u2605) BLACK STAR/\n", " VALID: U+02606 (\u2606) WHITE STAR/\n", "INVALID: U+027ce (\u27ce) SQUARED LOGICAL AND/\n", "INVALID: U+027cf (\u27cf) SQUARED LOGICAL OR/\n", " VALID: U+027d1 (\u27d1) AND WITH DOT/\n", "INVALID: U+027e0 (\u27e0) LOZENGE DIVIDED BY HORIZONTAL RULE/\n", "INVALID: U+027e1 (\u27e1) WHITE CONCAVE-SIDED DIAMOND/\n", "INVALID: U+027e2 (\u27e2) WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK/\n", "INVALID: U+027e3 (\u27e3) WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK/\n", "INVALID: U+027e4 (\u27e4) WHITE SQUARE WITH LEFTWARDS TICK/\n", "INVALID: U+027e5 (\u27e5) WHITE SQUARE WITH RIGHTWARDS TICK/\n", "INVALID: U+029b6 (\u29b6) CIRCLED VERTICAL BAR/\n", " VALID: U+029b7 (\u29b7) CIRCLED PARALLEL/\n", " VALID: U+029b8 (\u29b8) CIRCLED REVERSE SOLIDUS/\n", "INVALID: U+029b9 (\u29b9) CIRCLED PERPENDICULAR/\n", " VALID: U+029c0 (\u29c0) CIRCLED LESS-THAN/\n", " VALID: U+029c1 (\u29c1) CIRCLED GREATER-THAN/\n", "INVALID: U+029c4 (\u29c4) SQUARED RISING DIAGONAL SLASH/\n", "INVALID: U+029c5 (\u29c5) SQUARED FALLING DIAGONAL SLASH/\n", "INVALID: U+029c6 (\u29c6) SQUARED ASTERISK/\n", "INVALID: U+029c7 (\u29c7) SQUARED SMALL CIRCLE/\n", "INVALID: U+029c8 (\u29c8) SQUARED SQUARE/\n", "INVALID: U+029d6 (\u29d6) WHITE HOURGLASS/\n", "INVALID: U+029d7 (\u29d7) BLACK HOURGLASS/\n", "INVALID: U+029e2 (\u29e2) SHUFFLE PRODUCT/\n", "INVALID: U+029eb (\u29eb) BLACK LOZENGE/\n", "INVALID: U+029f5 (\u29f5) REVERSE SOLIDUS OPERATOR/\n", " VALID: U+029f6 (\u29f6) SOLIDUS WITH OVERBAR/\n", " VALID: U+029f7 (\u29f7) REVERSE SOLIDUS WITH HORIZONTAL STROKE/\n", " VALID: U+029fa (\u29fa) DOUBLE PLUS/\n", " VALID: U+029fb (\u29fb) TRIPLE PLUS/\n", "INVALID: U+029fe (\u29fe) TINY/\n", "INVALID: U+029ff (\u29ff) MINY/\n", " VALID: U+02a22 (\u2a22) PLUS SIGN WITH SMALL CIRCLE ABOVE/\n", " VALID: U+02a23 (\u2a23) PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE/\n", " VALID: U+02a24 (\u2a24) PLUS SIGN WITH TILDE ABOVE/\n", " VALID: U+02a25 (\u2a25) PLUS SIGN WITH DOT BELOW/\n", " VALID: U+02a26 (\u2a26) PLUS SIGN WITH TILDE BELOW/\n", " VALID: U+02a27 (\u2a27) PLUS SIGN WITH SUBSCRIPT TWO/\n", " VALID: U+02a28 (\u2a28) PLUS SIGN WITH BLACK TRIANGLE/\n", " VALID: U+02a29 (\u2a29) MINUS SIGN WITH COMMA ABOVE/\n", " VALID: U+02a2a (\u2a2a) MINUS SIGN WITH DOT BELOW/\n", " VALID: U+02a2b (\u2a2b) MINUS SIGN WITH FALLING DOTS/\n", " VALID: U+02a2c (\u2a2c) MINUS SIGN WITH RISING DOTS/\n", " VALID: U+02a2d (\u2a2d) PLUS SIGN IN LEFT HALF CIRCLE/\n", " VALID: U+02a2e (\u2a2e) PLUS SIGN IN RIGHT HALF CIRCLE/\n", "INVALID: U+02a2f (\u2a2f) VECTOR OR CROSS PRODUCT/\n", " VALID: U+02a30 (\u2a30) MULTIPLICATION SIGN WITH DOT ABOVE/\n", " VALID: U+02a31 (\u2a31) MULTIPLICATION SIGN WITH UNDERBAR/\n", " VALID: U+02a32 (\u2a32) SEMIDIRECT PRODUCT WITH BOTTOM CLOSED/\n", " VALID: U+02a33 (\u2a33) SMASH PRODUCT/\n", " VALID: U+02a34 (\u2a34) MULTIPLICATION SIGN IN LEFT HALF CIRCLE/\n", " VALID: U+02a35 (\u2a35) MULTIPLICATION SIGN IN RIGHT HALF CIRCLE/\n", " VALID: U+02a36 (\u2a36) CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT/\n", " VALID: U+02a37 (\u2a37) MULTIPLICATION SIGN IN DOUBLE CIRCLE/\n", " VALID: U+02a38 (\u2a38) CIRCLED DIVISION SIGN/\n", " VALID: U+02a39 (\u2a39) PLUS SIGN IN TRIANGLE/\n", " VALID: U+02a3a (\u2a3a) MINUS SIGN IN TRIANGLE/\n", " VALID: U+02a3b (\u2a3b) MULTIPLICATION SIGN IN TRIANGLE/\n", " VALID: U+02a3c (\u2a3c) INTERIOR PRODUCT/\n", " VALID: U+02a3d (\u2a3d) RIGHTHAND INTERIOR PRODUCT/\n", "INVALID: U+02a3e (\u2a3e) Z NOTATION RELATIONAL COMPOSITION/\n", "INVALID: U+02a3f (\u2a3f) AMALGAMATION OR COPRODUCT/\n", " VALID: U+02a40 (\u2a40) INTERSECTION WITH DOT/\n", " VALID: U+02a41 (\u2a41) UNION WITH MINUS SIGN/\n", " VALID: U+02a42 (\u2a42) UNION WITH OVERBAR/\n", " VALID: U+02a43 (\u2a43) INTERSECTION WITH OVERBAR/\n", " VALID: U+02a44 (\u2a44) INTERSECTION WITH LOGICAL AND/\n", " VALID: U+02a45 (\u2a45) UNION WITH LOGICAL OR/\n", "INVALID: U+02a46 (\u2a46) UNION ABOVE INTERSECTION/\n", "INVALID: U+02a47 (\u2a47) INTERSECTION ABOVE UNION/\n", "INVALID: U+02a48 (\u2a48) UNION ABOVE BAR ABOVE INTERSECTION/\n", "INVALID: U+02a49 (\u2a49) INTERSECTION ABOVE BAR ABOVE UNION/\n", " VALID: U+02a4a (\u2a4a) UNION BESIDE AND JOINED WITH UNION/\n", " VALID: U+02a4b (\u2a4b) INTERSECTION BESIDE AND JOINED WITH INTERSECTION/\n", " VALID: U+02a4c (\u2a4c) CLOSED UNION WITH SERIFS/\n", " VALID: U+02a4d (\u2a4d) CLOSED INTERSECTION WITH SERIFS/\n", " VALID: U+02a4e (\u2a4e) DOUBLE SQUARE INTERSECTION/\n", " VALID: U+02a4f (\u2a4f) DOUBLE SQUARE UNION/\n", " VALID: U+02a50 (\u2a50) CLOSED UNION WITH SERIFS AND SMASH PRODUCT/\n", " VALID: U+02a51 (\u2a51) LOGICAL AND WITH DOT ABOVE/\n", " VALID: U+02a52 (\u2a52) LOGICAL OR WITH DOT ABOVE/\n", " VALID: U+02a53 (\u2a53) DOUBLE LOGICAL AND/\n", " VALID: U+02a54 (\u2a54) DOUBLE LOGICAL OR/\n", " VALID: U+02a55 (\u2a55) TWO INTERSECTING LOGICAL AND/\n", " VALID: U+02a56 (\u2a56) TWO INTERSECTING LOGICAL OR/\n", " VALID: U+02a57 (\u2a57) SLOPING LARGE OR/\n", " VALID: U+02a58 (\u2a58) SLOPING LARGE AND/\n", " VALID: U+02a5a (\u2a5a) LOGICAL AND WITH MIDDLE STEM/\n", " VALID: U+02a5b (\u2a5b) LOGICAL OR WITH MIDDLE STEM/\n", " VALID: U+02a5c (\u2a5c) LOGICAL AND WITH HORIZONTAL DASH/\n", " VALID: U+02a5d (\u2a5d) LOGICAL OR WITH HORIZONTAL DASH/\n", " VALID: U+02a5e (\u2a5e) LOGICAL AND WITH DOUBLE OVERBAR/\n", " VALID: U+02a5f (\u2a5f) LOGICAL AND WITH UNDERBAR/\n", " VALID: U+02a60 (\u2a60) LOGICAL AND WITH DOUBLE UNDERBAR/\n", " VALID: U+02a61 (\u2a61) SMALL VEE WITH UNDERBAR/\n", " VALID: U+02a62 (\u2a62) LOGICAL OR WITH DOUBLE OVERBAR/\n", " VALID: U+02a63 (\u2a63) LOGICAL OR WITH DOUBLE UNDERBAR/\n", "INVALID: U+02a64 (\u2a64) Z NOTATION DOMAIN ANTIRESTRICTION/\n", "INVALID: U+02a65 (\u2a65) Z NOTATION RANGE ANTIRESTRICTION/\n", " VALID: U+02a71 (\u2a71) EQUALS SIGN ABOVE PLUS SIGN/\n", " VALID: U+02a72 (\u2a72) PLUS SIGN ABOVE EQUALS SIGN/\n", "INVALID: U+02af4 (\u2af4) TRIPLE VERTICAL BAR BINARY RELATION/\n", "INVALID: U+02af5 (\u2af5) TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE/\n", "INVALID: U+02af6 (\u2af6) TRIPLE COLON OPERATOR/\n", "INVALID: U+02afb (\u2afb) TRIPLE SOLIDUS BINARY RELATION/\n", "INVALID: U+02afd (\u2afd) DOUBLE SOLIDUS OPERATOR/\n", "INVALID: U+02afe (\u2afe) WHITE VERTICAL BAR/\n", "Valid: 152 Invalid: 49\n", "\n", "Category: Relation - includes arrows\n", " VALID: U+0003c (<) LESS-THAN SIGN/\n", "INVALID: U+0003d (=) EQUALS SIGN/\n", " VALID: U+0003e (>) GREATER-THAN SIGN/\n", " VALID: U+02020 (\u2020) DAGGER/\n", " VALID: U+02021 (\u2021) DOUBLE DAGGER/\n", " VALID: U+0204f (\u204f) REVERSED SEMICOLON/\n", " VALID: U+02050 (\u2050) CLOSE UP/\n", " VALID: U+02190 (\u2190) LEFTWARDS ARROW/LEFT ARROW\n", " VALID: U+02191 (\u2191) UPWARDS ARROW/UP ARROW\n", " VALID: U+02192 (\u2192) RIGHTWARDS ARROW/RIGHT ARROW\n", " VALID: U+02193 (\u2193) DOWNWARDS ARROW/DOWN ARROW\n", " VALID: U+02194 (\u2194) LEFT RIGHT ARROW/\n", " VALID: U+02195 (\u2195) UP DOWN ARROW/\n", " VALID: U+02196 (\u2196) NORTH WEST ARROW/UPPER LEFT ARROW\n", " VALID: U+02197 (\u2197) NORTH EAST ARROW/UPPER RIGHT ARROW\n", " VALID: U+02198 (\u2198) SOUTH EAST ARROW/LOWER RIGHT ARROW\n", " VALID: U+02199 (\u2199) SOUTH WEST ARROW/LOWER LEFT ARROW\n", " VALID: U+0219a (\u219a) LEFTWARDS ARROW WITH STROKE/LEFT ARROW WITH STROKE\n", " VALID: U+0219b (\u219b) RIGHTWARDS ARROW WITH STROKE/RIGHT ARROW WITH STROKE\n", " VALID: U+0219c (\u219c) LEFTWARDS WAVE ARROW/LEFT WAVE ARROW\n", " VALID: U+0219d (\u219d) RIGHTWARDS WAVE ARROW/RIGHT WAVE ARROW\n", " VALID: U+0219e (\u219e) LEFTWARDS TWO HEADED ARROW/LEFT TWO HEADED ARROW\n", " VALID: U+0219f (\u219f) UPWARDS TWO HEADED ARROW/UP TWO HEADED ARROW\n", " VALID: U+021a0 (\u21a0) RIGHTWARDS TWO HEADED ARROW/RIGHT TWO HEADED ARROW\n", " VALID: U+021a1 (\u21a1) DOWNWARDS TWO HEADED ARROW/DOWN TWO HEADED ARROW\n", " VALID: U+021a2 (\u21a2) LEFTWARDS ARROW WITH TAIL/LEFT ARROW WITH TAIL\n", " VALID: U+021a3 (\u21a3) RIGHTWARDS ARROW WITH TAIL/RIGHT ARROW WITH TAIL\n", " VALID: U+021a4 (\u21a4) LEFTWARDS ARROW FROM BAR/LEFT ARROW FROM BAR\n", " VALID: U+021a5 (\u21a5) UPWARDS ARROW FROM BAR/UP ARROW FROM BAR\n", " VALID: U+021a6 (\u21a6) RIGHTWARDS ARROW FROM BAR/RIGHT ARROW FROM BAR\n", " VALID: U+021a7 (\u21a7) DOWNWARDS ARROW FROM BAR/DOWN ARROW FROM BAR\n", " VALID: U+021a8 (\u21a8) UP DOWN ARROW WITH BASE/\n", " VALID: U+021a9 (\u21a9) LEFTWARDS ARROW WITH HOOK/LEFT ARROW WITH HOOK\n", " VALID: U+021aa (\u21aa) RIGHTWARDS ARROW WITH HOOK/RIGHT ARROW WITH HOOK\n", " VALID: U+021ab (\u21ab) LEFTWARDS ARROW WITH LOOP/LEFT ARROW WITH LOOP\n", " VALID: U+021ac (\u21ac) RIGHTWARDS ARROW WITH LOOP/RIGHT ARROW WITH LOOP\n", " VALID: U+021ad (\u21ad) LEFT RIGHT WAVE ARROW/\n", " VALID: U+021ae (\u21ae) LEFT RIGHT ARROW WITH STROKE/\n", " VALID: U+021af (\u21af) DOWNWARDS ZIGZAG ARROW/DOWN ZIGZAG ARROW\n", " VALID: U+021b0 (\u21b0) UPWARDS ARROW WITH TIP LEFTWARDS/UP ARROW WITH TIP LEFT\n", " VALID: U+021b1 (\u21b1) UPWARDS ARROW WITH TIP RIGHTWARDS/UP ARROW WITH TIP RIGHT\n", " VALID: U+021b2 (\u21b2) DOWNWARDS ARROW WITH TIP LEFTWARDS/DOWN ARROW WITH TIP LEFT\n", " VALID: U+021b3 (\u21b3) DOWNWARDS ARROW WITH TIP RIGHTWARDS/DOWN ARROW WITH TIP RIGHT\n", " VALID: U+021b6 (\u21b6) ANTICLOCKWISE TOP SEMICIRCLE ARROW/\n", " VALID: U+021b7 (\u21b7) CLOCKWISE TOP SEMICIRCLE ARROW/\n", " VALID: U+021ba (\u21ba) ANTICLOCKWISE OPEN CIRCLE ARROW/\n", " VALID: U+021bb (\u21bb) CLOCKWISE OPEN CIRCLE ARROW/\n", " VALID: U+021bc (\u21bc) LEFTWARDS HARPOON WITH BARB UPWARDS/LEFT HARPOON WITH BARB UP\n", " VALID: U+021bd (\u21bd) LEFTWARDS HARPOON WITH BARB DOWNWARDS/LEFT HARPOON WITH BARB DOWN\n", " VALID: U+021be (\u21be) UPWARDS HARPOON WITH BARB RIGHTWARDS/UP HARPOON WITH BARB RIGHT\n", " VALID: U+021bf (\u21bf) UPWARDS HARPOON WITH BARB LEFTWARDS/UP HARPOON WITH BARB LEFT\n", " VALID: U+021c0 (\u21c0) RIGHTWARDS HARPOON WITH BARB UPWARDS/RIGHT HARPOON WITH BARB UP\n", " VALID: U+021c1 (\u21c1) RIGHTWARDS HARPOON WITH BARB DOWNWARDS/RIGHT HARPOON WITH BARB DOWN\n", " VALID: U+021c2 (\u21c2) DOWNWARDS HARPOON WITH BARB RIGHTWARDS/DOWN HARPOON WITH BARB RIGHT\n", " VALID: U+021c3 (\u21c3) DOWNWARDS HARPOON WITH BARB LEFTWARDS/DOWN HARPOON WITH BARB LEFT\n", " VALID: U+021c4 (\u21c4) RIGHTWARDS ARROW OVER LEFTWARDS ARROW/RIGHT ARROW OVER LEFT ARROW\n", " VALID: U+021c5 (\u21c5) UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW/UP ARROW LEFT OF DOWN ARROW\n", " VALID: U+021c6 (\u21c6) LEFTWARDS ARROW OVER RIGHTWARDS ARROW/LEFT ARROW OVER RIGHT ARROW\n", " VALID: U+021c7 (\u21c7) LEFTWARDS PAIRED ARROWS/LEFT PAIRED ARROWS\n", " VALID: U+021c8 (\u21c8) UPWARDS PAIRED ARROWS/UP PAIRED ARROWS\n", " VALID: U+021c9 (\u21c9) RIGHTWARDS PAIRED ARROWS/RIGHT PAIRED ARROWS\n", " VALID: U+021ca (\u21ca) DOWNWARDS PAIRED ARROWS/DOWN PAIRED ARROWS\n", " VALID: U+021cb (\u21cb) LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON/LEFT HARPOON OVER RIGHT HARPOON\n", " VALID: U+021cc (\u21cc) RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON/RIGHT HARPOON OVER LEFT HARPOON\n", " VALID: U+021cd (\u21cd) LEFTWARDS DOUBLE ARROW WITH STROKE/LEFT DOUBLE ARROW WITH STROKE\n", " VALID: U+021ce (\u21ce) LEFT RIGHT DOUBLE ARROW WITH STROKE/\n", " VALID: U+021cf (\u21cf) RIGHTWARDS DOUBLE ARROW WITH STROKE/RIGHT DOUBLE ARROW WITH STROKE\n", " VALID: U+021d0 (\u21d0) LEFTWARDS DOUBLE ARROW/LEFT DOUBLE ARROW\n", " VALID: U+021d1 (\u21d1) UPWARDS DOUBLE ARROW/UP DOUBLE ARROW\n", " VALID: U+021d2 (\u21d2) RIGHTWARDS DOUBLE ARROW/RIGHT DOUBLE ARROW\n", " VALID: U+021d3 (\u21d3) DOWNWARDS DOUBLE ARROW/DOWN DOUBLE ARROW\n", " VALID: U+021d4 (\u21d4) LEFT RIGHT DOUBLE ARROW/\n", " VALID: U+021d5 (\u21d5) UP DOWN DOUBLE ARROW/\n", " VALID: U+021d6 (\u21d6) NORTH WEST DOUBLE ARROW/UPPER LEFT DOUBLE ARROW\n", " VALID: U+021d7 (\u21d7) NORTH EAST DOUBLE ARROW/UPPER RIGHT DOUBLE ARROW\n", " VALID: U+021d8 (\u21d8) SOUTH EAST DOUBLE ARROW/LOWER RIGHT DOUBLE ARROW\n", " VALID: U+021d9 (\u21d9) SOUTH WEST DOUBLE ARROW/LOWER LEFT DOUBLE ARROW\n", " VALID: U+021da (\u21da) LEFTWARDS TRIPLE ARROW/LEFT TRIPLE ARROW\n", " VALID: U+021db (\u21db) RIGHTWARDS TRIPLE ARROW/RIGHT TRIPLE ARROW\n", " VALID: U+021dc (\u21dc) LEFTWARDS SQUIGGLE ARROW/LEFT SQUIGGLE ARROW\n", " VALID: U+021dd (\u21dd) RIGHTWARDS SQUIGGLE ARROW/RIGHT SQUIGGLE ARROW\n", " VALID: U+021de (\u21de) UPWARDS ARROW WITH DOUBLE STROKE/UP ARROW WITH DOUBLE STROKE\n", " VALID: U+021df (\u21df) DOWNWARDS ARROW WITH DOUBLE STROKE/DOWN ARROW WITH DOUBLE STROKE\n", " VALID: U+021e0 (\u21e0) LEFTWARDS DASHED ARROW/LEFT DASHED ARROW\n", " VALID: U+021e1 (\u21e1) UPWARDS DASHED ARROW/UP DASHED ARROW\n", " VALID: U+021e2 (\u21e2) RIGHTWARDS DASHED ARROW/RIGHT DASHED ARROW\n", " VALID: U+021e3 (\u21e3) DOWNWARDS DASHED ARROW/DOWN DASHED ARROW\n", " VALID: U+021e4 (\u21e4) LEFTWARDS ARROW TO BAR/LEFT ARROW TO BAR\n", " VALID: U+021e5 (\u21e5) RIGHTWARDS ARROW TO BAR/RIGHT ARROW TO BAR\n", " VALID: U+021e6 (\u21e6) LEFTWARDS WHITE ARROW/WHITE LEFT ARROW\n", " VALID: U+021e7 (\u21e7) UPWARDS WHITE ARROW/WHITE UP ARROW\n", " VALID: U+021e8 (\u21e8) RIGHTWARDS WHITE ARROW/WHITE RIGHT ARROW\n", " VALID: U+021e9 (\u21e9) DOWNWARDS WHITE ARROW/WHITE DOWN ARROW\n", " VALID: U+021ea (\u21ea) UPWARDS WHITE ARROW FROM BAR/WHITE UP ARROW FROM BAR\n", " VALID: U+021eb (\u21eb) UPWARDS WHITE ARROW ON PEDESTAL/\n", " VALID: U+021ec (\u21ec) UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR/\n", " VALID: U+021ed (\u21ed) UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR/\n", " VALID: U+021ee (\u21ee) UPWARDS WHITE DOUBLE ARROW/\n", " VALID: U+021ef (\u21ef) UPWARDS WHITE DOUBLE ARROW ON PEDESTAL/\n", " VALID: U+021f0 (\u21f0) RIGHTWARDS WHITE ARROW FROM WALL/\n", " VALID: U+021f1 (\u21f1) NORTH WEST ARROW TO CORNER/\n", " VALID: U+021f2 (\u21f2) SOUTH EAST ARROW TO CORNER/\n", " VALID: U+021f3 (\u21f3) UP DOWN WHITE ARROW/\n", " VALID: U+021f4 (\u21f4) RIGHT ARROW WITH SMALL CIRCLE/\n", " VALID: U+021f5 (\u21f5) DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW/\n", " VALID: U+021f6 (\u21f6) THREE RIGHTWARDS ARROWS/\n", " VALID: U+021f7 (\u21f7) LEFTWARDS ARROW WITH VERTICAL STROKE/\n", " VALID: U+021f8 (\u21f8) RIGHTWARDS ARROW WITH VERTICAL STROKE/\n", " VALID: U+021f9 (\u21f9) LEFT RIGHT ARROW WITH VERTICAL STROKE/\n", " VALID: U+021fa (\u21fa) LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+021fb (\u21fb) RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+021fc (\u21fc) LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+021fd (\u21fd) LEFTWARDS OPEN-HEADED ARROW/\n", " VALID: U+021fe (\u21fe) RIGHTWARDS OPEN-HEADED ARROW/\n", " VALID: U+021ff (\u21ff) LEFT RIGHT OPEN-HEADED ARROW/\n", " VALID: U+02208 (\u2208) ELEMENT OF/\n", " VALID: U+02209 (\u2209) NOT AN ELEMENT OF/\n", " VALID: U+0220a (\u220a) SMALL ELEMENT OF/\n", " VALID: U+0220b (\u220b) CONTAINS AS MEMBER/\n", " VALID: U+0220c (\u220c) DOES NOT CONTAIN AS MEMBER/\n", " VALID: U+0220d (\u220d) SMALL CONTAINS AS MEMBER/\n", " VALID: U+0221d (\u221d) PROPORTIONAL TO/\n", "INVALID: U+02223 (\u2223) DIVIDES/\n", " VALID: U+02224 (\u2224) DOES NOT DIVIDE/\n", " VALID: U+02225 (\u2225) PARALLEL TO/\n", " VALID: U+02226 (\u2226) NOT PARALLEL TO/\n", "INVALID: U+02234 (\u2234) THEREFORE/\n", "INVALID: U+02235 (\u2235) BECAUSE/\n", "INVALID: U+02236 (\u2236) RATIO/\n", " VALID: U+02237 (\u2237) PROPORTION/\n", "INVALID: U+02239 (\u2239) EXCESS/\n", " VALID: U+0223a (\u223a) GEOMETRIC PROPORTION/\n", " VALID: U+0223b (\u223b) HOMOTHETIC/\n", "INVALID: U+0223c (\u223c) TILDE OPERATOR/\n", " VALID: U+0223d (\u223d) REVERSED TILDE/\n", " VALID: U+02241 (\u2241) NOT TILDE/\n", " VALID: U+02242 (\u2242) MINUS TILDE/\n", " VALID: U+02243 (\u2243) ASYMPTOTICALLY EQUAL TO/\n", " VALID: U+02244 (\u2244) NOT ASYMPTOTICALLY EQUAL TO/\n", " VALID: U+02245 (\u2245) APPROXIMATELY EQUAL TO/\n", " VALID: U+02246 (\u2246) APPROXIMATELY BUT NOT ACTUALLY EQUAL TO/\n", " VALID: U+02247 (\u2247) NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO/\n", " VALID: U+02248 (\u2248) ALMOST EQUAL TO/\n", " VALID: U+02249 (\u2249) NOT ALMOST EQUAL TO/\n", " VALID: U+0224a (\u224a) ALMOST EQUAL OR EQUAL TO/\n", " VALID: U+0224b (\u224b) TRIPLE TILDE/\n", " VALID: U+0224c (\u224c) ALL EQUAL TO/\n", " VALID: U+0224d (\u224d) EQUIVALENT TO/\n", " VALID: U+0224e (\u224e) GEOMETRICALLY EQUIVALENT TO/\n", " VALID: U+0224f (\u224f) DIFFERENCE BETWEEN/\n", " VALID: U+02250 (\u2250) APPROACHES THE LIMIT/\n", " VALID: U+02251 (\u2251) GEOMETRICALLY EQUAL TO/\n", " VALID: U+02252 (\u2252) APPROXIMATELY EQUAL TO OR THE IMAGE OF/\n", " VALID: U+02253 (\u2253) IMAGE OF OR APPROXIMATELY EQUAL TO/\n", " VALID: U+02254 (\u2254) COLON EQUALS/COLON EQUAL\n", " VALID: U+02255 (\u2255) EQUALS COLON/EQUAL COLON\n", " VALID: U+02256 (\u2256) RING IN EQUAL TO/\n", " VALID: U+02257 (\u2257) RING EQUAL TO/\n", " VALID: U+02258 (\u2258) CORRESPONDS TO/\n", " VALID: U+02259 (\u2259) ESTIMATES/\n", " VALID: U+0225a (\u225a) EQUIANGULAR TO/\n", " VALID: U+0225b (\u225b) STAR EQUALS/\n", " VALID: U+0225c (\u225c) DELTA EQUAL TO/\n", " VALID: U+0225d (\u225d) EQUAL TO BY DEFINITION/\n", " VALID: U+0225e (\u225e) MEASURED BY/\n", " VALID: U+0225f (\u225f) QUESTIONED EQUAL TO/\n", " VALID: U+02260 (\u2260) NOT EQUAL TO/\n", " VALID: U+02261 (\u2261) IDENTICAL TO/\n", " VALID: U+02262 (\u2262) NOT IDENTICAL TO/\n", " VALID: U+02263 (\u2263) STRICTLY EQUIVALENT TO/\n", " VALID: U+02264 (\u2264) LESS-THAN OR EQUAL TO/LESS THAN OR EQUAL TO\n", " VALID: U+02265 (\u2265) GREATER-THAN OR EQUAL TO/GREATER THAN OR EQUAL TO\n", " VALID: U+02266 (\u2266) LESS-THAN OVER EQUAL TO/LESS THAN OVER EQUAL TO\n", " VALID: U+02267 (\u2267) GREATER-THAN OVER EQUAL TO/GREATER THAN OVER EQUAL TO\n", " VALID: U+02268 (\u2268) LESS-THAN BUT NOT EQUAL TO/LESS THAN BUT NOT EQUAL TO\n", " VALID: U+02269 (\u2269) GREATER-THAN BUT NOT EQUAL TO/GREATER THAN BUT NOT EQUAL TO\n", " VALID: U+0226a (\u226a) MUCH LESS-THAN/MUCH LESS THAN\n", " VALID: U+0226b (\u226b) MUCH GREATER-THAN/MUCH GREATER THAN\n", " VALID: U+0226c (\u226c) BETWEEN/\n", " VALID: U+0226d (\u226d) NOT EQUIVALENT TO/\n", " VALID: U+0226e (\u226e) NOT LESS-THAN/NOT LESS THAN\n", " VALID: U+0226f (\u226f) NOT GREATER-THAN/NOT GREATER THAN\n", " VALID: U+02270 (\u2270) NEITHER LESS-THAN NOR EQUAL TO/NEITHER LESS THAN NOR EQUAL TO\n", " VALID: U+02271 (\u2271) NEITHER GREATER-THAN NOR EQUAL TO/NEITHER GREATER THAN NOR EQUAL TO\n", " VALID: U+02272 (\u2272) LESS-THAN OR EQUIVALENT TO/LESS THAN OR EQUIVALENT TO\n", " VALID: U+02273 (\u2273) GREATER-THAN OR EQUIVALENT TO/GREATER THAN OR EQUIVALENT TO\n", " VALID: U+02274 (\u2274) NEITHER LESS-THAN NOR EQUIVALENT TO/NEITHER LESS THAN NOR EQUIVALENT TO\n", " VALID: U+02275 (\u2275) NEITHER GREATER-THAN NOR EQUIVALENT TO/NEITHER GREATER THAN NOR EQUIVALENT TO\n", " VALID: U+02276 (\u2276) LESS-THAN OR GREATER-THAN/LESS THAN OR GREATER THAN\n", " VALID: U+02277 (\u2277) GREATER-THAN OR LESS-THAN/GREATER THAN OR LESS THAN\n", " VALID: U+02278 (\u2278) NEITHER LESS-THAN NOR GREATER-THAN/NEITHER LESS THAN NOR GREATER THAN\n", " VALID: U+02279 (\u2279) NEITHER GREATER-THAN NOR LESS-THAN/NEITHER GREATER THAN NOR LESS THAN\n", " VALID: U+0227a (\u227a) PRECEDES/\n", " VALID: U+0227b (\u227b) SUCCEEDS/\n", " VALID: U+0227c (\u227c) PRECEDES OR EQUAL TO/\n", " VALID: U+0227d (\u227d) SUCCEEDS OR EQUAL TO/\n", " VALID: U+0227e (\u227e) PRECEDES OR EQUIVALENT TO/\n", " VALID: U+0227f (\u227f) SUCCEEDS OR EQUIVALENT TO/\n", " VALID: U+02280 (\u2280) DOES NOT PRECEDE/\n", " VALID: U+02281 (\u2281) DOES NOT SUCCEED/\n", " VALID: U+02282 (\u2282) SUBSET OF/\n", " VALID: U+02283 (\u2283) SUPERSET OF/\n", " VALID: U+02284 (\u2284) NOT A SUBSET OF/\n", " VALID: U+02285 (\u2285) NOT A SUPERSET OF/\n", " VALID: U+02286 (\u2286) SUBSET OF OR EQUAL TO/\n", " VALID: U+02287 (\u2287) SUPERSET OF OR EQUAL TO/\n", " VALID: U+02288 (\u2288) NEITHER A SUBSET OF NOR EQUAL TO/\n", " VALID: U+02289 (\u2289) NEITHER A SUPERSET OF NOR EQUAL TO/\n", " VALID: U+0228a (\u228a) SUBSET OF WITH NOT EQUAL TO/SUBSET OF OR NOT EQUAL TO\n", " VALID: U+0228b (\u228b) SUPERSET OF WITH NOT EQUAL TO/SUPERSET OF OR NOT EQUAL TO\n", " VALID: U+0228f (\u228f) SQUARE IMAGE OF/\n", " VALID: U+02290 (\u2290) SQUARE ORIGINAL OF/\n", " VALID: U+02291 (\u2291) SQUARE IMAGE OF OR EQUAL TO/\n", " VALID: U+02292 (\u2292) SQUARE ORIGINAL OF OR EQUAL TO/\n", " VALID: U+022a2 (\u22a2) RIGHT TACK/\n", " VALID: U+022a3 (\u22a3) LEFT TACK/\n", " VALID: U+022a5 (\u22a5) UP TACK/\n", "INVALID: U+022a6 (\u22a6) ASSERTION/\n", "INVALID: U+022a7 (\u22a7) MODELS/\n", "INVALID: U+022a8 (\u22a8) TRUE/\n", " VALID: U+022a9 (\u22a9) FORCES/\n", "INVALID: U+022aa (\u22aa) TRIPLE VERTICAL BAR RIGHT TURNSTILE/\n", "INVALID: U+022ab (\u22ab) DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE/\n", " VALID: U+022ac (\u22ac) DOES NOT PROVE/\n", "INVALID: U+022ad (\u22ad) NOT TRUE/\n", " VALID: U+022ae (\u22ae) DOES NOT FORCE/\n", "INVALID: U+022af (\u22af) NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE/\n", " VALID: U+022b0 (\u22b0) PRECEDES UNDER RELATION/\n", " VALID: U+022b1 (\u22b1) SUCCEEDS UNDER RELATION/\n", " VALID: U+022b2 (\u22b2) NORMAL SUBGROUP OF/\n", " VALID: U+022b3 (\u22b3) CONTAINS AS NORMAL SUBGROUP/\n", " VALID: U+022b4 (\u22b4) NORMAL SUBGROUP OF OR EQUAL TO/\n", " VALID: U+022b5 (\u22b5) CONTAINS AS NORMAL SUBGROUP OR EQUAL TO/\n", " VALID: U+022b6 (\u22b6) ORIGINAL OF/\n", " VALID: U+022b7 (\u22b7) IMAGE OF/\n", "INVALID: U+022b8 (\u22b8) MULTIMAP/\n", "INVALID: U+022c8 (\u22c8) BOWTIE/\n", " VALID: U+022cd (\u22cd) REVERSED TILDE EQUALS/\n", " VALID: U+022d0 (\u22d0) DOUBLE SUBSET/\n", " VALID: U+022d1 (\u22d1) DOUBLE SUPERSET/\n", "INVALID: U+022d4 (\u22d4) PITCHFORK/\n", " VALID: U+022d5 (\u22d5) EQUAL AND PARALLEL TO/\n", " VALID: U+022d6 (\u22d6) LESS-THAN WITH DOT/LESS THAN WITH DOT\n", " VALID: U+022d7 (\u22d7) GREATER-THAN WITH DOT/GREATER THAN WITH DOT\n", " VALID: U+022d8 (\u22d8) VERY MUCH LESS-THAN/VERY MUCH LESS THAN\n", " VALID: U+022d9 (\u22d9) VERY MUCH GREATER-THAN/VERY MUCH GREATER THAN\n", " VALID: U+022da (\u22da) LESS-THAN EQUAL TO OR GREATER-THAN/LESS THAN EQUAL TO OR GREATER THAN\n", " VALID: U+022db (\u22db) GREATER-THAN EQUAL TO OR LESS-THAN/GREATER THAN EQUAL TO OR LESS THAN\n", " VALID: U+022dc (\u22dc) EQUAL TO OR LESS-THAN/EQUAL TO OR LESS THAN\n", " VALID: U+022dd (\u22dd) EQUAL TO OR GREATER-THAN/EQUAL TO OR GREATER THAN\n", " VALID: U+022de (\u22de) EQUAL TO OR PRECEDES/\n", " VALID: U+022df (\u22df) EQUAL TO OR SUCCEEDS/\n", " VALID: U+022e0 (\u22e0) DOES NOT PRECEDE OR EQUAL/\n", " VALID: U+022e1 (\u22e1) DOES NOT SUCCEED OR EQUAL/\n", " VALID: U+022e2 (\u22e2) NOT SQUARE IMAGE OF OR EQUAL TO/\n", " VALID: U+022e3 (\u22e3) NOT SQUARE ORIGINAL OF OR EQUAL TO/\n", " VALID: U+022e4 (\u22e4) SQUARE IMAGE OF OR NOT EQUAL TO/\n", " VALID: U+022e5 (\u22e5) SQUARE ORIGINAL OF OR NOT EQUAL TO/\n", " VALID: U+022e6 (\u22e6) LESS-THAN BUT NOT EQUIVALENT TO/LESS THAN BUT NOT EQUIVALENT TO\n", " VALID: U+022e7 (\u22e7) GREATER-THAN BUT NOT EQUIVALENT TO/GREATER THAN BUT NOT EQUIVALENT TO\n", " VALID: U+022e8 (\u22e8) PRECEDES BUT NOT EQUIVALENT TO/\n", " VALID: U+022e9 (\u22e9) SUCCEEDS BUT NOT EQUIVALENT TO/\n", " VALID: U+022ea (\u22ea) NOT NORMAL SUBGROUP OF/\n", " VALID: U+022eb (\u22eb) DOES NOT CONTAIN AS NORMAL SUBGROUP/\n", " VALID: U+022ec (\u22ec) NOT NORMAL SUBGROUP OF OR EQUAL TO/\n", " VALID: U+022ed (\u22ed) DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL/\n", " VALID: U+022ee (\u22ee) VERTICAL ELLIPSIS/\n", " VALID: U+022ef (\u22ef) MIDLINE HORIZONTAL ELLIPSIS/\n", " VALID: U+022f0 (\u22f0) UP RIGHT DIAGONAL ELLIPSIS/\n", " VALID: U+022f1 (\u22f1) DOWN RIGHT DIAGONAL ELLIPSIS/\n", " VALID: U+022f2 (\u22f2) ELEMENT OF WITH LONG HORIZONTAL STROKE/\n", " VALID: U+022f3 (\u22f3) ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE/\n", " VALID: U+022f4 (\u22f4) SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE/\n", " VALID: U+022f5 (\u22f5) ELEMENT OF WITH DOT ABOVE/\n", " VALID: U+022f6 (\u22f6) ELEMENT OF WITH OVERBAR/\n", " VALID: U+022f7 (\u22f7) SMALL ELEMENT OF WITH OVERBAR/\n", " VALID: U+022f8 (\u22f8) ELEMENT OF WITH UNDERBAR/\n", " VALID: U+022f9 (\u22f9) ELEMENT OF WITH TWO HORIZONTAL STROKES/\n", " VALID: U+022fa (\u22fa) CONTAINS WITH LONG HORIZONTAL STROKE/\n", " VALID: U+022fb (\u22fb) CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE/\n", " VALID: U+022fc (\u22fc) SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE/\n", " VALID: U+022fd (\u22fd) CONTAINS WITH OVERBAR/\n", " VALID: U+022fe (\u22fe) SMALL CONTAINS WITH OVERBAR/\n", " VALID: U+022ff (\u22ff) Z NOTATION BAG MEMBERSHIP/\n", " VALID: U+02322 (\u2322) FROWN/\n", " VALID: U+02323 (\u2323) SMILE/\n", " VALID: U+0233f (\u233f) APL FUNCTIONAL SYMBOL SLASH BAR/\n", "INVALID: U+0237c (\u237c) RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW/\n", "INVALID: U+023b0 (\u23b0) UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION/\n", "INVALID: U+023b1 (\u23b1) UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION/\n", " VALID: U+027c2 (\u27c2) PERPENDICULAR/\n", "INVALID: U+027c3 (\u27c3) OPEN SUBSET/\n", "INVALID: U+027c4 (\u27c4) OPEN SUPERSET/\n", "INVALID: U+027c5 (\u27c5) LEFT S-SHAPED BAG DELIMITER/\n", "INVALID: U+027c6 (\u27c6) RIGHT S-SHAPED BAG DELIMITER/\n", "INVALID: U+027c7 (\u27c7) OR WITH DOT INSIDE/\n", " VALID: U+027c8 (\u27c8) REVERSE SOLIDUS PRECEDING SUBSET/\n", " VALID: U+027c9 (\u27c9) SUPERSET PRECEDING SOLIDUS/\n", "INVALID: U+027ca (\u27ca) VERTICAL BAR WITH HORIZONTAL STROKE/\n", "INVALID: U+027cb (\u27cb) MATHEMATICAL RISING DIAGONAL/\n", "INVALID: U+027cd (\u27cd) MATHEMATICAL FALLING DIAGONAL/\n", " VALID: U+027d2 (\u27d2) ELEMENT OF OPENING UPWARDS/\n", "INVALID: U+027d3 (\u27d3) LOWER RIGHT CORNER WITH DOT/\n", "INVALID: U+027d4 (\u27d4) UPPER LEFT CORNER WITH DOT/\n", "INVALID: U+027da (\u27da) LEFT AND RIGHT DOUBLE TURNSTILE/\n", "INVALID: U+027db (\u27db) LEFT AND RIGHT TACK/\n", "INVALID: U+027dc (\u27dc) LEFT MULTIMAP/\n", "INVALID: U+027dd (\u27dd) LONG RIGHT TACK/\n", "INVALID: U+027de (\u27de) LONG LEFT TACK/\n", "INVALID: U+027df (\u27df) UP TACK WITH CIRCLE ABOVE/\n", " VALID: U+027f0 (\u27f0) UPWARDS QUADRUPLE ARROW/\n", " VALID: U+027f1 (\u27f1) DOWNWARDS QUADRUPLE ARROW/\n", "INVALID: U+027f2 (\u27f2) ANTICLOCKWISE GAPPED CIRCLE ARROW/\n", "INVALID: U+027f3 (\u27f3) CLOCKWISE GAPPED CIRCLE ARROW/\n", "INVALID: U+027f4 (\u27f4) RIGHT ARROW WITH CIRCLED PLUS/\n", " VALID: U+027f5 (\u27f5) LONG LEFTWARDS ARROW/\n", " VALID: U+027f6 (\u27f6) LONG RIGHTWARDS ARROW/\n", " VALID: U+027f7 (\u27f7) LONG LEFT RIGHT ARROW/\n", "INVALID: U+027f8 (\u27f8) LONG LEFTWARDS DOUBLE ARROW/\n", " VALID: U+027f9 (\u27f9) LONG RIGHTWARDS DOUBLE ARROW/\n", " VALID: U+027fa (\u27fa) LONG LEFT RIGHT DOUBLE ARROW/\n", " VALID: U+027fb (\u27fb) LONG LEFTWARDS ARROW FROM BAR/\n", " VALID: U+027fc (\u27fc) LONG RIGHTWARDS ARROW FROM BAR/\n", " VALID: U+027fd (\u27fd) LONG LEFTWARDS DOUBLE ARROW FROM BAR/\n", " VALID: U+027fe (\u27fe) LONG RIGHTWARDS DOUBLE ARROW FROM BAR/\n", " VALID: U+027ff (\u27ff) LONG RIGHTWARDS SQUIGGLE ARROW/\n", " VALID: U+02900 (\u2900) RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE/\n", " VALID: U+02901 (\u2901) RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+02902 (\u2902) LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE/\n", " VALID: U+02903 (\u2903) RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE/\n", " VALID: U+02904 (\u2904) LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE/\n", " VALID: U+02905 (\u2905) RIGHTWARDS TWO-HEADED ARROW FROM BAR/\n", " VALID: U+02906 (\u2906) LEFTWARDS DOUBLE ARROW FROM BAR/\n", " VALID: U+02907 (\u2907) RIGHTWARDS DOUBLE ARROW FROM BAR/\n", " VALID: U+02908 (\u2908) DOWNWARDS ARROW WITH HORIZONTAL STROKE/\n", " VALID: U+02909 (\u2909) UPWARDS ARROW WITH HORIZONTAL STROKE/\n", " VALID: U+0290a (\u290a) UPWARDS TRIPLE ARROW/\n", " VALID: U+0290b (\u290b) DOWNWARDS TRIPLE ARROW/\n", " VALID: U+0290c (\u290c) LEFTWARDS DOUBLE DASH ARROW/\n", " VALID: U+0290d (\u290d) RIGHTWARDS DOUBLE DASH ARROW/\n", " VALID: U+0290e (\u290e) LEFTWARDS TRIPLE DASH ARROW/\n", " VALID: U+0290f (\u290f) RIGHTWARDS TRIPLE DASH ARROW/\n", " VALID: U+02910 (\u2910) RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW/\n", " VALID: U+02911 (\u2911) RIGHTWARDS ARROW WITH DOTTED STEM/\n", " VALID: U+02912 (\u2912) UPWARDS ARROW TO BAR/\n", " VALID: U+02913 (\u2913) DOWNWARDS ARROW TO BAR/\n", " VALID: U+02914 (\u2914) RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE/\n", " VALID: U+02915 (\u2915) RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+02916 (\u2916) RIGHTWARDS TWO-HEADED ARROW WITH TAIL/\n", " VALID: U+02917 (\u2917) RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE/\n", " VALID: U+02918 (\u2918) RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE/\n", "INVALID: U+02919 (\u2919) LEFTWARDS ARROW-TAIL/\n", "INVALID: U+0291a (\u291a) RIGHTWARDS ARROW-TAIL/\n", "INVALID: U+0291b (\u291b) LEFTWARDS DOUBLE ARROW-TAIL/\n", "INVALID: U+0291c (\u291c) RIGHTWARDS DOUBLE ARROW-TAIL/\n", " VALID: U+0291d (\u291d) LEFTWARDS ARROW TO BLACK DIAMOND/\n", " VALID: U+0291e (\u291e) RIGHTWARDS ARROW TO BLACK DIAMOND/\n", " VALID: U+0291f (\u291f) LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND/\n", " VALID: U+02920 (\u2920) RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND/\n", "INVALID: U+02921 (\u2921) NORTH WEST AND SOUTH EAST ARROW/\n", "INVALID: U+02922 (\u2922) NORTH EAST AND SOUTH WEST ARROW/\n", "INVALID: U+02923 (\u2923) NORTH WEST ARROW WITH HOOK/\n", "INVALID: U+02924 (\u2924) NORTH EAST ARROW WITH HOOK/\n", "INVALID: U+02925 (\u2925) SOUTH EAST ARROW WITH HOOK/\n", "INVALID: U+02926 (\u2926) SOUTH WEST ARROW WITH HOOK/\n", "INVALID: U+02927 (\u2927) NORTH WEST ARROW AND NORTH EAST ARROW/\n", "INVALID: U+02928 (\u2928) NORTH EAST ARROW AND SOUTH EAST ARROW/\n", "INVALID: U+02929 (\u2929) SOUTH EAST ARROW AND SOUTH WEST ARROW/\n", "INVALID: U+0292a (\u292a) SOUTH WEST ARROW AND NORTH WEST ARROW/\n", "INVALID: U+0292b (\u292b) RISING DIAGONAL CROSSING FALLING DIAGONAL/\n", "INVALID: U+0292c (\u292c) FALLING DIAGONAL CROSSING RISING DIAGONAL/\n", "INVALID: U+0292d (\u292d) SOUTH EAST ARROW CROSSING NORTH EAST ARROW/\n", "INVALID: U+0292e (\u292e) NORTH EAST ARROW CROSSING SOUTH EAST ARROW/\n", "INVALID: U+0292f (\u292f) FALLING DIAGONAL CROSSING NORTH EAST ARROW/\n", "INVALID: U+02930 (\u2930) RISING DIAGONAL CROSSING SOUTH EAST ARROW/\n", "INVALID: U+02931 (\u2931) NORTH EAST ARROW CROSSING NORTH WEST ARROW/\n", "INVALID: U+02932 (\u2932) NORTH WEST ARROW CROSSING NORTH EAST ARROW/\n", "INVALID: U+02933 (\u2933) WAVE ARROW POINTING DIRECTLY RIGHT/\n", "INVALID: U+02934 (\u2934) ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS/\n", "INVALID: U+02935 (\u2935) ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS/\n", "INVALID: U+02936 (\u2936) ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS/\n", "INVALID: U+02937 (\u2937) ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS/\n", "INVALID: U+02938 (\u2938) RIGHT-SIDE ARC CLOCKWISE ARROW/\n", "INVALID: U+02939 (\u2939) LEFT-SIDE ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293a (\u293a) TOP ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293b (\u293b) BOTTOM ARC ANTICLOCKWISE ARROW/\n", "INVALID: U+0293c (\u293c) TOP ARC CLOCKWISE ARROW WITH MINUS/\n", "INVALID: U+0293d (\u293d) TOP ARC ANTICLOCKWISE ARROW WITH PLUS/\n", "INVALID: U+0293e (\u293e) LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW/\n", "INVALID: U+0293f (\u293f) LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW/\n", "INVALID: U+02940 (\u2940) ANTICLOCKWISE CLOSED CIRCLE ARROW/\n", "INVALID: U+02941 (\u2941) CLOCKWISE CLOSED CIRCLE ARROW/\n", "INVALID: U+02942 (\u2942) RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW/\n", "INVALID: U+02943 (\u2943) LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW/\n", " VALID: U+02944 (\u2944) SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW/\n", " VALID: U+02945 (\u2945) RIGHTWARDS ARROW WITH PLUS BELOW/\n", " VALID: U+02946 (\u2946) LEFTWARDS ARROW WITH PLUS BELOW/\n", " VALID: U+02947 (\u2947) RIGHTWARDS ARROW THROUGH X/\n", " VALID: U+02948 (\u2948) LEFT RIGHT ARROW THROUGH SMALL CIRCLE/\n", " VALID: U+02949 (\u2949) UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE/\n", " VALID: U+0294a (\u294a) LEFT BARB UP RIGHT BARB DOWN HARPOON/\n", " VALID: U+0294b (\u294b) LEFT BARB DOWN RIGHT BARB UP HARPOON/\n", " VALID: U+0294c (\u294c) UP BARB RIGHT DOWN BARB LEFT HARPOON/\n", " VALID: U+0294d (\u294d) UP BARB LEFT DOWN BARB RIGHT HARPOON/\n", " VALID: U+0294e (\u294e) LEFT BARB UP RIGHT BARB UP HARPOON/\n", " VALID: U+0294f (\u294f) UP BARB RIGHT DOWN BARB RIGHT HARPOON/\n", " VALID: U+02950 (\u2950) LEFT BARB DOWN RIGHT BARB DOWN HARPOON/\n", " VALID: U+02951 (\u2951) UP BARB LEFT DOWN BARB LEFT HARPOON/\n", " VALID: U+02952 (\u2952) LEFTWARDS HARPOON WITH BARB UP TO BAR/\n", " VALID: U+02953 (\u2953) RIGHTWARDS HARPOON WITH BARB UP TO BAR/\n", " VALID: U+02954 (\u2954) UPWARDS HARPOON WITH BARB RIGHT TO BAR/\n", " VALID: U+02955 (\u2955) DOWNWARDS HARPOON WITH BARB RIGHT TO BAR/\n", " VALID: U+02956 (\u2956) LEFTWARDS HARPOON WITH BARB DOWN TO BAR/\n", " VALID: U+02957 (\u2957) RIGHTWARDS HARPOON WITH BARB DOWN TO BAR/\n", " VALID: U+02958 (\u2958) UPWARDS HARPOON WITH BARB LEFT TO BAR/\n", " VALID: U+02959 (\u2959) DOWNWARDS HARPOON WITH BARB LEFT TO BAR/\n", " VALID: U+0295a (\u295a) LEFTWARDS HARPOON WITH BARB UP FROM BAR/\n", " VALID: U+0295b (\u295b) RIGHTWARDS HARPOON WITH BARB UP FROM BAR/\n", " VALID: U+0295c (\u295c) UPWARDS HARPOON WITH BARB RIGHT FROM BAR/\n", " VALID: U+0295d (\u295d) DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR/\n", " VALID: U+0295e (\u295e) LEFTWARDS HARPOON WITH BARB DOWN FROM BAR/\n", " VALID: U+0295f (\u295f) RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR/\n", " VALID: U+02960 (\u2960) UPWARDS HARPOON WITH BARB LEFT FROM BAR/\n", " VALID: U+02961 (\u2961) DOWNWARDS HARPOON WITH BARB LEFT FROM BAR/\n", " VALID: U+02962 (\u2962) LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN/\n", " VALID: U+02963 (\u2963) UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT/\n", " VALID: U+02964 (\u2964) RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN/\n", " VALID: U+02965 (\u2965) DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT/\n", " VALID: U+02966 (\u2966) LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP/\n", " VALID: U+02967 (\u2967) LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN/\n", " VALID: U+02968 (\u2968) RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP/\n", " VALID: U+02969 (\u2969) RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN/\n", " VALID: U+0296a (\u296a) LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH/\n", " VALID: U+0296b (\u296b) LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH/\n", " VALID: U+0296c (\u296c) RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH/\n", " VALID: U+0296d (\u296d) RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH/\n", " VALID: U+0296e (\u296e) UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT/\n", " VALID: U+0296f (\u296f) DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT/\n", " VALID: U+02970 (\u2970) RIGHT DOUBLE ARROW WITH ROUNDED HEAD/\n", "INVALID: U+02971 (\u2971) EQUALS SIGN ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02972 (\u2972) TILDE OPERATOR ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02973 (\u2973) LEFTWARDS ARROW ABOVE TILDE OPERATOR/\n", "INVALID: U+02974 (\u2974) RIGHTWARDS ARROW ABOVE TILDE OPERATOR/\n", "INVALID: U+02975 (\u2975) RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO/\n", "INVALID: U+02976 (\u2976) LESS-THAN ABOVE LEFTWARDS ARROW/\n", "INVALID: U+02977 (\u2977) LEFTWARDS ARROW THROUGH LESS-THAN/\n", "INVALID: U+02978 (\u2978) GREATER-THAN ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+02979 (\u2979) SUBSET ABOVE RIGHTWARDS ARROW/\n", "INVALID: U+0297a (\u297a) LEFTWARDS ARROW THROUGH SUBSET/\n", "INVALID: U+0297b (\u297b) SUPERSET ABOVE LEFTWARDS ARROW/\n", "INVALID: U+0297c (\u297c) LEFT FISH TAIL/\n", "INVALID: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "U+0297d (\u297d) RIGHT FISH TAIL/\n", "INVALID: U+0297e (\u297e) UP FISH TAIL/\n", "INVALID: U+0297f (\u297f) DOWN FISH TAIL/\n", "INVALID: U+029ce (\u29ce) RIGHT TRIANGLE ABOVE LEFT TRIANGLE/\n", "INVALID: U+029cf (\u29cf) LEFT TRIANGLE BESIDE VERTICAL BAR/\n", "INVALID: U+029d0 (\u29d0) VERTICAL BAR BESIDE RIGHT TRIANGLE/\n", "INVALID: U+029d1 (\u29d1) BOWTIE WITH LEFT HALF BLACK/\n", "INVALID: U+029d2 (\u29d2) BOWTIE WITH RIGHT HALF BLACK/\n", "INVALID: U+029d3 (\u29d3) BLACK BOWTIE/\n", "INVALID: U+029d4 (\u29d4) TIMES WITH LEFT HALF BLACK/\n", "INVALID: U+029d5 (\u29d5) TIMES WITH RIGHT HALF BLACK/\n", "INVALID: U+029df (\u29df) DOUBLE-ENDED MULTIMAP/\n", " VALID: U+029e1 (\u29e1) INCREASES AS/\n", " VALID: U+029e3 (\u29e3) EQUALS SIGN AND SLANTED PARALLEL/\n", " VALID: U+029e4 (\u29e4) EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE/\n", " VALID: U+029e5 (\u29e5) IDENTICAL TO AND SLANTED PARALLEL/\n", "INVALID: U+029e6 (\u29e6) GLEICH STARK/\n", " VALID: U+029f4 (\u29f4) RULE-DELAYED/\n", "INVALID: U+02a59 (\u2a59) LOGICAL OR OVERLAPPING LOGICAL AND/\n", " VALID: U+02a66 (\u2a66) EQUALS SIGN WITH DOT BELOW/\n", " VALID: U+02a67 (\u2a67) IDENTICAL WITH DOT ABOVE/\n", "INVALID: U+02a68 (\u2a68) TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE/\n", "INVALID: U+02a69 (\u2a69) TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE/\n", " VALID: U+02a6a (\u2a6a) TILDE OPERATOR WITH DOT ABOVE/\n", " VALID: U+02a6b (\u2a6b) TILDE OPERATOR WITH RISING DOTS/\n", " VALID: U+02a6c (\u2a6c) SIMILAR MINUS SIMILAR/\n", " VALID: U+02a6d (\u2a6d) CONGRUENT WITH DOT ABOVE/\n", " VALID: U+02a6e (\u2a6e) EQUALS WITH ASTERISK/\n", " VALID: U+02a6f (\u2a6f) ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT/\n", " VALID: U+02a70 (\u2a70) APPROXIMATELY EQUAL OR EQUAL TO/\n", " VALID: U+02a73 (\u2a73) EQUALS SIGN ABOVE TILDE OPERATOR/\n", " VALID: U+02a74 (\u2a74) DOUBLE COLON EQUAL/\n", " VALID: U+02a75 (\u2a75) TWO CONSECUTIVE EQUALS SIGNS/\n", " VALID: U+02a76 (\u2a76) THREE CONSECUTIVE EQUALS SIGNS/\n", " VALID: U+02a77 (\u2a77) EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW/\n", " VALID: U+02a78 (\u2a78) EQUIVALENT WITH FOUR DOTS ABOVE/\n", " VALID: U+02a79 (\u2a79) LESS-THAN WITH CIRCLE INSIDE/\n", " VALID: U+02a7a (\u2a7a) GREATER-THAN WITH CIRCLE INSIDE/\n", " VALID: U+02a7b (\u2a7b) LESS-THAN WITH QUESTION MARK ABOVE/\n", " VALID: U+02a7c (\u2a7c) GREATER-THAN WITH QUESTION MARK ABOVE/\n", " VALID: U+02a7d (\u2a7d) LESS-THAN OR SLANTED EQUAL TO/\n", " VALID: U+02a7e (\u2a7e) GREATER-THAN OR SLANTED EQUAL TO/\n", " VALID: U+02a7f (\u2a7f) LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE/\n", " VALID: U+02a80 (\u2a80) GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE/\n", " VALID: U+02a81 (\u2a81) LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE/\n", " VALID: U+02a82 (\u2a82) GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE/\n", " VALID: U+02a83 (\u2a83) LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT/\n", " VALID: U+02a84 (\u2a84) GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT/\n", " VALID: U+02a85 (\u2a85) LESS-THAN OR APPROXIMATE/\n", " VALID: U+02a86 (\u2a86) GREATER-THAN OR APPROXIMATE/\n", " VALID: U+02a87 (\u2a87) LESS-THAN AND SINGLE-LINE NOT EQUAL TO/\n", " VALID: U+02a88 (\u2a88) GREATER-THAN AND SINGLE-LINE NOT EQUAL TO/\n", " VALID: U+02a89 (\u2a89) LESS-THAN AND NOT APPROXIMATE/\n", " VALID: U+02a8a (\u2a8a) GREATER-THAN AND NOT APPROXIMATE/\n", " VALID: U+02a8b (\u2a8b) LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN/\n", " VALID: U+02a8c (\u2a8c) GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN/\n", " VALID: U+02a8d (\u2a8d) LESS-THAN ABOVE SIMILAR OR EQUAL/\n", " VALID: U+02a8e (\u2a8e) GREATER-THAN ABOVE SIMILAR OR EQUAL/\n", " VALID: U+02a8f (\u2a8f) LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN/\n", " VALID: U+02a90 (\u2a90) GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN/\n", " VALID: U+02a91 (\u2a91) LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL/\n", " VALID: U+02a92 (\u2a92) GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL/\n", " VALID: U+02a93 (\u2a93) LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL/\n", " VALID: U+02a94 (\u2a94) GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL/\n", " VALID: U+02a95 (\u2a95) SLANTED EQUAL TO OR LESS-THAN/\n", " VALID: U+02a96 (\u2a96) SLANTED EQUAL TO OR GREATER-THAN/\n", " VALID: U+02a97 (\u2a97) SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE/\n", " VALID: U+02a98 (\u2a98) SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE/\n", " VALID: U+02a99 (\u2a99) DOUBLE-LINE EQUAL TO OR LESS-THAN/\n", " VALID: U+02a9a (\u2a9a) DOUBLE-LINE EQUAL TO OR GREATER-THAN/\n", " VALID: U+02a9b (\u2a9b) DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/\n", " VALID: U+02a9c (\u2a9c) DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN/\n", " VALID: U+02a9d (\u2a9d) SIMILAR OR LESS-THAN/\n", " VALID: U+02a9e (\u2a9e) SIMILAR OR GREATER-THAN/\n", " VALID: U+02a9f (\u2a9f) SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN/\n", " VALID: U+02aa0 (\u2aa0) SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN/\n", " VALID: U+02aa1 (\u2aa1) DOUBLE NESTED LESS-THAN/\n", " VALID: U+02aa2 (\u2aa2) DOUBLE NESTED GREATER-THAN/\n", " VALID: U+02aa3 (\u2aa3) DOUBLE NESTED LESS-THAN WITH UNDERBAR/\n", " VALID: U+02aa4 (\u2aa4) GREATER-THAN OVERLAPPING LESS-THAN/\n", " VALID: U+02aa5 (\u2aa5) GREATER-THAN BESIDE LESS-THAN/\n", " VALID: U+02aa6 (\u2aa6) LESS-THAN CLOSED BY CURVE/\n", " VALID: U+02aa7 (\u2aa7) GREATER-THAN CLOSED BY CURVE/\n", " VALID: U+02aa8 (\u2aa8) LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL/\n", " VALID: U+02aa9 (\u2aa9) GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL/\n", " VALID: U+02aaa (\u2aaa) SMALLER THAN/\n", " VALID: U+02aab (\u2aab) LARGER THAN/\n", " VALID: U+02aac (\u2aac) SMALLER THAN OR EQUAL TO/\n", " VALID: U+02aad (\u2aad) LARGER THAN OR EQUAL TO/\n", " VALID: U+02aae (\u2aae) EQUALS SIGN WITH BUMPY ABOVE/\n", " VALID: U+02aaf (\u2aaf) PRECEDES ABOVE SINGLE-LINE EQUALS SIGN/\n", " VALID: U+02ab0 (\u2ab0) SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN/\n", " VALID: U+02ab1 (\u2ab1) PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO/\n", " VALID: U+02ab2 (\u2ab2) SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO/\n", " VALID: U+02ab3 (\u2ab3) PRECEDES ABOVE EQUALS SIGN/\n", " VALID: U+02ab4 (\u2ab4) SUCCEEDS ABOVE EQUALS SIGN/\n", " VALID: U+02ab5 (\u2ab5) PRECEDES ABOVE NOT EQUAL TO/\n", " VALID: U+02ab6 (\u2ab6) SUCCEEDS ABOVE NOT EQUAL TO/\n", " VALID: U+02ab7 (\u2ab7) PRECEDES ABOVE ALMOST EQUAL TO/\n", " VALID: U+02ab8 (\u2ab8) SUCCEEDS ABOVE ALMOST EQUAL TO/\n", " VALID: U+02ab9 (\u2ab9) PRECEDES ABOVE NOT ALMOST EQUAL TO/\n", " VALID: U+02aba (\u2aba) SUCCEEDS ABOVE NOT ALMOST EQUAL TO/\n", " VALID: U+02abb (\u2abb) DOUBLE PRECEDES/\n", " VALID: U+02abc (\u2abc) DOUBLE SUCCEEDS/\n", " VALID: U+02abd (\u2abd) SUBSET WITH DOT/\n", " VALID: U+02abe (\u2abe) SUPERSET WITH DOT/\n", " VALID: U+02abf (\u2abf) SUBSET WITH PLUS SIGN BELOW/\n", " VALID: U+02ac0 (\u2ac0) SUPERSET WITH PLUS SIGN BELOW/\n", " VALID: U+02ac1 (\u2ac1) SUBSET WITH MULTIPLICATION SIGN BELOW/\n", " VALID: U+02ac2 (\u2ac2) SUPERSET WITH MULTIPLICATION SIGN BELOW/\n", " VALID: U+02ac3 (\u2ac3) SUBSET OF OR EQUAL TO WITH DOT ABOVE/\n", " VALID: U+02ac4 (\u2ac4) SUPERSET OF OR EQUAL TO WITH DOT ABOVE/\n", " VALID: U+02ac5 (\u2ac5) SUBSET OF ABOVE EQUALS SIGN/\n", " VALID: U+02ac6 (\u2ac6) SUPERSET OF ABOVE EQUALS SIGN/\n", " VALID: U+02ac7 (\u2ac7) SUBSET OF ABOVE TILDE OPERATOR/\n", " VALID: U+02ac8 (\u2ac8) SUPERSET OF ABOVE TILDE OPERATOR/\n", " VALID: U+02ac9 (\u2ac9) SUBSET OF ABOVE ALMOST EQUAL TO/\n", " VALID: U+02aca (\u2aca) SUPERSET OF ABOVE ALMOST EQUAL TO/\n", " VALID: U+02acb (\u2acb) SUBSET OF ABOVE NOT EQUAL TO/\n", " VALID: U+02acc (\u2acc) SUPERSET OF ABOVE NOT EQUAL TO/\n", " VALID: U+02acd (\u2acd) SQUARE LEFT OPEN BOX OPERATOR/\n", " VALID: U+02ace (\u2ace) SQUARE RIGHT OPEN BOX OPERATOR/\n", " VALID: U+02acf (\u2acf) CLOSED SUBSET/\n", " VALID: U+02ad0 (\u2ad0) CLOSED SUPERSET/\n", " VALID: U+02ad1 (\u2ad1) CLOSED SUBSET OR EQUAL TO/\n", " VALID: U+02ad2 (\u2ad2) CLOSED SUPERSET OR EQUAL TO/\n", " VALID: U+02ad3 (\u2ad3) SUBSET ABOVE SUPERSET/\n", " VALID: U+02ad4 (\u2ad4) SUPERSET ABOVE SUBSET/\n", " VALID: U+02ad5 (\u2ad5) SUBSET ABOVE SUBSET/\n", " VALID: U+02ad6 (\u2ad6) SUPERSET ABOVE SUPERSET/\n", " VALID: U+02ad7 (\u2ad7) SUPERSET BESIDE SUBSET/\n", " VALID: U+02ad8 (\u2ad8) SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET/\n", " VALID: U+02ad9 (\u2ad9) ELEMENT OF OPENING DOWNWARDS/\n", "INVALID: U+02ada (\u2ada) PITCHFORK WITH TEE TOP/\n", " VALID: U+02adb (\u2adb) TRANSVERSAL INTERSECTION/\n", "INVALID: U+02adc (\u2adc) FORKING/\n", "INVALID: U+02add (\u2add) NONFORKING/\n", "INVALID: U+02ade (\u2ade) SHORT LEFT TACK/\n", "INVALID: U+02adf (\u2adf) SHORT DOWN TACK/\n", "INVALID: U+02ae0 (\u2ae0) SHORT UP TACK/\n", "INVALID: U+02ae2 (\u2ae2) VERTICAL BAR TRIPLE RIGHT TURNSTILE/\n", "INVALID: U+02ae3 (\u2ae3) DOUBLE VERTICAL BAR LEFT TURNSTILE/\n", "INVALID: U+02ae4 (\u2ae4) VERTICAL BAR DOUBLE LEFT TURNSTILE/\n", "INVALID: U+02ae5 (\u2ae5) DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE/\n", "INVALID: U+02ae6 (\u2ae6) LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL/\n", "INVALID: U+02ae7 (\u2ae7) SHORT DOWN TACK WITH OVERBAR/\n", "INVALID: U+02ae8 (\u2ae8) SHORT UP TACK WITH UNDERBAR/\n", "INVALID: U+02ae9 (\u2ae9) SHORT UP TACK ABOVE SHORT DOWN TACK/\n", "INVALID: U+02aea (\u2aea) DOUBLE DOWN TACK/\n", "INVALID: U+02aeb (\u2aeb) DOUBLE UP TACK/\n", "INVALID: U+02aec (\u2aec) DOUBLE STROKE NOT SIGN/\n", "INVALID: U+02aed (\u2aed) REVERSED DOUBLE STROKE NOT SIGN/\n", "INVALID: U+02aee (\u2aee) DOES NOT DIVIDE WITH REVERSED NEGATION SLASH/\n", "INVALID: U+02aef (\u2aef) VERTICAL LINE WITH CIRCLE ABOVE/\n", "INVALID: U+02af0 (\u2af0) VERTICAL LINE WITH CIRCLE BELOW/\n", "INVALID: U+02af2 (\u2af2) PARALLEL WITH HORIZONTAL STROKE/\n", "INVALID: U+02af3 (\u2af3) PARALLEL WITH TILDE OPERATOR/\n", " VALID: U+02af7 (\u2af7) TRIPLE NESTED LESS-THAN/\n", " VALID: U+02af8 (\u2af8) TRIPLE NESTED GREATER-THAN/\n", " VALID: U+02af9 (\u2af9) DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO/\n", " VALID: U+02afa (\u2afa) DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO/\n", " VALID: U+02b00 (\u2b00) NORTH EAST WHITE ARROW/\n", " VALID: U+02b01 (\u2b01) NORTH WEST WHITE ARROW/\n", " VALID: U+02b02 (\u2b02) SOUTH EAST WHITE ARROW/\n", " VALID: U+02b03 (\u2b03) SOUTH WEST WHITE ARROW/\n", " VALID: U+02b04 (\u2b04) LEFT RIGHT WHITE ARROW/\n", " VALID: U+02b05 (\u2b05) LEFTWARDS BLACK ARROW/\n", " VALID: U+02b06 (\u2b06) UPWARDS BLACK ARROW/\n", " VALID: U+02b07 (\u2b07) DOWNWARDS BLACK ARROW/\n", " VALID: U+02b08 (\u2b08) NORTH EAST BLACK ARROW/\n", " VALID: U+02b09 (\u2b09) NORTH WEST BLACK ARROW/\n", " VALID: U+02b0a (\u2b0a) SOUTH EAST BLACK ARROW/\n", " VALID: U+02b0b (\u2b0b) SOUTH WEST BLACK ARROW/\n", " VALID: U+02b0c (\u2b0c) LEFT RIGHT BLACK ARROW/\n", " VALID: U+02b0d (\u2b0d) UP DOWN BLACK ARROW/\n", " VALID: U+02b0e (\u2b0e) RIGHTWARDS ARROW WITH TIP DOWNWARDS/\n", " VALID: U+02b0f (\u2b0f) RIGHTWARDS ARROW WITH TIP UPWARDS/\n", " VALID: U+02b10 (\u2b10) LEFTWARDS ARROW WITH TIP DOWNWARDS/\n", " VALID: U+02b11 (\u2b11) LEFTWARDS ARROW WITH TIP UPWARDS/\n", " VALID: U+02b30 (\u2b30) LEFT ARROW WITH SMALL CIRCLE/\n", " VALID: U+02b31 (\u2b31) THREE LEFTWARDS ARROWS/\n", " VALID: U+02b32 (\u2b32) LEFT ARROW WITH CIRCLED PLUS/\n", " VALID: U+02b33 (\u2b33) LONG LEFTWARDS SQUIGGLE ARROW/\n", " VALID: U+02b34 (\u2b34) LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE/\n", " VALID: U+02b35 (\u2b35) LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+02b36 (\u2b36) LEFTWARDS TWO-HEADED ARROW FROM BAR/\n", " VALID: U+02b37 (\u2b37) LEFTWARDS TWO-HEADED TRIPLE DASH ARROW/\n", " VALID: U+02b38 (\u2b38) LEFTWARDS ARROW WITH DOTTED STEM/\n", " VALID: U+02b39 (\u2b39) LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE/\n", " VALID: U+02b3a (\u2b3a) LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+02b3b (\u2b3b) LEFTWARDS TWO-HEADED ARROW WITH TAIL/\n", " VALID: U+02b3c (\u2b3c) LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE/\n", " VALID: U+02b3d (\u2b3d) LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE/\n", " VALID: U+02b3e (\u2b3e) LEFTWARDS ARROW THROUGH X/\n", " VALID: U+02b3f (\u2b3f) WAVE ARROW POINTING DIRECTLY LEFT/\n", " VALID: U+02b40 (\u2b40) EQUALS SIGN ABOVE LEFTWARDS ARROW/\n", " VALID: U+02b41 (\u2b41) REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW/\n", " VALID: U+02b42 (\u2b42) LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO/\n", " VALID: U+02b43 (\u2b43) RIGHTWARDS ARROW THROUGH GREATER-THAN/\n", " VALID: U+02b44 (\u2b44) RIGHTWARDS ARROW THROUGH SUPERSET/\n", " VALID: U+02b47 (\u2b47) REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW/\n", " VALID: U+02b48 (\u2b48) RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO/\n", " VALID: U+02b49 (\u2b49) TILDE OPERATOR ABOVE LEFTWARDS ARROW/\n", " VALID: U+02b4a (\u2b4a) LEFTWARDS ARROW ABOVE ALMOST EQUAL TO/\n", " VALID: U+02b4b (\u2b4b) LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR/\n", " VALID: U+02b4c (\u2b4c) RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR/\n", "Valid: 527 Invalid: 130\n", "\n", "Category: Vary - operators that can be unary or binary depending on context\n", " VALID: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "U+0002b (+) PLUS SIGN/\n", " VALID: U+000b1 (\u00b1) PLUS-MINUS SIGN/PLUS-OR-MINUS SIGN\n", "INVALID: U+02212 (\u2212) MINUS SIGN/\n", " VALID: U+02213 (\u2213) MINUS-OR-PLUS SIGN/\n", "Valid: 3 Invalid: 1\n", "\n", "Category: Special - characters not covered by other classes\n", "INVALID: U+02064 (\u2064) INVISIBLE PLUS/\n", "INVALID: U+020d3 (\u20d3) COMBINING SHORT VERTICAL LINE OVERLAY/NON-SPACING SHORT VERTICAL BAR OVERLAY\n", "INVALID: U+03008 (\u3008) LEFT ANGLE BRACKET/OPENING ANGLE BRACKET\n", "INVALID: U+03009 (\u3009) RIGHT ANGLE BRACKET/CLOSING ANGLE BRACKET\n", "INVALID: U+0301a (\u301a) LEFT WHITE SQUARE BRACKET/OPENING WHITE SQUARE BRACKET\n", "INVALID: U+0301b (\u301b) RIGHT WHITE SQUARE BRACKET/CLOSING WHITE SQUARE BRACKET\n", "INVALID: U+0fb29 (\ufb29) HEBREW LETTER ALTERNATIVE PLUS SIGN/\n", " VALID: U+0fe61 (\ufe61) SMALL ASTERISK/\n", "INVALID: U+0fe62 (\ufe62) SMALL PLUS SIGN/\n", "INVALID: U+0fe63 (\ufe63) SMALL HYPHEN-MINUS/\n", "INVALID: U+0fe64 (\ufe64) SMALL LESS-THAN SIGN/\n", "INVALID: U+0fe65 (\ufe65) SMALL GREATER-THAN SIGN/\n", "INVALID: U+0fe66 (\ufe66) SMALL EQUALS SIGN/\n", "INVALID: U+0fe67 (\ufe67) (no description)\n", " VALID: U+0fe68 (\ufe68) SMALL REVERSE SOLIDUS/SMALL BACKSLASH\n", "INVALID: U+0ff0b (\uff0b) FULLWIDTH PLUS SIGN/\n", "INVALID: U+0ff1c (\uff1c) FULLWIDTH LESS-THAN SIGN/\n", "INVALID: U+0ff1d (\uff1d) FULLWIDTH EQUALS SIGN/\n", "INVALID: U+0ff1e (\uff1e) FULLWIDTH GREATER-THAN SIGN/\n", " VALID: U+0ff3c (\uff3c) FULLWIDTH REVERSE SOLIDUS/FULLWIDTH BACKSLASH\n", "INVALID: U+0ff3e (\uff3e) FULLWIDTH CIRCUMFLEX ACCENT/FULLWIDTH SPACING CIRCUMFLEX\n", "INVALID: U+0ff5c (\uff5c) FULLWIDTH VERTICAL LINE/FULLWIDTH VERTICAL BAR\n", "INVALID: U+0ff5e (\uff5e) FULLWIDTH TILDE/FULLWIDTH SPACING TILDE\n", "INVALID: U+0ffe2 (\uffe2) FULLWIDTH NOT SIGN/\n", " VALID: U+0ffe9 (\uffe9) HALFWIDTH LEFTWARDS ARROW/\n", " VALID: U+0ffea (\uffea) HALFWIDTH UPWARDS ARROW/\n", " VALID: U+0ffeb (\uffeb) HALFWIDTH RIGHTWARDS ARROW/\n", " VALID: U+0ffec (\uffec) HALFWIDTH DOWNWARDS ARROW/\n", "Valid: 7 Invalid: 21\n", "\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Find invalid n-ary operators\n", "\n", "Check infix expressions of the form\n", "\n", " a + a + a\n", " \n", "and prefix expressions of the form\n", "\n", " \u2a02(a, a, a)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "checkvalidinfix([\n", " \"V\", #- Vary - operators that can be unary or binary depending on context\n", "], 3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Category: Vary - operators that can be unary or binary depending on context\n", "INVALID: U+02212 (\u2212) MINUS SIGN/\n", "Valid: 3 Invalid: 1\n", "\n" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "checkvalidprefix([\n", " \"G\", #- Glyph_Part - piece of large operator\n", " \"L\", #- Large - n-ary or large operator, often takes limits\n", " ], 3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Category: Glyph_Part - piece of large operator\n", "INVALID: U+02320 (\u2320) TOP HALF INTEGRAL/\n", "INVALID: U+02321 (\u2321) BOTTOM HALF INTEGRAL/\n", "INVALID: U+0239b (\u239b) LEFT PARENTHESIS UPPER HOOK/\n", "INVALID: U+0239c (\u239c) LEFT PARENTHESIS EXTENSION/\n", "INVALID: U+0239d (\u239d) LEFT PARENTHESIS LOWER HOOK/\n", "INVALID: U+0239e (\u239e) RIGHT PARENTHESIS UPPER HOOK/\n", "INVALID: U+0239f (\u239f) RIGHT PARENTHESIS EXTENSION/\n", "INVALID: U+023a0 (\u23a0) RIGHT PARENTHESIS LOWER HOOK/\n", "INVALID: U+023a1 (\u23a1) LEFT SQUARE BRACKET UPPER CORNER/\n", "INVALID: U+023a2 (\u23a2) LEFT SQUARE BRACKET EXTENSION/\n", "INVALID: U+023a3 (\u23a3) LEFT SQUARE BRACKET LOWER CORNER/\n", "INVALID: U+023a4 (\u23a4) RIGHT SQUARE BRACKET UPPER CORNER/\n", "INVALID: U+023a5 (\u23a5) RIGHT SQUARE BRACKET EXTENSION/\n", "INVALID: U+023a6 (\u23a6) RIGHT SQUARE BRACKET LOWER CORNER/\n", "INVALID: U+023a7 (\u23a7) LEFT CURLY BRACKET UPPER HOOK/\n", "INVALID: U+023a8 (\u23a8) LEFT CURLY BRACKET MIDDLE PIECE/\n", "INVALID: U+023a9 (\u23a9) LEFT CURLY BRACKET LOWER HOOK/\n", "INVALID: U+023aa (\u23aa) CURLY BRACKET EXTENSION/\n", "INVALID: U+023ab (\u23ab) RIGHT CURLY BRACKET UPPER HOOK/\n", "INVALID: U+023ac (\u23ac) RIGHT CURLY BRACKET MIDDLE PIECE/\n", "INVALID: U+023ad (\u23ad) RIGHT CURLY BRACKET LOWER HOOK/\n", "INVALID: U+023ae (\u23ae) INTEGRAL EXTENSION/\n", "INVALID: U+023af (\u23af) HORIZONTAL LINE EXTENSION/\n", "INVALID: U+023b2 (\u23b2) SUMMATION TOP/\n", "INVALID: U+023b3 (\u23b3) SUMMATION BOTTOM/\n", " VALID: U+023b7 (\u23b7) RADICAL SYMBOL BOTTOM/\n", " VALID: U+023d0 (\u23d0) VERTICAL LINE EXTENSION/\n", "Valid: 2 Invalid: 25\n", "\n", "Category: Large - n-ary or large operator, often takes limits\n", "INVALID: U+00606 (\u0606) ARABIC-INDIC CUBE ROOT/\n", "INVALID: U+00607 (\u0607) ARABIC-INDIC FOURTH ROOT/\n", " VALID: U+02140 (\u2140) DOUBLE-STRUCK N-ARY SUMMATION/\n", " VALID: U+0220f (\u220f) N-ARY PRODUCT/\n", " VALID: U+02210 (\u2210) N-ARY COPRODUCT/\n", " VALID: U+02211 (\u2211) N-ARY SUMMATION/\n", " VALID: U+0221a (\u221a) SQUARE ROOT/\n", " VALID: U+0221b (\u221b) CUBE ROOT/\n", " VALID: U+0221c (\u221c) FOURTH ROOT/\n", " VALID: U+0222b (\u222b) INTEGRAL/\n", " VALID: U+0222c (\u222c) DOUBLE INTEGRAL/\n", " VALID: U+0222d (\u222d) TRIPLE INTEGRAL/\n", " VALID: U+0222e (\u222e) CONTOUR INTEGRAL/\n", " VALID: U+0222f (\u222f) SURFACE INTEGRAL/\n", " VALID: U+02230 (\u2230) VOLUME INTEGRAL/\n", " VALID: U+02231 (\u2231) CLOCKWISE INTEGRAL/\n", " VALID: U+02232 (\u2232) CLOCKWISE CONTOUR INTEGRAL/\n", " VALID: U+02233 (\u2233) ANTICLOCKWISE CONTOUR INTEGRAL/\n", " VALID: U+022c0 (\u22c0) N-ARY LOGICAL AND/\n", " VALID: U+022c1 (\u22c1) N-ARY LOGICAL OR/\n", " VALID: U+022c2 (\u22c2) N-ARY INTERSECTION/\n", " VALID: U+022c3 (\u22c3) N-ARY UNION/\n", "INVALID: U+027cc (\u27cc) LONG DIVISION/\n", "INVALID: U+027d5 (\u27d5) LEFT OUTER JOIN/\n", "INVALID: U+027d6 (\u27d6) RIGHT OUTER JOIN/\n", "INVALID: U+027d7 (\u27d7) FULL OUTER JOIN/\n", " VALID: U+027d8 (\u27d8) LARGE UP TACK/\n", " VALID: U+027d9 (\u27d9) LARGE DOWN TACK/\n", "INVALID: U+029f8 (\u29f8) BIG SOLIDUS/\n", "INVALID: U+029f9 (\u29f9) BIG REVERSE SOLIDUS/\n", " VALID: U+02a00 (\u2a00) N-ARY CIRCLED DOT OPERATOR/\n", " VALID: U+02a01 (\u2a01) N-ARY CIRCLED PLUS OPERATOR/\n", " VALID: U+02a02 (\u2a02) N-ARY CIRCLED TIMES OPERATOR/\n", " VALID: U+02a03 (\u2a03) N-ARY UNION OPERATOR WITH DOT/\n", " VALID: U+02a04 (\u2a04) N-ARY UNION OPERATOR WITH PLUS/\n", " VALID: U+02a05 (\u2a05) N-ARY SQUARE INTERSECTION OPERATOR/\n", " VALID: U+02a06 (\u2a06) N-ARY SQUARE UNION OPERATOR/\n", " VALID: U+02a07 (\u2a07) TWO LOGICAL AND OPERATOR/\n", " VALID: U+02a08 (\u2a08) TWO LOGICAL OR OPERATOR/\n", " VALID: U+02a09 (\u2a09) N-ARY TIMES OPERATOR/\n", " VALID: U+02a0a (\u2a0a) MODULO TWO SUM/\n", " VALID: U+02a0b (\u2a0b) SUMMATION WITH INTEGRAL/\n", " VALID: U+02a0c (\u2a0c) QUADRUPLE INTEGRAL OPERATOR/\n", " VALID: U+02a0d (\u2a0d) FINITE PART INTEGRAL/\n", " VALID: U+02a0e (\u2a0e) INTEGRAL WITH DOUBLE STROKE/\n", " VALID: U+02a0f (\u2a0f) INTEGRAL AVERAGE WITH SLASH/\n", " VALID: U+02a10 (\u2a10) CIRCULATION FUNCTION/\n", " VALID: U+02a11 (\u2a11) ANTICLOCKWISE INTEGRATION/\n", " VALID: U+02a12 (\u2a12) LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE/\n", " VALID: U+02a13 (\u2a13) LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE/\n", " VALID: U+02a14 (\u2a14) LINE INTEGRATION NOT INCLUDING THE POLE/\n", " VALID: U+02a15 (\u2a15) INTEGRAL AROUND A POINT OPERATOR/\n", " VALID: U+02a16 (\u2a16) QUATERNION INTEGRAL OPERATOR/\n", "INVALID: U+02a17 (\u2a17) INTEGRAL WITH LEFTWARDS ARROW WITH HOOK/\n", "INVALID: U+02a18 (\u2a18) INTEGRAL WITH TIMES SIGN/\n", "INVALID: U+02a19 (\u2a19) INTEGRAL WITH INTERSECTION/\n", "INVALID: U+02a1a (\u2a1a) INTEGRAL WITH UNION/\n", " VALID: U+02a1b (\u2a1b) INTEGRAL WITH OVERBAR/\n", " VALID: U+02a1c (\u2a1c) INTEGRAL WITH UNDERBAR/\n", "INVALID: U+02a1d (\u2a1d) JOIN/\n", "INVALID: U+02a1e (\u2a1e) LARGE LEFT TRIANGLE OPERATOR/\n", "INVALID: U+02a1f (\u2a1f) Z NOTATION SCHEMA COMPOSITION/\n", "INVALID: U+02a20 (\u2a20) Z NOTATION SCHEMA PIPING/\n", "INVALID: U+02a21 (\u2a21) Z NOTATION SCHEMA PROJECTION/\n", "INVALID: U+02afc (\u2afc) LARGE TRIPLE VERTICAL BAR OPERATOR/\n", "INVALID: U+02aff (\u2aff) N-ARY WHITE VERTICAL BAR/\n", "Valid: 47 Invalid: 19\n", "\n" ] } ], "prompt_number": 14 } ], "metadata": {} } ] }