From 76d2876345c5851978713f275280ec7edf605706 Mon Sep 17 00:00:00 2001 From: "R. Bernstein" Date: Sun, 24 Nov 2024 21:36:58 -0500 Subject: [PATCH] tokenizer gets no-meaning infix ops from JSON (#87) * tokenizer gets no-meaning infix ops from JSON * Temporily test from operator-info-from-JSON branch * Function unicode change so as not to conflict with RightTeeArrow. Function unicode is a long arrow. * Remove CSV to YML stuff. CSV is beyond hope of keeping in sync. * Remove tokeniser import from __init__.py. Workaround for now. We need this so we can create operator JSON without needing the JSON table to be prevously around. * Split typing changing variables like tokens and literal_tokens intoseparate variables for each type they can hold. * Scanner uses operators json mm (#88, #89) * Change initialization of the tokenizer --------- Co-authored-by: Juan Mauricio Matera --- .github/workflows/mathics.yml | 4 +- .github/workflows/windows.yml | 11 +- admin-tools/make-tables.sh | 1 - mathics_scanner/__init__.py | 8 +- mathics_scanner/data/OperatorTable.csv | 402 ------------- mathics_scanner/data/named-characters.yml | 11 +- mathics_scanner/data/operators.yml | 150 ++--- .../generate/operator_csv_to_yml.py | 174 ------ mathics_scanner/tokeniser.py | 563 ++++++++++-------- 9 files changed, 396 insertions(+), 928 deletions(-) delete mode 100644 mathics_scanner/data/OperatorTable.csv delete mode 100755 mathics_scanner/generate/operator_csv_to_yml.py diff --git a/.github/workflows/mathics.yml b/.github/workflows/mathics.yml index f6fefd0..d709091 100644 --- a/.github/workflows/mathics.yml +++ b/.github/workflows/mathics.yml @@ -31,7 +31,9 @@ jobs: - name: Test Mathics3 run: | # Until next Mathics3/mathics-core release is out... - git clone https://github.com/Mathics3/mathics-core.git + # git clone https://github.com/Mathics3/mathics-core.git + # Until next operator-info-from-JSON is merges + git clone -b operator-info-from-JSON https://github.com/Mathics3/mathics-core.git cd mathics-core/ make PIP_INSTALL_OPTS='[full]' # pip install Mathics3[full] diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 63019ec..9379b39 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -23,12 +23,13 @@ jobs: run: | python -m pip install --upgrade pip pip install -e . - - name: Install Mathics_Scanner + - name: Install Mathics Scanner run: | - python setup.py install - - name: Test Mathics + pip install -e . + - name: Test Mathics3 run: | - pip install -r requirements-dev.txt - pip install -r requirements-full.txt + # Ideally we should not have to do this. python mathics_scanner/generate/build_tables.py + python mathics_scanner/generate/build_operator_tables.py + pip install -e .[dev,full] py.test test diff --git a/admin-tools/make-tables.sh b/admin-tools/make-tables.sh index 7a17c50..6fc6faa 100755 --- a/admin-tools/make-tables.sh +++ b/admin-tools/make-tables.sh @@ -7,5 +7,4 @@ PYTHON=${PYTHON:-python} cd $mydir/../mathics_scanner/data $PYTHON ../generate/build_tables.py -o characters.json -$PYTHON ../generate/operator_csv_to_yml.py $PYTHON ../generate/build_operator_tables.py -o operators.json diff --git a/mathics_scanner/__init__.py b/mathics_scanner/__init__.py index de83a8d..d15d065 100644 --- a/mathics_scanner/__init__.py +++ b/mathics_scanner/__init__.py @@ -26,7 +26,7 @@ ) # TODO: Move is_symbol_name to the characters module -from mathics_scanner.tokeniser import Token, Tokeniser, is_symbol_name +# from mathics_scanner.tokeniser import Token, Tokeniser, is_symbol_name from mathics_scanner.version import __version__ __all__ = [ @@ -37,12 +37,12 @@ "MultiLineFeeder", "ScanError", "SingleLineFeeder", - "Token", - "Tokeniser", + # "Token", + # "Tokeniser", "TranslateError", "__version__", "aliased_characters", - "is_symbol_name", + # "is_symbol_name", "named_characters", "replace_unicode_with_wl", "replace_wl_with_plain_text", diff --git a/mathics_scanner/data/OperatorTable.csv b/mathics_scanner/data/OperatorTable.csv deleted file mode 100644 index 9283dbf..0000000 --- a/mathics_scanner/data/OperatorTable.csv +++ /dev/null @@ -1,402 +0,0 @@ -Unofficial Name,Name,Actual Precedence,Precedence[ ],Precedence[ ] Corrected,WolframLanguageData[ ],WolframLanguageData[ ] Corrected,UnicodeCharacters.tr,UnicodeCharacters.tr Corrected,N Tokens,L Tokens,O Tokens,Usage,Parse,FullForm,Arity,Affix,Associativity,Meaningful,Comments -AddTo,AddTo,120,100,100,69,69,,230,{},"{""+=""}",{},expr1 += expr2,"{""AddTo"", ""["", ""expr1"", "","", ""expr2"", ""]""}","AddTo[expr1, expr2]",Binary,Infix,Right,True, -Alternatives,Alternatives,190,160,160,63,64,,276,{},"{""|""}",{},p1 | p2, expr2,"{""Alternatives"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Alternatives[expr1, expr2]",Binary,Infix,None,True -And,And,290,215,220,55,55,330,330,{},"{""&&"", ""∧""}",{},expr1 && expr2; expr1 ∧ expr2,"{""And"", ""["", ""expr1"", "","", ""expr2"", ""]""}","And[expr1, expr2]",Binary,Infix,None,True, -AngleBracket,AngleBracket,-10,670,760,,1,-10,-10,"{""〈""}",{},"{""〉""}",〈expr〉,"{""AngleBracket"", ""["", ""expr"", "","", ""…"", ""]""}","AngleBracket[expr, \[Ellipsis]]",n-ary,Matchfix,Non,False, -Apply,Apply,820,620,626,16,16,,710,{},"{""@@""}",{},expr1 @@ expr2,"{""Apply"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Apply[expr1, expr2]",Binary,Infix,Right,True, -Association,Association,-10,670,760,,1,-10,-10,"{""<|"", """"}",e,"{""|>"", """"}","<|expr|>; """"expr ","{""Association"", ""["", ""expr"", "","", ""…"", ""]""}","Association[expr, \[Ellipsis]]",n-ary,Matchfix,Non,True, -AutoMatch,AutoMatch,-10,670,760,,1,-10,-10,"{""""}",{},"{""""}", expr ,"{""AutoMatch"",""["",""expr"",""]""}",AutoMatch[expr],Unary,Matchfix,Non,True, -Backslash,Backslash,560,460,460,32,32,580,580,{},"{""∖""}",{},expr1 \ expr2,"{""Backslash"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Backslash[expr1, expr2]",Binary,Infix,None,False, -Because,Because,60,50,50,74,74,201,201,{},"{""∵""}",{},expr1 ∵ expr2,"{""Because"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Because[expr1, expr2]",Binary,Infix,Left,False,Precedence of Therefore and Because are swapped in notebook versus ToExpression. -BlackLenticularBracket,BlackLenticularBracket,-10,670,760,,1,-10,-10,"{""【""}",{},"{""】""}",【expr】,,,Unary,Matchfix,Non,True, -Blank,Blank,980,730,730,5,5,,820,"{""_""}",{},{},_,"{""Blank"", ""["", ""]""}",Blank[],Nullary,None,Non,True,A Blank (_) with no accompanying decoration. -BlankHead,Blank,1010,730,730,5,5,,820,"{""_""}",{},{},_expr,"{""Blank"", ""["", ""expr"", ""]""}",Blank[expr],Unary,Prefix,Non,True, -BlankNullSequence,BlankNullSequence,980,730,730,5,5,,820,"{""___""}",{},{},___,"{""BlankNullSequence"", ""["", ""]""}",BlankNullSequence[],Nullary,None,Non,True,A BlankNullSequence (___) with no accompanying decoration. -BlankNullSequenceHead,BlankNullSequence,1010,730,730,5,5,,820,"{""___""}",{},{},___expr,"{""BlankNullSequence"", ""["", ""expr"", ""]""}",BlankNullSequence[expr],Unary,Prefix,Non,True, -BlankOptional,Blank,980,730,730,5,5,,820,"{""_.""}",{},{},_.,"{""Optional"", ""["", ""Blank"", ""]""}",Optional[Blank[]],Nullary,None,Non,True,No name or head. -BlankSequence,BlankSequence,980,730,730,5,5,,820,"{""__""}",{},{},__,"{""BlankSequence"", ""["", ""]""}",BlankSequence[],Nullary,None,Non,True,A BlankNullSequence (__) with no accompanying decoration. -BlankSequenceHead,BlankSequence,1010,730,730,5,5,,820,"{""__""}",{},{},__expr,"{""BlankSequence"", ""["", ""expr"", ""]""}",BlankSequence[expr],Unary,Prefix,Non,True, -BoxGroup,None,-10,670,760,,1,,-10,"{""\(""}",{},"{""\)""}",\(expr\),"{“LeftRowBox”, expr, “RightRowBox”]",\(expr\),Unary,Matchfix,Non,True,The interpretation of this operator depends on context. It must contain box sublanguage. -BracketingBar,BracketingBar,-10,670,760,,1,-10,-10,"{""""}",{},"{""""}", expr,"{""BracketingBar"", ""["", ""expr"", "","", ""…"", ""]""}","BracketingBar[expr, \[Ellipsis]]",n-ary,Matchfix,Non,False, -Cap,Cap,450,350,350,43,42.5,470,470,{},"{""⌢""}",{},expr1 ⌢ expr2,"{""Cap"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Cap[expr1, expr2]",Binary,Infix,None,False, -CapitalDifferentialD,CapitalDifferentialD,720,550,560,,23,630,630,"{""""}",{},{},x,"{""CapitalDifferentialD"", ""["", ""x"", ""]""}",CapitalDifferentialD[x],Unary,Prefix,Right,False, -Ceiling,Ceiling,-10,670,760,,1,-10,-10,"{""⌈""}",{},"{""⌉""}",⌈expr⌉,"{""Ceiling"", ""["", ""expr"", ""]""}",Ceiling[expr],Unary,Matchfix,Non,True, -CenterDot,CenterDot,510,410,410,,37,530,530,{},"{""·""}",{},x · y,"{""CenterDot"", ""["", ""x"", "","", ""y"", ""]""}","CenterDot[x, y]",Binary,Infix,None,False, -CircleDot,CircleDot,660,520,520,"26, 35, 37",26,605,608,{},"{""⊙""}",{},expr1 ⊙ expr2,"{""CircleDot"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CircleDot[expr1, expr2]",Binary,Infix,None,False, -CircleMinus,CircleMinus,430,330,330,44,44,450,450,{},"{""⊖""}",{},expr1 ⊖ expr2,"{""CircleMinus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CircleMinus[expr1, expr2]",Binary,Infix,Left,False, -CirclePlus,CirclePlus,430,330,330,44,44,450,450,{},"{""⊕""}",{},expr1 ⊕ expr1,"{""CirclePlus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CirclePlus[expr1, expr2]",Binary,Infix,None,False, -CircleTimes,CircleTimes,520,420,420,,36,540,540,{},"{""⊗""}",{},expr1 ⊗ expr2,"{""CircleTimes"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CircleTimes[expr1, expr2]",Binary,Infix,None,False, -ClockwiseContourIntegral,ClockwiseContourIntegral,420,670,325,,45,455,445,"{""∲""}",{},"{""""}",∲ f()  x,"{""ClockwiseContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Compound,Right,True,Usage and Parse may not be correct. -Colon,Colon,100,80,80,71,71,205,205,{},"{""∶""}",{},expr1 ∶ expr2,"{""Colon"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Colon[expr1, expr2]",Binary,Infix,None,False, -Composition,Composition,860,625,655,13,13,,740,{},"{""@*""}",{},expr1 @* expr2,"{""Composition"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Composition[expr1, expr2]",Binary,Infix,None,True, -CompoundExpression,CompoundExpression,30,10,10,77,77,,170,{},"{"";""}",{},"expr1, expr2","{""CompoundExpression"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CompoundExpression[expr1, expr2]",Binary,Infix,None,True, -CompoundExpressionNull,CompoundExpression,30,10,10,77,77,,170,{},"{"";""}",{},expr1; expr2,"{""CompoundExpression"", ""["", ""expr1"", "","", ""expr2"", ""]""}","CompoundExpression[expr1, expr2, Null]",Unary,Postfix,Left,True, -Condition,Condition,170,130,130,66,66,,260,{},"{""/;""}",{},expr1 /; expr2,"{""Condition"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Condition[expr1, expr2]",Binary,Infix,Left,True, -Conditioned,Conditioned,240,195,195,,59.5,305,305,{},"{""""}",{},expr1 expr2,"{""Conditioned"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Conditioned[expr1, expr2]",Binary,Infix,None,True, -Congruent,Congruent,360,290,290,,50,390,390,{},"{""≡""}",{},x ≡ y,"{""Congruent"", ""["", ""x"", "","", ""y"", ""]""}","Congruent[x, y]",Binary,Infix,None,False, -Conjugate,Conjugate,780,670,605,18,18,695,695,{},"{""""}",{},expr ,"{""Conjugate"", ""["", ""expr"", ""]""}",Conjugate[expr],Unary,Postfix,Left,True, -ConjugateTranspose,ConjugateTranspose,780,670,605,18,18,695,695,{},"{"""", """"}",{},expr ; expr ,"{""ConjugateTranspose"", ""["", ""expr"", ""]""}",ConjugateTranspose[expr],Unary,Postfix,Left,True, -ContextPathSeparator,None,-10,670,760,,1,,-10,{},"{""`""}",{},symb1`symb2,"{""symb1"", ""`"", ""symb2""}",symb1`symb2,,,Non,True,"Functions as a decimal point: either contextpath1 or contextpath2 may be empty, but not both at the same time." -ContourIntegral,ContourIntegral,420,670,325,,45,455,445,"{""∮""}",{},"{""""}",∮ fn1  x,"{""ContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Compound,Right,True,Usage and Parse may not be correct. -Coproduct,Coproduct,460,360,360,42,42,500,500,{},"{""∐""}",{},expr1 ∐ expr2,"{""Coproduct"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Coproduct[expr1, expr2]",Binary,Infix,None,False, -CornerBracket,CornerBracket,-10,670,760,,1,-10,-10,"{""「""}",{},"{""」""}",「expr」,,,Unary,Matchfix,Non,True, -CounterClockwiseContourIntegral,CounterClockwiseContourIntegral,420,670,325,,45,455,445,"{""∳""}",{},"{""""}",∳ fn  var,"{""CounterClockwiseContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Compound,Right,True,Usage and Parse may not be correct. -Cross,Cross,640,500,500,28,28,603,606,{},"{""""}",{},expr1  expr2,"{""Cross"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Cross[expr1, expr2]",Binary,Infix,None,True, -Cup,Cup,440,340,340,43,43,460,460,{},"{""⌣""}",{},expr1 ⌣ expr2,"{""Cup"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Cup[expr1, expr2]",Binary,Infix,None,False, -CupCap,CupCap,360,290,290,,50,390,390,{},"{""≍""}",{},x ≍ y,"{""CupCap"", ""["", ""x"", "","", ""y"", ""]""}","CupCap[x, y]",Binary,Infix,None,False, -Curl,Curl,590,670,485,,29.8,601,601,"{""""}",{},{},expr,"{""Curl"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -CurlyDoubleQuote,CurlyDoubleQuote,-10,670,760,,1,-10,-10,"{""“""}",{},"{""”""}","""“expr""”","{""CurlyDoubleQuote"",""["",""expr"",""]""}",CurlyDoubleQuote[expr],Unary,Matchfix,Non,False, -CurlyQuote,CurlyQuote,-10,670,760,,1,-10,-10,"{""‘""}",{},"{""’""}",‘expr’,"{""CurlyQuote"",""["",""expr"",""]""}",CurlyQuote[expr],Unary,Matchfix,Non,False, -Decrement,Decrement,880,660,665,11,11,,760,{},"{""--""}",{},expr--,"{""Decrement"", ""["", ""expr"", ""]""}",Decrement[expr],Unary,Postfix,Left,True, -Del,Del,710,550,550,24,24,620,620,"{""∇""}",{},{},∇x,"{""Del"", ""["", ""expr"", ""]""}",Del[expr],Unary,Prefix,Right,False, -Derivative,Derivative,770,670,604,19,19,,680,{},"{""''""}",{},"{{""expr"", ""''""}}","{""Derivative"", ""["", ""n"", ""]"", ""["", ""expr"", ""]""}",Derivative[n][expr],Unary,Postfix,Left,True, -Diamond,Diamond,550,450,450,33,33,570,570,{},"{""⋄""}",{},"{{""expr1"", ""⋄"", ""expr2""}}","{""Diamond"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Diamond[expr1, expr2]",Binary,Infix,None,False, -DifferenceDelta,DifferenceDelta,710,550,550,24,24,620,620,"{""""}",{},{},"{{"""", ""expr""}}","{""DifferenceDelta"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -DifferentialD,DifferentialD,720,550,560,,23,630,630,"{""""}",{},{},"{{"""", ""x""}}","{""DifferentialD"", ""["", ""x"", ""]""}",DifferentialD[x],Unary,Prefix,Right,False, -DirectedEdge,DirectedEdge,370,295,295,,49,395,395,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""DirectedEdge"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DirectedEdge[expr1, expr2]",Binary,Infix,None,True, -DiscreteRatio,DiscreteRatio,710,550,550,24,24,620,620,"{""""}",{},{},"{{"""", ""expr""}}","{""DiscreteRatio"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -DiscreteShift,DiscreteShift,710,550,550,24,24,620,620,"{""""}",{},{},"{{"""", ""expr""}}","{""DiscreteShift"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Distributed,Distributed,320,250,250,,52,360,360,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""Distributed"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Distributed[expr1, expr2]",Binary,Infix,None,True, -Divergence,Divergence,590,550,485,,29.8,601,601,"{""""}",{},{},"{{"""", ""expr""}}","{""Divergence"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Divide,Divide,570,470,470,31,31,590,590,{},"{""/"", ""÷"", ""∕""}",{},"{{""expr1"", ""/"", ""expr2""}, {""expr1"", ""÷"", ""expr2""}, {""expr1"", ""∕"", ""expr2""}}","{""Divide"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Times[expr1, Power[expr2, -1]]",Binary,Infix,Left,True, -DivideBy,DivideBy,120,100,100,69,69,,230,{},"{""/=""}",{},"{{""expr1"", ""/="", ""expr2""}}","{""DivideBy"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DivideBy[expr1, expr2]",Binary,Infix,Right,True, -Divides,Divides,570,670,470,,31,590,590,{},"{""∣""}",{},"{{""expr1"", ""∣"", ""expr2""}}","{""Divides"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Divisible[expr2, expr1]",Binary,Infix,None,True, -Dot,Dot,630,490,490,29,29,,605,{},"{"".""}",{},"{{""expr1"", ""."", ""expr2""}}","{""Dot"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Dot[expr1, expr2]",Binary,Infix,None,True, -DotEqual,DotEqual,360,290,290,,50,390,390,{},"{""≐""}",{},"{{""x"", ""≐"", ""y""}}","{""DotEqual"", ""["", ""x"", "","", ""y"", ""]""}","DotEqual[x, y]",Binary,Infix,None,False, -DoubleAngleBracket,DoubleAngleBracket,-10,670,760,,1,-10,-10,"{""《""}",{},"{""》""}","{{""《"", ""expr"", ""》""}}",,,Unary,Matchfix,Non,True, -DoubleBracketingBar,DoubleBracketingBar,-10,670,760,,1,-10,-10,"{""""}",{},"{""""}","{{"""", ""expr"", """"}}","{""DoubleBracketingBar"", ""["", ""expr"", "","", ""…"", ""]""}","DoubleBracketingBar[expr, \[Ellipsis]]",n-ary,Matchfix,Non,False, -DoubleContourIntegral,DoubleContourIntegral,420,670,325,,45,455,445,"{""∯""}",{},"{""""}","{{""∯"", ""expr1"", """", ""expr2""}}","{""DoubleContourIntegral"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Compound,Right,True,Usage and Parse may not be correct. -DoubleDownArrow,DoubleDownArrow,740,580,580,,21.5,650,650,{},"{""⇓""}",{},"{{""x"", ""⇓"", ""y""}}","{""DoubleDownArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleDownArrow[x, y]",Binary,Infix,None,False, -DoubleLeftArrow,DoubleLeftArrow,340,270,270,,50.6,380,380,{},"{""⇐""}",{},"{{""x"", ""⇐"", ""y""}}","{""DoubleLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleLeftArrow[x, y]",Binary,Infix,None,False, -DoubleLeftRightArrow,DoubleLeftRightArrow,340,270,270,,50.6,380,380,{},"{""⇔""}",{},"{{""x"", ""⇔"", ""y""}}","{""DoubleLeftRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleLeftRightArrow[x, y]",Binary,Infix,None,False, -DoubleLeftTee,DoubleLeftTee,220,190,190,60,60,300,300,{},"{""⫤""}",{},"{{""expr1"", ""⫤"", ""expr2""}}","{""DoubleLeftTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DoubleLeftTee[expr1, expr2]",Binary,Infix,Left,False, -DoubleLongLeftArrow,DoubleLongLeftArrow,740,580,580,,21.5,650,650,{},"{""⟸""}",{},"{{""x"", ""⟸"", ""y""}}","{""DoubleLongLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleLongLeftArrow[x, y]",Binary,Infix,None,False, -DoubleLongLeftRightArrow,DoubleLongLeftRightArrow,740,580,580,,21.5,650,650,{},"{""⟺""}",{},"{{""x"", ""⟺"", ""y""}}","{""DoubleLongLeftRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleLongLeftRightArrow[x, y]",Binary,Infix,None,False, -DoubleLongRightArrow,DoubleLongRightArrow,740,580,580,,21.5,650,650,{},"{""⟹""}",{},"{{""x"", ""⟹"", ""y""}}","{""DoubleLongRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleLongRightArrow[x, y]",Binary,Infix,None,False, -DoubleRightArrow,DoubleRightArrow,340,270,270,,50.6,380,380,{},"{""⇒""}",{},"{{""x"", ""⇒"", ""y""}}","{""DoubleRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleRightArrow[x, y]",Binary,Infix,None,False, -DoubleRightTee,DoubleRightTee,230,190,190,,59.6,300,300,{},"{""⊨""}",{},"{{""expr1"", ""⊨"", ""expr2""}}","{""DoubleRightTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DoubleRightTee[expr1, expr2]",Binary,Infix,Right,False, -DoubleUpArrow,DoubleUpArrow,740,580,580,,21.5,650,650,{},"{""⇑""}",{},"{{""x"", ""⇑"", ""y""}}","{""DoubleUpArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleUpArrow[x, y]",Binary,Infix,None,False, -DoubleUpDownArrow,DoubleUpDownArrow,740,580,580,,21.5,650,650,{},"{""⇕""}",{},"{{""x"", ""⇕"", ""y""}}","{""DoubleUpDownArrow"", ""["", ""x"", "","", ""y"", ""]""}","DoubleUpDownArrow[x, y]",Binary,Infix,None,False, -DoubleVerticalBar,DoubleVerticalBar,350,280,280,50,50.5,390,385,{},"{""∥""}",{},"{{""expr1"", ""∥"", ""expr2""}}","{""DoubleVerticalBar"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DoubleVerticalBar[expr1, expr2]",Binary,Infix,None,False, -DownArrow,DownArrow,740,580,580,,21.5,650,650,{},"{""↓""}",{},"{{""x"", ""↓"", ""y""}}","{""DownArrow"", ""["", ""x"", "","", ""y"", ""]""}","DownArrow[x, y]",Binary,Infix,None,False, -DownArrowBar,DownArrowBar,740,580,580,,21.5,650,650,{},"{""⤓""}",{},"{{""x"", ""⤓"", ""y""}}","{""DownArrowBar"", ""["", ""x"", "","", ""y"", ""]""}","DownArrowBar[x, y]",Binary,Infix,None,False, -DownArrowUpArrow,DownArrowUpArrow,740,580,580,,21.5,650,650,{},"{""⇵""}",{},"{{""x"", ""⇵"", ""y""}}","{""DownArrowUpArrow"", ""["", ""x"", "","", ""y"", ""]""}","DownArrowUpArrow[x, y]",Binary,Infix,None,False, -DownLeftRightVector,DownLeftRightVector,340,270,270,,50.6,380,380,{},"{""⥐""}",{},"{{""x"", ""⥐"", ""y""}}","{""DownLeftRightVector"", ""["", ""x"", "","", ""y"", ""]""}","DownLeftRightVector[x, y]",Binary,Infix,None,False, -DownLeftTeeVector,DownLeftTeeVector,340,270,270,,50.6,380,380,{},"{""⥞""}",{},"{{""x"", ""⥞"", ""y""}}","{""DownLeftTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","DownLeftTeeVector[x, y]",Binary,Infix,None,False, -DownLeftVector,DownLeftVector,340,270,270,,50.6,380,380,{},"{""↽""}",{},"{{""x"", ""↽"", ""y""}}","{""DownLeftVector"", ""["", ""x"", "","", ""y"", ""]""}","DownLeftVector[x, y]",Binary,Infix,None,False, -DownLeftVectorBar,DownLeftVectorBar,340,270,270,,50.6,380,380,{},"{""⥖""}",{},"{{""x"", ""⥖"", ""y""}}","{""DownLeftVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","DownLeftVectorBar[x, y]",Binary,Infix,None,False, -DownRightTeeVector,DownRightTeeVector,340,270,270,,50.6,380,380,{},"{""⥟""}",{},"{{""x"", ""⥟"", ""y""}}","{""DownRightTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","DownRightTeeVector[x, y]",Binary,Infix,None,False, -DownRightVector,DownRightVector,340,270,270,,50.6,380,380,{},"{""⇁""}",{},"{{""x"", ""⇁"", ""y""}}","{""DownRightVector"", ""["", ""x"", "","", ""y"", ""]""}","DownRightVector[x, y]",Binary,Infix,None,False, -DownRightVectorBar,DownRightVectorBar,340,270,270,,50.6,380,380,{},"{""⥗""}",{},"{{""x"", ""⥗"", ""y""}}","{""DownRightVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","DownRightVectorBar[x, y]",Binary,Infix,None,False, -DownTee,DownTee,220,190,190,60,60,300,300,{},"{""⊤""}",{},"{{""expr1"", ""⊤"", ""expr2""}}","{""DownTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","DownTee[expr1, expr2]",Binary,Infix,Left,False, -DownTeeArrow,DownTeeArrow,740,580,580,,21.5,650,650,{},"{""↧""}",{},"{{""x"", ""↧"", ""y""}}","{""DownTeeArrow"", ""["", ""x"", "","", ""y"", ""]""}","DownTeeArrow[x, y]",Binary,Infix,None,False, -Element,Element,320,250,250,52,52,360,360,{},"{""∈""}",{},"{{""expr1"", ""∈"", ""expr2""}}","{""Element"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Element[expr1, expr2]",Binary,Infix,None,True, -Equal,Equal,360,290,290,50,50,390,390,{},"{""=="", """", """"}",{},expr1 == expr2; expr1  expr2; expr1  expr2,"{""Equal"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Equal[expr1, expr2]",Binary,Infix,None,True, -EqualTilde,EqualTilde,360,290,290,,50,390,390,{},"{""≂""}",{},expr1≂ expr2,"{""EqualTilde"", ""["", ""x"", "","", ""y"", ""]""}","EqualTilde[x, y]",Binary,Infix,None,False, -Equilibrium,Equilibrium,360,290,290,,50,390,390,{},"{""⇌""}",{},x ⇌ y,"{""Equilibrium"", ""["", ""x"", "","", ""y"", ""]""}","Equilibrium[x, y]",Binary,Infix,None,False, -Equivalent,Equivalent,260,205,205,58,58,315,315,{},"{""⧦""}",{},expr1 ⧦ expr2,"{""Equivalent"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Equivalent[expr1, expr2]",Binary,Infix,None,True, -Exists,Exists,310,240,240,53,53,350,350,"{""∃""}",{},{},∃ expr,"{""Exists"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -ExpectationE,ExpectationE,420,325,325,,45,455,445,"{""""}",{},{},"{{"""", ""expr""}}","{""ExpectationE"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Factorial,Factorial,790,610,610,17,17,,700,{},"{""!""}",{},"{{""expr"", ""!""}}","{""Factorial"", ""["", ""expr"", ""]""}",Factorial[expr],Unary,Postfix,Left,True, -Factorial2,Factorial2,790,610,610,17,17,,700,{},"{""!!""}",{},"{{""expr"", ""!!""}}","{""Factorial2"", ""["", ""expr"", ""]""}",Factorial2[expr],Unary,Postfix,Left,True, -Floor,Floor,-10,670,760,,1,-10,-10,"{""⌊""}",{},"{""⌋""}","{{""⌊"", ""expr"", ""⌋""}}","{""Floor"", ""["", ""expr"", ""]""}",Floor[expr],Unary,Matchfix,Non,True, -ForAll,ForAll,310,240,240,53,53,350,350,"{""∀""}",{},{},∀ expr,"{""ForAll"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -FormBox,FormBox,20,670,5,78,78,,160,{},"{""\\`""}",{},expr1 \\ expr2,"{""FormBox"", ""["", ""expr2"", "","", ""expr1"", ""]""}",,Binary,Infix,"Missing[""Unknown""]",True, -FractionBox,FractionBox,570,670,470,,31,,590,{},"{""\/""}",{},\( expr1 \/ expr2 \),"{""FractionBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Infix,Left,True, -FullwidthAngleBracket,FullwidthAngleBracket,-10,670,760,,1,-10,-10,"{""〈""}",{},"{""〉""}","{{""〈"", ""expr"", ""〉""}}",,,Unary,Matchfix,Non,True, -FullwidthCurlyBracket,FullwidthCurlyBracket,-10,670,760,,1,-10,-10,"{""{""}",{},"{""}""}","{{""{"", ""expr"", ""}""}}",,,Unary,Matchfix,Non,True, -FullwidthParenthesis,FullwidthParenthesis,-10,670,760,,1,-10,-10,"{""(""}",{},"{"")""}","{{""("", ""expr"", "")""}}",,,Unary,Matchfix,Non,True, -FullwidthSquareBracket,FullwidthSquareBracket,-10,670,760,,1,-10,-10,"{""[""}",{},"{""]""}","{{""["", ""expr"", ""]""}}",,,Unary,Matchfix,Non,True, -Function,Function,110,90,90,70,70,,220,{},"{""&""}",{},"{{""expr"", ""&""}}","{""Function"", ""["", ""expr"", ""]""}",Function[expr],Unary,Postfix,Left,True, -FunctionApply,None,890,670,670,,10,,761,{},"{""[""}","{""]""}","{{""expr1"", ""["", ""expr2"", ""]""}}","{""expr1"", ""["", ""expr2"", "","", ""…"", ""]""}","expr1[expr2, \[Ellipsis]]",n-ary,Postfix,Left,True, -FunctionApplyInfix,Infix,830,630,630,,15,,720,{},"{""~""}",{},"{{""expr1"", ""~"", ""expr2"", ""~"", ""expr3""}}","{""expr2"", ""["", ""expr1"", "","", ""expr3"", ""]""}","expr2[expr1, expr3]",Ternary,Infix,Left,True,"Infix[f[x,y]] will display as x~f~y. Precedence identifies Infix with this operator, and Precedence[Infix]==30 which is almost correct." -FunctionApplyPostfix,Postfix,90,70,70,,72,,204,{},"{""//""}",{},"{{""expr1"", ""//"", ""expr2""}}","{""expr2"", ""["", ""expr1"", ""]""}",expr2[expr1],Binary,Infix,Left,True,Postfix[f[x]] will display as x//f. Precedence identifies Postfix with this operator. -FunctionApplyPrefix,Prefix,840,640,640,,14,730,730,{},"{""@"", """"}",{},"{{""expr1"", ""@"", ""expr2""}, {""expr1"", """", ""expr2""}}","{""expr1"", ""["", ""expr2"", ""]""}",expr1[expr2],Binary,Infix,Right,True,Operator Notations includes usages with invisible unicode characters. -Get,Get,970,720,720,6,6,,810,"{""<<""}",{},{},<< filename,"{""Get"", ""["", """", ""filename""}","Get[""filename""]",Unary,Prefix,Right,True, -Gradient,Gradient,700,550,545,,24,615,615,"{""""}",{},{},"{{"""", ""expr""}}","{""Gradient"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Greater,Greater,360,290,290,50,50,,390,{},"{"">""}",{},expr1 > expr2,"{""Greater"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Greater[expr1, expr2]",Binary,Infix,None,True, -GreaterEqual,GreaterEqual,360,290,290,50,50,390,390,{},"{"">="", ""≥""}",{},"{{""expr1"", "">="", ""expr2""}, {""expr1"", ""≥"", ""expr2""}}","{""GreaterEqual"", ""["", ""expr1"", "","", ""expr2"", ""]""}","GreaterEqual[expr1, expr2]",Binary,Infix,None,True, -GreaterEqualLess,GreaterEqualLess,360,290,290,,50,390,390,{},"{""⋛""}",{},"{{""x"", ""⋛"", ""y""}}","{""GreaterEqualLess"", ""["", ""x"", "","", ""y"", ""]""}","GreaterEqualLess[x, y]",Binary,Infix,None,False, -GreaterFullEqual,GreaterFullEqual,360,290,290,,50,390,390,{},"{""≧""}",{},"{{""x"", ""≧"", ""y""}}","{""GreaterFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","GreaterFullEqual[x, y]",Binary,Infix,None,False, -GreaterGreater,GreaterGreater,360,290,290,,50,390,390,{},"{""≫""}",{},"{{""x"", ""≫"", ""y""}}","{""GreaterGreater"", ""["", ""x"", "","", ""y"", ""]""}","GreaterGreater[x, y]",Binary,Infix,None,False, -GreaterLess,GreaterLess,360,290,290,,50,390,390,{},"{""≷""}",{},"{{""x"", ""≷"", ""y""}}","{""GreaterLess"", ""["", ""x"", "","", ""y"", ""]""}","GreaterLess[x, y]",Binary,Infix,None,False, -GreaterSlantEqual,GreaterSlantEqual,360,670,290,,50,390,390,{},"{""⩾""}",{},"{{""x"", ""⩾"", ""y""}}","{""GreaterEqual"", ""["", ""x"", "","", ""y"", ""]""}","GreaterEqual[x, y]",Binary,Infix,None,False, -GreaterTilde,GreaterTilde,360,290,290,,50,390,390,{},"{""≳""}",{},"{{""x"", ""≳"", ""y""}}","{""GreaterTilde"", ""["", ""x"", "","", ""y"", ""]""}","GreaterTilde[x, y]",Binary,Infix,None,False, -HumpDownHump,HumpDownHump,360,290,290,,50,390,390,{},"{""≎""}",{},"{{""x"", ""≎"", ""y""}}","{""HumpDownHump"", ""["", ""x"", "","", ""y"", ""]""}","HumpDownHump[x, y]",Binary,Infix,None,False, -HumpEqual,HumpEqual,360,290,290,,50,390,390,{},"{""≏""}",{},"{{""x"", ""≏"", ""y""}}","{""HumpEqual"", ""["", ""x"", "","", ""y"", ""]""}","HumpEqual[x, y]",Binary,Infix,None,False, -ImplicitSequence,Comma,10,670,755,,79,1,1,{},"{"""", "",""}",{},"{{""expr1"", """", ""expr2""}, {""expr1"", "","", ""expr2""}}","{""AngleBracket"", ""["", ""expr"", "","", ""…"", ""]""}","expr1, expr2",Binary,Infix,None,True,Operator Notations includes usages with invisible unicode characters. -Implies,Implies,250,200,200,59,59,310,310,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""Implies"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Implies[expr1, expr2]",Binary,Infix,Right,True, -Increment,Increment,880,660,665,11,11,,760,{},"{""++""}",{},expr++,"{""Increment"", ""["", ""expr"", ""]""}",Increment[expr],Unary,Postfix,Left,True, -InlinePart,InlinePart,900,670,675,,9.5,763,763,{},"{""""}",{},expr1  expr2,"{""InlinePart"", ""["", ""expr1"", "","", ""expr2"", ""]""}","RowBox[List[expr1, InlinePart, expr2]]",Binary,Infix,Right,False,"""InlinePart or @> was an operator that was introduced in one of the pre-release/betas for version 10 and subsequently removed before public release. It was briefly available publicly in the Raspberry Pi version of Wolfram Language that co-existed with the pre-releases at the time. The operator allowed you to access elements of a list with an infix operator."" https://mathematica.stackexchange.com/questions/134506/inlinepart-what-is-it-and-what-happened-to-it" -Integrate,Integral,420,325,325,23,45,455,445,"{""∫""}",{},"{""""}","{{""∫"", ""expr1"", """", ""expr2""}}","{""Integrate"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Integrate[expr1, expr2]",Binary,Compound,Right,True, -InterpretationBox,None,930,670,695,,7.6,,780,"{""\*""}",{},{},\( \* expr \),,,Unary,Prefix,Right,True, -Intersection,Intersection,390,305,305,47,47,420,420,{},"{""⋂""}",{},"{{""expr1"", ""⋂"", ""expr2""}}","{""Intersection"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Intersection[expr1, expr2]",Binary,Infix,None,True, -InvisiblePostfixScriptBase,InvisiblePostfixScriptBase,960,670,715,,6.5,800,800,{},"{""""}",{},"{{""expr"", """"}}","{""InvisiblePostfixScriptBase"", ""["", ""expr"", ""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -InvisiblePrefixScriptBase,InvisiblePrefixScriptBase,960,670,715,,6.5,800,800,"{""""}",{},{},"{{"""", ""expr""}}","{""InvisiblePrefixScriptBase"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,False,Usage and Parse may not be correct. -Laplacian,Laplacian,710,670,550,,24,620,620,"{""∆""}",{},{},"{{""∆"", ""expr""}}","{""Laplacian"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -LeftArrow,LeftArrow,340,270,270,,50.6,380,380,{},"{""←""}",{},"{{""x"", ""←"", ""y""}}","{""LeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","LeftArrow[x, y]",Binary,Infix,None,False, -LeftArrowBar,LeftArrowBar,340,270,270,,50.6,380,380,{},"{""⇤""}",{},"{{""x"", ""⇤"", ""y""}}","{""LeftArrowBar"", ""["", ""x"", "","", ""y"", ""]""}","LeftArrowBar[x, y]",Binary,Infix,None,False, -LeftArrowRightArrow,LeftArrowRightArrow,340,270,270,,50.6,380,380,{},"{""⇆""}",{},"{{""x"", ""⇆"", ""y""}}","{""LeftArrowRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","LeftArrowRightArrow[x, y]",Binary,Infix,None,False, -LeftDownTeeVector,LeftDownTeeVector,740,580,580,,21.5,650,650,{},"{""⥡""}",{},"{{""x"", ""⥡"", ""y""}}","{""LeftDownTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftDownTeeVector[x, y]",Binary,Infix,None,False, -LeftDownVector,LeftDownVector,740,580,580,,21.5,650,650,{},"{""⇃""}",{},"{{""x"", ""⇃"", ""y""}}","{""LeftDownVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftDownVector[x, y]",Binary,Infix,None,False, -LeftDownVectorBar,LeftDownVectorBar,740,580,580,,21.5,650,650,{},"{""⥙""}",{},"{{""x"", ""⥙"", ""y""}}","{""LeftDownVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","LeftDownVectorBar[x, y]",Binary,Infix,None,False, -LeftRightArrow,LeftRightArrow,340,270,270,,50.6,380,380,{},"{""↔""}",{},"{{""x"", ""↔"", ""y""}}","{""LeftRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","LeftRightArrow[x, y]",Binary,Infix,None,False, -LeftRightVector,LeftRightVector,340,270,270,,50.6,380,380,{},"{""⥎""}",{},"{{""x"", ""⥎"", ""y""}}","{""LeftRightVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftRightVector[x, y]",Binary,Infix,None,False, -LeftTee,LeftTee,220,190,190,60,60,300,300,{},"{""⊣""}",{},"{{""expr1"", ""⊣"", ""expr2""}}","{""LeftTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","LeftTee[expr1, expr2]",Binary,Infix,Left,False, -LeftTeeArrow,LeftTeeArrow,340,270,270,,50.6,380,380,{},"{""↤""}",{},"{{""x"", ""↤"", ""y""}}","{""LeftTeeArrow"", ""["", ""x"", "","", ""y"", ""]""}","LeftTeeArrow[x, y]",Binary,Infix,None,False, -LeftTeeVector,LeftTeeVector,340,270,270,,50.6,380,380,{},"{""⥚""}",{},"{{""x"", ""⥚"", ""y""}}","{""LeftTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftTeeVector[x, y]",Binary,Infix,None,False, -LeftTriangle,LeftTriangle,360,290,290,,50,390,390,{},"{""⊲""}",{},"{{""x"", ""⊲"", ""y""}}","{""LeftTriangle"", ""["", ""x"", "","", ""y"", ""]""}","LeftTriangle[x, y]",Binary,Infix,None,False, -LeftTriangleBar,LeftTriangleBar,360,290,290,,50,390,390,{},"{""⧏""}",{},"{{""x"", ""⧏"", ""y""}}","{""LeftTriangleBar"", ""["", ""x"", "","", ""y"", ""]""}","LeftTriangleBar[x, y]",Binary,Infix,None,False, -LeftTriangleEqual,LeftTriangleEqual,360,290,290,,50,390,390,{},"{""⊴""}",{},"{{""x"", ""⊴"", ""y""}}","{""LeftTriangleEqual"", ""["", ""x"", "","", ""y"", ""]""}","LeftTriangleEqual[x, y]",Binary,Infix,None,False, -LeftUpDownVector,LeftUpDownVector,740,580,580,,21.5,650,650,{},"{""⥑""}",{},"{{""x"", ""⥑"", ""y""}}","{""LeftUpDownVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftUpDownVector[x, y]",Binary,Infix,None,False, -LeftUpTeeVector,LeftUpTeeVector,740,580,580,,21.5,650,650,{},"{""⥠""}",{},"{{""x"", ""⥠"", ""y""}}","{""LeftUpTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftUpTeeVector[x, y]",Binary,Infix,None,False, -LeftUpVector,LeftUpVector,740,580,580,,21.5,650,650,{},"{""↿""}",{},"{{""x"", ""↿"", ""y""}}","{""LeftUpVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftUpVector[x, y]",Binary,Infix,None,False, -LeftUpVectorBar,LeftUpVectorBar,740,580,580,,21.5,650,650,{},"{""⥘""}",{},"{{""x"", ""⥘"", ""y""}}","{""LeftUpVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","LeftUpVectorBar[x, y]",Binary,Infix,None,False, -LeftVector,LeftVector,340,270,270,,50.6,380,380,{},"{""↼""}",{},"{{""x"", ""↼"", ""y""}}","{""LeftVector"", ""["", ""x"", "","", ""y"", ""]""}","LeftVector[x, y]",Binary,Infix,None,False, -LeftVectorBar,LeftVectorBar,340,270,270,,50.6,380,380,{},"{""⥒""}",{},"{{""x"", ""⥒"", ""y""}}","{""LeftVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","LeftVectorBar[x, y]",Binary,Infix,None,False, -Less,Less,360,290,290,50,50,,390,{},"{""<""}",{},"{{""expr1"", ""<"", ""expr2""}}","{""Less"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Less[expr1, expr2]",Binary,Infix,None,True, -LessEqual,LessEqual,360,290,290,50,50,390,390,{},"{""<="", ""≤""}",{},"{{""expr1"", ""<="", ""expr2""}, {""expr1"", ""≤"", ""expr2""}}","{""LessEqual"", ""["", ""expr1"", "","", ""expr2"", ""]""}","LessEqual[expr1, expr2]",Binary,Infix,None,True, -LessEqualGreater,LessEqualGreater,360,290,290,,50,390,390,{},"{""⋚""}",{},"{{""x"", ""⋚"", ""y""}}","{""LessEqualGreater"", ""["", ""x"", "","", ""y"", ""]""}","LessEqualGreater[x, y]",Binary,Infix,None,False, -LessFullEqual,LessFullEqual,360,290,290,,50,390,390,{},"{""≦""}",{},"{{""x"", ""≦"", ""y""}}","{""LessFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","LessFullEqual[x, y]",Binary,Infix,None,False, -LessGreater,LessGreater,360,290,290,,50,390,390,{},"{""≶""}",{},"{{""x"", ""≶"", ""y""}}","{""LessGreater"", ""["", ""x"", "","", ""y"", ""]""}","LessGreater[x, y]",Binary,Infix,None,False, -LessLess,LessLess,360,290,290,,50,390,390,{},"{""≪""}",{},"{{""x"", ""≪"", ""y""}}","{""LessLess"", ""["", ""x"", "","", ""y"", ""]""}","LessLess[x, y]",Binary,Infix,None,False, -LessSlantEqual,LessSlantEqual,360,670,290,,50,390,390,{},"{""⩽""}",{},"{{""x"", ""⩽"", ""y""}}","{""LessEqual"", ""["", ""x"", "","", ""y"", ""]""}","LessEqual[x, y]",Binary,Infix,None,False, -LessTilde,LessTilde,360,290,290,,50,390,390,{},"{""≲""}",{},"{{""x"", ""≲"", ""y""}}","{""LessTilde"", ""["", ""x"", "","", ""y"", ""]""}","LessTilde[x, y]",Binary,Infix,None,False, -Limit,Limit,410,320,320,,45.5,440,440,"{""""}",{},{},"{{"""", ""expr""}}","{""Limit"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -List,List,-10,670,760,1,1,,-10,"{""{""}",{},"{""}""}","{{""{"", ""expr"", ""}""}}","{""List"", ""["", ""expr"", "","", ""…"", ""]""}","List[expr, \[Ellipsis]]",n-ary,Matchfix,Non,True, -LongLeftArrow,LongLeftArrow,740,580,580,,21.5,650,650,{},"{""⟵""}",{},"{{""x"", ""⟵"", ""y""}}","{""LongLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","LongLeftArrow[x, y]",Binary,Infix,None,False, -LongLeftRightArrow,LongLeftRightArrow,740,580,580,,21.5,650,650,{},"{""⟷""}",{},"{{""x"", ""⟷"", ""y""}}","{""LongLeftRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","LongLeftRightArrow[x, y]",Binary,Infix,None,False, -LongRightArrow,LongRightArrow,740,580,580,,21.5,650,650,{},"{""⟶""}",{},"{{""x"", ""⟶"", ""y""}}","{""LongRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","LongRightArrow[x, y]",Binary,Infix,None,False, -LowerLeftArrow,LowerLeftArrow,340,270,270,,50.6,380,380,{},"{""↙""}",{},"{{""x"", ""↙"", ""y""}}","{""LowerLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","LowerLeftArrow[x, y]",Binary,Infix,None,False, -LowerRightArrow,LowerRightArrow,340,270,270,,50.6,380,380,{},"{""↘""}",{},"{{""x"", ""↘"", ""y""}}","{""LowerRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","LowerRightArrow[x, y]",Binary,Infix,None,False, -Map,Map,800,620,620,16,16,,710,{},"{""/@""}",{},"{{""expr1"", ""/@"", ""expr2""}}","{""Map"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Map[expr1, expr2]",Binary,Infix,Right,True, -MapAll,MapAll,800,620,620,16,16,,710,{},"{""//@""}",{},"{{""expr1"", ""//@"", ""expr2""}}","{""MapAll"", ""["", ""expr1"", "","", ""expr2"", ""]""}","MapAll[expr1, expr2]",Binary,Infix,Right,True, -MapApply,MapApply,810,620,625,16,16,,710,{},"{""@@@""}",{},"{{""expr1"", ""@@@"", ""expr2""}}","{""Apply"", ""["", ""expr1"", "","", ""expr2"", ""{"", ""1"", ""}"", ""]""}","MapApply[expr1, expr2, List[1]]",Binary,Infix,Right,True, -MaxLimit,MaxLimit,410,320,320,,45.5,440,440,"{""""}",{},{},"{{"""", ""expr""}}","{""MaxLimit"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -MessageName,MessageName,1060,750,750,2,2,,850,{},"{""::""}",{},"{{""expr"", ""::"", ""string""}}","{""MessageName"", ""["", ""expr"", "","", """", ""string"", """", ""]""}","MessageName[expr, ""string""]",Binary,Infix,Non,True, -MinLimit,MinLimit,410,320,320,,45.5,440,440,"{""""}",{},{},"{{"""", ""expr""}}","{""MinLimit"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Minus,Minus,580,480,480,30,30,430,600,"{""-"", ""−""}",{},{},"{{""-"", ""expr""}, {""−"", ""expr""}}","{""Minus"", ""["", ""expr"", ""]""}","Times[-1, expr]",Unary,Prefix,Right,True,Operator Notations includes usages with invisible unicode characters. -MinusPlus,MinusPlus,400,310,310,46,46,430,430,{},"{""∓""}",{},"{{""expr1"", ""∓"", ""expr2""}}","{""MinusPlus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","MinusPlus[expr1, expr2]",Binary,Infix,Left,False, -NamedBlank,Blank,990,730,730,5,5,,820,{},"{""_""}",{},"{{""symb"", ""_""}}","{""Pattern"", ""["", ""symb"", "","", ""Blank"", ""["", ""]"", ""]""}","Pattern[symb, Blank[]]",Unary,Postfix,Non,True, -NamedBlankHead,Blank,1000,730,730,5,5,,820,{},"{""_""}",{},"{{""symb"", ""_"", ""expr""}}","{""Pattern"", ""["", ""symb"", "","", ""Blank"", ""["", ""expr"", ""]"", ""]""}","Pattern[symb, Blank[expr]]",Binary,Infix,Non,True, -NamedBlankNullSequence,BlankNullSequence,990,730,730,5,5,,820,{},"{""___""}",{},"{{""symb"", ""___""}}","{""Pattern"", ""["", ""symb"", "","", ""BlankNullSequence"", ""["", ""]"", ""]""}","Pattern[symb, BlankNullSequence[]]",Unary,Postfix,Non,True, -NamedBlankNullSequenceHead,BlankNullSequence,1000,730,730,5,5,,820,{},"{""___""}",{},"{{""symb"", ""___"", ""expr""}}","{""Pattern"", ""["", ""symb"", "","", ""BlankNullSequence"", ""["", ""expr"", ""]"", ""]""}","Pattern[symb, BlankNullSequence[expr]]",Binary,Infix,Non,True, -NamedBlankOptional,Blank,990,730,730,5,5,,820,{},"{""_.""}",{},"{{""symb"", ""_.""}}","{""Optional"", ""["", ""Pattern"", "","", ""Blank"", ""["", ""]"", ""]"", ""]""}","Optional[Pattern[symb, Blank[]]]",Unary,Postfix,Non,True, -NamedBlankSequence,BlankSequence,990,730,730,5,5,,820,{},"{""__""}",{},"{{""symb"", ""__""}}","{""Pattern"", ""["", ""symb"", "","", ""BlankSequence"", ""["", ""]"", ""]""}","Pattern[symb, BlankSequence[]]",Unary,Postfix,Non,True, -NamedBlankSequenceHead,BlankSequence,1000,730,730,5,5,,820,{},"{""__""}",{},"{{""symb"", ""__"", ""expr""}}","{""Pattern"", ""["", ""symb"", "","", ""BlankSequence"", ""["", ""expr"", ""]"", ""]""}","Pattern[symb, BlankSequence[expr]]",Binary,Infix,Non,True, -Nand,Nand,290,215,220,55,55,330,330,{},"{""⊼""}",{},"{{""expr1"", ""⊼"", ""expr2""}}","{""Nand"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Nand[expr1, expr2]",Binary,Infix,None,True, -NestedGreaterGreater,NestedGreaterGreater,360,290,290,,50,390,390,{},"{""⪢""}",{},"{{""x"", ""⪢"", ""y""}}","{""NestedGreaterGreater"", ""["", ""x"", "","", ""y"", ""]""}","NestedGreaterGreater[x, y]",Binary,Infix,None,False, -NestedLessLess,NestedLessLess,360,290,290,,50,390,390,{},"{""⪡""}",{},"{{""x"", ""⪡"", ""y""}}","{""NestedLessLess"", ""["", ""x"", "","", ""y"", ""]""}","NestedLessLess[x, y]",Binary,Infix,None,False, -NonCommutativeMultiply,NonCommutativeMultiply,650,510,510,27,27,,607,{},"{""**""}",{},"{{""expr1"", ""**"", ""expr2""}}","{""NonCommutativeMultiply"", ""["", ""expr1"", "","", ""expr2"", ""]""}","NonCommutativeMultiply[expr1, expr2]",Binary,Infix,None,True, -Nor,Nor,270,215,210,57,57,320,320,{},"{""⊽""}",{},"{{""expr1"", ""⊽"", ""expr2""}}","{""Nor"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Nor[expr1, expr2]",Binary,Infix,None,True, -Not,Not,300,230,230,54,54,340,340,"{""!"", ""¬""}",{},{},"{{""!"", ""expr""}, {""¬"", ""expr""}}","{""Not"", ""["", ""expr"", ""]""}",Not[expr],Unary,Prefix,Right,True, -NotCongruent,NotCongruent,360,290,290,,50,390,390,{},"{""≢""}",{},"{{""x"", ""≢"", ""y""}}","{""NotCongruent"", ""["", ""x"", "","", ""y"", ""]""}","NotCongruent[x, y]",Binary,Infix,None,False, -NotCupCap,NotCupCap,360,290,290,,50,390,390,{},"{""≭""}",{},"{{""x"", ""≭"", ""y""}}","{""NotCupCap"", ""["", ""x"", "","", ""y"", ""]""}","NotCupCap[x, y]",Binary,Infix,None,False, -NotDoubleVerticalBar,NotDoubleVerticalBar,350,280,280,50,50.5,390,385,{},"{""∦""}",{},"{{""expr1"", ""∦"", ""expr2""}}","{""NotDoubleVerticalBar"", ""["", ""expr1"", "","", ""expr2"", ""]""}","NotDoubleVerticalBar[expr1, expr2]",Binary,Infix,None,False, -NotElement,NotElement,320,250,250,52,52,360,360,{},"{""∉""}",{},"{{""expr1"", ""∉"", ""expr2""}}","{""NotElement"", ""["", ""expr1"", "","", ""expr2"", ""]""}","NotElement[expr1, expr2]",Binary,Infix,None,True, -NotEqualTilde,NotEqualTilde,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotEqualTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotEqualTilde[x, y]",Binary,Infix,None,False, -NotExists,NotExists,310,240,240,53,53,350,350,"{""∄""}",{},{},"{{""∄"", ""expr""}}","{""NotExists"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -NotGreater,NotGreater,360,290,290,,50,390,390,{},"{""≯""}",{},"{{""x"", ""≯"", ""y""}}","{""NotGreater"", ""["", ""x"", "","", ""y"", ""]""}","NotGreater[x, y]",Binary,Infix,None,False, -NotGreaterEqual,NotGreaterEqual,360,290,290,,50,390,390,{},"{""≱""}",{},"{{""x"", ""≱"", ""y""}}","{""NotGreaterEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterEqual[x, y]",Binary,Infix,None,False, -NotGreaterFullEqual,NotGreaterFullEqual,360,290,290,,50,390,390,{},"{""≩""}",{},"{{""x"", ""≩"", ""y""}}","{""NotGreaterFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterFullEqual[x, y]",Binary,Infix,None,False, -NotGreaterGreater,NotGreaterGreater,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotGreaterGreater"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterGreater[x, y]",Binary,Infix,None,False, -NotGreaterLess,NotGreaterLess,360,290,290,,50,390,390,{},"{""≹""}",{},"{{""x"", ""≹"", ""y""}}","{""NotGreaterLess"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterLess[x, y]",Binary,Infix,None,False, -NotGreaterSlantEqual,NotGreaterSlantEqual,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotGreaterSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterSlantEqual[x, y]",Binary,Infix,None,False, -NotGreaterTilde,NotGreaterTilde,360,290,290,,50,390,390,{},"{""≵""}",{},"{{""x"", ""≵"", ""y""}}","{""NotGreaterTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotGreaterTilde[x, y]",Binary,Infix,None,False, -NotHumpDownHump,NotHumpDownHump,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotHumpDownHump"", ""["", ""x"", "","", ""y"", ""]""}","NotHumpDownHump[x, y]",Binary,Infix,None,False, -NotHumpEqual,NotHumpEqual,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotHumpEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotHumpEqual[x, y]",Binary,Infix,None,False, -NotLeftTriangle,NotLeftTriangle,360,290,290,,50,390,390,{},"{""⋪""}",{},"{{""x"", ""⋪"", ""y""}}","{""NotLeftTriangle"", ""["", ""x"", "","", ""y"", ""]""}","NotLeftTriangle[x, y]",Binary,Infix,None,False, -NotLeftTriangleBar,NotLeftTriangleBar,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotLeftTriangleBar"", ""["", ""x"", "","", ""y"", ""]""}","NotLeftTriangleBar[x, y]",Binary,Infix,None,False, -NotLeftTriangleEqual,NotLeftTriangleEqual,360,290,290,,50,390,390,{},"{""⋬""}",{},"{{""x"", ""⋬"", ""y""}}","{""NotLeftTriangleEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotLeftTriangleEqual[x, y]",Binary,Infix,None,False, -NotLess,NotLess,360,290,290,,50,390,390,{},"{""≮""}",{},"{{""x"", ""≮"", ""y""}}","{""NotLess"", ""["", ""x"", "","", ""y"", ""]""}","NotLess[x, y]",Binary,Infix,None,False, -NotLessEqual,NotLessEqual,360,290,290,,50,390,390,{},"{""≰""}",{},"{{""x"", ""≰"", ""y""}}","{""NotLessEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotLessEqual[x, y]",Binary,Infix,None,False, -NotLessFullEqual,NotLessFullEqual,360,290,290,,50,390,390,{},"{""≨""}",{},"{{""x"", ""≨"", ""y""}}","{""NotLessFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotLessFullEqual[x, y]",Binary,Infix,None,False, -NotLessGreater,NotLessGreater,360,290,290,,50,390,390,{},"{""≸""}",{},"{{""x"", ""≸"", ""y""}}","{""NotLessGreater"", ""["", ""x"", "","", ""y"", ""]""}","NotLessGreater[x, y]",Binary,Infix,None,False, -NotLessLess,NotLessLess,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotLessLess"", ""["", ""x"", "","", ""y"", ""]""}","NotLessLess[x, y]",Binary,Infix,None,False, -NotLessSlantEqual,NotLessSlantEqual,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotLessSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotLessSlantEqual[x, y]",Binary,Infix,None,False, -NotLessTilde,NotLessTilde,360,290,290,,50,390,390,{},"{""≴""}",{},"{{""x"", ""≴"", ""y""}}","{""NotLessTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotLessTilde[x, y]",Binary,Infix,None,False, -NotNestedGreaterGreater,NotNestedGreaterGreater,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotNestedGreaterGreater"", ""["", ""x"", "","", ""y"", ""]""}","NotNestedGreaterGreater[x, y]",Binary,Infix,None,False, -NotNestedLessLess,NotNestedLessLess,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotNestedLessLess"", ""["", ""x"", "","", ""y"", ""]""}","NotNestedLessLess[x, y]",Binary,Infix,None,False, -NotPrecedes,NotPrecedes,360,290,290,,50,390,390,{},"{""⊀""}",{},"{{""x"", ""⊀"", ""y""}}","{""NotPrecedes"", ""["", ""x"", "","", ""y"", ""]""}","NotPrecedes[x, y]",Binary,Infix,None,False, -NotPrecedesEqual,NotPrecedesEqual,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotPrecedesEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotPrecedesEqual[x, y]",Binary,Infix,None,False, -NotPrecedesSlantEqual,NotPrecedesSlantEqual,360,290,290,,50,390,390,{},"{""⋠""}",{},"{{""x"", ""⋠"", ""y""}}","{""NotPrecedesSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotPrecedesSlantEqual[x, y]",Binary,Infix,None,False, -NotPrecedesTilde,NotPrecedesTilde,360,290,290,,50,390,390,{},"{""⋨""}",{},"{{""x"", ""⋨"", ""y""}}","{""NotPrecedesTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotPrecedesTilde[x, y]",Binary,Infix,None,False, -NotReverseElement,NotReverseElement,320,250,250,,52,360,360,{},"{""∌""}",{},"{{""x"", ""∌"", ""y""}}","{""NotReverseElement"", ""["", ""x"", "","", ""y"", ""]""}","NotReverseElement[x, y]",Binary,Infix,None,False, -NotRightTriangle,NotRightTriangle,360,290,290,,50,390,390,{},"{""⋫""}",{},"{{""x"", ""⋫"", ""y""}}","{""NotRightTriangle"", ""["", ""x"", "","", ""y"", ""]""}","NotRightTriangle[x, y]",Binary,Infix,None,False, -NotRightTriangleBar,NotRightTriangleBar,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotRightTriangleBar"", ""["", ""x"", "","", ""y"", ""]""}","NotRightTriangleBar[x, y]",Binary,Infix,None,False, -NotRightTriangleEqual,NotRightTriangleEqual,360,290,290,,50,390,390,{},"{""⋭""}",{},"{{""x"", ""⋭"", ""y""}}","{""NotRightTriangleEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotRightTriangleEqual[x, y]",Binary,Infix,None,False, -NotSquareSubset,NotSquareSubset,320,250,250,,52,360,360,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotSquareSubset"", ""["", ""x"", "","", ""y"", ""]""}","NotSquareSubset[x, y]",Binary,Infix,None,False, -NotSquareSubsetEqual,NotSquareSubsetEqual,320,250,250,,52,360,360,{},"{""⋢""}",{},"{{""x"", ""⋢"", ""y""}}","{""NotSquareSubsetEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSquareSubsetEqual[x, y]",Binary,Infix,None,False, -NotSquareSuperset,NotSquareSuperset,320,250,250,,52,360,360,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotSquareSuperset"", ""["", ""x"", "","", ""y"", ""]""}","NotSquareSuperset[x, y]",Binary,Infix,None,False, -NotSquareSupersetEqual,NotSquareSupersetEqual,320,250,250,,52,360,360,{},"{""⋣""}",{},"{{""x"", ""⋣"", ""y""}}","{""NotSquareSupersetEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSquareSupersetEqual[x, y]",Binary,Infix,None,False, -NotSubset,NotSubset,320,250,250,,52,360,360,{},"{""⊄""}",{},"{{""x"", ""⊄"", ""y""}}","{""NotSubset"", ""["", ""x"", "","", ""y"", ""]""}","NotSubset[x, y]",Binary,Infix,None,False, -NotSubsetEqual,NotSubsetEqual,320,250,250,,52,360,360,{},"{""⊈""}",{},"{{""x"", ""⊈"", ""y""}}","{""NotSubsetEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSubsetEqual[x, y]",Binary,Infix,None,False, -NotSucceeds,NotSucceeds,360,290,290,,50,390,390,{},"{""⊁""}",{},"{{""x"", ""⊁"", ""y""}}","{""NotSucceeds"", ""["", ""x"", "","", ""y"", ""]""}","NotSucceeds[x, y]",Binary,Infix,None,False, -NotSucceedsEqual,NotSucceedsEqual,360,290,290,,50,390,390,{},"{""""}",{},"{{""x"", """", ""y""}}","{""NotSucceedsEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSucceedsEqual[x, y]",Binary,Infix,None,False, -NotSucceedsSlantEqual,NotSucceedsSlantEqual,360,290,290,,50,390,390,{},"{""⋡""}",{},"{{""x"", ""⋡"", ""y""}}","{""NotSucceedsSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSucceedsSlantEqual[x, y]",Binary,Infix,None,False, -NotSucceedsTilde,NotSucceedsTilde,360,290,290,,50,390,390,{},"{""⋩""}",{},"{{""x"", ""⋩"", ""y""}}","{""NotSucceedsTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotSucceedsTilde[x, y]",Binary,Infix,None,False, -NotSuperset,NotSuperset,320,250,250,,52,360,360,{},"{""⊅""}",{},"{{""x"", ""⊅"", ""y""}}","{""NotSuperset"", ""["", ""x"", "","", ""y"", ""]""}","NotSuperset[x, y]",Binary,Infix,None,False, -NotSupersetEqual,NotSupersetEqual,320,250,250,,52,360,360,{},"{""⊉""}",{},"{{""x"", ""⊉"", ""y""}}","{""NotSupersetEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotSupersetEqual[x, y]",Binary,Infix,None,False, -NotTilde,NotTilde,360,290,290,,50,390,390,{},"{""≁""}",{},"{{""x"", ""≁"", ""y""}}","{""NotTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotTilde[x, y]",Binary,Infix,None,False, -NotTildeEqual,NotTildeEqual,360,290,290,,50,390,390,{},"{""≄""}",{},"{{""x"", ""≄"", ""y""}}","{""NotTildeEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotTildeEqual[x, y]",Binary,Infix,None,False, -NotTildeFullEqual,NotTildeFullEqual,360,290,290,,50,390,390,{},"{""≇""}",{},"{{""x"", ""≇"", ""y""}}","{""NotTildeFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","NotTildeFullEqual[x, y]",Binary,Infix,None,False, -NotTildeTilde,NotTildeTilde,360,290,290,,50,390,390,{},"{""≉""}",{},"{{""x"", ""≉"", ""y""}}","{""NotTildeTilde"", ""["", ""x"", "","", ""y"", ""]""}","NotTildeTilde[x, y]",Binary,Infix,None,False, -NotVerticalBar,NotVerticalBar,350,280,280,50,50.5,390,385,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""NotVerticalBar"", ""["", ""expr1"", "","", ""expr2"", ""]""}","NotVerticalBar[expr1, expr2]",Binary,Infix,None,False, -NumberBase,None,-10,670,760,,1,,-10,{},"{""^^""}",{},"{{""n"", ""^^"", ""digits""}}","{""n"", ""^^"", ""digits""}",n^^digits,Binary,Infix,Non,True,Interprets digits as a number literal in base n. The base n must be a positive integer no greater than 36. -NumberMagnitude,None,-10,670,760,,1,,-10,{},"{""*^""}",{},"{{""number"", ""*^"", ""magnitude""}}","{""number"", ""*^"", ""magnitude""}",number*^magnitude,Binary,Infix,Non,True,"Gives mantissa*base^magnitude, where base^^mantissa=number and magnitude is a decimal number expressed without ^^, `, or ``. Only allowed in a number literal, and only after any ` or ``." -NumberPrecision,None,-10,670,760,,1,,-10,{},"{""`""}",{},"{{""number"", ""`"", ""s""}}","{""number"", ""`"", ""s""}",number`s,Binary,Infix,Non,True,"Specifies the precision of number, where s is a positive decimal expressed without using ^^ or `. Any magnitude must come after `.""" -NumberPrecisionPostfix,None,-10,670,760,,1,,-10,{},"{""`""}",{},"{{""number"", ""`""}}","{""number"", ""`""}",number`,Unary,Postfix,Left,True,"Specifies the precision of number to be $MachinePrecision. Any magnitude must come after `.""" -Optional,Optional,190,140,140,64,64,,270,{},"{"":""}",{},"{{""patt"", "":"", ""expr""}}","{""Optional"", ""["", ""patt"", "","", ""expr"", ""]""}","Optional[patt, expr]",Binary,Infix,Non,True, -Or,Or,270,215,210,57,57,320,320,{},"{""||"", ""∨""}",{},"{{""expr1"", ""||"", ""expr2""}, {""expr1"", ""∨"", ""expr2""}}","{""Or"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Or[expr1, expr2]",Binary,Infix,None,True, -Out,Out,1030,670,735,4,4,,830,"{""%%""}",{},{},"{{""%%"", ""…"", ""%""}}","{""Out"", ""["", ""-"", ""n"", ""]""}",Out[-n],Nullary,None,Non,True, -OutNumber,Out,1020,670,735,4,4,,830,"{""%""}",{},{},"{{""%"", ""n""}}","{""Out"", ""["", ""n"", ""]""}",Out[n],Unary,Prefix,Non,True, -OverscriptBox,Overscript,950,670,710,7,7,,790,{},"{""\&""}",{},"{{""expr1"", ""\&"", ""expr2""}}","{""OverscriptBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Infix,"Missing[""Unknown""]",True, -OverunderscriptBox,Underoverscript,940,670,700,7,7.5,,785,{},"{""\&""}","{""\%""}","{{""expr1"", ""\&"", ""expr2"", ""\%"", ""expr3""}}","{""UnderoverscriptBox"", ""["", ""expr1"", "","", ""expr3"", "","", ""expr2"", ""]""}",,Ternary,Infix,"Missing[""Unknown""]",True, -ParameterizedFunction,Function,50,90,40,75,75,190,190,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""Function"", ""["", ""{"", ""expr1"", ""}"", "","", ""expr2"", ""]""}","Function[expr1, expr2]",Binary,Infix,Right,True,The arrow form of Function. -Parentheses,None,-10,670,760,,1,,-10,"{""(""}",{},"{"")""}","{{""("", ""expr"", "")""}}",,,Unary,Matchfix,Non,True, -Part,Part,890,670,670,10,10,,762,{},"{""[["", ""〚""}","{""]]"", ""〛""}","{{""expr1"", ""[["", ""expr2"", ""]]""}, {""expr1"", ""〚"", ""expr2"", ""〛""}}","{""Part"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Part[expr1, expr2, \[Ellipsis]]",n-ary,Postfix,Left,True, -PartialD,PartialD,710,670,550,24,24,620,620,"{""∂""}",{},{},"{{""∂"", ""expr""}}","{""PartialD"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -PartialFractionBox,PartialFractionBox,570,670,470,,31,,590,{},"{""""}",{},"{{""expr"", """"}}","{""FractionBox"", ""["", ""expr"", "",""\["", ""Placeholder"", ""]""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -PartialOverscriptBox,PartialOverscriptBox,950,670,710,,7,,790,{},"{""""}",{},"{{""expr"", """"}}","{""FractionBox"", ""["", ""expr"", "",""\["", ""Placeholder"", ""]""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -PartialSubscriptBox,PartialSubscriptBox,920,670,690,,8,,775,{},"{""""}",{},"{{""expr"", """"}}","{""FractionBox"", ""["", ""expr"", "",""\["", ""Placeholder"", ""]""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -PartialSuperscriptBox,PartialSuperscriptBox,750,670,590,,21,,660,{},"{""""}",{},"{{""expr"", """"}}","{""FractionBox"", ""["", ""expr"", "",""\["", ""Placeholder"", ""]""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -PartialUnderscriptBox,PartialUnderscriptBox,950,670,710,,7,,790,{},"{""""}",{},"{{""expr"", """"}}","{""FractionBox"", ""["", ""expr"", "",""\["", ""Placeholder"", ""]""]""}",,Unary,Postfix,Left,False,This operator is an invisible Unicode character and is used in the layout of displayed expressions. -Pattern,Pattern,190,150,150,64,64,,275,{},"{"":""}",{},"{{""symb"", "":"", ""expr""}}","{""Pattern"", ""["", ""symb"", "","", ""expr"", ""]""}","Pattern[symb, expr]",Binary,Infix,Non,True, -PatternTest,PatternTest,910,680,680,9,9,,770,{},"{""?""}",{},"{{""expr1"", ""?"", ""expr2""}}","{""PatternTest"", ""["", ""expr1"", "","", ""expr2"", ""]""}","PatternTest[expr1, expr2]",Binary,Infix,"Missing[""Unknown""]",True, -PermutationProduct,PermutationProduct,600,520,486,,29.7,605,602,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""PermutationProduct"", ""["", ""expr1"", "","", ""expr2"", ""]""}","PermutationProduct[expr1, expr2]",Binary,Infix,None,True, -Perpendicular,Perpendicular,220,190,190,,60,390,390,{},"{""⟂""}",{},"{{""expr1"", ""⟂"", ""expr2""}}","{""Perpendicular"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Perpendicular[expr1, expr2]",Binary,Infix,None,False, -Piecewise,Piecewise,680,480,535,1,25.5,600,610,"{""""}",{},{},"{{"""", ""expr""}}","{""Piecewise"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Plus,Plus,400,310,310,46,46,,430,{},"{""+"", """"}",{},"{{""expr1"", ""+"", ""expr2""}, {""expr1"", """", ""expr2""}}","{""Plus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Plus[expr1, expr2]",Binary,Infix,None,True,Operator Notations includes usages with invisible unicode characters. -PlusMinus,PlusMinus,400,310,310,46,46,430,430,{},"{""±""}",{},"{{""expr1"", ""±"", ""expr2""}}","{""PlusMinus"", ""["", ""expr1"", "","", ""expr2"", ""]""}","PlusMinus[expr1, expr2]",Binary,Infix,Left,False, -Power,Power,750,590,590,21,21,,660,{},"{""^""}",{},"{{""expr1"", ""^"", ""expr2""}}","{""Power"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Power[expr1, expr2]",Binary,Infix,Right,True, -Precedes,Precedes,360,290,290,,50,390,390,{},"{""≺""}",{},"{{""x"", ""≺"", ""y""}}","{""Precedes"", ""["", ""x"", "","", ""y"", ""]""}","Precedes[x, y]",Binary,Infix,None,False, -PrecedesEqual,PrecedesEqual,360,290,290,,50,390,390,{},"{""⪯""}",{},"{{""x"", ""⪯"", ""y""}}","{""PrecedesEqual"", ""["", ""x"", "","", ""y"", ""]""}","PrecedesEqual[x, y]",Binary,Infix,None,False, -PrecedesSlantEqual,PrecedesSlantEqual,360,290,290,,50,390,390,{},"{""≼""}",{},"{{""x"", ""≼"", ""y""}}","{""PrecedesSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","PrecedesSlantEqual[x, y]",Binary,Infix,None,False, -PrecedesTilde,PrecedesTilde,360,290,290,,50,390,390,{},"{""≾""}",{},"{{""x"", ""≾"", ""y""}}","{""PrecedesTilde"", ""["", ""x"", "","", ""y"", ""]""}","PrecedesTilde[x, y]",Binary,Infix,None,False, -PreDecrement,PreDecrement,870,660,660,12,12,,750,"{""--""}",{},{},"{{""--"", ""expr""}}","{""PreDecrement"", ""["", ""expr"", ""]""}",PreDecrement[expr],Unary,Prefix,Right,True, -PreIncrement,PreIncrement,870,660,660,12,12,,750,"{""++""}",{},{},"{{""++"", ""expr""}}","{""PreIncrement"", ""["", ""expr"", ""]""}",PreIncrement[expr],Unary,Prefix,Right,True, -ProbabilityPr,ProbabilityPr,420,325,325,,45,455,445,"{""""}",{},{},"{{"""", ""expr""}}","{""ProbabilityPr"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Product,Product,480,380,380,40,40,500,500,"{""∏""}",{},{},"{{""∏"", ""expr""}}","{""Product"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True,Usage and Parse may not be correct. -Proportion,Proportion,360,290,290,,50,390,390,{},"{""∷""}",{},"{{""x"", ""∷"", ""y""}}","{""Proportion"", ""["", ""x"", "","", ""y"", ""]""}","Proportion[x, y]",Binary,Infix,None,False, -Proportional,Proportional,360,290,290,,50,390,390,{},"{""∝""}",{},"{{""x"", ""∝"", ""y""}}","{""Proportional"", ""["", ""x"", "","", ""y"", ""]""}","Proportional[x, y]",Binary,Infix,None,False, -Put,Put,40,30,30,76,76,,180,{},"{"">>""}",{},"{{""expr"", "">>"", ""filename""}}","{""Put"", ""["", ""expr"", "","", """", ""filename""}","Put[expr, ""filename""]",Binary,Infix,Left,True, -PutAppend,PutAppend,40,30,30,76,76,,180,{},"{"">>>""}",{},"{{""expr"", "">>>"", ""filename""}}","{""PutAppend"", ""["", ""expr"", "","", """", ""filename""}","PutAppend[expr, ""filename""]",Binary,Infix,Left,True, -RadicalBox,RadicalBox,730,670,570,22,22,,640,"{""\@""}",{},"{""\%""}","{{""\@"", ""expr1"", ""\%"", ""expr2""}}","{""RadicalBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Prefix,Right,True, -RawBackquote,None,-10,670,760,,1,,-10,{},"{""``""}",{},"{{""number"", ""``"", ""s""}}","{""number"", ""``"", ""s""}",number``s,Binary,Infix,Non,True,"Specifies the accuracy (in number of digits to the right of decimal) of number, where s is a positive decimal expressed without using ^^ or `. A magnitude must come after ``." -Repeated,Repeated,200,170,170,62,62,,280,{},"{""..""}",{},"{{""expr"", ""..""}}","{""Repeated"", ""["", ""expr"", ""]""}",Repeated[expr],Unary,Postfix,Left,True, -RepeatedNull,RepeatedNull,200,170,170,62,62,,280,{},"{""...""}",{},"{{""expr"", ""...""}}","{""RepeatedNull"", ""["", ""expr"", ""]""}",RepeatedNull[expr],Unary,Postfix,Left,True, -ReplaceAll,ReplaceAll,130,110,110,68,68,,240,{},"{""/.""}",{},"{{""expr1"", ""/."", ""expr2""}}","{""ReplaceAll"", ""["", ""expr1"", "","", ""expr2"", ""]""}","ReplaceAll[expr1, expr2]",Binary,Infix,Left,True, -ReplaceRepeated,ReplaceRepeated,130,110,110,68,68,,240,{},"{""//.""}",{},"{{""expr1"", ""//."", ""expr2""}}","{""ReplaceRepeated"", ""["", ""expr1"", "","", ""expr2"", ""]""}","ReplaceRepeated[expr1, expr2]",Binary,Infix,Left,True, -ReverseElement,ReverseElement,320,250,250,,52,360,360,{},"{""∋""}",{},"{{""x"", ""∋"", ""y""}}","{""ReverseElement"", ""["", ""x"", "","", ""y"", ""]""}","ReverseElement[x, y]",Binary,Infix,None,False, -ReverseEquilibrium,ReverseEquilibrium,360,290,290,,50,390,390,{},"{""⇋""}",{},"{{""x"", ""⇋"", ""y""}}","{""ReverseEquilibrium"", ""["", ""x"", "","", ""y"", ""]""}","ReverseEquilibrium[x, y]",Binary,Infix,None,False, -ReverseUpEquilibrium,ReverseUpEquilibrium,740,580,580,,21.5,650,650,{},"{""⥯""}",{},"{{""x"", ""⥯"", ""y""}}","{""ReverseUpEquilibrium"", ""["", ""x"", "","", ""y"", ""]""}","ReverseUpEquilibrium[x, y]",Binary,Infix,None,False, -RightArrow,RightArrow,340,270,270,,50.6,380,380,{},"{""→""}",{},"{{""x"", ""→"", ""y""}}","{""RightArrow"", ""["", ""x"", "","", ""y"", ""]""}","RightArrow[x, y]",Binary,Infix,None,False, -RightArrowBar,RightArrowBar,340,270,270,,50.6,380,380,{},"{""⇥""}",{},"{{""x"", ""⇥"", ""y""}}","{""RightArrowBar"", ""["", ""x"", "","", ""y"", ""]""}","RightArrowBar[x, y]",Binary,Infix,None,False, -RightArrowLeftArrow,RightArrowLeftArrow,340,270,270,,50.6,380,380,{},"{""⇄""}",{},"{{""x"", ""⇄"", ""y""}}","{""RightArrowLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","RightArrowLeftArrow[x, y]",Binary,Infix,None,False, -RightComposition,RightComposition,850,624,650,13,13,,740,{},"{""/*""}",{},"{{""expr1"", ""/*"", ""expr2""}}","{""RightComposition"", ""["", ""expr1"", "","", ""expr2"", ""]""}","RightComposition[expr1, expr2]",Binary,Infix,None,True, -RightDownTeeVector,RightDownTeeVector,740,580,580,,21.5,650,650,{},"{""⥝""}",{},"{{""x"", ""⥝"", ""y""}}","{""RightDownTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","RightDownTeeVector[x, y]",Binary,Infix,None,False, -RightDownVector,RightDownVector,740,580,580,,21.5,650,650,{},"{""⇂""}",{},"{{""x"", ""⇂"", ""y""}}","{""RightDownVector"", ""["", ""x"", "","", ""y"", ""]""}","RightDownVector[x, y]",Binary,Infix,None,False, -RightDownVectorBar,RightDownVectorBar,740,580,580,,21.5,650,650,{},"{""⥕""}",{},"{{""x"", ""⥕"", ""y""}}","{""RightDownVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","RightDownVectorBar[x, y]",Binary,Infix,None,False, -RightTee,RightTee,230,190,190,,59.6,300,300,{},"{""⊢""}",{},"{{""expr1"", ""⊢"", ""expr2""}}","{""RightTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","RightTee[expr1, expr2]",Binary,Infix,Right,False, -RightTeeArrow,RightTeeArrow,340,270,270,,50.6,380,380,{},"{""↦""}",{},"{{""x"", ""↦"", ""y""}}","{""RightTeeArrow"", ""["", ""x"", "","", ""y"", ""]""}","RightTeeArrow[x, y]",Binary,Infix,None,False, -RightTeeVector,RightTeeVector,340,270,270,,50.6,380,380,{},"{""⥛""}",{},"{{""x"", ""⥛"", ""y""}}","{""RightTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","RightTeeVector[x, y]",Binary,Infix,None,False, -RightTriangle,RightTriangle,360,290,290,,50,390,390,{},"{""⊳""}",{},"{{""x"", ""⊳"", ""y""}}","{""RightTriangle"", ""["", ""x"", "","", ""y"", ""]""}","RightTriangle[x, y]",Binary,Infix,None,False, -RightTriangleBar,RightTriangleBar,360,290,290,,50,390,390,{},"{""⧐""}",{},"{{""x"", ""⧐"", ""y""}}","{""RightTriangleBar"", ""["", ""x"", "","", ""y"", ""]""}","RightTriangleBar[x, y]",Binary,Infix,None,False, -RightTriangleEqual,RightTriangleEqual,360,290,290,,50,390,390,{},"{""⊵""}",{},"{{""x"", ""⊵"", ""y""}}","{""RightTriangleEqual"", ""["", ""x"", "","", ""y"", ""]""}","RightTriangleEqual[x, y]",Binary,Infix,None,False, -RightUpDownVector,RightUpDownVector,740,580,580,,21.5,650,650,{},"{""⥏""}",{},"{{""x"", ""⥏"", ""y""}}","{""RightUpDownVector"", ""["", ""x"", "","", ""y"", ""]""}","RightUpDownVector[x, y]",Binary,Infix,None,False, -RightUpTeeVector,RightUpTeeVector,740,580,580,,21.5,650,650,{},"{""⥜""}",{},"{{""x"", ""⥜"", ""y""}}","{""RightUpTeeVector"", ""["", ""x"", "","", ""y"", ""]""}","RightUpTeeVector[x, y]",Binary,Infix,None,False, -RightUpVector,RightUpVector,740,580,580,,21.5,650,650,{},"{""↾""}",{},"{{""x"", ""↾"", ""y""}}","{""RightUpVector"", ""["", ""x"", "","", ""y"", ""]""}","RightUpVector[x, y]",Binary,Infix,None,False, -RightUpVectorBar,RightUpVectorBar,740,580,580,,21.5,650,650,{},"{""⥔""}",{},"{{""x"", ""⥔"", ""y""}}","{""RightUpVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","RightUpVectorBar[x, y]",Binary,Infix,None,False, -RightVector,RightVector,340,270,270,,50.6,380,380,{},"{""⇀""}",{},"{{""x"", ""⇀"", ""y""}}","{""RightVector"", ""["", ""x"", "","", ""y"", ""]""}","RightVector[x, y]",Binary,Infix,None,False, -RightVectorBar,RightVectorBar,340,270,270,,50.6,380,380,{},"{""⥓""}",{},"{{""x"", ""⥓"", ""y""}}","{""RightVectorBar"", ""["", ""x"", "","", ""y"", ""]""}","RightVectorBar[x, y]",Binary,Infix,None,False, -RoundImplies,RoundImplies,250,240,200,,59,310,310,{},"{""⥰""}",{},"{{""expr1"", ""⥰"", ""expr2""}}","{""RoundImplies"", ""["", ""expr1"", "","", ""expr2"", ""]""}","RoundImplies[expr1, expr2]",Binary,Infix,Right,False, -Rule,Rule,140,120,120,67,67.5,250,250,{},"{""->"", """"}",{},"{{""expr1"", ""->"", ""expr2""}, {""expr1"", """", ""expr2""}}","{""Rule"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Rule[expr1, expr2]",Binary,Infix,Right,True, -RuleDelayed,RuleDelayed,150,120,120,67,67,250,250,{},"{"":>"", """"}",{},"{{""expr1"", "":>"", ""expr2""}, {""expr1"", """", ""expr2""}}","{""RuleDelayed"", ""["", ""expr1"", "","", ""expr2"", ""]""}","RuleDelayed[expr1, expr2]",Binary,Infix,Right,True, -SameQ,SameQ,330,290,260,51,51,,370,{},"{""===""}",{},"{{""expr1"", ""==="", ""expr2""}}","{""SameQ"", ""["", ""expr1"", "","", ""expr2"", ""]""}","SameQ[expr1, expr2]",Binary,Infix,None,True, -Set,Set,50,40,40,75,75,,190,{},"{""=""}",{},"{{""expr1"", ""="", ""expr2""}}","{""Set"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Set[expr1, expr2]",Binary,Infix,Right,True, -SetDelayed,SetDelayed,50,40,40,75,75,,190,{},"{"":=""}",{},"{{""expr1"", "":="", ""expr2""}}","{""SetDelayed"", ""["", ""expr1"", "","", ""expr2"", ""]""}","SetDelayed[expr1, expr2]",Binary,Infix,Right,True, -ShortDownArrow,ShortDownArrow,740,580,580,,21.5,650,650,{},"{""""}",{},"{{""x"", """", ""y""}}","{""ShortDownArrow"", ""["", ""x"", "","", ""y"", ""]""}","ShortDownArrow[x, y]",Binary,Infix,None,False, -ShortLeftArrow,ShortLeftArrow,340,270,270,,50.6,380,380,{},"{""""}",{},"{{""x"", """", ""y""}}","{""ShortLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","ShortLeftArrow[x, y]",Binary,Infix,None,False, -ShortRightArrow,ShortRightArrow,340,270,270,,50.6,380,380,{},"{""""}",{},"{{""x"", """", ""y""}}","{""ShortRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","ShortRightArrow[x, y]",Binary,Infix,None,False, -ShortUpArrow,ShortUpArrow,740,580,580,,21.5,650,650,{},"{""""}",{},"{{""x"", """", ""y""}}","{""ShortUpArrow"", ""["", ""x"", "","", ""y"", ""]""}","ShortUpArrow[x, y]",Binary,Infix,None,False, -Skeleton,Skeleton,-10,670,760,,1,-10,-10,"{""""}",{},"{""""}","{{"""", ""n"", """"}}","{""Skeleton"",""["",""n"",""]""}",Skeleton[n],Unary,Matchfix,Non,True, -Slot,Slot,1040,740,740,3,3,,840,"{""#""}",{},{},"{{""#""}}","{""Slot"", ""["", ""1"", ""]""}",Slot[1],Nullary,None,Non,True, -SlotNumber,Slot,1050,740,740,3,3,,840,"{""#""}",{},{},"{{""#"", ""n""}}","{""Slot"", ""["", ""n"", ""]""}",Slot[n],Unary,Prefix,Non,True, -SlotSequence,SlotSequence,1040,740,740,3,3,,840,"{""##""}",{},{},"{{""##""}}","{""SlotSequence"", ""["", ""1"", ""]""}",SlotSequence[1],Nullary,None,Non,True, -SlotSequenceNumber,SlotSequence,1050,740,740,3,3,,840,"{""##""}",{},{},"{{""##"", ""n""}}","{""SlotSequence"", ""["", ""n"", ""]""}",SlotSequence[n],Unary,Prefix,Non,True, -SmallCircle,SmallCircle,670,530,530,25,25.6,607,609,{},"{""∘""}",{},"{{""expr1"", ""∘"", ""expr2""}}","{""SmallCircle"", ""["", ""expr1"", "","", ""expr2"", ""]""}","SmallCircle[expr1, expr2]",Binary,Infix,None,False, -Span,Span,390,305,305,49,47,,420,"{"";;""}","{"";;""}","{"";;""}","{{""i"", "";;"", ""j"", "";;"", ""k""}}","{""Span"", ""["", ""i"", "","", ""j"", "","", ""k"", ""]""}","Span[i, j, k]",Ternary,Infix,Non,True, -Sqrt,Sqrt,730,670,570,22,22,650,640,"{""√""}",{},{},"{{""√"", ""expr""}}","{""Sqrt"", ""["", ""expr"", ""]""}",Sqrt[expr],Unary,Prefix,Right,True, -SqrtBox,Sqrt,730,670,570,22,22,650,640,"{""\@""}",{},{},"{{""\@"", ""expr""}}","{""SqrtBox"", ""["", ""expr"", ""]""}",,Unary,Prefix,Right,True, -Square,Square,690,540,540,25,25,610,611,"{""""}",{},{},"{{"""", ""expr""}}","{""Square"", ""["", ""expr"", ""]""}",Square[expr],Unary,Prefix,Right,False, -SquareIntersection,SquareIntersection,390,305,305,,47,420,420,{},"{""⊓""}",{},"{{""x"", ""⊓"", ""y""}}","{""SquareIntersection"", ""["", ""x"", "","", ""y"", ""]""}","SquareIntersection[x, y]",Binary,Infix,None,False, -SquareSubset,SquareSubset,320,250,250,,52,360,360,{},"{""⊏""}",{},"{{""x"", ""⊏"", ""y""}}","{""SquareSubset"", ""["", ""x"", "","", ""y"", ""]""}","SquareSubset[x, y]",Binary,Infix,None,False, -SquareSubsetEqual,SquareSubsetEqual,320,250,250,,52,360,360,{},"{""⊑""}",{},"{{""x"", ""⊑"", ""y""}}","{""SquareSubsetEqual"", ""["", ""x"", "","", ""y"", ""]""}","SquareSubsetEqual[x, y]",Binary,Infix,None,False, -SquareSuperset,SquareSuperset,320,250,250,,52,360,360,{},"{""⊐""}",{},"{{""x"", ""⊐"", ""y""}}","{""SquareSuperset"", ""["", ""x"", "","", ""y"", ""]""}","SquareSuperset[x, y]",Binary,Infix,None,False, -SquareSupersetEqual,SquareSupersetEqual,320,250,250,,52,360,360,{},"{""⊒""}",{},"{{""x"", ""⊒"", ""y""}}","{""SquareSupersetEqual"", ""["", ""x"", "","", ""y"", ""]""}","SquareSupersetEqual[x, y]",Binary,Infix,None,False, -SquareUnion,SquareUnion,380,300,300,,48,410,410,{},"{""⊔""}",{},"{{""x"", ""⊔"", ""y""}}","{""SquareUnion"", ""["", ""x"", "","", ""y"", ""]""}","SquareUnion[x, y]",Binary,Infix,None,False, -Star,Star,490,390,390,39,39,510,510,{},"{""⋆""}",{},"{{""expr1"", ""⋆"", ""expr2""}}","{""Star"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Star[expr1, expr2]",Binary,Infix,None,False, -StringExpression,StringExpression,180,135,135,65,65,,265,{},"{""~~""}",{},"{{""expr1"", ""~~"", ""expr2""}}","{""StringExpression"", ""["", ""expr1"", "","", ""exrp2"", ""]""}","StringExpression[expr1, expr2]",Binary,Infix,None,True, -StringJoin,StringJoin,760,600,600,20,20,,670,{},"{""<>""}",{},"{{""expr1"", ""<>"", ""expr2""}}","{""StringJoin"", ""["", ""expr1"", "","", ""expr2"", ""]""}","StringJoin[expr1, expr2]",Binary,Infix,None,True, -SubscriptBox,Subscript,920,670,690,8,8,,775,{},"{""\_""}",{},"{{""expr1"", ""\_"", ""expr2""}}","{""SubscriptBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Infix,"Missing[""Unknown""]",True, -Subset,Subset,320,250,250,52,52,360,360,{},"{""⊂""}",{},"{{""expr1"", ""⊂"", ""expr2""}}","{""Subset"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Subset[expr1, expr2]",Binary,Infix,None,False, -SubsetEqual,SubsetEqual,320,250,250,,52,360,360,{},"{""⊆""}",{},"{{""x"", ""⊆"", ""y""}}","{""SubsetEqual"", ""["", ""x"", "","", ""y"", ""]""}","SubsetEqual[x, y]",Binary,Infix,None,False, -SubsuperscriptBox,Subsuperscript,920,670,690,8,8,,775,{},"{""\_""}","{""\%""}","{{""expr1"", ""\_"", ""expr2"", ""\%"", ""expr3""}}","{""SubsuperscriptBox"", ""["", ""expr1"", "","", ""expr2"", "","", ""expr3"", ""]""}",,Ternary,Infix,"Missing[""Unknown""]",True, -Subtract,Subtract,400,310,310,46,46,430,430,{},"{""-"", ""−""}",{},"{{""expr1"", ""-"", ""expr2""}, {""expr1"", ""−"", ""expr2""}}","{""Subtract"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Plus[expr1, Times[-1, expr2]]",Binary,Infix,Left,True,Operator Notations includes usages with invisible unicode characters. -SubtractFrom,SubtractFrom,120,100,100,69,69,,230,{},"{""-=""}",{},"{{""expr1"", ""-="", ""expr2""}}","{""SubtractFrom"", ""["", ""expr1"", "","", ""expr2"", ""]""}","SubtractFrom[expr1, expr2]",Binary,Infix,Right,True, -Succeeds,Succeeds,360,290,290,,50,390,390,{},"{""≻""}",{},"{{""x"", ""≻"", ""y""}}","{""Succeeds"", ""["", ""x"", "","", ""y"", ""]""}","Succeeds[x, y]",Binary,Infix,None,False, -SucceedsEqual,SucceedsEqual,360,290,290,,50,390,390,{},"{""⪰""}",{},"{{""x"", ""⪰"", ""y""}}","{""SucceedsEqual"", ""["", ""x"", "","", ""y"", ""]""}","SucceedsEqual[x, y]",Binary,Infix,None,False, -SucceedsSlantEqual,SucceedsSlantEqual,360,290,290,,50,390,390,{},"{""≽""}",{},"{{""x"", ""≽"", ""y""}}","{""SucceedsSlantEqual"", ""["", ""x"", "","", ""y"", ""]""}","SucceedsSlantEqual[x, y]",Binary,Infix,None,False, -SucceedsTilde,SucceedsTilde,360,290,290,,50,390,390,{},"{""≿""}",{},"{{""x"", ""≿"", ""y""}}","{""SucceedsTilde"", ""["", ""x"", "","", ""y"", ""]""}","SucceedsTilde[x, y]",Binary,Infix,None,False, -SuchThat,SuchThat,210,180,180,61,61,290,290,{},"{""∍""}",{},"{{""expr1"", ""∍"", ""expr2""}}","{""SuchThat"", ""["", ""expr1"", "","", ""expr2"", ""]""}","SuchThat[expr1, expr2]",Binary,Infix,Right,False, -Sum,Sum,420,320,325,45,45,440,445,"{""∑""}",{},{},"{{""∑"", ""expr""}}","{""Sum"", ""["", ""expr"", ""]""}",Sum[expr],Unary,Prefix,Right,True,Usage and Parse may not be correct. -SuperDagger,SuperDagger,780,0,605,,18,,695,{},"{""^†""}",{},"{{""expr"", ""^†""}}","{""SuperDagger"", ""["", ""expr"", ""]""}","Power[expr, \[Dagger]]",Unary,Postfix,Left,True, -SuperscriptBox,SuperscriptBox,750,590,590,21,21,,660,{},"{""\^""}",{},"{{""expr1"", ""\^"", ""expr2""}}","{""SuperscriptBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Infix,Right,True, -Superset,Superset,320,250,250,52,52,360,360,{},"{""⊃""}",{},"{{""expr1"", ""⊃"", ""expr2""}}","{""Superset"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Superset[expr1, expr2]",Binary,Infix,None,False, -SupersetEqual,SupersetEqual,320,250,250,,52,360,360,{},"{""⊇""}",{},"{{""x"", ""⊇"", ""y""}}","{""SupersetEqual"", ""["", ""x"", "","", ""y"", ""]""}","SupersetEqual[x, y]",Binary,Infix,None,False, -SupersubscriptBox,SubsuperscriptBox,750,690,590,21,21,,660,{},"{""\^""}","{""\%""}","{{""expr1"", ""\^"", ""expr2"", ""\%"", ""expr3""}}","{""SubsuperscriptBox"", ""["", ""expr1"", "","", ""expr3"", "","", ""expr2"", ""]""}",,Ternary,Infix,Right,True, -TagSet,TagSet,50,670,40,75,75,,190,{},"{""/:""}","{""=""}","{{""symb"", ""/:"", ""expr1"", ""="", ""expr2""}}","{""TagSet"", ""["", ""symb"", "","", ""expr1"", ""]""}","TagSet[symb, expr1, expr2]",Ternary,Infix,Right,True, -TagSetDelayed,TagSetDelayed,50,670,40,75,75,,190,{},"{""/:""}","{"":=""}","{{""symb"", ""/:"", ""expr1"", "":="", ""expr2""}}","{""TagSetDelayed"", ""["", ""symb"", "","", ""expr1"", ""]""}","TagSetDelayed[symb, expr1, expr2]",Ternary,Infix,Right,True, -TagUnset,TagUnset,50,670,40,75,75,,190,{},"{""/;""}","{""=.""}","{{""symb"", ""/;"", ""expr"", ""=.""}}","{""TagUnset"", ""["", ""symb"", "","", ""expr"", ""]""}","Unset[Condition[symb, expr]]",Binary,Infix,Right,True, -TensorProduct,TensorProduct,610,495,487,,29.6,602,603,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""TensorProduct"", ""["", ""expr1"", "","", ""expr2"", ""]""}","TensorProduct[expr1, expr2]",Binary,Infix,None,True, -TensorWedge,TensorWedge,620,500,488,,29.5,603,604,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""TensorWedge"", ""["", ""expr1"", "","", ""expr2"", ""]""}","TensorWedge[expr1, expr2]",Binary,Infix,None,True, -Therefore,Therefore,70,50,50,74,73.5,201,202,{},"{""∴""}",{},"{{""expr1"", ""∴"", ""expr2""}}","{""Therefore"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Therefore[expr1, expr2]",Binary,Infix,Right,False,Precedence of Therefore and Because are swapped in notebook versus ToExpression. -Tilde,Tilde,360,290,290,,50,390,390,{},"{""∼""}",{},"{{""x"", ""∼"", ""y""}}","{""Tilde"", ""["", ""x"", "","", ""y"", ""]""}","Tilde[x, y]",Binary,Infix,None,False, -TildeEqual,TildeEqual,360,290,290,,50,390,390,{},"{""≃""}",{},"{{""x"", ""≃"", ""y""}}","{""TildeEqual"", ""["", ""x"", "","", ""y"", ""]""}","TildeEqual[x, y]",Binary,Infix,None,False, -TildeFullEqual,TildeFullEqual,360,290,290,,50,390,390,{},"{""≅""}",{},"{{""x"", ""≅"", ""y""}}","{""TildeFullEqual"", ""["", ""x"", "","", ""y"", ""]""}","TildeFullEqual[x, y]",Binary,Infix,None,False, -TildeTilde,TildeTilde,360,290,290,,50,390,390,{},"{""≈""}",{},"{{""x"", ""≈"", ""y""}}","{""TildeTilde"", ""["", ""x"", "","", ""y"", ""]""}","TildeTilde[x, y]",Binary,Infix,None,False, -Times,Times,500,400,400,38,38,520,520,{},"{""*"", ""×"", """,{},"{{""expr1"", ""*"", ""expr2""}, {""expr1"", ""expr2""}, {""expr1"", ""×"", ""expr2""}, {""expr1"", ""","{""Times"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Times[expr1, expr2]",Nullary,None,None,True,Operator Notations includes usages with invisible unicode characters. -TimesBy,TimesBy,120,100,100,69,69,,230,{},"{""*=""}",{},"{{""expr1"", ""*="", ""expr2""}}","{""TimesBy"", ""["", ""expr1"", "","", ""expr2"", ""]""}","TimesBy[expr1, expr2]",Binary,Infix,Right,True, -TortoiseShellBracket,TortoiseShellBracket,-10,670,760,,1,-10,-10,"{""〔""}",{},"{""〕""}","{{""〔"", ""expr"", ""〕""}}",,,Unary,Matchfix,Non,True, -Transpose,Transpose,780,670,605,18,18,695,695,{},"{""""}",{},"{{""expr"", """"}}","{""Transpose"", ""["", ""expr"", ""]""}",Transpose[expr],Unary,Postfix,Left,True, -TwoWayRule,TwoWayRule,160,125,125,,66.5,255,255,{},"{""<->"", """"}",{},"{{""expr1"", ""<->"", ""expr2""}, {""expr1"", """", ""expr2""}}","{""TwoWayRule"", ""["", ""expr1"", "","", ""expr2"", ""]""}","TwoWayRule[expr1, expr2]",Binary,Infix,Right,True, -UnaryMinusPlus,MinusPlus,580,310,480,30,30,430,600,"{""∓""}",{},{},"{{""∓"", ""expr""}}","{""MinusPlus"", ""["", ""expr"", ""]""}",MinusPlus[expr],Unary,Prefix,Right,False, -UnaryPlus,Plus,580,310,480,,30,,600,"{""+""}",{},{},"{{""+"", ""expr""}}","{""Plus"", ""["", ""expr"", ""]""}",Plus[expr],Unary,Prefix,Right,True,Converts to expr on input. -UnaryPlusMinus,PlusMinus,580,310,480,30,30,430,600,"{""±""}",{},{},"{{""±"", ""expr""}}","{""PlusMinus"", ""["", ""expr"", ""]""}",PlusMinus[expr],Unary,Prefix,Right,False, -UnderoverscriptBox,Underoverscript,940,670,700,7,7.5,,785,{},"{""\+""}","{""\%""}","{{""expr1"", ""\+"", ""expr2"", ""\%"", ""expr3""}}","{""UnderoverscriptBox"", ""["", ""expr1"", "","", ""expr2"", "","", ""expr3"", ""]""}",,Ternary,Infix,"Missing[""Unknown""]",True, -UnderscriptBox,Underscript,950,670,710,7,7,,790,{},"{""\+""}",{},"{{""expr1"", ""\+"", ""expr2""}}","{""UnderscriptBox"", ""["", ""expr1"", "","", ""expr2"", ""]""}",,Binary,Infix,"Missing[""Unknown""]",True, -UndirectedEdge,UndirectedEdge,370,295,295,,49,395,395,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""UndirectedEdge"", ""["", ""expr1"", "","", ""expr2"", ""]""}","UndirectedEdge[expr1, expr2]",Binary,Infix,None,True, -Unequal,Unequal,360,290,290,50,50,390,390,{},"{""!="", ""≠""}",{},"{{""expr1"", ""!="", ""expr2""}, {""expr1"", ""≠"", ""expr2""}}","{""Unequal"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Unequal[expr1, expr2]",Binary,Infix,None,True, -Union,Union,380,300,300,48,48,410,410,{},"{""⋃""}",{},"{{""expr1"", ""⋃"", ""expr2""}}","{""Union"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Union[expr1, expr2]",Binary,Infix,None,True, -UnionPlus,UnionPlus,380,300,300,,48,410,410,{},"{""⊎""}",{},"{{""x"", ""⊎"", ""y""}}","{""UnionPlus"", ""["", ""x"", "","", ""y"", ""]""}","UnionPlus[x, y]",Binary,Infix,None,False, -UnsameQ,UnsameQ,330,290,260,51,51,,370,{},"{""=!=""}",{},"{{""expr1"", ""=!="", ""expr2""}}","{""UnsameQ"", ""["", ""expr1"", "","", ""expr2"", ""]""}","UnsameQ[expr1, expr2]",Binary,Infix,None,True, -Unset,Unset,50,670,40,75,75,,190,{},"{""=.""}",{},"{{""expr"", ""=.""}}","{""Unset"", ""["", ""expr"", ""]""}",Unset[expr],Unary,Postfix,Left,True, -UpArrow,UpArrow,740,580,580,,21.5,650,650,{},"{""↑""}",{},"{{""x"", ""↑"", ""y""}}","{""UpArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpArrow[x, y]",Binary,Infix,None,False, -UpArrowBar,UpArrowBar,740,580,580,,21.5,650,650,{},"{""⤒""}",{},"{{""x"", ""⤒"", ""y""}}","{""UpArrowBar"", ""["", ""x"", "","", ""y"", ""]""}","UpArrowBar[x, y]",Binary,Infix,None,False, -UpArrowDownArrow,UpArrowDownArrow,740,580,580,,21.5,650,650,{},"{""⇅""}",{},"{{""x"", ""⇅"", ""y""}}","{""UpArrowDownArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpArrowDownArrow[x, y]",Binary,Infix,None,False, -UpDownArrow,UpDownArrow,740,580,580,,21.5,650,650,{},"{""↕""}",{},"{{""x"", ""↕"", ""y""}}","{""UpDownArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpDownArrow[x, y]",Binary,Infix,None,False, -UpEquilibrium,UpEquilibrium,740,580,580,,21.5,650,650,{},"{""⥮""}",{},"{{""x"", ""⥮"", ""y""}}","{""UpEquilibrium"", ""["", ""x"", "","", ""y"", ""]""}","UpEquilibrium[x, y]",Binary,Infix,None,False, -UpperLeftArrow,UpperLeftArrow,340,270,270,,50.6,380,380,{},"{""↖""}",{},"{{""x"", ""↖"", ""y""}}","{""UpperLeftArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpperLeftArrow[x, y]",Binary,Infix,None,False, -UpperRightArrow,UpperRightArrow,340,270,270,,50.6,380,380,{},"{""↗""}",{},"{{""x"", ""↗"", ""y""}}","{""UpperRightArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpperRightArrow[x, y]",Binary,Infix,None,False, -UpSet,UpSet,50,40,40,75,75,,190,{},"{""^=""}",{},"{{""expr1"", ""^="", ""expr2""}}","{""UpSet"", ""["", ""expr1"", "","", ""expr2"", ""]""}","UpSet[expr1, expr2]",Binary,Infix,Right,True, -UpSetDelayed,UpSetDelayed,50,40,40,75,75,,190,{},"{""^:=""}",{},"{{""expr1"", ""^:="", ""expr2""}}","{""UpSetDelayed"", ""["", ""expr1"", "","", ""expr2"", ""]""}","UpSetDelayed[expr1, expr2]",Binary,Infix,Right,True, -UpTee,UpTee,220,190,190,60,60,390,390,{},"{""⊥""}",{},"{{""expr1"", ""⊥"", ""expr2""}}","{""UpTee"", ""["", ""expr1"", "","", ""expr2"", ""]""}","UpTee[expr1, expr2]",Binary,Infix,Left,False, -UpTeeArrow,UpTeeArrow,740,580,580,,21.5,650,650,{},"{""↥""}",{},"{{""x"", ""↥"", ""y""}}","{""UpTeeArrow"", ""["", ""x"", "","", ""y"", ""]""}","UpTeeArrow[x, y]",Binary,Infix,None,False, -Vee,Vee,530,430,430,,35,550,550,{},"{""⋁""}",{},"{{""x"", ""⋁"", ""y""}}","{""Vee"", ""["", ""x"", "","", ""y"", ""]""}","Vee[x, y]",Binary,Infix,None,False, -VerticalBar,VerticalBar,350,280,280,50,50.5,390,385,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""VerticalBar"", ""["", ""expr1"", "","", ""expr2"", ""]""}","VerticalBar[expr1, expr2]",Binary,Infix,None,False, -VerticalSeparator,VerticalSeparator,80,60,60,73,73,202,203,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""VerticalSeparator"", ""["", ""expr1"", "","", ""expr2"", ""]""}","VerticalSeparator[expr1, expr2]",Binary,Infix,None,False, -VerticalTilde,VerticalTilde,470,370,370,41,41,490,490,{},"{""≀""}",{},"{{""expr1"", ""≀"", ""expr2""}}","{""VerticalTilde"", ""["", ""expr1"", "","", ""expr2"", ""]""}","VerticalTilde[expr1, expr2]",Binary,Infix,None,False, -Wedge,Wedge,540,440,440,34,34,560,560,{},"{""⋀""}",{},"{{""expr1"", ""⋀"", ""expr2""}}","{""Wedge"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Wedge[expr1, expr2]",Binary,Infix,None,False, -WhiteCornerBracket,WhiteCornerBracket,-10,670,760,,1,-10,-10,"{""『""}",{},"{""』""}","{{""『"", ""expr"", ""』""}}",,,Unary,Matchfix,Non,True, -Xnor,Xnor,280,215,215,56,56,325,325,{},"{""""}",{},"{{""expr1"", """", ""expr2""}}","{""Xnor"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Xnor[expr1, expr2]",Binary,Infix,None,True, -Xor,Xor,280,215,215,56,56,325,325,{},"{""⊻""}",{},"{{""expr1"", ""⊻"", ""expr2""}}","{""Xor"", ""["", ""expr1"", "","", ""expr2"", ""]""}","Xor[expr1, expr2]",Binary,Infix,None,True, diff --git a/mathics_scanner/data/named-characters.yml b/mathics_scanner/data/named-characters.yml index e6a3e96..c31e3da 100644 --- a/mathics_scanner/data/named-characters.yml +++ b/mathics_scanner/data/named-characters.yml @@ -4933,21 +4933,20 @@ FreakedSmiley: # the YAML name doesn't have to match since there is just ASCII for that. # Since we use the name Function as the key here, the YAML name for "&" has # to be different, since YAML keys need to be unique. - +# Note \[Function] is not the same as \[RightTeeArrow] the +# unicode for each has to be different. Here we add +# "LONG". Function: amslatex: "\\mathsto" ascii: "|->" has-unicode-inverse: false is-letter-like: false operator-name: Function - # This needs to be greater than Alternative "|" which is - # 160 so that we don't treat |-> as | ->. - unicode-equivalent: "\u21A6" - unicode-equivalent-name: RIGHTWARDS ARROW FROM BAR + unicode-equivalent: "\u27FC" + unicode-equivalent-name: LONG RIGHTWARDS ARROW FROM BAR unicode-reference: https://www.compart.com/en/unicode/U+21A6 wl-reference: https://reference.wolfram.com/language/ref/character/Function.html wl-unicode: "\uF4A1" - wl-unicode-name: RIGHTWARDS ARROW FROM BAR # Alternative form of Function. We use FunctionAmpersand # since Function is already taken. See note above. diff --git a/mathics_scanner/data/operators.yml b/mathics_scanner/data/operators.yml index b486884..7c5251e 100644 --- a/mathics_scanner/data/operators.yml +++ b/mathics_scanner/data/operators.yml @@ -112,6 +112,8 @@ AddTo: meaningful: true # comments: +# Alternatives precedence needs to be greater than Function "|->" which is +# 90 so that we don't treat |-> as | ->. Alternatives: actual-precedence: 190 precedence: 160 @@ -1069,9 +1071,11 @@ Decrement: meaningful: true # comments: +# Definition precedence needs to be greater than Information "??" which is +# 5001 so that we don't treat ?? as ? ?. Definition: actual-precedence: 670 - precedence: 5000 # Seems a bit extreme. This is the old Mathics data. It needs to be one less than Information + precedence: 5000 # Seems a bit extreme. This is the old Mathics data. WolframLanguageData: None WolframLanguageData-corrected: None UnicodeCharacters.tr: None @@ -1079,7 +1083,7 @@ Definition: # N-tokens: None # L-tokens: None # O-tokens: None - usage: ?Times + usage: "?Times" # parse: None FullForm: None arity: Unary @@ -1196,7 +1200,7 @@ DirectedEdge: # O-tokens: {} usage: "u → v" # parse: {"DirectedEdge", "[", "u", ",", "v", "]"} - FullForm: DirectedEdge[expr1, expr2] + FullForm: DirectedEdge[u, v] arity: Binary affix: Infix associativity: "non-associative" @@ -1367,7 +1371,7 @@ DotEqual: # N-tokens: {} # L-tokens: {"≐"} # O-tokens: {} - # usage: "x ≐ y" + usage: "x ≐ y" # parse: {"DotEqual", "[", "x", ",", "y", "]"} FullForm: DotEqual[x, y] arity: Binary @@ -1387,7 +1391,7 @@ DoubleAngleBracket: # N-tokens: {"《"} # L-tokens: {} # O-tokens: {"》"} - # usage: "《expr》" + usage: "《expr》" # parse: FullForm: arity: Unary @@ -1426,7 +1430,7 @@ DoubleContourIntegral: # N-tokens: {"∯"} # L-tokens: {} # O-tokens: {""} - # usage: "∯ f(x) x" + usage: "∯ f(x) x" # parse: {"DoubleContourIntegral", "[", "expr1", ",", "expr2", "]"} FullForm: Integrate[expr1, expr2] arity: Binary @@ -1445,7 +1449,7 @@ DoubleDownArrow: # N-tokens: {} # L-tokens: {"⇓"} # O-tokens: {} - # usage: "x ⇓ y" + usage: "x ⇓ y" # parse: {"DoubleDownArrow", "[", "x", ",", "y", "]"} FullForm: DoubleDownArrow[x, y] arity: Binary @@ -1464,7 +1468,7 @@ DoubleLeftArrow: # N-tokens: {} # L-tokens: {"⇐"} # O-tokens: {} - # usage: "x ⇐ y" + usage: "x ⇐ y" # parse: {"DoubleLeftArrow", "[", "x", ",", "y", "]"} FullForm: DoubleLeftArrow[x, y] arity: Binary @@ -1483,7 +1487,7 @@ DoubleLeftRightArrow: # N-tokens: {} # L-tokens: {"⇔"} # O-tokens: {} - # usage: "x ⇔ y" + usage: "x ⇔ y" # parse: {"DoubleLeftRightArrow", "[", "x", ",", "y", "]"} FullForm: DoubleLeftRightArrow[x, y] arity: Binary @@ -1502,7 +1506,7 @@ DoubleLeftTee: # N-tokens: {} # L-tokens: {"⫤"} # O-tokens: {} - # usage: "expr1 ⫤ expr2" + usage: "expr1 ⫤ expr2" # parse: {"DoubleLeftTee", "[", "expr1", ",", "expr2", "]"} FullForm: DoubleLeftTee[expr1, expr2] arity: Binary @@ -1521,7 +1525,7 @@ DoubleLongLeftArrow: # N-tokens: {} # L-tokens: {"⟸"} # O-tokens: {} - # usage: "x ⟸ y" + usage: "x ⟸ y" # parse: {"DoubleLongLeftArrow", "[", "x", ",", "y", "]"} FullForm: DoubleLongLeftArrow[x, y] arity: Binary @@ -1540,7 +1544,7 @@ DoubleLongLeftRightArrow: # N-tokens: {} # L-tokens: {"⟺"} # O-tokens: {} - # usage: "x ⟺ y" + usage: "x ⟺ y" # parse: {"DoubleLongLeftRightArrow", "[", "x", ",", "y", "]"} FullForm: DoubleLongLeftRightArrow[x, y] arity: Binary @@ -1559,7 +1563,7 @@ DoubleLongRightArrow: # N-tokens: {} # L-tokens: {"⟹"} # O-tokens: {} - # usage: "x ⟹ y" + usage: "x ⟹ y" # parse: {"DoubleLongRightArrow", "[", "x", ",", "y", "]"} FullForm: DoubleLongRightArrow[x, y] arity: Binary @@ -1578,7 +1582,7 @@ DoubleRightArrow: # N-tokens: {} # L-tokens: {"⇒"} # O-tokens: {} - # usage: "x ⇒ y" + usage: "x ⇒ y" # parse: {"DoubleRightArrow", "[", "x", ",", "y", "]"} FullForm: DoubleRightArrow[x, y] arity: Binary @@ -1597,7 +1601,7 @@ DoubleRightTee: # N-tokens: {} # L-tokens: {"⊨"} # O-tokens: {} - # usage: "expr1 ⊨ expr2" + usage: "expr1 ⊨ expr2" # parse: {"DoubleRightTee", "[", "expr1", ",", "expr2", "]"} FullForm: DoubleRightTee[expr1, expr2] arity: Binary @@ -1616,7 +1620,7 @@ DoubleUpArrow: # N-tokens: {} # L-tokens: {"⇑"} # O-tokens: {} - # usage: "x ⇑ y" + usage: "x ⇑ y" # parse: {"DoubleUpArrow", "[", "x", ",", "y", "]"} FullForm: DoubleUpArrow[x, y] arity: Binary @@ -1635,7 +1639,7 @@ DoubleUpDownArrow: # N-tokens: {} # L-tokens: {"⇕"} # O-tokens: {} - # usage: "x ⇕ y" + usage: "x ⇕ y" # parse: {"DoubleUpDownArrow", "[", "x", ",", "y", "]"} FullForm: DoubleUpDownArrow[x, y] arity: Binary @@ -1654,7 +1658,7 @@ DoubleVerticalBar: # N-tokens: {} # L-tokens: {"∥"} # O-tokens: {} - # usage: "expr1 ∥ expr2" + usage: "expr1 ∥ expr2" # parse: {"DoubleVerticalBar", "[", "expr1", ",", "expr2", "]"} FullForm: DoubleVerticalBar[expr1, expr2] arity: Binary @@ -1673,7 +1677,7 @@ DownArrow: # N-tokens: {} # L-tokens: {"↓"} # O-tokens: {} - # usage: "x ↓ y" + usage: "x ↓ y" # parse: {"DownArrow", "[", "x", ",", "y", "]"} FullForm: DownArrow[x, y] arity: Binary @@ -1692,7 +1696,7 @@ DownArrowBar: # N-tokens: {} # L-tokens: {"⤓"} # O-tokens: {} - # usage: "x ⤓ y" + usage: "x ⤓ y" # parse: {"DownArrowBar", "[", "x", ",", "y", "]"} FullForm: DownArrowBar[x, y] arity: Binary @@ -1711,7 +1715,7 @@ DownArrowUpArrow: # N-tokens: {} # L-tokens: {"⇵"} # O-tokens: {} - # usage: "x ⇵ y" + usage: "x ⇵ y" # parse: {"DownArrowUpArrow", "[", "x", ",", "y", "]"} FullForm: DownArrowUpArrow[x, y] arity: Binary @@ -1730,7 +1734,7 @@ DownLeftRightVector: # N-tokens: {} # L-tokens: {"⥐"} # O-tokens: {} - # usage: "x ⥐ y" + usage: "x ⥐ y" # parse: {"DownLeftRightVector", "[", "x", ",", "y", "]"} FullForm: DownLeftRightVector[x, y] arity: Binary @@ -1749,7 +1753,7 @@ DownLeftTeeVector: # N-tokens: {} # L-tokens: {"⥞"} # O-tokens: {} - # usage: "x ⥞ y" + usage: "x ⥞ y" # parse: {"DownLeftTeeVector", "[", "x", ",", "y", "]"} FullForm: DownLeftTeeVector[x, y] arity: Binary @@ -1768,7 +1772,7 @@ DownLeftVector: # N-tokens: {} # L-tokens: {"↽"} # O-tokens: {} - # usage: "x ↽ y" + usage: "x ↽ y" # parse: {"DownLeftVector", "[", "x", ",", "y", "]"} FullForm: DownLeftVector[x, y] arity: Binary @@ -1787,7 +1791,7 @@ DownLeftVectorBar: # N-tokens: {} # L-tokens: {"⥖"} # O-tokens: {} - # usage: "x ⥖ y" + usage: "x ⥖ y" # parse: {"DownLeftVectorBar", "[", "x", ",", "y", "]"} FullForm: DownLeftVectorBar[x, y] arity: Binary @@ -1806,7 +1810,7 @@ DownRightTeeVector: # N-tokens: {} # L-tokens: {"⥟"} # O-tokens: {} - # usage: "x ⥟ y" + usage: "x ⥟ y" # parse: {"DownRightTeeVector", "[", "x", ",", "y", "]"} FullForm: DownRightTeeVector[x, y] arity: Binary @@ -1825,7 +1829,7 @@ DownRightVector: # N-tokens: {} # L-tokens: {"⇁"} # O-tokens: {} - # usage: "x ⇁ y" + usage: "x ⇁ y" # parse: {"DownRightVector", "[", "x", ",", "y", "]"} FullForm: DownRightVector[x, y] arity: Binary @@ -1844,7 +1848,7 @@ DownRightVectorBar: # N-tokens: {} # L-tokens: {"⥗"} # O-tokens: {} - # usage: "x ⥗ y" + usage: "x ⥗ y" # parse: {"DownRightVectorBar", "[", "x", ",", "y", "]"} FullForm: DownRightVectorBar[x, y] arity: Binary @@ -1863,7 +1867,7 @@ DownTee: # N-tokens: {} # L-tokens: {"⊤"} # O-tokens: {} - # usage: "expr1 ⊤ expr2" + usage: "expr1 ⊤ expr2" # parse: {"DownTee", "[", "expr1", ",", "expr2", "]"} FullForm: DownTee[expr1, expr2] arity: Binary @@ -1882,7 +1886,7 @@ DownTeeArrow: # N-tokens: {} # L-tokens: {"↧"} # O-tokens: {} - # usage: "x ↧ y" + usage: "x ↧ y" # parse: {"DownTeeArrow", "[", "x", ",", "y", "]"} FullForm: DownTeeArrow[x, y] arity: Binary @@ -1901,7 +1905,7 @@ Element: # N-tokens: {} # L-tokens: {"∈"} # O-tokens: {} - # usage: "expr1 ∈ expr2" + usage: "expr1 ∈ expr2" # parse: {"Element", "[", "expr1", ",", "expr2", "]"} FullForm: Element[expr1, expr2] arity: Binary @@ -1920,7 +1924,7 @@ Equal: # N-tokens: {} # L-tokens: {"==", "", ""} # O-tokens: {} - # usage: "expr1 == expr2; expr1  expr2; expr1  expr2" + usage: ["expr1 == expr2", "expr1  expr2", "expr1  expr2"] # parse: {"Equal", "[", "expr1", ",", "expr2", "]"} FullForm: Equal[expr1, expr2] arity: Binary @@ -1939,7 +1943,7 @@ EqualTilde: # N-tokens: {} # L-tokens: {"≂"} # O-tokens: {} - # usage: "expr1≂ expr2" + usage: "expr1 ≂ expr2" # parse: {"EqualTilde", "[", "x", ",", "y", "]"} FullForm: EqualTilde[x, y] arity: Binary @@ -1958,7 +1962,7 @@ Equilibrium: # N-tokens: {} # L-tokens: {"⇌"} # O-tokens: {} - # usage: "x ⇌ y" + usage: "x ⇌ y" # parse: {"Equilibrium", "[", "x", ",", "y", "]"} FullForm: Equilibrium[x, y] arity: Binary @@ -1977,7 +1981,7 @@ Equivalent: # N-tokens: {} # L-tokens: {"⧦"} # O-tokens: {} - # usage: "expr1 ⧦ expr2" + usage: "expr1 ⧦ expr2" # parse: {"Equivalent", "[", "expr1", ",", "expr2", "]"} FullForm: Equivalent[expr1, expr2] arity: Binary @@ -1996,7 +2000,7 @@ Exists: # N-tokens: {"∃"} # L-tokens: {} # O-tokens: {} - # usage: "∃ expr" + usage: "∃ expr" # parse: {"Exists", "[", "expr", "]"} arity: Unary affix: Prefix @@ -2015,7 +2019,7 @@ Factorial: # N-tokens: {} # L-tokens: {"!"} # O-tokens: {} - # usage: "n!" + usage: "n!" # parse: {"Factorial", "[", "n", "]"} FullForm: Factorial[expr] arity: Unary @@ -2034,7 +2038,7 @@ Factorial2: # N-tokens: {} # L-tokens: {"!!"} # O-tokens: {} - # usage: "n!!" + usage: "n!!" # parse: {"Factorial2", "[", "expr", "]"} FullForm: Factorial2[expr] arity: Unary @@ -2054,7 +2058,7 @@ Floor: # N-tokens: {"⌊"} # L-tokens: {} # O-tokens: {"⌋"} - # usage: "⌊ x ⌋" + usage: "⌊ x ⌋" # parse: {"Floor", "[", "x", "]"} FullForm: Floor[x] arity: Unary @@ -2073,7 +2077,7 @@ ForAll: # N-tokens: {"∀"} # L-tokens: {} # O-tokens: {} - # usage: "∀ expr" + usage: "∀ expr" # parse: {"ForAll", "[", "expr", "]"} arity: Unary affix: Prefix @@ -2092,7 +2096,7 @@ FormBox: # N-tokens: {} # L-tokens: {"\\`"} # O-tokens: {} - # usage: "expr1 \\ expr2" + usage: "expr1 \\ expr2" # parse: {"FormBox", "[", "expr2", ",", "expr1", "]"} arity: Binary affix: Infix @@ -2111,7 +2115,7 @@ FractionBox: # N-tokens: {} # L-tokens: {"\/"} # O-tokens: {} - # usage: "\\( expr1 \/ expr2 \\)" + usage: "\\( expr1 \/ expr2 \\)" # parse: {"FractionBox", "[", "expr1", ",", "expr2", "]"} arity: Binary affix: Infix @@ -2130,7 +2134,7 @@ FullwidthAngleBracket: # N-tokens: {"〈"} # L-tokens: {} # O-tokens: {"〉"} - # usage: "〈 expr 〉" + usage: "〈 expr 〉" # parse: arity: Unary affix: Matchfix @@ -2149,7 +2153,7 @@ FullwidthCurlyBracket: # N-tokens: {"{"} # L-tokens: {} # O-tokens: {"}"} - # usage: "{ expr }" + usage: "{ expr }" # parse: arity: Unary affix: Matchfix @@ -2168,7 +2172,7 @@ FullwidthParenthesis: # N-tokens: {"("} # L-tokens: {} # O-tokens: {")"} - # usage: "( expr )" + usage: "( expr )" # parse: arity: Unary affix: Matchfix @@ -2187,7 +2191,7 @@ FullwidthSquareBracket: # N-tokens: {"["} # L-tokens: {} # O-tokens: {"]"} - # usage: "[ expr ]" + usage: "[ expr ]" # parse: arity: Unary affix: Matchfix @@ -2195,6 +2199,8 @@ FullwidthSquareBracket: meaningful: true # comments: +# Function needs to be greater than Alternative "|" which is +# 160 so that we don't treat |-> as | ->. Function: actual-precedence: 110 precedence: 90 @@ -2205,7 +2211,7 @@ Function: # N-tokens: {} # L-tokens: {"&"} # O-tokens: {} - # usage: "body&" + usage: "body&" # parse: {"Function", "[", "body", "]"} FullForm: Function[body] arity: Unary @@ -2224,9 +2230,9 @@ FunctionApply: # N-tokens: {} # L-tokens: {"["} # O-tokens: {"]"} - # usage: "f [ body ]" + usage: "f [ body ]" # parse: {"f", "[", "expr1", ",", "…", "]"} - FullForm: f[expr1, \[Ellipsis]] + # FullForm: "f[expr1, \[Ellipsis]]" arity: n-ary affix: Postfix associativity: left @@ -2243,7 +2249,7 @@ FunctionApplyInfix: # N-tokens: {} # L-tokens: {"~"} # O-tokens: {} - # usage: "expr1", "~", "expr2 ~ expr3" + usage: "expr1 ~ expr2 ~ expr3" # parse: {"expr2", "[", "expr1", ",", "expr3", "]"} FullForm: expr2[expr1, expr3] arity: Ternary @@ -2264,7 +2270,7 @@ FunctionApplyPostfix: # O-tokens: {} # usage: "expr1 // expr2" # parse: {"expr2", "[", "expr1", "]"} - FullForm: expr2[expr1] + # FullForm: "expr2[expr1]" arity: Binary affix: Infix associativity: left @@ -2281,7 +2287,7 @@ FunctionApplyPrefix: # N-tokens: {} # L-tokens: {"@", ""} # O-tokens: {} - # usage: "expr1", "@", "expr2"}, {"expr1  expr2" + usage: ["expr1 @ expr2", "expr1  expr2"] # parse: {"expr1", "[", "expr2", "]"} FullForm: expr1[expr2] arity: Binary @@ -2302,7 +2308,7 @@ Get: # O-tokens: {} # usage: "<< filename" # parse: {"Get", "[", "", "filename"} - FullForm: Get["filename"] + # FullForm: Get["filename"] arity: Unary affix: Prefix associativity: right @@ -2320,7 +2326,7 @@ Gradient: # N-tokens: {""} # L-tokens: {} # O-tokens: {} - # usage: "{{"", "expr"}}" + usage: " expr" # parse: {"Gradient", "[", "expr", "]"} arity: Unary affix: Prefix @@ -2338,7 +2344,7 @@ Greater: # N-tokens: {} # L-tokens: {">"} # O-tokens: {} - # usage: "expr1 > expr2" + usage: "expr1 > expr2" # parse: {"Greater", "[", "expr1", ",", "expr2", "]"} FullForm: Greater[expr1, expr2] arity: Binary @@ -2357,7 +2363,7 @@ GreaterEqual: # N-tokens: {} # L-tokens: {">=", "≥"} # O-tokens: {} - # usage: "expr1", ">=", "expr2"}, {"expr1 ≥ expr2" + usage: ["expr1 >= expr2", "expr1 ≥ expr2"] # parse: {"GreaterEqual", "[", "expr1", ",", "expr2", "]"} FullForm: GreaterEqual[expr1, expr2] arity: Binary @@ -2376,7 +2382,7 @@ GreaterEqualLess: # N-tokens: {} # L-tokens: {"⋛"} # O-tokens: {} - # usage: "x ⋛ y" + usage: "x ⋛ y" # parse: {"GreaterEqualLess", "[", "x", ",", "y", "]"} FullForm: GreaterEqualLess[x, y] arity: Binary @@ -2395,7 +2401,7 @@ GreaterFullEqual: # N-tokens: {} # L-tokens: {"≧"} # O-tokens: {} - # usage: "x ≧ y" + usage: "x ≧ y" # parse: {"GreaterFullEqual", "[", "x", ",", "y", "]"} FullForm: GreaterFullEqual[x, y] arity: Binary @@ -2414,7 +2420,7 @@ GreaterGreater: # N-tokens: {} # L-tokens: {"≫"} # O-tokens: {} - # usage: "x ≫ y" + usage: "x ≫ y" # parse: {"GreaterGreater", "[", "x", ",", "y", "]"} FullForm: GreaterGreater[x, y] arity: Binary @@ -2433,7 +2439,7 @@ GreaterLess: # N-tokens: {} # L-tokens: {"≷"} # O-tokens: {} - # usage: "x ≷ y" + usage: "x ≷ y" # parse: {"GreaterLess", "[", "x", ",", "y", "]"} FullForm: GreaterLess[x, y] arity: Binary @@ -2453,7 +2459,7 @@ GreaterSlantEqual: # N-tokens: {} # L-tokens: {"⩾"} # O-tokens: {} - # usage: "x ⩾ y" + usage: "x ⩾ y" # parse: {"GreaterEqual", "[", "x", ",", "y", "]"} FullForm: GreaterEqual[x, y] arity: Binary @@ -2472,7 +2478,7 @@ GreaterTilde: # N-tokens: {} # L-tokens: {"≳"} # O-tokens: {} - # usage: "x ≳ y" + usage: "x ≳ y" # parse: {"GreaterTilde", "[", "x", ",", "y", "]"} FullForm: GreaterTilde[x, y] arity: Binary @@ -2491,7 +2497,7 @@ HumpDownHump: # N-tokens: {} # L-tokens: {"≎"} # O-tokens: {} - # usage: "x ≎ y" + usage: "x ≎ y" # parse: {"HumpDownHump", "[", "x", ",", "y", "]"} FullForm: HumpDownHump[x, y] arity: Binary @@ -2510,7 +2516,7 @@ HumpEqual: # N-tokens: {} # L-tokens: {"≏"} # O-tokens: {} - # usage: "x ≏ y" + usage: "x ≏ y" # parse: {"HumpEqual", "[", "x", ",", "y", "]"} FullForm: HumpEqual[x, y] arity: Binary @@ -2530,7 +2536,7 @@ ImplicitSequence: # N-tokens: {} # L-tokens: {"", ","} # O-tokens: {} - # usage: "expr1", "", "expr2"}, {"expr1 , expr2" + usage: ["expr1  expr2", "expr1, expr2"] # parse: {"AngleBracket", "[", "expr", ",", "…", "]"} FullForm: expr1, expr2 arity: Binary @@ -2549,7 +2555,7 @@ Implies: # N-tokens: {} # L-tokens: {""} # O-tokens: {} - # usage: "expr1  expr2" + usage: "expr1  expr2" # parse: {"Implies", "[", "expr1", ",", "expr2", "]"} FullForm: Implies[expr1, expr2] arity: Binary @@ -2569,7 +2575,7 @@ Increment: # N-tokens: {} # L-tokens: {"++"} # O-tokens: {} - # usage: "expr++" + usage: "expr++" # parse: {"Increment", "[", "expr", "]"} FullForm: Increment[expr] arity: Unary @@ -2587,7 +2593,7 @@ Infix: # N-tokens: None # L-tokens: None # O-tokens: None - usage: x ~ f ~ y + usage: "x ~ f ~ y" # parse: Infix[f[x, y]] FullForm: None arity: Ternary @@ -2596,6 +2602,8 @@ Infix: meaningful: true # comments: None +# Information precedence needs to be less than Definition "?" which is +# 5000 so that we don't treat ?? as ? ?. Information: actual-precedence: 670 precedence: 5001 # Seems a bit extreme. This is the old Mathics data @@ -2606,7 +2614,7 @@ Information: # N-tokens: None # L-tokens: None # O-tokens: None - usage: ??Times + usage: "??Times" # parse: None FullForm: None arity: Unary @@ -2626,7 +2634,7 @@ InlinePart: # N-tokens: {} # L-tokens: {""} # O-tokens: {} - # usage: "expr1  expr2" + usage: "expr1  expr2" # parse: {"InlinePart", "[", "expr1", ",", "expr2", "]"} FullForm: RowBox[List[expr1, InlinePart, expr2]] arity: Binary @@ -5950,7 +5958,7 @@ RightTeeArrow: # N-tokens: {} # L-tokens: {"↦"} # O-tokens: {} - # usage: "x ↦ y" + usage: "x ↦ y" # parse: {"RightTeeArrow", "[", "x", ",", "y", "]"} FullForm: RightTeeArrow[x, y] arity: Binary diff --git a/mathics_scanner/generate/operator_csv_to_yml.py b/mathics_scanner/generate/operator_csv_to_yml.py deleted file mode 100755 index eb027be..0000000 --- a/mathics_scanner/generate/operator_csv_to_yml.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python -""" -Creates operators.yml from CSV of: - https://github/WLTools/LanguageSpec/docs/Specification/Syntax/OperatorTableHTML.md - -with intro text from operators-intro.yaml and additional corrections in operators-additional.yaml -""" - -import csv -import datetime -import os.path as osp -from pathlib import Path -from typing import Dict - -import yaml - -# Root directory for all input data -DATA_DIR = Path(osp.normpath(osp.dirname(__file__)), "..", "data") - -# Into YAML text -intro_yaml_text_path = DATA_DIR / "operators-intro.yml" - -# CSV copied from: -# https://github.com/WLTools/LanguageSpec/blob/master/docs/Specification/Syntax/Operator%20Table.csv -csv_path = DATA_DIR / "OperatorTable.csv" - -# Additional YAML operators -additional_yaml_path = DATA_DIR / "operators-additional.yml" - -output_yaml_path = DATA_DIR / "operators.yml" - -yaml_fields = ( - "name", - "actual-precedence", - "Precedence", - "Precedence-corrected", - "WolframLanguageData", - "WolframLanguageData-corrected", - "UnicodeCharacters.tr", - "UnicodeCharacters-corrected.tr", - "N-tokens", - "L-tokens", - "O-tokens", - "usage", - "parse", - "FullForm", - "arity", - "affix", - "associativity", - "meaningfull", - "comments", -) - -operators: Dict[str, list] = {} -precedence_index = 2 -precedence_corrected_index = 3 - -with open(csv_path, newline="") as csvfile: - # FIXME: to handle "\" in fields - operator_reader = csv.reader(csvfile, delimiter=",") # quotechar= ? - - # count = 0 - is_header_line = True - for row in operator_reader: - # print(len(row)) - # for i in range(len(row)): - # print(count, row[i]) - # print() - # ( - # unofficial_name, - # name, - # actual_precedence, - # precedence, - # precedence_corrected, - # wl_data, - # wl_data_corrected, - # unicode_chars_tr, - # unicode_chars_corrected_tr, - # n_tokens, - # l_tokens, - # o_tokens, - # usage, - # parse, - # fullform, - # arity, - # affix, - # associativity, - # meaningfull, - # comments, - # ) = row - if is_header_line: - is_header_line = False - continue - - operators[row[0]] = row[1:] - # count += 1 - # if count > 5: - # break - -with open(output_yaml_path, "w") as output_yaml: - # Commented code for checking character_data versus - # Operator data - - # import yaml - - # with open(DATA_DIR / "named-characters.yml", "r") as fi: - # # Load the YAML data. - # character_data = yaml.load(i, Loader=yaml.FullLoader) - - date = datetime.datetime.now() - print(f"# Autogenerated from operator_csv_to_yaml.py on {date}", file=output_yaml) - print(open(intro_yaml_text_path, "r").read(), file=output_yaml) - - # Load in corrections - additional_operator_data = yaml.load( - open(additional_yaml_path, "r"), Loader=yaml.FullLoader - ) - operators.update(additional_operator_data) - - for name in sorted(operators.keys()): - print(f"\n{name}:", file=output_yaml) - info = operators[name] - if isinstance(info, dict): - # This entry comes from additional YAML information. Adjust - # so it looks like a list. - new_info = [] - # Below, we skip the first field, "name" which is the - # same as the key name. - for field in yaml_fields: - if field in info: - new_info.append(info[field]) - else: - new_info.append(None) - - info = new_info - - for i, field in enumerate(yaml_fields[1:]): - value = info[i + 1] - if field == "associativity": - if value in ("None", "Non"): - value = "null" - else: - value = value.lower() - if field == "meaningfull": - value = value.lower() - field = "meaningful" # spelling correction - elif field in ( - "L-tokens", - "N-tokens", - "O-tokens", - "comments", - "parse", - "usage", - ): - field = f"# {field}" - elif field == "Precedence": - if info[precedence_corrected_index] == value: - continue - # else: - # print(f"# mismatch: {name}") - field = "Precedence-Function" - elif field == "Precedence-corrected": - field = "precedence" - # Commented code checking character data versus operator data - # character_dict = character_data.get(name) - # if character_dict is None: - # print(f"Woah! do not see {name} in character YAML") - # else: - # character_precedence = character_dict.get("precedence") - # if character_precedence is not None: - # if character_precedence != value: - # print(f"Woah! mismatched character {name} {character_precedence}, {value}") - - print(f" {field}: {value}", file=output_yaml) diff --git a/mathics_scanner/tokeniser.py b/mathics_scanner/tokeniser.py index 678a221..2559599 100644 --- a/mathics_scanner/tokeniser.py +++ b/mathics_scanner/tokeniser.py @@ -1,14 +1,32 @@ -# -*- coding: utf-8 -*- - +""" +Tokenizer functions +""" +import os.path as osp import re import string -from typing import Optional +from typing import Dict, List, Optional, Tuple from mathics_scanner.characters import _letterlikes, _letters from mathics_scanner.errors import ScanError from mathics_scanner.prescanner import Prescanner +try: + import ujson +except ImportError: + import json as ujson # type: ignore[no-redef] + + +OPERATOR_DATA = {} +ROOT_DIR = osp.dirname(__file__) +OPERATORS_TABLE_PATH = osp.join(ROOT_DIR, "data", "operators.json") + + +FILENAME_TOKENS: List = [] +TOKENS: List[Tuple] = [] +TOKEN_INDICES: Dict = {} + + # special patterns NUMBER_PATTERN = r""" ( (?# Two possible forms depending on whether base is specified) @@ -18,6 +36,8 @@ (``?(\+|-)?(\d+\.?\d*|\d*\.?\d+)|`)? (?# Precision / Accuracy) (\*\^(\+|-)?\d+)? (?# Exponent) """ + +# TODO: Check what of this should be a part of the module interface. base_symbol_pattern = r"((?![0-9])([0-9${0}{1}])+)".format(_letters, _letterlikes) full_symbol_pattern_str = r"(`?{0}(`{0})*)".format(base_symbol_pattern) pattern_pattern = r"{0}?_(\.|(__?)?{0}?)?".format(full_symbol_pattern_str) @@ -33,254 +53,264 @@ ) full_names_pattern = r"(`?{0}(`{0})*)".format(base_names_pattern) -# FIXME: Revise to get Character Symbols from data/characters.json -tokens = [ - ("Definition", r"\? "), - ("Information", r"\?\? "), - ("Number", NUMBER_PATTERN), - ("String", r'"'), - ("Pattern", pattern_pattern), - ("Symbol", full_symbol_pattern_str), - ("SlotSequence", r"\#\#\d*"), - ("Slot", slot_pattern), - ("Out", r"\%(\%+|\d+)?"), - ("PutAppend", r"\>\>\>"), - ("Put", r"\>\>"), - ("Get", r"\<\<"), - ("RawLeftBracket", r" \[ "), - ("RawRightBracket", r" \] "), - ("RawLeftBrace", r" \{ "), - ("RawRightBrace", r" \} "), - ("RawLeftParenthesis", r" \( "), - ("RawRightParenthesis", r" \) "), - ("RawLeftAssociation", r" \<\| "), - ("RawRightAssociation", r" \|\> "), - ("RawComma", r" \, "), - ("Span", r" \;\; "), - ("MessageName", r" \:\: "), - # - # Enclosing Box delimiters - # - ("LeftRowBox", r" \\\( "), - ("RightRowBox", r" \\\) "), - # Box Operators which are valid only inside Box delimiters - ("InterpretedBox", r" \\\! "), - ("SuperscriptBox", r" \\\^ "), - ("SubscriptBox", r" \\\_ "), - ("OverscriptBox", r" \\\& "), - ("UnderscriptBox", r" \\\+ "), - ("OtherscriptBox", r" \\\% "), - ("FractionBox", r" \\\/ "), - ("SqrtBox", r" \\\@ "), - ("RadicalBox", r" \\\@ "), - ("FormBox", r" \\\` "), - # - # End Box Operators - # - ("Information", r"\?\?"), - ("PatternTest", r" \? "), - ("Increment", r" \+\+ "), - ("Decrement", r" \-\- "), - ("MapAll", r" \/\/\@ "), - ("Map", r" \/\@ "), - ("ApplyList", r" \@\@\@ "), - ("Apply", r" \@\@ "), - ("Composition", r" \@\* "), - ("Prefix", r" \@ "), - ("StringExpression", r" \~\~ "), - ("Infix", r" \~ "), - ("Derivative", r" \' "), - ("StringJoin", r" \<\> "), - ("NonCommutativeMultiply", r" \*\* "), - ("AddTo", r" \+\= "), - ("SubtractFrom", r" \-\= "), - ("TimesBy", r" \*\= "), - ("DivideBy", r" \/\= "), - ("Times", r" \*|\u00d7 "), - ("SameQ", r" \=\=\= "), - ("UnsameQ", r" \=\!\= "), - ("Equal", r" (\=\=) | \uf431 | \uf7d9 "), - ("Unequal", r" (\!\= ) | \u2260 "), - ("LessEqual", r" (\<\=) | \u2264 "), - ("LessSlantEqual", r" \u2a7d "), - ("GreaterEqual", r" (\>\=) | \u2265 "), - ("GreaterSlantEqual", r" \u2a7e "), - ("Greater", r" \> "), - ("Less", r" \< "), - # https://reference.wolfram.com/language/ref/character/DirectedEdge.html - # The official Unicode value is \u2192. - ("DirectedEdge", r" -> | \uf3d5|\u2192"), - ("Or", r" (\|\|) | \u2228 "), - ("And", r" (\&\&) | \u2227 "), - ("RepeatedNull", r" \.\.\. "), - ("Repeated", r" \.\. "), - ("Alternatives", r" \| "), - ("Rule", r" (\-\>)|\uF522 "), - ("RuleDelayed", r" (\:\>)|\uF51F "), - # https://reference.wolfram.com/language/ref/character/UndirectedEdge.html - # The official Unicode value is \u2194 - ("UndirectedEdge", r" (\<\-\>)|\u29DF|\u2194 "), - ("ReplaceRepeated", r" \/\/\. "), - ("ReplaceAll", r" \/\. "), - ("RightComposition", r" \/\* "), - ("Postfix", r" \/\/ "), - ("UpSetDelayed", r" \^\:\= "), - ("SetDelayed", r" \:\= "), - ("UpSet", r" \^\= "), - ("TagSet", r" \/\: "), - ("Unset", r" \=\s*\.(?!\d|\.) "), # allow whitespace but avoid e.g. x=.01 - ("Set", r" \= "), - ("Condition", r" \/\; "), - ("Semicolon", r" \; "), - ("Divide", r" \/|\u00f7 "), - ("Power", r" \^ "), - ("Dot", r" \. "), - ("Minus", r" \-|\u2212 "), - ("Plus", r" \+ "), - ("RawBackslash", r" \\ "), - ("Factorial2", r" \!\! "), - ("Factorial", r" \! "), - ("Function", r" \& | \uF4A1 | \u21A6 | \|-> "), - ("RawColon", r" \: "), - # ('DiscreteShift', r' \uf4a3 '), - # ('DiscreteRatio', r' \uf4a4 '), - # ('DifferenceDelta', r' \u2206 '), - # ('PartialD', r' \u2202 '), - # uf4a0 is Wolfram custom, u2a2f is standard unicode - ("Cross", r" \uf4a0 | \u2a2f"), - ("Colon", r" \u2236 "), - # uf3c7 is Wolfram custom, 1d40 is standard unicode - ("Transpose", r" \uf3c7 | \u1d40"), - ("Conjugate", r" \uf3c8 "), - ("ConjugateTranspose", r" \uf3c9 "), - ("HermitianConjugate", r" \uf3ce "), - ("Integral", r" \u222b "), - ("DifferentialD", r" \U0001D451 | \uf74c"), - ("Del", r" \u2207 "), - # uf520 is Wolfram custom, 25ab is standard unicode - ("Square", r" \uf520 | \u25ab"), - ("SmallCircle", r" \u2218 "), - ("CircleDot", r" \u2299 "), - # ('Sum', r' \u2211 '), - # ('Product', r' \u220f '), - ("PlusMinus", r" \u00b1 "), - ("MinusPlus", r" \u2213 "), - ("Nor", r" \u22BD "), - ("Nand", r" \u22BC "), - ("Xor", r" \u22BB "), - ("Xnor", r" \uF4A2 "), - ("Diamond", r" \u22c4 "), - ("Wedge", r" \u22c0 "), - ("Vee", r" \u22c1 "), - ("CircleTimes", r" \u2297 "), - ("CenterDot", r" \u00b7 "), - ("Star", r" \u22c6"), - ("VerticalTilde", r" \u2240 "), - ("Coproduct", r" \u2210 "), - ("Cap", r" \u2322 "), - ("Cup", r" \u2323 "), - ("CirclePlus", r" \u2295 "), - ("CircleMinus", r" \u2296 "), - ("Congruent", r" \u2261 "), - ("Intersection", r" \u22c2 "), - ("Union", r" \u22c3 "), - ("VerticalBar", r" \u2223 "), - ("NotVerticalBar", r" \u2224 "), - ("DoubleVerticalBar", r" \u2225 "), - ("NotDoubleVerticalBar", r" \u2226 "), - ("Element", r" \u2208 "), - ("NotElement", r" \u2209 "), - ("Subset", r" \u2282 "), - ("Superset", r" \u2283 "), - ("ForAll", r" \u2200 "), - ("Exists", r" \u2203 "), - ("NotExists", r" \u2204 "), - ("Not", r" \u00AC "), - ("Equivalent", r" \u29E6 "), - ("Implies", r" \uF523 "), - ("RightTee", r" \u22A2 "), - ("DoubleRightTee", r" \u22A8 "), - ("LeftTee", r" \u22A3 "), - ("DoubleLeftTee", r" \u2AE4 "), - ("SuchThat", r" \u220D "), - ("VerticalSeparator", r" \uF432 "), - ("Therefore", r" \u2234 "), - ("Because", r" \u2235 "), - ("Backslash", r" \u2216 "), -] - - -literal_tokens = { - "!": ["Unequal", "Factorial2", "Factorial"], - '"': ["String"], - "#": ["SlotSequence", "Slot"], - "%": ["Out"], - "&": ["And", "Function"], - "'": ["Derivative"], - "(": ["RawLeftParenthesis"], - ")": ["RawRightParenthesis"], - "*": ["NonCommutativeMultiply", "TimesBy", "Times"], - "+": ["Increment", "AddTo", "Plus"], - ",": ["RawComma"], - "-": ["Decrement", "SubtractFrom", "Rule", "Minus"], - ".": ["Number", "RepeatedNull", "Repeated", "Dot"], - "/": [ - "MapAll", - "Map", - "DivideBy", - "ReplaceRepeated", - "ReplaceAll", - "RightComposition", - "Postfix", - "TagSet", - "Condition", - "Divide", - ], - ":": ["MessageName", "RuleDelayed", "SetDelayed", "RawColon"], - ";": ["Span", "Semicolon"], - "<": [ - "RawLeftAssociation", - "UndirectedEdge", - "Get", - "StringJoin", - "LessEqual", - "Less", - ], - "=": ["SameQ", "UnsameQ", "Equal", "Unset", "Set"], - ">": ["PutAppend", "Put", "GreaterEqual", "Greater"], - "?": ["Information", "PatternTest"], - "@": ["ApplyList", "Apply", "Composition", "Prefix"], - "[": ["RawLeftBracket"], - "\\": [ - "LeftRowBox", - "RightRowBox", - "InterpretedBox", - "SuperscriptBox", - "SubscriptBox", - "OverscriptBox", - "UnderscriptBox", - "OtherscriptBox", - "FractionBox", - "SqrtBox", - "RadicalBox", - "FormBox", - "RawBackslash", - ], - "]": ["RawRightBracket"], - "^": ["UpSetDelayed", "UpSet", "Power"], - "_": ["Pattern"], - "`": ["Pattern", "Symbol"], - "|": ["RawRightAssociation", "Or", "Alternatives", "Function"], - "{": ["RawLeftBrace"], - "}": ["RawRightBrace"], - "~": ["StringExpression", "Infix"], -} - -for c in string.ascii_letters: - literal_tokens[c] = ["Pattern", "Symbol"] - -for c in string.digits: - literal_tokens[c] = ["Number"] + +def compile_pattern(pattern): + """Compile a pattern from a regular expression""" + return re.compile(pattern, re.VERBOSE) + + +def init_module(): + """ + Initialize the module using the information + stored in the JSON tables. + """ + # Load Mathics3 character information from JSON. The JSON is built from + # named-characters.yml + + if not osp.exists(OPERATORS_TABLE_PATH): + print( + "Warning: Mathics3 Operator information are missing; " + f"expected to be in {OPERATORS_TABLE_PATH}" + ) + print( + "Please run the " "mathics_scanner/generate/build_operator_tables.py script" + ) + return + + with open(osp.join(OPERATORS_TABLE_PATH), "r", encoding="utf8") as operator_f: + OPERATOR_DATA.update(ujson.load(operator_f)) + + tokens = [ + ("Definition", r"\? "), + ("Information", r"\?\? "), + ("Number", NUMBER_PATTERN), + ("String", r'"'), + ("Pattern", pattern_pattern), + ("Symbol", full_symbol_pattern_str), + ("SlotSequence", r"\#\#\d*"), + ("Slot", slot_pattern), + ("Out", r"\%(\%+|\d+)?"), + ("PutAppend", r"\>\>\>"), + ("Put", r"\>\>"), + ("Get", r"\<\<"), + ("RawLeftBracket", r" \[ "), + ("RawRightBracket", r" \] "), + ("RawLeftBrace", r" \{ "), + ("RawRightBrace", r" \} "), + ("RawLeftParenthesis", r" \( "), + ("RawRightParenthesis", r" \) "), + ("RawLeftAssociation", r" \<\| "), + ("RawRightAssociation", r" \|\> "), + ("RawComma", r" \, "), + ("Span", r" \;\; "), + ("MessageName", r" \:\: "), + # + # Enclosing Box delimiters + # + ("LeftRowBox", r" \\\( "), + ("RightRowBox", r" \\\) "), + # Box Operators which are valid only inside Box delimiters + ("InterpretedBox", r" \\\! "), + ("SuperscriptBox", r" \\\^ "), + ("SubscriptBox", r" \\\_ "), + ("OverscriptBox", r" \\\& "), + ("UnderscriptBox", r" \\\+ "), + ("OtherscriptBox", r" \\\% "), + ("FractionBox", r" \\\/ "), + ("SqrtBox", r" \\\@ "), + ("RadicalBox", r" \\\@ "), + ("FormBox", r" \\\` "), + # + # End Box Operators + # + ("Information", r"\?\?"), + ("PatternTest", r" \? "), + ("Increment", r" \+\+ "), + ("Decrement", r" \-\- "), + ("MapAll", r" \/\/\@ "), + ("Map", r" \/\@ "), + ("ApplyList", r" \@\@\@ "), + ("Apply", r" \@\@ "), + ("Composition", r" \@\* "), + ("Prefix", r" \@ "), + ("StringExpression", r" \~\~ "), + ("Infix", r" \~ "), + ("Derivative", r" \' "), + ("StringJoin", r" \<\> "), + ("NonCommutativeMultiply", r" \*\* "), + ("AddTo", r" \+\= "), + ("SubtractFrom", r" \-\= "), + ("TimesBy", r" \*\= "), + ("DivideBy", r" \/\= "), + ("Times", r" \*|\u00d7 "), + ("SameQ", r" \=\=\= "), + ("UnsameQ", r" \=\!\= "), + ("Equal", r" (\=\=) | \uf431 | \uf7d9 "), + ("Unequal", r" (\!\= ) | \u2260 "), + ("LessEqual", r" (\<\=) | \u2264 "), + ("GreaterEqual", r" (\>\=) | \u2265 "), + ("Greater", r" \> "), + ("Less", r" \< "), + # https://reference.wolfram.com/language/ref/character/DirectedEdge.html + # The official Unicode value is \u2192. + ("DirectedEdge", r" -> | \uf3d5|\u2192"), + ("Or", r" (\|\|) | \u2228 "), + ("And", r" (\&\&) | \u2227 "), + ("RepeatedNull", r" \.\.\. "), + ("Repeated", r" \.\. "), + ("Alternatives", r" \| "), + ("Rule", r" (\-\>)|\uF522 "), + ("RuleDelayed", r" (\:\>)|\uF51F "), + # https://reference.wolfram.com/language/ref/character/UndirectedEdge.html + # The official Unicode value is \u2194 + ("UndirectedEdge", r" (\<\-\>)|\u29DF|\u2194 "), + ("ReplaceRepeated", r" \/\/\. "), + ("ReplaceAll", r" \/\. "), + ("RightComposition", r" \/\* "), + ("Postfix", r" \/\/ "), + ("UpSetDelayed", r" \^\:\= "), + ("SetDelayed", r" \:\= "), + ("UpSet", r" \^\= "), + ("TagSet", r" \/\: "), + # allow whitespace but avoid e.g. x=.01 + ("Unset", r" \=\s*\.(?!\d|\.) "), + ("Set", r" \= "), + ("Condition", r" \/\; "), + ("Semicolon", r" \; "), + ("Divide", r" \/|\u00f7 "), + ("Power", r" \^ "), + ("Dot", r" \. "), + ("Minus", r" \-|\u2212 "), + ("Plus", r" \+ "), + ("RawBackslash", r" \\ "), + ("Factorial2", r" \!\! "), + ("Factorial", r" \! "), + ("Function", r" \& | \uF4A1 | \u27FC | \|-> "), + ("RawColon", r" \: "), + # ('DiscreteShift', r' \uf4a3 '), + # ('DiscreteRatio', r' \uf4a4 '), + # ('DifferenceDelta', r' \u2206 '), + # ('PartialD', r' \u2202 '), + # uf4a0 is Wolfram custom, u2a2f is standard unicode + ("Cross", r" \uf4a0 | \u2a2f"), + # uf3c7 is Wolfram custom, 1d40 is standard unicode + ("Transpose", r" \uf3c7 | \u1d40"), + ("Conjugate", r" \uf3c8 "), + ("ConjugateTranspose", r" \uf3c9 "), + ("HermitianConjugate", r" \uf3ce "), + ("Integral", r" \u222b "), + ("DifferentialD", r" \U0001D451 | \uf74c"), + ("Del", r" \u2207 "), + # uf520 is Wolfram custom, 25ab is standard unicode + ("Square", r" \uf520 | \u25ab"), + # ('Sum', r' \u2211 '), + # ('Product', r' \u220f '), + ("Nor", r" \u22BD "), + ("Nand", r" \u22BC "), + ("Xor", r" \u22BB "), + ("Xnor", r" \uF4A2 "), + ("Intersection", r" \u22c2 "), + ("Union", r" \u22c3 "), + ("Element", r" \u2208 "), + ("NotElement", r" \u2209 "), + ("ForAll", r" \u2200 "), + ("Exists", r" \u2203 "), + ("NotExists", r" \u2204 "), + ("Not", r" \u00AC "), + ("Equivalent", r" \u29E6 "), + ("Implies", r" \uF523 "), + ("VerticalSeparator", r" \uF432 "), + ] + + for table in ("no-meaning-infix-operators",): + table_info = OPERATOR_DATA[table] + for operator_name, unicode in table_info.items(): + # if any([tup[0] == operator_name for tup in tokens]): + # print(f"Please remove {operator_name}") + tokens.append((operator_name, f" {unicode} ")) + + literal_tokens = { + "!": ["Unequal", "Factorial2", "Factorial"], + '"': ["String"], + "#": ["SlotSequence", "Slot"], + "%": ["Out"], + "&": ["And", "Function"], + "'": ["Derivative"], + "(": ["RawLeftParenthesis"], + ")": ["RawRightParenthesis"], + "*": ["NonCommutativeMultiply", "TimesBy", "Times"], + "+": ["Increment", "AddTo", "Plus"], + ",": ["RawComma"], + "-": ["Decrement", "SubtractFrom", "Rule", "Minus"], + ".": ["Number", "RepeatedNull", "Repeated", "Dot"], + "/": [ + "MapAll", + "Map", + "DivideBy", + "ReplaceRepeated", + "ReplaceAll", + "RightComposition", + "Postfix", + "TagSet", + "Condition", + "Divide", + ], + ":": ["MessageName", "RuleDelayed", "SetDelayed", "RawColon"], + ";": ["Span", "Semicolon"], + "<": [ + "RawLeftAssociation", + "UndirectedEdge", + "Get", + "StringJoin", + "LessEqual", + "Less", + ], + "=": ["SameQ", "UnsameQ", "Equal", "Unset", "Set"], + ">": ["PutAppend", "Put", "GreaterEqual", "Greater"], + "?": ["Information", "PatternTest"], + "@": ["ApplyList", "Apply", "Composition", "Prefix"], + "[": ["RawLeftBracket"], + "\\": [ + "LeftRowBox", + "RightRowBox", + "InterpretedBox", + "SuperscriptBox", + "SubscriptBox", + "OverscriptBox", + "UnderscriptBox", + "OtherscriptBox", + "FractionBox", + "SqrtBox", + "RadicalBox", + "FormBox", + "RawBackslash", + ], + "]": ["RawRightBracket"], + "^": ["UpSetDelayed", "UpSet", "Power"], + "_": ["Pattern"], + "`": ["Pattern", "Symbol"], + "|": ["RawRightAssociation", "Or", "Alternatives", "Function"], + "{": ["RawLeftBrace"], + "}": ["RawRightBrace"], + "~": ["StringExpression", "Infix"], + } + + for c in string.ascii_letters: + literal_tokens[c] = ["Pattern", "Symbol"] + + for c in string.digits: + literal_tokens[c] = ["Number"] + + filename_tokens = [("Filename", FILENAME_PATTERN)] + + # Reset the global variables + TOKENS.clear() + TOKEN_INDICES.clear() + FILENAME_TOKENS.clear() + + TOKENS.extend(compile_tokens(tokens)) + TOKEN_INDICES.update(find_indices(literal_tokens)) + FILENAME_TOKENS.extend(compile_tokens(filename_tokens)) def find_indices(literals: dict) -> dict: @@ -290,7 +320,7 @@ def find_indices(literals: dict) -> dict: for key, tags in literals.items(): indices = [] for tag in tags: - for i, (tag2, _) in enumerate(tokens): + for i, (tag2, _) in enumerate(TOKENS): if tag == tag2: indices.append(i) break @@ -301,20 +331,13 @@ def find_indices(literals: dict) -> dict: return literal_indices -def compile_pattern(pattern): - return re.compile(pattern, re.VERBOSE) - - def compile_tokens(token_list): + """Compile a list of tokens into a list + of tuples of the form (tag, compiled_pattern)""" return [(tag, compile_pattern(pattern)) for tag, pattern in token_list] -filename_tokens = [("Filename", FILENAME_PATTERN)] - -token_indices = find_indices(literal_tokens) -tokens = compile_tokens(tokens) -filename_tokens = compile_tokens(filename_tokens) -full_symbol_pattern_re: re.Pattern = compile_pattern(full_symbol_pattern_str) +FULL_SYMBOL_PATTERN_RE: re.Pattern = compile_pattern(full_symbol_pattern_str) def is_symbol_name(text: str) -> bool: @@ -323,7 +346,7 @@ def is_symbol_name(text: str) -> bool: ``False``. """ # Can't we just call match here? - return full_symbol_pattern_re.sub("", text) == "" + return FULL_SYMBOL_PATTERN_RE.sub("", text) == "" class Token: @@ -356,13 +379,19 @@ class Tokeniser: produces tokens of the Wolfram Language which can then be used in parsing. """ - modes = {"expr": (tokens, token_indices), "filename": (filename_tokens, {})} + # TODO: Check if this dict should be updated using the init_module function + modes = {"expr": (TOKENS, TOKEN_INDICES), "filename": (FILENAME_TOKENS, {})} def __init__(self, feeder): """ feeder: An instance of ``LineFeeder`` from which we receive input strings that are to be split up and put into tokens. """ + assert len(TOKENS) > 0, ( + "Tokenizer was not initialized. " + f"Check if {OPERATORS_TABLE_PATH} " + "is available" + ) self.pos: int = 0 self.feeder = feeder self.prescanner = Prescanner(feeder) @@ -535,3 +564,9 @@ def t_String(self, match: re.Match) -> "Token": self.code[indices[i] : indices[i + 1]] for i in range(len(indices) - 1) ) return Token("String", result, start) + + +# Call the function that initializes the dictionaries. +# If the JSON tables were modified during the execution, +# just call this function again. +init_module()