diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d30e95a5c..4c1098741 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,3 +21,11 @@ repos: rev: 6.1.0 hooks: - id: flake8 +- repo: local + hooks: + - id: check-substrait-extensions + name: Check Substrait extensions + entry: pytest tests/test_extensions.py::test_read_substrait_extensions + language: python + pass_filenames: false + diff --git a/grammar/FuncTestCaseLexer.g4 b/grammar/FuncTestCaseLexer.g4 new file mode 100644 index 000000000..ff5711885 --- /dev/null +++ b/grammar/FuncTestCaseLexer.g4 @@ -0,0 +1,109 @@ +lexer grammar FuncTestCaseLexer; + +import SubstraitLexer; + +SUBSTRAIT_SCALAR_TEST + : '### SUBSTRAIT_SCALAR_TEST:' + ; + +FORMAT_VERSION + : 'v' DIGIT+ ('.' DIGIT+)? + ; + +SUBSTRAIT_INCLUDE + : '### SUBSTRAIT_INCLUDE:' + ; + +DESCRIPTION_LINE + : '# ' ~[\r\n]* '\r'? '\n' + ; + +ERROR_RESULT + : '' + ; + +UNDEFINED_RESULT + : '' + ; + + +OVERFLOW: 'overlfow'; +ROUNDING: 'rounding'; +ERROR: 'ERROR'; +SATURATE: 'SATURATE'; +SILENT: 'SILENT'; +TIE_TO_EVEN: 'TIE_TO_EVEN'; +NAN: 'NAN'; + + +INTEGER_LITERAL + : [+-]? INTEGER + ; + +DECIMAL_LITERAL + : [+-]? [0-9]+ ('.' [0-9]+)? + ; + +FLOAT_LITERAL + : [+-]? [0-9]+ ('.' [0-9]*)? ( [eE] [+-]? [0-9]+ )? + | [+-]? 'inf' + | 'nan' | 'NaN' + | 'snan' + ; + +BOOLEAN_LITERAL + : 'true' | 'false' + ; + +fragment FourDigits: [0-9][0-9][0-9][0-9]; +fragment TwoDigits: [0-9][0-9]; + +TIMESTAMP_TZ_LITERAL + : '\'' FourDigits '-' TwoDigits '-' TwoDigits 'T' TwoDigits ':' TwoDigits ':' TwoDigits ( '.' [0-9]+ )? + [+-] TwoDigits ':' TwoDigits '\'' + ; + +TIMESTAMP_LITERAL + : '\'' FourDigits '-' TwoDigits '-' TwoDigits 'T' TwoDigits ':' TwoDigits ':' TwoDigits ( '.' [0-9]+ )? '\'' + ; + +TIME_LITERAL + : '\'' TwoDigits ':' TwoDigits ':' TwoDigits ( '.' [0-9]+ )? '\'' + ; + +DATE_LITERAL + : '\'' FourDigits '-' TwoDigits '-' TwoDigits '\'' + ; + +PERIOD_PREFIX: 'P'; +TIME_PREFIX: 'T'; +YEAR_SUFFIX: 'Y'; +M_SUFFIX: 'M'; // used for both months and minutes +DAY_SUFFIX: 'D'; +HOUR_SUFFIX: 'H'; +SECOND_SUFFIX: 'S'; +FRACTIONAL_SECOND_SUFFIX: 'F'; + +INTERVAL_YEAR_LITERAL + : '\'' PERIOD_PREFIX INTEGER_LITERAL YEAR_SUFFIX (INTEGER_LITERAL M_SUFFIX)? '\'' + | '\'' PERIOD_PREFIX INTEGER_LITERAL M_SUFFIX '\'' + ; + +INTERVAL_DAY_LITERAL + : '\'' PERIOD_PREFIX INTEGER_LITERAL DAY_SUFFIX (TIME_PREFIX TIME_INTERVAL)? '\'' + | '\'' PERIOD_PREFIX TIME_PREFIX TIME_INTERVAL '\'' + ; + +fragment TIME_INTERVAL + : INTEGER_LITERAL HOUR_SUFFIX (INTEGER_LITERAL M_SUFFIX)? (INTEGER_LITERAL SECOND_SUFFIX)? + (INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | INTEGER_LITERAL M_SUFFIX (INTEGER_LITERAL SECOND_SUFFIX)? (INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | INTEGER_LITERAL SECOND_SUFFIX (INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX + ; + +NULL_LITERAL: 'null'; + +STRING_LITERAL + : '\'' ('\\' . | '\'\'' | ~['\\])* '\'' + ; diff --git a/grammar/FuncTestCaseParser.g4 b/grammar/FuncTestCaseParser.g4 new file mode 100644 index 000000000..3ee7b1068 --- /dev/null +++ b/grammar/FuncTestCaseParser.g4 @@ -0,0 +1,222 @@ +parser grammar FuncTestCaseParser; + +options { + tokenVocab=SubstraitLexer; + tokenVocab=FuncTestCaseLexer; +} + +doc + : header testGroup+ EOF + ; + +header + : version include + ; + +version + : SUBSTRAIT_SCALAR_TEST FORMAT_VERSION + ; + +include + : SUBSTRAIT_INCLUDE STRING_LITERAL (COMMA STRING_LITERAL)* + ; + +testGroupDescription + : DESCRIPTION_LINE + ; + +testCase + : functionName=IDENTIFIER OPAREN arguments CPAREN ( OBRACKET func_options CBRACKET )? EQ result + ; + +testGroup + : testGroupDescription (testCase)+ + ; + +arguments + : argument (COMMA argument)* + ; + +result + : argument + | substraitError + ; + +argument + : nullArg + | i8Arg | i16Arg | i32Arg | i64Arg + | fp32Arg | fp64Arg + | booleanArg + | stringArg + | decimalArg + | dateArg + | timeArg + | timestampArg + | timestampTzArg + | intervalYearArg + | intervalDayArg + ; + +numericLiteral + : DECIMAL_LITERAL | INTEGER_LITERAL | FLOAT_LITERAL + ; + +nullArg: NULL_LITERAL DOUBLE_COLON datatype; + +i8Arg: INTEGER_LITERAL DOUBLE_COLON I8; + +i16Arg: INTEGER_LITERAL DOUBLE_COLON I16; + +i32Arg: INTEGER_LITERAL DOUBLE_COLON I32; + +i64Arg: INTEGER_LITERAL DOUBLE_COLON I64; + +fp32Arg + : numericLiteral DOUBLE_COLON FP32 + ; + +fp64Arg + : numericLiteral DOUBLE_COLON FP64 + ; + +decimalArg + : numericLiteral DOUBLE_COLON decimalType + ; + +booleanArg + : BOOLEAN_LITERAL DOUBLE_COLON Bool + ; + +stringArg + : STRING_LITERAL DOUBLE_COLON Str + ; + +dateArg + : DATE_LITERAL DOUBLE_COLON Date + ; + +timeArg + : TIME_LITERAL DOUBLE_COLON Time + ; + +timestampArg + : TIMESTAMP_LITERAL DOUBLE_COLON Ts + ; + +timestampTzArg + : TIMESTAMP_TZ_LITERAL DOUBLE_COLON TsTZ + ; + +intervalYearArg + : INTERVAL_YEAR_LITERAL DOUBLE_COLON IYear + ; + +intervalDayArg + : INTERVAL_DAY_LITERAL DOUBLE_COLON IDay + ; + +intervalYearLiteral + : PERIOD_PREFIX (years=INTEGER_LITERAL YEAR_SUFFIX) (months=INTEGER_LITERAL M_SUFFIX)? + | PERIOD_PREFIX (months=INTEGER_LITERAL M_SUFFIX) + ; + +intervalDayLiteral + : PERIOD_PREFIX (days=INTEGER_LITERAL DAY_SUFFIX) (TIME_PREFIX timeInterval)? + | PERIOD_PREFIX TIME_PREFIX timeInterval + ; + +timeInterval + : hours=INTEGER_LITERAL HOUR_SUFFIX (minutes=INTEGER_LITERAL M_SUFFIX)? (seconds=INTEGER_LITERAL SECOND_SUFFIX)? + (fractionalSeconds=INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | minutes=INTEGER_LITERAL M_SUFFIX (seconds=INTEGER_LITERAL SECOND_SUFFIX)? (fractionalSeconds=INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | seconds=INTEGER_LITERAL SECOND_SUFFIX (fractionalSeconds=INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX)? + | fractionalSeconds=INTEGER_LITERAL FRACTIONAL_SECOND_SUFFIX + ; + +datatype + : scalarType + | parameterizedType + ; + +scalarType + : Bool #Boolean + | I8 #i8 + | I16 #i16 + | I32 #i32 + | I64 #i64 + | FP32 #fp32 + | FP64 #fp64 + | Str #string + | Binary #binary + | Ts #timestamp + | TsTZ #timestampTz + | Date #date + | Time #time + | IDay #intervalDay + | IYear #intervalYear + | UUID #uuid + | UserDefined IDENTIFIER #userDefined + ; + +fixedCharType + : FChar isnull=QMARK? O_ANGLE_BRACKET len=numericParameter C_ANGLE_BRACKET #fixedChar + ; + +varCharType + : VChar isnull=QMARK? O_ANGLE_BRACKET len=numericParameter C_ANGLE_BRACKET #varChar + ; + +fixedBinaryType + : FBin isnull=QMARK? O_ANGLE_BRACKET len=numericParameter C_ANGLE_BRACKET #fixedBinary + ; + +decimalType + : Dec isnull=QMARK? (O_ANGLE_BRACKET precision=numericParameter COMMA scale=numericParameter C_ANGLE_BRACKET)? #decimal + ; + +precisionTimestampType + : PTs isnull=QMARK? O_ANGLE_BRACKET precision=numericParameter C_ANGLE_BRACKET #precisionTimestamp + ; + +precisionTimestampTZType + : PTsTZ isnull=QMARK? O_ANGLE_BRACKET precision=numericParameter C_ANGLE_BRACKET #precisionTimestampTZ + ; + +parameterizedType + : fixedCharType + | varCharType + | fixedBinaryType + | decimalType + | precisionTimestampType + | precisionTimestampTZType +// TODO implement the rest of the parameterized types +// | Struct isnull='?'? Lt expr (Comma expr)* Gt #struct +// | NStruct isnull='?'? Lt Identifier expr (Comma Identifier expr)* Gt #nStruct +// | List isnull='?'? Lt expr Gt #list +// | Map isnull='?'? Lt key=expr Comma value=expr Gt #map + ; + +numericParameter + : INTEGER_LITERAL #integerLiteral + ; + +substraitError + : ERROR_RESULT | UNDEFINED_RESULT + ; + +func_option + : option_name COLON option_value + ; + +option_name + : OVERFLOW | ROUNDING + | IDENTIFIER + ; + +option_value + : ERROR | SATURATE | SILENT | TIE_TO_EVEN | NAN + ; + +func_options + : func_option (COMMA func_option)* + ; diff --git a/grammar/Makefile b/grammar/Makefile new file mode 100644 index 000000000..e94e04e89 --- /dev/null +++ b/grammar/Makefile @@ -0,0 +1,9 @@ +ANTLR_JAR=antlr-4.13.2-complete.jar +GRAMMARS=SubstraitLexer.g4 FuncTestCaseLexer.g4 FuncTestCaseParser.g4 +OUTPUT_DIR=../tests/coverage/antlr_parser + +generate: + java -jar $(ANTLR_JAR) -visitor -Dlanguage=Python3 -o $(OUTPUT_DIR) $(GRAMMARS) + +clean: + rm -rf $(OUTPUT_DIR)/*.py diff --git a/grammar/SubstraitLexer.g4 b/grammar/SubstraitLexer.g4 new file mode 100644 index 000000000..c2bbf81a1 --- /dev/null +++ b/grammar/SubstraitLexer.g4 @@ -0,0 +1,119 @@ +lexer grammar SubstraitLexer; + +// Whitespace and comment handling +LineComment : '//' ~[\r\n]* -> channel(HIDDEN) ; +BlockComment : ( '/*' ( ~'*' | '*'+ ~[*/] ) '*'* '*/' ) -> channel(HIDDEN) ; +Whitespace : [ \t\r\n]+ -> channel(HIDDEN) ; + +// Substrait is case-insensitive, ANTLR is not. So, in order to define our +// keywords in a somewhat readable way, we have to define these shortcuts. + +fragment A : [aA]; +fragment B : [bB]; +fragment C : [cC]; +fragment D : [dD]; +fragment E : [eE]; +fragment F : [fF]; +fragment G : [gG]; +fragment H : [hH]; +fragment I : [iI]; +fragment J : [jJ]; +fragment K : [kK]; +fragment L : [lL]; +fragment M : [mM]; +fragment N : [nN]; +fragment O : [oO]; +fragment P : [pP]; +fragment Q : [qQ]; +fragment R : [rR]; +fragment S : [sS]; +fragment T : [tT]; +fragment U : [uU]; +fragment V : [vV]; +fragment W : [wW]; +fragment X : [xX]; +fragment Y : [yY]; +fragment Z : [zZ]; + +fragment DIGIT: [0-9]; + +fragment INTEGER + : '0' + | [1-9] [0-9]* + ; + +// Syntactic keywords. +If : I F; +Then : T H E N; +Else : E L S E; + +// TYPES +Boolean : B O O L E A N; +I8 : I '8'; +I16 : I '16'; +I32 : I '32'; +I64 : I '64'; +FP32 : F P '32'; +FP64 : F P '64'; +String : S T R I N G; +Binary : B I N A R Y; +Timestamp: T I M E S T A M P; +Timestamp_TZ: T I M E S T A M P '_' T Z; +Date : D A T E; +Time : T I M E; +Interval_Year: I N T E R V A L '_' Y E A R; +Interval_Day: I N T E R V A L '_' D A Y; +UUID : U U I D; +Decimal : D E C I M A L; +Precision_Timestamp: P R E C I S I O N '_' T I M E S T A M P; +Precision_Timestamp_TZ: P R E C I S I O N '_' T I M E S T A M P '_' T Z; +FixedChar: F I X E D C H A R; +VarChar : V A R C H A R; +FixedBinary: F I X E D B I N A R Y; +Struct : S T R U C T; +NStruct : N S T R U C T; +List : L I S T; +Map : M A P; +ANY : A N Y; +UserDefined: U '!'; +Geometry: G E O M E T R Y; + +// short names for types +Bool: B O O L; +Str: S T R; +VBin: V B I N; +Ts: T S; +TsTZ: T S T Z; +IYear: I Y E A R; +IDay: I D A Y; +Dec: D E C; +PTs: P T S; +PTsTZ: P T S T Z; +FChar: F C H A R; +VChar: V C H A R; +FBin: F B I N; + +DOUBLE_COLON: '::'; + +IDENTIFIER + : [a-zA-Z_] [a-zA-Z0-9_]* + ; + +// ORGANIZE +O_ANGLE_BRACKET: '<'; +C_ANGLE_BRACKET: '>'; +OPAREN: '('; +CPAREN: ')'; +OBRACKET: '['; +CBRACKET: ']'; +COMMA: ','; +EQ: '='; +COLON: ':'; +QMARK: '?'; +HASH: '#'; +DOT: '.'; + +//STRING +// : '\'' ('\\' . | '\'\'' | ~['\\])* '\'' +// ; + diff --git a/grammar/SubstraitType.g4 b/grammar/SubstraitType.g4 new file mode 100644 index 000000000..cb9baeb5c --- /dev/null +++ b/grammar/SubstraitType.g4 @@ -0,0 +1,126 @@ +grammar SubstraitType; + +import SubstraitLexer; + +// OPERATIONS +And : A N D; +Or : O R; +Assign : ':='; + +// COMPARE +Eq : '='; +NotEquals: '!='; +Gte : '>='; +Lte : '<='; +Gt : '>'; +Lt : '<'; +Bang : '!'; + + +// MATH +Plus : '+'; +Minus : '-'; +Asterisk : '*'; +ForwardSlash : '/'; +Percent : '%'; + +// ORGANIZE +OBracket : '['; +CBracket : ']'; +OParen : '('; +CParen : ')'; +SColon : ';'; +Comma : ','; +QMark : '?'; +Colon : ':'; +SingleQuote: '\''; + + +Number + : '-'? Int + ; + +Identifier + : ('a'..'z' | 'A'..'Z' | '_' | '$') ('a'..'z' | 'A'..'Z' | '_' | '$' | Digit)* + ; + +Newline + : ( '\r' '\n'? + | '\n' + ) + ; + + +fragment Int + : '1'..'9' Digit* + | '0' + ; + +fragment Digit + : '0'..'9' + ; + +start: expr EOF; + +scalarType + : Boolean #Boolean + | I8 #i8 + | I16 #i16 + | I32 #i32 + | I64 #i64 + | FP32 #fp32 + | FP64 #fp64 + | String #string + | Binary #binary + | Timestamp #timestamp + | Timestamp_TZ #timestampTz + | Date #date + | Time #time + | IntervalDay #intervalDay + | Interval_Year #intervalYear + | UUID #uuid + | UserDefined Identifier #userDefined + ; + +parameterizedType + : FixedChar isnull=QMark? Lt len=numericParameter Gt #fixedChar + | VarChar isnull=QMark? Lt len=numericParameter Gt #varChar + | FixedBinary isnull=QMark? Lt len=numericParameter Gt #fixedBinary + | Decimal isnull=QMark? Lt precision=numericParameter Comma scale=numericParameter Gt #decimal + | Precision_Timestamp isnull=QMark? Lt precision=numericParameter Gt #precisionTimestamp + | Precision_Timestamp_TZ isnull=QMark? Lt precision=numericParameter Gt #precisionTimestampTZ + | Struct isnull=QMark? Lt expr (Comma expr)* Gt #struct + | NStruct isnull=QMark? Lt Identifier expr (Comma Identifier expr)* Gt #nStruct + | List isnull=QMark? Lt expr Gt #list + | Map isnull=QMark? Lt key=expr Comma value=expr Gt #map + ; + +numericParameter + : Number #numericLiteral + | Identifier #numericParameterName + | expr #numericExpression + ; + +anyType: ANY; + +type + : scalarType isnull=QMark? + | parameterizedType + | anyType isnull=QMark? + ; + +// : (OParen innerExpr CParen | innerExpr) + +expr + : OParen expr CParen #ParenExpression + | Identifier Eq expr Newline+ (Identifier Eq expr Newline+)* finalType=type Newline* #MultilineDefinition + | type #TypeLiteral + | number=Number #LiteralNumber + | identifier=Identifier isnull=QMark? #TypeParam + | Identifier OParen (expr (Comma expr)*)? CParen #FunctionCall + | left=expr op=(And | Or | Plus | Minus | Lt | Gt | Eq | NotEquals | Lte | Gte | Asterisk | ForwardSlash) right=expr #BinaryExpr + | If ifExpr=expr Then thenExpr=expr Else elseExpr=expr #IfExpr + | (Bang) expr #NotExpr + | ifExpr=expr QMark thenExpr=expr Colon elseExpr=expr #Ternary + ; + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/cases/arithmetic/add.test b/tests/cases/arithmetic/add.test new file mode 100644 index 000000000..7d7c36a6d --- /dev/null +++ b/tests/cases/arithmetic/add.test @@ -0,0 +1,31 @@ +### SUBSTRAIT_SCALAR_TEST: v1.0 +### SUBSTRAIT_INCLUDE: '/extensions/functions_arithmetic.yaml' + +# basic: Basic examples without any special cases +add(120::i8, 5::i8) = 125::i8 +add(100::i16, 100::i16) = 200::i16 +add(30000::i32, 30000::i32) = 60000::i32 +add(2000000000::i64, 2000000000::i64) = 4000000000::i64 + +# overflow: Examples demonstrating overflow behavior +add(120::i8, 10::i8) [overflow:ERROR] = +add(30000::i16, 30000::i16) [overflow:ERROR] = +add(2000000000::i32, 2000000000::i32) [overflow:ERROR] = +add(9223372036854775807::i64, 1::i64) [overflow:ERROR] = + +# overflow: Examples demonstrating overflow behavior tests: overflow with SATURATE +add(120::i8, 10::i8) [overflow:SATURATE] = 127::i8 +add(-120::i8, -10::i8) [overflow:SATURATE] = -128::i8 + +# overflow: Examples demonstrating overflow behavior tests: overflow with SILENT +add(120::i8, 10::i8) [overflow:SILENT] = + +# floating_exception: Examples demonstrating exceptional floating point cases +add(1.5e+308::fp64, 1.5e+308::fp64) = inf::fp64 +add(-1.5e+308::fp64, -1.5e+308::fp64) = -inf::fp64 + +# rounding: Examples demonstrating floating point rounding behavior +add(4.5::fp32, 2.500001::fp32) [rounding:TIE_TO_EVEN] = 7.000001::fp32 + +# types: Examples demonstrating behavior of different data types +add(4.5::fp64, 2.5000007152557373::fp64) = 7.00000071525573::fp64 diff --git a/tests/cases/arithmetic_decimal/power.test b/tests/cases/arithmetic_decimal/power.test new file mode 100644 index 000000000..37a0712d5 --- /dev/null +++ b/tests/cases/arithmetic_decimal/power.test @@ -0,0 +1,21 @@ +### SUBSTRAIT_SCALAR_TEST: v1.0 +### SUBSTRAIT_INCLUDE: 'extensions/functions_arithmetic_decimal.yaml' + +# basic: Basic examples without any special cases +power(8::dec<38, 0>, 2::dec<38, 0>) = 64::fp64 +power(1.0::dec<38, 0>, -1.0::dec<38, 0>) = 1.0::fp64 +power(2.0::dec<38, 0>, -2.0::dec<38, 0>) = 0.25::fp64 +power(13::dec<38, 0>, 10::dec<38, 0>) = 137858491849::fp64 + +# result_more_than_input_precison: Examples demonstrating result with more precision than input +power(16::dec<2, 0>, 4::dec<38, 0>) = 65536::fp64 + +# floating_exception: Examples demonstrating exceptional floating point cases +power(1.5e+10::dec<38, 0>, 1.5e+20::dec<38, 0>) = inf::fp64 +power(-16::dec<4, 0>, 1001::dec<4, 0>) = -inf::fp64 + +# complex_number: Examples demonstrating complex number output +power(-1::dec, 0.5::dec<38,1>) [complex_number_result:NAN] = nan::fp64 + +# complex_number: Examples demonstrating complex number output tests: complex_number_result with ERROR +power(-1::dec, 0.5::dec<38,1>) [complex_number_result:ERROR] = diff --git a/tests/cases/datetime/lt_datetime.test b/tests/cases/datetime/lt_datetime.test new file mode 100644 index 000000000..a2c14c44d --- /dev/null +++ b/tests/cases/datetime/lt_datetime.test @@ -0,0 +1,25 @@ +### SUBSTRAIT_SCALAR_TEST: v1.0 +### SUBSTRAIT_INCLUDE: '/extensions/functions_datetime.yaml' + +# timestamps: examples using the timestamp type +lt('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool +lt('2018-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = false::bool + +# timestamp_tz: examples using the timestamp_tz type +lt('1999-01-08T01:05:05-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = true::bool +lt('1999-01-08T01:05:06-08:00'::tstz, '1999-01-08T04:05:06-05:00'::tstz) = false::bool + +# date: examples using the date type +lt('2020-12-30'::date, '2020-12-31'::date) = true::bool +lt('2020-12-31'::date, '2020-12-30'::date) = false::bool + +# interval: examples using the interval type +lt('P7D'::iday, 'P6D'::iday) = false::bool +lt('P5D'::iday, 'P6D'::iday) = true::bool +lt('P5Y'::iyear, 'P6Y'::iyear) = true::bool +lt('P7Y'::iyear, 'P6Y'::iyear) = false::bool + +# null_input: examples with null args or return +lt(null::iday, 'P5D'::iday) = null::bool +lt(null::date, '2020-12-30'::date) = null::bool +lt(null::ts, '2018-12-31T13:30:15'::ts) = null::bool diff --git a/tests/coverage/__init__.py b/tests/coverage/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/coverage/antlr_parser/FuncTestCaseLexer.interp b/tests/coverage/antlr_parser/FuncTestCaseLexer.interp new file mode 100644 index 000000000..54d9c8f6d --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseLexer.interp @@ -0,0 +1,333 @@ +token literal names: +null +'### SUBSTRAIT_SCALAR_TEST:' +null +'### SUBSTRAIT_INCLUDE:' +null +'' +'' +'overlfow' +'rounding' +'ERROR' +'SATURATE' +'SILENT' +'TIE_TO_EVEN' +'NAN' +null +null +null +null +null +null +null +null +'P' +'T' +'Y' +'M' +'D' +'H' +'S' +'F' +null +null +'null' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'::' +null +'<' +'>' +'(' +')' +'[' +']' +',' +'=' +':' +'?' +'#' +'.' + +token symbolic names: +null +SUBSTRAIT_SCALAR_TEST +FORMAT_VERSION +SUBSTRAIT_INCLUDE +DESCRIPTION_LINE +ERROR_RESULT +UNDEFINED_RESULT +OVERFLOW +ROUNDING +ERROR +SATURATE +SILENT +TIE_TO_EVEN +NAN +INTEGER_LITERAL +DECIMAL_LITERAL +FLOAT_LITERAL +BOOLEAN_LITERAL +TIMESTAMP_TZ_LITERAL +TIMESTAMP_LITERAL +TIME_LITERAL +DATE_LITERAL +PERIOD_PREFIX +TIME_PREFIX +YEAR_SUFFIX +M_SUFFIX +DAY_SUFFIX +HOUR_SUFFIX +SECOND_SUFFIX +FRACTIONAL_SECOND_SUFFIX +INTERVAL_YEAR_LITERAL +INTERVAL_DAY_LITERAL +NULL_LITERAL +STRING_LITERAL +LineComment +BlockComment +Whitespace +If +Then +Else +Boolean +I8 +I16 +I32 +I64 +FP32 +FP64 +String +Binary +Timestamp +Timestamp_TZ +Date +Time +Interval_Year +Interval_Day +UUID +Decimal +Precision_Timestamp +Precision_Timestamp_TZ +FixedChar +VarChar +FixedBinary +Struct +NStruct +List +Map +ANY +UserDefined +Geometry +Bool +Str +VBin +Ts +TsTZ +IYear +IDay +Dec +PTs +PTsTZ +FChar +VChar +FBin +DOUBLE_COLON +IDENTIFIER +O_ANGLE_BRACKET +C_ANGLE_BRACKET +OPAREN +CPAREN +OBRACKET +CBRACKET +COMMA +EQ +COLON +QMARK +HASH +DOT + +rule names: +SUBSTRAIT_SCALAR_TEST +FORMAT_VERSION +SUBSTRAIT_INCLUDE +DESCRIPTION_LINE +ERROR_RESULT +UNDEFINED_RESULT +OVERFLOW +ROUNDING +ERROR +SATURATE +SILENT +TIE_TO_EVEN +NAN +INTEGER_LITERAL +DECIMAL_LITERAL +FLOAT_LITERAL +BOOLEAN_LITERAL +FourDigits +TwoDigits +TIMESTAMP_TZ_LITERAL +TIMESTAMP_LITERAL +TIME_LITERAL +DATE_LITERAL +PERIOD_PREFIX +TIME_PREFIX +YEAR_SUFFIX +M_SUFFIX +DAY_SUFFIX +HOUR_SUFFIX +SECOND_SUFFIX +FRACTIONAL_SECOND_SUFFIX +INTERVAL_YEAR_LITERAL +INTERVAL_DAY_LITERAL +TIME_INTERVAL +NULL_LITERAL +STRING_LITERAL +LineComment +BlockComment +Whitespace +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +DIGIT +INTEGER +If +Then +Else +Boolean +I8 +I16 +I32 +I64 +FP32 +FP64 +String +Binary +Timestamp +Timestamp_TZ +Date +Time +Interval_Year +Interval_Day +UUID +Decimal +Precision_Timestamp +Precision_Timestamp_TZ +FixedChar +VarChar +FixedBinary +Struct +NStruct +List +Map +ANY +UserDefined +Geometry +Bool +Str +VBin +Ts +TsTZ +IYear +IDay +Dec +PTs +PTsTZ +FChar +VChar +FBin +DOUBLE_COLON +IDENTIFIER +O_ANGLE_BRACKET +C_ANGLE_BRACKET +OPAREN +CPAREN +OBRACKET +CBRACKET +COMMA +EQ +COLON +QMARK +HASH +DOT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 95, 1129, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 4, 1, 283, 8, 1, 11, 1, 12, 1, 284, 1, 1, 1, 1, 4, 1, 289, 8, 1, 11, 1, 12, 1, 290, 3, 1, 293, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 322, 8, 3, 10, 3, 12, 3, 325, 9, 3, 1, 3, 3, 3, 328, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 3, 13, 411, 8, 13, 1, 13, 1, 13, 1, 14, 3, 14, 416, 8, 14, 1, 14, 4, 14, 419, 8, 14, 11, 14, 12, 14, 420, 1, 14, 1, 14, 4, 14, 425, 8, 14, 11, 14, 12, 14, 426, 3, 14, 429, 8, 14, 1, 15, 3, 15, 432, 8, 15, 1, 15, 4, 15, 435, 8, 15, 11, 15, 12, 15, 436, 1, 15, 1, 15, 5, 15, 441, 8, 15, 10, 15, 12, 15, 444, 9, 15, 3, 15, 446, 8, 15, 1, 15, 1, 15, 3, 15, 450, 8, 15, 1, 15, 4, 15, 453, 8, 15, 11, 15, 12, 15, 454, 3, 15, 457, 8, 15, 1, 15, 3, 15, 460, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 475, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 486, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 4, 19, 510, 8, 19, 11, 19, 12, 19, 511, 3, 19, 514, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 4, 20, 536, 8, 20, 11, 20, 12, 20, 537, 3, 20, 540, 8, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 4, 21, 552, 8, 21, 11, 21, 12, 21, 553, 3, 21, 556, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 591, 8, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 601, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 610, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 620, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 627, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 632, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 637, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 644, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 649, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 656, 8, 33, 1, 33, 1, 33, 1, 33, 3, 33, 661, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 674, 8, 35, 10, 35, 12, 35, 677, 9, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 5, 36, 685, 8, 36, 10, 36, 12, 36, 688, 9, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 697, 8, 37, 11, 37, 12, 37, 698, 1, 37, 3, 37, 702, 8, 37, 1, 37, 5, 37, 705, 8, 37, 10, 37, 12, 37, 708, 9, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 4, 38, 716, 8, 38, 11, 38, 12, 38, 717, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 5, 66, 779, 8, 66, 10, 66, 12, 66, 782, 9, 66, 3, 66, 784, 8, 66, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 5, 113, 1101, 8, 113, 10, 113, 12, 113, 1104, 9, 113, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 0, 0, 126, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 0, 37, 0, 39, 18, 41, 19, 43, 20, 45, 21, 47, 22, 49, 23, 51, 24, 53, 25, 55, 26, 57, 27, 59, 28, 61, 29, 63, 30, 65, 31, 67, 0, 69, 32, 71, 33, 73, 34, 75, 35, 77, 36, 79, 0, 81, 0, 83, 0, 85, 0, 87, 0, 89, 0, 91, 0, 93, 0, 95, 0, 97, 0, 99, 0, 101, 0, 103, 0, 105, 0, 107, 0, 109, 0, 111, 0, 113, 0, 115, 0, 117, 0, 119, 0, 121, 0, 123, 0, 125, 0, 127, 0, 129, 0, 131, 0, 133, 0, 135, 37, 137, 38, 139, 39, 141, 40, 143, 41, 145, 42, 147, 43, 149, 44, 151, 45, 153, 46, 155, 47, 157, 48, 159, 49, 161, 50, 163, 51, 165, 52, 167, 53, 169, 54, 171, 55, 173, 56, 175, 57, 177, 58, 179, 59, 181, 60, 183, 61, 185, 62, 187, 63, 189, 64, 191, 65, 193, 66, 195, 67, 197, 68, 199, 69, 201, 70, 203, 71, 205, 72, 207, 73, 209, 74, 211, 75, 213, 76, 215, 77, 217, 78, 219, 79, 221, 80, 223, 81, 225, 82, 227, 83, 229, 84, 231, 85, 233, 86, 235, 87, 237, 88, 239, 89, 241, 90, 243, 91, 245, 92, 247, 93, 249, 94, 251, 95, 1, 0, 36, 2, 0, 10, 10, 13, 13, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 2, 0, 69, 69, 101, 101, 2, 0, 39, 39, 92, 92, 1, 0, 42, 42, 2, 0, 42, 42, 47, 47, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 1, 0, 49, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1150, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 3, 280, 1, 0, 0, 0, 5, 294, 1, 0, 0, 0, 7, 317, 1, 0, 0, 0, 9, 331, 1, 0, 0, 0, 11, 340, 1, 0, 0, 0, 13, 353, 1, 0, 0, 0, 15, 362, 1, 0, 0, 0, 17, 371, 1, 0, 0, 0, 19, 377, 1, 0, 0, 0, 21, 386, 1, 0, 0, 0, 23, 393, 1, 0, 0, 0, 25, 405, 1, 0, 0, 0, 27, 410, 1, 0, 0, 0, 29, 415, 1, 0, 0, 0, 31, 474, 1, 0, 0, 0, 33, 485, 1, 0, 0, 0, 35, 487, 1, 0, 0, 0, 37, 492, 1, 0, 0, 0, 39, 495, 1, 0, 0, 0, 41, 521, 1, 0, 0, 0, 43, 543, 1, 0, 0, 0, 45, 559, 1, 0, 0, 0, 47, 567, 1, 0, 0, 0, 49, 569, 1, 0, 0, 0, 51, 571, 1, 0, 0, 0, 53, 573, 1, 0, 0, 0, 55, 575, 1, 0, 0, 0, 57, 577, 1, 0, 0, 0, 59, 579, 1, 0, 0, 0, 61, 581, 1, 0, 0, 0, 63, 600, 1, 0, 0, 0, 65, 619, 1, 0, 0, 0, 67, 660, 1, 0, 0, 0, 69, 662, 1, 0, 0, 0, 71, 667, 1, 0, 0, 0, 73, 680, 1, 0, 0, 0, 75, 691, 1, 0, 0, 0, 77, 715, 1, 0, 0, 0, 79, 721, 1, 0, 0, 0, 81, 723, 1, 0, 0, 0, 83, 725, 1, 0, 0, 0, 85, 727, 1, 0, 0, 0, 87, 729, 1, 0, 0, 0, 89, 731, 1, 0, 0, 0, 91, 733, 1, 0, 0, 0, 93, 735, 1, 0, 0, 0, 95, 737, 1, 0, 0, 0, 97, 739, 1, 0, 0, 0, 99, 741, 1, 0, 0, 0, 101, 743, 1, 0, 0, 0, 103, 745, 1, 0, 0, 0, 105, 747, 1, 0, 0, 0, 107, 749, 1, 0, 0, 0, 109, 751, 1, 0, 0, 0, 111, 753, 1, 0, 0, 0, 113, 755, 1, 0, 0, 0, 115, 757, 1, 0, 0, 0, 117, 759, 1, 0, 0, 0, 119, 761, 1, 0, 0, 0, 121, 763, 1, 0, 0, 0, 123, 765, 1, 0, 0, 0, 125, 767, 1, 0, 0, 0, 127, 769, 1, 0, 0, 0, 129, 771, 1, 0, 0, 0, 131, 773, 1, 0, 0, 0, 133, 783, 1, 0, 0, 0, 135, 785, 1, 0, 0, 0, 137, 788, 1, 0, 0, 0, 139, 793, 1, 0, 0, 0, 141, 798, 1, 0, 0, 0, 143, 806, 1, 0, 0, 0, 145, 809, 1, 0, 0, 0, 147, 813, 1, 0, 0, 0, 149, 817, 1, 0, 0, 0, 151, 821, 1, 0, 0, 0, 153, 826, 1, 0, 0, 0, 155, 831, 1, 0, 0, 0, 157, 838, 1, 0, 0, 0, 159, 845, 1, 0, 0, 0, 161, 855, 1, 0, 0, 0, 163, 868, 1, 0, 0, 0, 165, 873, 1, 0, 0, 0, 167, 878, 1, 0, 0, 0, 169, 892, 1, 0, 0, 0, 171, 905, 1, 0, 0, 0, 173, 910, 1, 0, 0, 0, 175, 918, 1, 0, 0, 0, 177, 938, 1, 0, 0, 0, 179, 961, 1, 0, 0, 0, 181, 971, 1, 0, 0, 0, 183, 979, 1, 0, 0, 0, 185, 991, 1, 0, 0, 0, 187, 998, 1, 0, 0, 0, 189, 1006, 1, 0, 0, 0, 191, 1011, 1, 0, 0, 0, 193, 1015, 1, 0, 0, 0, 195, 1019, 1, 0, 0, 0, 197, 1022, 1, 0, 0, 0, 199, 1031, 1, 0, 0, 0, 201, 1036, 1, 0, 0, 0, 203, 1040, 1, 0, 0, 0, 205, 1045, 1, 0, 0, 0, 207, 1048, 1, 0, 0, 0, 209, 1053, 1, 0, 0, 0, 211, 1059, 1, 0, 0, 0, 213, 1064, 1, 0, 0, 0, 215, 1068, 1, 0, 0, 0, 217, 1072, 1, 0, 0, 0, 219, 1078, 1, 0, 0, 0, 221, 1084, 1, 0, 0, 0, 223, 1090, 1, 0, 0, 0, 225, 1095, 1, 0, 0, 0, 227, 1098, 1, 0, 0, 0, 229, 1105, 1, 0, 0, 0, 231, 1107, 1, 0, 0, 0, 233, 1109, 1, 0, 0, 0, 235, 1111, 1, 0, 0, 0, 237, 1113, 1, 0, 0, 0, 239, 1115, 1, 0, 0, 0, 241, 1117, 1, 0, 0, 0, 243, 1119, 1, 0, 0, 0, 245, 1121, 1, 0, 0, 0, 247, 1123, 1, 0, 0, 0, 249, 1125, 1, 0, 0, 0, 251, 1127, 1, 0, 0, 0, 253, 254, 5, 35, 0, 0, 254, 255, 5, 35, 0, 0, 255, 256, 5, 35, 0, 0, 256, 257, 5, 32, 0, 0, 257, 258, 5, 83, 0, 0, 258, 259, 5, 85, 0, 0, 259, 260, 5, 66, 0, 0, 260, 261, 5, 83, 0, 0, 261, 262, 5, 84, 0, 0, 262, 263, 5, 82, 0, 0, 263, 264, 5, 65, 0, 0, 264, 265, 5, 73, 0, 0, 265, 266, 5, 84, 0, 0, 266, 267, 5, 95, 0, 0, 267, 268, 5, 83, 0, 0, 268, 269, 5, 67, 0, 0, 269, 270, 5, 65, 0, 0, 270, 271, 5, 76, 0, 0, 271, 272, 5, 65, 0, 0, 272, 273, 5, 82, 0, 0, 273, 274, 5, 95, 0, 0, 274, 275, 5, 84, 0, 0, 275, 276, 5, 69, 0, 0, 276, 277, 5, 83, 0, 0, 277, 278, 5, 84, 0, 0, 278, 279, 5, 58, 0, 0, 279, 2, 1, 0, 0, 0, 280, 282, 5, 118, 0, 0, 281, 283, 3, 131, 65, 0, 282, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 292, 1, 0, 0, 0, 286, 288, 5, 46, 0, 0, 287, 289, 3, 131, 65, 0, 288, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 293, 1, 0, 0, 0, 292, 286, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 4, 1, 0, 0, 0, 294, 295, 5, 35, 0, 0, 295, 296, 5, 35, 0, 0, 296, 297, 5, 35, 0, 0, 297, 298, 5, 32, 0, 0, 298, 299, 5, 83, 0, 0, 299, 300, 5, 85, 0, 0, 300, 301, 5, 66, 0, 0, 301, 302, 5, 83, 0, 0, 302, 303, 5, 84, 0, 0, 303, 304, 5, 82, 0, 0, 304, 305, 5, 65, 0, 0, 305, 306, 5, 73, 0, 0, 306, 307, 5, 84, 0, 0, 307, 308, 5, 95, 0, 0, 308, 309, 5, 73, 0, 0, 309, 310, 5, 78, 0, 0, 310, 311, 5, 67, 0, 0, 311, 312, 5, 76, 0, 0, 312, 313, 5, 85, 0, 0, 313, 314, 5, 68, 0, 0, 314, 315, 5, 69, 0, 0, 315, 316, 5, 58, 0, 0, 316, 6, 1, 0, 0, 0, 317, 318, 5, 35, 0, 0, 318, 319, 5, 32, 0, 0, 319, 323, 1, 0, 0, 0, 320, 322, 8, 0, 0, 0, 321, 320, 1, 0, 0, 0, 322, 325, 1, 0, 0, 0, 323, 321, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 326, 328, 5, 13, 0, 0, 327, 326, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 330, 5, 10, 0, 0, 330, 8, 1, 0, 0, 0, 331, 332, 5, 60, 0, 0, 332, 333, 5, 33, 0, 0, 333, 334, 5, 69, 0, 0, 334, 335, 5, 82, 0, 0, 335, 336, 5, 82, 0, 0, 336, 337, 5, 79, 0, 0, 337, 338, 5, 82, 0, 0, 338, 339, 5, 62, 0, 0, 339, 10, 1, 0, 0, 0, 340, 341, 5, 60, 0, 0, 341, 342, 5, 33, 0, 0, 342, 343, 5, 85, 0, 0, 343, 344, 5, 78, 0, 0, 344, 345, 5, 68, 0, 0, 345, 346, 5, 69, 0, 0, 346, 347, 5, 70, 0, 0, 347, 348, 5, 73, 0, 0, 348, 349, 5, 78, 0, 0, 349, 350, 5, 69, 0, 0, 350, 351, 5, 68, 0, 0, 351, 352, 5, 62, 0, 0, 352, 12, 1, 0, 0, 0, 353, 354, 5, 111, 0, 0, 354, 355, 5, 118, 0, 0, 355, 356, 5, 101, 0, 0, 356, 357, 5, 114, 0, 0, 357, 358, 5, 108, 0, 0, 358, 359, 5, 102, 0, 0, 359, 360, 5, 111, 0, 0, 360, 361, 5, 119, 0, 0, 361, 14, 1, 0, 0, 0, 362, 363, 5, 114, 0, 0, 363, 364, 5, 111, 0, 0, 364, 365, 5, 117, 0, 0, 365, 366, 5, 110, 0, 0, 366, 367, 5, 100, 0, 0, 367, 368, 5, 105, 0, 0, 368, 369, 5, 110, 0, 0, 369, 370, 5, 103, 0, 0, 370, 16, 1, 0, 0, 0, 371, 372, 5, 69, 0, 0, 372, 373, 5, 82, 0, 0, 373, 374, 5, 82, 0, 0, 374, 375, 5, 79, 0, 0, 375, 376, 5, 82, 0, 0, 376, 18, 1, 0, 0, 0, 377, 378, 5, 83, 0, 0, 378, 379, 5, 65, 0, 0, 379, 380, 5, 84, 0, 0, 380, 381, 5, 85, 0, 0, 381, 382, 5, 82, 0, 0, 382, 383, 5, 65, 0, 0, 383, 384, 5, 84, 0, 0, 384, 385, 5, 69, 0, 0, 385, 20, 1, 0, 0, 0, 386, 387, 5, 83, 0, 0, 387, 388, 5, 73, 0, 0, 388, 389, 5, 76, 0, 0, 389, 390, 5, 69, 0, 0, 390, 391, 5, 78, 0, 0, 391, 392, 5, 84, 0, 0, 392, 22, 1, 0, 0, 0, 393, 394, 5, 84, 0, 0, 394, 395, 5, 73, 0, 0, 395, 396, 5, 69, 0, 0, 396, 397, 5, 95, 0, 0, 397, 398, 5, 84, 0, 0, 398, 399, 5, 79, 0, 0, 399, 400, 5, 95, 0, 0, 400, 401, 5, 69, 0, 0, 401, 402, 5, 86, 0, 0, 402, 403, 5, 69, 0, 0, 403, 404, 5, 78, 0, 0, 404, 24, 1, 0, 0, 0, 405, 406, 5, 78, 0, 0, 406, 407, 5, 65, 0, 0, 407, 408, 5, 78, 0, 0, 408, 26, 1, 0, 0, 0, 409, 411, 7, 1, 0, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 413, 3, 133, 66, 0, 413, 28, 1, 0, 0, 0, 414, 416, 7, 1, 0, 0, 415, 414, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 418, 1, 0, 0, 0, 417, 419, 7, 2, 0, 0, 418, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 428, 1, 0, 0, 0, 422, 424, 5, 46, 0, 0, 423, 425, 7, 2, 0, 0, 424, 423, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 424, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 429, 1, 0, 0, 0, 428, 422, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 30, 1, 0, 0, 0, 430, 432, 7, 1, 0, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 434, 1, 0, 0, 0, 433, 435, 7, 2, 0, 0, 434, 433, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 445, 1, 0, 0, 0, 438, 442, 5, 46, 0, 0, 439, 441, 7, 2, 0, 0, 440, 439, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 446, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 438, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 456, 1, 0, 0, 0, 447, 449, 7, 3, 0, 0, 448, 450, 7, 1, 0, 0, 449, 448, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 452, 1, 0, 0, 0, 451, 453, 7, 2, 0, 0, 452, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 457, 1, 0, 0, 0, 456, 447, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 475, 1, 0, 0, 0, 458, 460, 7, 1, 0, 0, 459, 458, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 5, 105, 0, 0, 462, 463, 5, 110, 0, 0, 463, 475, 5, 102, 0, 0, 464, 465, 5, 110, 0, 0, 465, 466, 5, 97, 0, 0, 466, 475, 5, 110, 0, 0, 467, 468, 5, 78, 0, 0, 468, 469, 5, 97, 0, 0, 469, 475, 5, 78, 0, 0, 470, 471, 5, 115, 0, 0, 471, 472, 5, 110, 0, 0, 472, 473, 5, 97, 0, 0, 473, 475, 5, 110, 0, 0, 474, 431, 1, 0, 0, 0, 474, 459, 1, 0, 0, 0, 474, 464, 1, 0, 0, 0, 474, 467, 1, 0, 0, 0, 474, 470, 1, 0, 0, 0, 475, 32, 1, 0, 0, 0, 476, 477, 5, 116, 0, 0, 477, 478, 5, 114, 0, 0, 478, 479, 5, 117, 0, 0, 479, 486, 5, 101, 0, 0, 480, 481, 5, 102, 0, 0, 481, 482, 5, 97, 0, 0, 482, 483, 5, 108, 0, 0, 483, 484, 5, 115, 0, 0, 484, 486, 5, 101, 0, 0, 485, 476, 1, 0, 0, 0, 485, 480, 1, 0, 0, 0, 486, 34, 1, 0, 0, 0, 487, 488, 7, 2, 0, 0, 488, 489, 7, 2, 0, 0, 489, 490, 7, 2, 0, 0, 490, 491, 7, 2, 0, 0, 491, 36, 1, 0, 0, 0, 492, 493, 7, 2, 0, 0, 493, 494, 7, 2, 0, 0, 494, 38, 1, 0, 0, 0, 495, 496, 5, 39, 0, 0, 496, 497, 3, 35, 17, 0, 497, 498, 5, 45, 0, 0, 498, 499, 3, 37, 18, 0, 499, 500, 5, 45, 0, 0, 500, 501, 3, 37, 18, 0, 501, 502, 5, 84, 0, 0, 502, 503, 3, 37, 18, 0, 503, 504, 5, 58, 0, 0, 504, 505, 3, 37, 18, 0, 505, 506, 5, 58, 0, 0, 506, 513, 3, 37, 18, 0, 507, 509, 5, 46, 0, 0, 508, 510, 7, 2, 0, 0, 509, 508, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 507, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 7, 1, 0, 0, 516, 517, 3, 37, 18, 0, 517, 518, 5, 58, 0, 0, 518, 519, 3, 37, 18, 0, 519, 520, 5, 39, 0, 0, 520, 40, 1, 0, 0, 0, 521, 522, 5, 39, 0, 0, 522, 523, 3, 35, 17, 0, 523, 524, 5, 45, 0, 0, 524, 525, 3, 37, 18, 0, 525, 526, 5, 45, 0, 0, 526, 527, 3, 37, 18, 0, 527, 528, 5, 84, 0, 0, 528, 529, 3, 37, 18, 0, 529, 530, 5, 58, 0, 0, 530, 531, 3, 37, 18, 0, 531, 532, 5, 58, 0, 0, 532, 539, 3, 37, 18, 0, 533, 535, 5, 46, 0, 0, 534, 536, 7, 2, 0, 0, 535, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 540, 1, 0, 0, 0, 539, 533, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 5, 39, 0, 0, 542, 42, 1, 0, 0, 0, 543, 544, 5, 39, 0, 0, 544, 545, 3, 37, 18, 0, 545, 546, 5, 58, 0, 0, 546, 547, 3, 37, 18, 0, 547, 548, 5, 58, 0, 0, 548, 555, 3, 37, 18, 0, 549, 551, 5, 46, 0, 0, 550, 552, 7, 2, 0, 0, 551, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 556, 1, 0, 0, 0, 555, 549, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 5, 39, 0, 0, 558, 44, 1, 0, 0, 0, 559, 560, 5, 39, 0, 0, 560, 561, 3, 35, 17, 0, 561, 562, 5, 45, 0, 0, 562, 563, 3, 37, 18, 0, 563, 564, 5, 45, 0, 0, 564, 565, 3, 37, 18, 0, 565, 566, 5, 39, 0, 0, 566, 46, 1, 0, 0, 0, 567, 568, 5, 80, 0, 0, 568, 48, 1, 0, 0, 0, 569, 570, 5, 84, 0, 0, 570, 50, 1, 0, 0, 0, 571, 572, 5, 89, 0, 0, 572, 52, 1, 0, 0, 0, 573, 574, 5, 77, 0, 0, 574, 54, 1, 0, 0, 0, 575, 576, 5, 68, 0, 0, 576, 56, 1, 0, 0, 0, 577, 578, 5, 72, 0, 0, 578, 58, 1, 0, 0, 0, 579, 580, 5, 83, 0, 0, 580, 60, 1, 0, 0, 0, 581, 582, 5, 70, 0, 0, 582, 62, 1, 0, 0, 0, 583, 584, 5, 39, 0, 0, 584, 585, 3, 47, 23, 0, 585, 586, 3, 27, 13, 0, 586, 590, 3, 51, 25, 0, 587, 588, 3, 27, 13, 0, 588, 589, 3, 53, 26, 0, 589, 591, 1, 0, 0, 0, 590, 587, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 5, 39, 0, 0, 593, 601, 1, 0, 0, 0, 594, 595, 5, 39, 0, 0, 595, 596, 3, 47, 23, 0, 596, 597, 3, 27, 13, 0, 597, 598, 3, 53, 26, 0, 598, 599, 5, 39, 0, 0, 599, 601, 1, 0, 0, 0, 600, 583, 1, 0, 0, 0, 600, 594, 1, 0, 0, 0, 601, 64, 1, 0, 0, 0, 602, 603, 5, 39, 0, 0, 603, 604, 3, 47, 23, 0, 604, 605, 3, 27, 13, 0, 605, 609, 3, 55, 27, 0, 606, 607, 3, 49, 24, 0, 607, 608, 3, 67, 33, 0, 608, 610, 1, 0, 0, 0, 609, 606, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 39, 0, 0, 612, 620, 1, 0, 0, 0, 613, 614, 5, 39, 0, 0, 614, 615, 3, 47, 23, 0, 615, 616, 3, 49, 24, 0, 616, 617, 3, 67, 33, 0, 617, 618, 5, 39, 0, 0, 618, 620, 1, 0, 0, 0, 619, 602, 1, 0, 0, 0, 619, 613, 1, 0, 0, 0, 620, 66, 1, 0, 0, 0, 621, 622, 3, 27, 13, 0, 622, 626, 3, 57, 28, 0, 623, 624, 3, 27, 13, 0, 624, 625, 3, 53, 26, 0, 625, 627, 1, 0, 0, 0, 626, 623, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 631, 1, 0, 0, 0, 628, 629, 3, 27, 13, 0, 629, 630, 3, 59, 29, 0, 630, 632, 1, 0, 0, 0, 631, 628, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 636, 1, 0, 0, 0, 633, 634, 3, 27, 13, 0, 634, 635, 3, 61, 30, 0, 635, 637, 1, 0, 0, 0, 636, 633, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 661, 1, 0, 0, 0, 638, 639, 3, 27, 13, 0, 639, 643, 3, 53, 26, 0, 640, 641, 3, 27, 13, 0, 641, 642, 3, 59, 29, 0, 642, 644, 1, 0, 0, 0, 643, 640, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 648, 1, 0, 0, 0, 645, 646, 3, 27, 13, 0, 646, 647, 3, 61, 30, 0, 647, 649, 1, 0, 0, 0, 648, 645, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 661, 1, 0, 0, 0, 650, 651, 3, 27, 13, 0, 651, 655, 3, 59, 29, 0, 652, 653, 3, 27, 13, 0, 653, 654, 3, 61, 30, 0, 654, 656, 1, 0, 0, 0, 655, 652, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 661, 1, 0, 0, 0, 657, 658, 3, 27, 13, 0, 658, 659, 3, 61, 30, 0, 659, 661, 1, 0, 0, 0, 660, 621, 1, 0, 0, 0, 660, 638, 1, 0, 0, 0, 660, 650, 1, 0, 0, 0, 660, 657, 1, 0, 0, 0, 661, 68, 1, 0, 0, 0, 662, 663, 5, 110, 0, 0, 663, 664, 5, 117, 0, 0, 664, 665, 5, 108, 0, 0, 665, 666, 5, 108, 0, 0, 666, 70, 1, 0, 0, 0, 667, 675, 5, 39, 0, 0, 668, 669, 5, 92, 0, 0, 669, 674, 9, 0, 0, 0, 670, 671, 5, 39, 0, 0, 671, 674, 5, 39, 0, 0, 672, 674, 8, 4, 0, 0, 673, 668, 1, 0, 0, 0, 673, 670, 1, 0, 0, 0, 673, 672, 1, 0, 0, 0, 674, 677, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 678, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 678, 679, 5, 39, 0, 0, 679, 72, 1, 0, 0, 0, 680, 681, 5, 47, 0, 0, 681, 682, 5, 47, 0, 0, 682, 686, 1, 0, 0, 0, 683, 685, 8, 0, 0, 0, 684, 683, 1, 0, 0, 0, 685, 688, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 1, 0, 0, 0, 688, 686, 1, 0, 0, 0, 689, 690, 6, 36, 0, 0, 690, 74, 1, 0, 0, 0, 691, 692, 5, 47, 0, 0, 692, 693, 5, 42, 0, 0, 693, 701, 1, 0, 0, 0, 694, 702, 8, 5, 0, 0, 695, 697, 5, 42, 0, 0, 696, 695, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 696, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 702, 8, 6, 0, 0, 701, 694, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 702, 706, 1, 0, 0, 0, 703, 705, 5, 42, 0, 0, 704, 703, 1, 0, 0, 0, 705, 708, 1, 0, 0, 0, 706, 704, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 709, 1, 0, 0, 0, 708, 706, 1, 0, 0, 0, 709, 710, 5, 42, 0, 0, 710, 711, 5, 47, 0, 0, 711, 712, 1, 0, 0, 0, 712, 713, 6, 37, 0, 0, 713, 76, 1, 0, 0, 0, 714, 716, 7, 7, 0, 0, 715, 714, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 6, 38, 0, 0, 720, 78, 1, 0, 0, 0, 721, 722, 7, 8, 0, 0, 722, 80, 1, 0, 0, 0, 723, 724, 7, 9, 0, 0, 724, 82, 1, 0, 0, 0, 725, 726, 7, 10, 0, 0, 726, 84, 1, 0, 0, 0, 727, 728, 7, 11, 0, 0, 728, 86, 1, 0, 0, 0, 729, 730, 7, 3, 0, 0, 730, 88, 1, 0, 0, 0, 731, 732, 7, 12, 0, 0, 732, 90, 1, 0, 0, 0, 733, 734, 7, 13, 0, 0, 734, 92, 1, 0, 0, 0, 735, 736, 7, 14, 0, 0, 736, 94, 1, 0, 0, 0, 737, 738, 7, 15, 0, 0, 738, 96, 1, 0, 0, 0, 739, 740, 7, 16, 0, 0, 740, 98, 1, 0, 0, 0, 741, 742, 7, 17, 0, 0, 742, 100, 1, 0, 0, 0, 743, 744, 7, 18, 0, 0, 744, 102, 1, 0, 0, 0, 745, 746, 7, 19, 0, 0, 746, 104, 1, 0, 0, 0, 747, 748, 7, 20, 0, 0, 748, 106, 1, 0, 0, 0, 749, 750, 7, 21, 0, 0, 750, 108, 1, 0, 0, 0, 751, 752, 7, 22, 0, 0, 752, 110, 1, 0, 0, 0, 753, 754, 7, 23, 0, 0, 754, 112, 1, 0, 0, 0, 755, 756, 7, 24, 0, 0, 756, 114, 1, 0, 0, 0, 757, 758, 7, 25, 0, 0, 758, 116, 1, 0, 0, 0, 759, 760, 7, 26, 0, 0, 760, 118, 1, 0, 0, 0, 761, 762, 7, 27, 0, 0, 762, 120, 1, 0, 0, 0, 763, 764, 7, 28, 0, 0, 764, 122, 1, 0, 0, 0, 765, 766, 7, 29, 0, 0, 766, 124, 1, 0, 0, 0, 767, 768, 7, 30, 0, 0, 768, 126, 1, 0, 0, 0, 769, 770, 7, 31, 0, 0, 770, 128, 1, 0, 0, 0, 771, 772, 7, 32, 0, 0, 772, 130, 1, 0, 0, 0, 773, 774, 7, 2, 0, 0, 774, 132, 1, 0, 0, 0, 775, 784, 5, 48, 0, 0, 776, 780, 7, 33, 0, 0, 777, 779, 7, 2, 0, 0, 778, 777, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 775, 1, 0, 0, 0, 783, 776, 1, 0, 0, 0, 784, 134, 1, 0, 0, 0, 785, 786, 3, 95, 47, 0, 786, 787, 3, 89, 44, 0, 787, 136, 1, 0, 0, 0, 788, 789, 3, 117, 58, 0, 789, 790, 3, 93, 46, 0, 790, 791, 3, 87, 43, 0, 791, 792, 3, 105, 52, 0, 792, 138, 1, 0, 0, 0, 793, 794, 3, 87, 43, 0, 794, 795, 3, 101, 50, 0, 795, 796, 3, 115, 57, 0, 796, 797, 3, 87, 43, 0, 797, 140, 1, 0, 0, 0, 798, 799, 3, 81, 40, 0, 799, 800, 3, 107, 53, 0, 800, 801, 3, 107, 53, 0, 801, 802, 3, 101, 50, 0, 802, 803, 3, 87, 43, 0, 803, 804, 3, 79, 39, 0, 804, 805, 3, 105, 52, 0, 805, 142, 1, 0, 0, 0, 806, 807, 3, 95, 47, 0, 807, 808, 5, 56, 0, 0, 808, 144, 1, 0, 0, 0, 809, 810, 3, 95, 47, 0, 810, 811, 5, 49, 0, 0, 811, 812, 5, 54, 0, 0, 812, 146, 1, 0, 0, 0, 813, 814, 3, 95, 47, 0, 814, 815, 5, 51, 0, 0, 815, 816, 5, 50, 0, 0, 816, 148, 1, 0, 0, 0, 817, 818, 3, 95, 47, 0, 818, 819, 5, 54, 0, 0, 819, 820, 5, 52, 0, 0, 820, 150, 1, 0, 0, 0, 821, 822, 3, 89, 44, 0, 822, 823, 3, 109, 54, 0, 823, 824, 5, 51, 0, 0, 824, 825, 5, 50, 0, 0, 825, 152, 1, 0, 0, 0, 826, 827, 3, 89, 44, 0, 827, 828, 3, 109, 54, 0, 828, 829, 5, 54, 0, 0, 829, 830, 5, 52, 0, 0, 830, 154, 1, 0, 0, 0, 831, 832, 3, 115, 57, 0, 832, 833, 3, 117, 58, 0, 833, 834, 3, 113, 56, 0, 834, 835, 3, 95, 47, 0, 835, 836, 3, 105, 52, 0, 836, 837, 3, 91, 45, 0, 837, 156, 1, 0, 0, 0, 838, 839, 3, 81, 40, 0, 839, 840, 3, 95, 47, 0, 840, 841, 3, 105, 52, 0, 841, 842, 3, 79, 39, 0, 842, 843, 3, 113, 56, 0, 843, 844, 3, 127, 63, 0, 844, 158, 1, 0, 0, 0, 845, 846, 3, 117, 58, 0, 846, 847, 3, 95, 47, 0, 847, 848, 3, 103, 51, 0, 848, 849, 3, 87, 43, 0, 849, 850, 3, 115, 57, 0, 850, 851, 3, 117, 58, 0, 851, 852, 3, 79, 39, 0, 852, 853, 3, 103, 51, 0, 853, 854, 3, 109, 54, 0, 854, 160, 1, 0, 0, 0, 855, 856, 3, 117, 58, 0, 856, 857, 3, 95, 47, 0, 857, 858, 3, 103, 51, 0, 858, 859, 3, 87, 43, 0, 859, 860, 3, 115, 57, 0, 860, 861, 3, 117, 58, 0, 861, 862, 3, 79, 39, 0, 862, 863, 3, 103, 51, 0, 863, 864, 3, 109, 54, 0, 864, 865, 5, 95, 0, 0, 865, 866, 3, 117, 58, 0, 866, 867, 3, 129, 64, 0, 867, 162, 1, 0, 0, 0, 868, 869, 3, 85, 42, 0, 869, 870, 3, 79, 39, 0, 870, 871, 3, 117, 58, 0, 871, 872, 3, 87, 43, 0, 872, 164, 1, 0, 0, 0, 873, 874, 3, 117, 58, 0, 874, 875, 3, 95, 47, 0, 875, 876, 3, 103, 51, 0, 876, 877, 3, 87, 43, 0, 877, 166, 1, 0, 0, 0, 878, 879, 3, 95, 47, 0, 879, 880, 3, 105, 52, 0, 880, 881, 3, 117, 58, 0, 881, 882, 3, 87, 43, 0, 882, 883, 3, 113, 56, 0, 883, 884, 3, 121, 60, 0, 884, 885, 3, 79, 39, 0, 885, 886, 3, 101, 50, 0, 886, 887, 5, 95, 0, 0, 887, 888, 3, 127, 63, 0, 888, 889, 3, 87, 43, 0, 889, 890, 3, 79, 39, 0, 890, 891, 3, 113, 56, 0, 891, 168, 1, 0, 0, 0, 892, 893, 3, 95, 47, 0, 893, 894, 3, 105, 52, 0, 894, 895, 3, 117, 58, 0, 895, 896, 3, 87, 43, 0, 896, 897, 3, 113, 56, 0, 897, 898, 3, 121, 60, 0, 898, 899, 3, 79, 39, 0, 899, 900, 3, 101, 50, 0, 900, 901, 5, 95, 0, 0, 901, 902, 3, 85, 42, 0, 902, 903, 3, 79, 39, 0, 903, 904, 3, 127, 63, 0, 904, 170, 1, 0, 0, 0, 905, 906, 3, 119, 59, 0, 906, 907, 3, 119, 59, 0, 907, 908, 3, 95, 47, 0, 908, 909, 3, 85, 42, 0, 909, 172, 1, 0, 0, 0, 910, 911, 3, 85, 42, 0, 911, 912, 3, 87, 43, 0, 912, 913, 3, 83, 41, 0, 913, 914, 3, 95, 47, 0, 914, 915, 3, 103, 51, 0, 915, 916, 3, 79, 39, 0, 916, 917, 3, 101, 50, 0, 917, 174, 1, 0, 0, 0, 918, 919, 3, 109, 54, 0, 919, 920, 3, 113, 56, 0, 920, 921, 3, 87, 43, 0, 921, 922, 3, 83, 41, 0, 922, 923, 3, 95, 47, 0, 923, 924, 3, 115, 57, 0, 924, 925, 3, 95, 47, 0, 925, 926, 3, 107, 53, 0, 926, 927, 3, 105, 52, 0, 927, 928, 5, 95, 0, 0, 928, 929, 3, 117, 58, 0, 929, 930, 3, 95, 47, 0, 930, 931, 3, 103, 51, 0, 931, 932, 3, 87, 43, 0, 932, 933, 3, 115, 57, 0, 933, 934, 3, 117, 58, 0, 934, 935, 3, 79, 39, 0, 935, 936, 3, 103, 51, 0, 936, 937, 3, 109, 54, 0, 937, 176, 1, 0, 0, 0, 938, 939, 3, 109, 54, 0, 939, 940, 3, 113, 56, 0, 940, 941, 3, 87, 43, 0, 941, 942, 3, 83, 41, 0, 942, 943, 3, 95, 47, 0, 943, 944, 3, 115, 57, 0, 944, 945, 3, 95, 47, 0, 945, 946, 3, 107, 53, 0, 946, 947, 3, 105, 52, 0, 947, 948, 5, 95, 0, 0, 948, 949, 3, 117, 58, 0, 949, 950, 3, 95, 47, 0, 950, 951, 3, 103, 51, 0, 951, 952, 3, 87, 43, 0, 952, 953, 3, 115, 57, 0, 953, 954, 3, 117, 58, 0, 954, 955, 3, 79, 39, 0, 955, 956, 3, 103, 51, 0, 956, 957, 3, 109, 54, 0, 957, 958, 5, 95, 0, 0, 958, 959, 3, 117, 58, 0, 959, 960, 3, 129, 64, 0, 960, 178, 1, 0, 0, 0, 961, 962, 3, 89, 44, 0, 962, 963, 3, 95, 47, 0, 963, 964, 3, 125, 62, 0, 964, 965, 3, 87, 43, 0, 965, 966, 3, 85, 42, 0, 966, 967, 3, 83, 41, 0, 967, 968, 3, 93, 46, 0, 968, 969, 3, 79, 39, 0, 969, 970, 3, 113, 56, 0, 970, 180, 1, 0, 0, 0, 971, 972, 3, 121, 60, 0, 972, 973, 3, 79, 39, 0, 973, 974, 3, 113, 56, 0, 974, 975, 3, 83, 41, 0, 975, 976, 3, 93, 46, 0, 976, 977, 3, 79, 39, 0, 977, 978, 3, 113, 56, 0, 978, 182, 1, 0, 0, 0, 979, 980, 3, 89, 44, 0, 980, 981, 3, 95, 47, 0, 981, 982, 3, 125, 62, 0, 982, 983, 3, 87, 43, 0, 983, 984, 3, 85, 42, 0, 984, 985, 3, 81, 40, 0, 985, 986, 3, 95, 47, 0, 986, 987, 3, 105, 52, 0, 987, 988, 3, 79, 39, 0, 988, 989, 3, 113, 56, 0, 989, 990, 3, 127, 63, 0, 990, 184, 1, 0, 0, 0, 991, 992, 3, 115, 57, 0, 992, 993, 3, 117, 58, 0, 993, 994, 3, 113, 56, 0, 994, 995, 3, 119, 59, 0, 995, 996, 3, 83, 41, 0, 996, 997, 3, 117, 58, 0, 997, 186, 1, 0, 0, 0, 998, 999, 3, 105, 52, 0, 999, 1000, 3, 115, 57, 0, 1000, 1001, 3, 117, 58, 0, 1001, 1002, 3, 113, 56, 0, 1002, 1003, 3, 119, 59, 0, 1003, 1004, 3, 83, 41, 0, 1004, 1005, 3, 117, 58, 0, 1005, 188, 1, 0, 0, 0, 1006, 1007, 3, 101, 50, 0, 1007, 1008, 3, 95, 47, 0, 1008, 1009, 3, 115, 57, 0, 1009, 1010, 3, 117, 58, 0, 1010, 190, 1, 0, 0, 0, 1011, 1012, 3, 103, 51, 0, 1012, 1013, 3, 79, 39, 0, 1013, 1014, 3, 109, 54, 0, 1014, 192, 1, 0, 0, 0, 1015, 1016, 3, 79, 39, 0, 1016, 1017, 3, 105, 52, 0, 1017, 1018, 3, 127, 63, 0, 1018, 194, 1, 0, 0, 0, 1019, 1020, 3, 119, 59, 0, 1020, 1021, 5, 33, 0, 0, 1021, 196, 1, 0, 0, 0, 1022, 1023, 3, 91, 45, 0, 1023, 1024, 3, 87, 43, 0, 1024, 1025, 3, 107, 53, 0, 1025, 1026, 3, 103, 51, 0, 1026, 1027, 3, 87, 43, 0, 1027, 1028, 3, 117, 58, 0, 1028, 1029, 3, 113, 56, 0, 1029, 1030, 3, 127, 63, 0, 1030, 198, 1, 0, 0, 0, 1031, 1032, 3, 81, 40, 0, 1032, 1033, 3, 107, 53, 0, 1033, 1034, 3, 107, 53, 0, 1034, 1035, 3, 101, 50, 0, 1035, 200, 1, 0, 0, 0, 1036, 1037, 3, 115, 57, 0, 1037, 1038, 3, 117, 58, 0, 1038, 1039, 3, 113, 56, 0, 1039, 202, 1, 0, 0, 0, 1040, 1041, 3, 121, 60, 0, 1041, 1042, 3, 81, 40, 0, 1042, 1043, 3, 95, 47, 0, 1043, 1044, 3, 105, 52, 0, 1044, 204, 1, 0, 0, 0, 1045, 1046, 3, 117, 58, 0, 1046, 1047, 3, 115, 57, 0, 1047, 206, 1, 0, 0, 0, 1048, 1049, 3, 117, 58, 0, 1049, 1050, 3, 115, 57, 0, 1050, 1051, 3, 117, 58, 0, 1051, 1052, 3, 129, 64, 0, 1052, 208, 1, 0, 0, 0, 1053, 1054, 3, 95, 47, 0, 1054, 1055, 3, 127, 63, 0, 1055, 1056, 3, 87, 43, 0, 1056, 1057, 3, 79, 39, 0, 1057, 1058, 3, 113, 56, 0, 1058, 210, 1, 0, 0, 0, 1059, 1060, 3, 95, 47, 0, 1060, 1061, 3, 85, 42, 0, 1061, 1062, 3, 79, 39, 0, 1062, 1063, 3, 127, 63, 0, 1063, 212, 1, 0, 0, 0, 1064, 1065, 3, 85, 42, 0, 1065, 1066, 3, 87, 43, 0, 1066, 1067, 3, 83, 41, 0, 1067, 214, 1, 0, 0, 0, 1068, 1069, 3, 109, 54, 0, 1069, 1070, 3, 117, 58, 0, 1070, 1071, 3, 115, 57, 0, 1071, 216, 1, 0, 0, 0, 1072, 1073, 3, 109, 54, 0, 1073, 1074, 3, 117, 58, 0, 1074, 1075, 3, 115, 57, 0, 1075, 1076, 3, 117, 58, 0, 1076, 1077, 3, 129, 64, 0, 1077, 218, 1, 0, 0, 0, 1078, 1079, 3, 89, 44, 0, 1079, 1080, 3, 83, 41, 0, 1080, 1081, 3, 93, 46, 0, 1081, 1082, 3, 79, 39, 0, 1082, 1083, 3, 113, 56, 0, 1083, 220, 1, 0, 0, 0, 1084, 1085, 3, 121, 60, 0, 1085, 1086, 3, 83, 41, 0, 1086, 1087, 3, 93, 46, 0, 1087, 1088, 3, 79, 39, 0, 1088, 1089, 3, 113, 56, 0, 1089, 222, 1, 0, 0, 0, 1090, 1091, 3, 89, 44, 0, 1091, 1092, 3, 81, 40, 0, 1092, 1093, 3, 95, 47, 0, 1093, 1094, 3, 105, 52, 0, 1094, 224, 1, 0, 0, 0, 1095, 1096, 5, 58, 0, 0, 1096, 1097, 5, 58, 0, 0, 1097, 226, 1, 0, 0, 0, 1098, 1102, 7, 34, 0, 0, 1099, 1101, 7, 35, 0, 0, 1100, 1099, 1, 0, 0, 0, 1101, 1104, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 228, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1105, 1106, 5, 60, 0, 0, 1106, 230, 1, 0, 0, 0, 1107, 1108, 5, 62, 0, 0, 1108, 232, 1, 0, 0, 0, 1109, 1110, 5, 40, 0, 0, 1110, 234, 1, 0, 0, 0, 1111, 1112, 5, 41, 0, 0, 1112, 236, 1, 0, 0, 0, 1113, 1114, 5, 91, 0, 0, 1114, 238, 1, 0, 0, 0, 1115, 1116, 5, 93, 0, 0, 1116, 240, 1, 0, 0, 0, 1117, 1118, 5, 44, 0, 0, 1118, 242, 1, 0, 0, 0, 1119, 1120, 5, 61, 0, 0, 1120, 244, 1, 0, 0, 0, 1121, 1122, 5, 58, 0, 0, 1122, 246, 1, 0, 0, 0, 1123, 1124, 5, 63, 0, 0, 1124, 248, 1, 0, 0, 0, 1125, 1126, 5, 35, 0, 0, 1126, 250, 1, 0, 0, 0, 1127, 1128, 5, 46, 0, 0, 1128, 252, 1, 0, 0, 0, 48, 0, 284, 290, 292, 323, 327, 410, 415, 420, 426, 428, 431, 436, 442, 445, 449, 454, 456, 459, 474, 485, 511, 513, 537, 539, 553, 555, 590, 600, 609, 619, 626, 631, 636, 643, 648, 655, 660, 673, 675, 686, 698, 701, 706, 717, 780, 783, 1102, 1, 0, 1, 0] \ No newline at end of file diff --git a/tests/coverage/antlr_parser/FuncTestCaseLexer.py b/tests/coverage/antlr_parser/FuncTestCaseLexer.py new file mode 100644 index 000000000..90684740e --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseLexer.py @@ -0,0 +1,10158 @@ +# SPDX-License-Identifier: Apache-2.0 +# Generated from FuncTestCaseLexer.g4 by ANTLR 4.13.2 +from antlr4 import ( + ATNDeserializer, + DFA, + Lexer, + LexerATNSimulator, + PredictionContextCache, +) +import sys + +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4, + 0, + 95, + 1129, + 6, + -1, + 2, + 0, + 7, + 0, + 2, + 1, + 7, + 1, + 2, + 2, + 7, + 2, + 2, + 3, + 7, + 3, + 2, + 4, + 7, + 4, + 2, + 5, + 7, + 5, + 2, + 6, + 7, + 6, + 2, + 7, + 7, + 7, + 2, + 8, + 7, + 8, + 2, + 9, + 7, + 9, + 2, + 10, + 7, + 10, + 2, + 11, + 7, + 11, + 2, + 12, + 7, + 12, + 2, + 13, + 7, + 13, + 2, + 14, + 7, + 14, + 2, + 15, + 7, + 15, + 2, + 16, + 7, + 16, + 2, + 17, + 7, + 17, + 2, + 18, + 7, + 18, + 2, + 19, + 7, + 19, + 2, + 20, + 7, + 20, + 2, + 21, + 7, + 21, + 2, + 22, + 7, + 22, + 2, + 23, + 7, + 23, + 2, + 24, + 7, + 24, + 2, + 25, + 7, + 25, + 2, + 26, + 7, + 26, + 2, + 27, + 7, + 27, + 2, + 28, + 7, + 28, + 2, + 29, + 7, + 29, + 2, + 30, + 7, + 30, + 2, + 31, + 7, + 31, + 2, + 32, + 7, + 32, + 2, + 33, + 7, + 33, + 2, + 34, + 7, + 34, + 2, + 35, + 7, + 35, + 2, + 36, + 7, + 36, + 2, + 37, + 7, + 37, + 2, + 38, + 7, + 38, + 2, + 39, + 7, + 39, + 2, + 40, + 7, + 40, + 2, + 41, + 7, + 41, + 2, + 42, + 7, + 42, + 2, + 43, + 7, + 43, + 2, + 44, + 7, + 44, + 2, + 45, + 7, + 45, + 2, + 46, + 7, + 46, + 2, + 47, + 7, + 47, + 2, + 48, + 7, + 48, + 2, + 49, + 7, + 49, + 2, + 50, + 7, + 50, + 2, + 51, + 7, + 51, + 2, + 52, + 7, + 52, + 2, + 53, + 7, + 53, + 2, + 54, + 7, + 54, + 2, + 55, + 7, + 55, + 2, + 56, + 7, + 56, + 2, + 57, + 7, + 57, + 2, + 58, + 7, + 58, + 2, + 59, + 7, + 59, + 2, + 60, + 7, + 60, + 2, + 61, + 7, + 61, + 2, + 62, + 7, + 62, + 2, + 63, + 7, + 63, + 2, + 64, + 7, + 64, + 2, + 65, + 7, + 65, + 2, + 66, + 7, + 66, + 2, + 67, + 7, + 67, + 2, + 68, + 7, + 68, + 2, + 69, + 7, + 69, + 2, + 70, + 7, + 70, + 2, + 71, + 7, + 71, + 2, + 72, + 7, + 72, + 2, + 73, + 7, + 73, + 2, + 74, + 7, + 74, + 2, + 75, + 7, + 75, + 2, + 76, + 7, + 76, + 2, + 77, + 7, + 77, + 2, + 78, + 7, + 78, + 2, + 79, + 7, + 79, + 2, + 80, + 7, + 80, + 2, + 81, + 7, + 81, + 2, + 82, + 7, + 82, + 2, + 83, + 7, + 83, + 2, + 84, + 7, + 84, + 2, + 85, + 7, + 85, + 2, + 86, + 7, + 86, + 2, + 87, + 7, + 87, + 2, + 88, + 7, + 88, + 2, + 89, + 7, + 89, + 2, + 90, + 7, + 90, + 2, + 91, + 7, + 91, + 2, + 92, + 7, + 92, + 2, + 93, + 7, + 93, + 2, + 94, + 7, + 94, + 2, + 95, + 7, + 95, + 2, + 96, + 7, + 96, + 2, + 97, + 7, + 97, + 2, + 98, + 7, + 98, + 2, + 99, + 7, + 99, + 2, + 100, + 7, + 100, + 2, + 101, + 7, + 101, + 2, + 102, + 7, + 102, + 2, + 103, + 7, + 103, + 2, + 104, + 7, + 104, + 2, + 105, + 7, + 105, + 2, + 106, + 7, + 106, + 2, + 107, + 7, + 107, + 2, + 108, + 7, + 108, + 2, + 109, + 7, + 109, + 2, + 110, + 7, + 110, + 2, + 111, + 7, + 111, + 2, + 112, + 7, + 112, + 2, + 113, + 7, + 113, + 2, + 114, + 7, + 114, + 2, + 115, + 7, + 115, + 2, + 116, + 7, + 116, + 2, + 117, + 7, + 117, + 2, + 118, + 7, + 118, + 2, + 119, + 7, + 119, + 2, + 120, + 7, + 120, + 2, + 121, + 7, + 121, + 2, + 122, + 7, + 122, + 2, + 123, + 7, + 123, + 2, + 124, + 7, + 124, + 2, + 125, + 7, + 125, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 4, + 1, + 283, + 8, + 1, + 11, + 1, + 12, + 1, + 284, + 1, + 1, + 1, + 1, + 4, + 1, + 289, + 8, + 1, + 11, + 1, + 12, + 1, + 290, + 3, + 1, + 293, + 8, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 5, + 3, + 322, + 8, + 3, + 10, + 3, + 12, + 3, + 325, + 9, + 3, + 1, + 3, + 3, + 3, + 328, + 8, + 3, + 1, + 3, + 1, + 3, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 4, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 6, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 7, + 1, + 8, + 1, + 8, + 1, + 8, + 1, + 8, + 1, + 8, + 1, + 8, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 10, + 1, + 10, + 1, + 10, + 1, + 10, + 1, + 10, + 1, + 10, + 1, + 10, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 12, + 1, + 12, + 1, + 12, + 1, + 12, + 1, + 13, + 3, + 13, + 411, + 8, + 13, + 1, + 13, + 1, + 13, + 1, + 14, + 3, + 14, + 416, + 8, + 14, + 1, + 14, + 4, + 14, + 419, + 8, + 14, + 11, + 14, + 12, + 14, + 420, + 1, + 14, + 1, + 14, + 4, + 14, + 425, + 8, + 14, + 11, + 14, + 12, + 14, + 426, + 3, + 14, + 429, + 8, + 14, + 1, + 15, + 3, + 15, + 432, + 8, + 15, + 1, + 15, + 4, + 15, + 435, + 8, + 15, + 11, + 15, + 12, + 15, + 436, + 1, + 15, + 1, + 15, + 5, + 15, + 441, + 8, + 15, + 10, + 15, + 12, + 15, + 444, + 9, + 15, + 3, + 15, + 446, + 8, + 15, + 1, + 15, + 1, + 15, + 3, + 15, + 450, + 8, + 15, + 1, + 15, + 4, + 15, + 453, + 8, + 15, + 11, + 15, + 12, + 15, + 454, + 3, + 15, + 457, + 8, + 15, + 1, + 15, + 3, + 15, + 460, + 8, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 3, + 15, + 475, + 8, + 15, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 3, + 16, + 486, + 8, + 16, + 1, + 17, + 1, + 17, + 1, + 17, + 1, + 17, + 1, + 17, + 1, + 18, + 1, + 18, + 1, + 18, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 4, + 19, + 510, + 8, + 19, + 11, + 19, + 12, + 19, + 511, + 3, + 19, + 514, + 8, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 4, + 20, + 536, + 8, + 20, + 11, + 20, + 12, + 20, + 537, + 3, + 20, + 540, + 8, + 20, + 1, + 20, + 1, + 20, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 4, + 21, + 552, + 8, + 21, + 11, + 21, + 12, + 21, + 553, + 3, + 21, + 556, + 8, + 21, + 1, + 21, + 1, + 21, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 23, + 1, + 23, + 1, + 24, + 1, + 24, + 1, + 25, + 1, + 25, + 1, + 26, + 1, + 26, + 1, + 27, + 1, + 27, + 1, + 28, + 1, + 28, + 1, + 29, + 1, + 29, + 1, + 30, + 1, + 30, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 3, + 31, + 591, + 8, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 3, + 31, + 601, + 8, + 31, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 3, + 32, + 610, + 8, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 3, + 32, + 620, + 8, + 32, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 627, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 632, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 637, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 644, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 649, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 656, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 3, + 33, + 661, + 8, + 33, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 5, + 35, + 674, + 8, + 35, + 10, + 35, + 12, + 35, + 677, + 9, + 35, + 1, + 35, + 1, + 35, + 1, + 36, + 1, + 36, + 1, + 36, + 1, + 36, + 5, + 36, + 685, + 8, + 36, + 10, + 36, + 12, + 36, + 688, + 9, + 36, + 1, + 36, + 1, + 36, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 4, + 37, + 697, + 8, + 37, + 11, + 37, + 12, + 37, + 698, + 1, + 37, + 3, + 37, + 702, + 8, + 37, + 1, + 37, + 5, + 37, + 705, + 8, + 37, + 10, + 37, + 12, + 37, + 708, + 9, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 38, + 4, + 38, + 716, + 8, + 38, + 11, + 38, + 12, + 38, + 717, + 1, + 38, + 1, + 38, + 1, + 39, + 1, + 39, + 1, + 40, + 1, + 40, + 1, + 41, + 1, + 41, + 1, + 42, + 1, + 42, + 1, + 43, + 1, + 43, + 1, + 44, + 1, + 44, + 1, + 45, + 1, + 45, + 1, + 46, + 1, + 46, + 1, + 47, + 1, + 47, + 1, + 48, + 1, + 48, + 1, + 49, + 1, + 49, + 1, + 50, + 1, + 50, + 1, + 51, + 1, + 51, + 1, + 52, + 1, + 52, + 1, + 53, + 1, + 53, + 1, + 54, + 1, + 54, + 1, + 55, + 1, + 55, + 1, + 56, + 1, + 56, + 1, + 57, + 1, + 57, + 1, + 58, + 1, + 58, + 1, + 59, + 1, + 59, + 1, + 60, + 1, + 60, + 1, + 61, + 1, + 61, + 1, + 62, + 1, + 62, + 1, + 63, + 1, + 63, + 1, + 64, + 1, + 64, + 1, + 65, + 1, + 65, + 1, + 66, + 1, + 66, + 1, + 66, + 5, + 66, + 779, + 8, + 66, + 10, + 66, + 12, + 66, + 782, + 9, + 66, + 3, + 66, + 784, + 8, + 66, + 1, + 67, + 1, + 67, + 1, + 67, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 71, + 1, + 71, + 1, + 71, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 76, + 1, + 76, + 1, + 76, + 1, + 76, + 1, + 76, + 1, + 77, + 1, + 77, + 1, + 77, + 1, + 77, + 1, + 77, + 1, + 77, + 1, + 77, + 1, + 78, + 1, + 78, + 1, + 78, + 1, + 78, + 1, + 78, + 1, + 78, + 1, + 78, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 79, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 80, + 1, + 81, + 1, + 81, + 1, + 81, + 1, + 81, + 1, + 81, + 1, + 82, + 1, + 82, + 1, + 82, + 1, + 82, + 1, + 82, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 83, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 84, + 1, + 85, + 1, + 85, + 1, + 85, + 1, + 85, + 1, + 85, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 86, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 87, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 88, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 89, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 90, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 91, + 1, + 92, + 1, + 92, + 1, + 92, + 1, + 92, + 1, + 92, + 1, + 92, + 1, + 92, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 93, + 1, + 94, + 1, + 94, + 1, + 94, + 1, + 94, + 1, + 94, + 1, + 95, + 1, + 95, + 1, + 95, + 1, + 95, + 1, + 96, + 1, + 96, + 1, + 96, + 1, + 96, + 1, + 97, + 1, + 97, + 1, + 97, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 98, + 1, + 99, + 1, + 99, + 1, + 99, + 1, + 99, + 1, + 99, + 1, + 100, + 1, + 100, + 1, + 100, + 1, + 100, + 1, + 101, + 1, + 101, + 1, + 101, + 1, + 101, + 1, + 101, + 1, + 102, + 1, + 102, + 1, + 102, + 1, + 103, + 1, + 103, + 1, + 103, + 1, + 103, + 1, + 103, + 1, + 104, + 1, + 104, + 1, + 104, + 1, + 104, + 1, + 104, + 1, + 104, + 1, + 105, + 1, + 105, + 1, + 105, + 1, + 105, + 1, + 105, + 1, + 106, + 1, + 106, + 1, + 106, + 1, + 106, + 1, + 107, + 1, + 107, + 1, + 107, + 1, + 107, + 1, + 108, + 1, + 108, + 1, + 108, + 1, + 108, + 1, + 108, + 1, + 108, + 1, + 109, + 1, + 109, + 1, + 109, + 1, + 109, + 1, + 109, + 1, + 109, + 1, + 110, + 1, + 110, + 1, + 110, + 1, + 110, + 1, + 110, + 1, + 110, + 1, + 111, + 1, + 111, + 1, + 111, + 1, + 111, + 1, + 111, + 1, + 112, + 1, + 112, + 1, + 112, + 1, + 113, + 1, + 113, + 5, + 113, + 1101, + 8, + 113, + 10, + 113, + 12, + 113, + 1104, + 9, + 113, + 1, + 114, + 1, + 114, + 1, + 115, + 1, + 115, + 1, + 116, + 1, + 116, + 1, + 117, + 1, + 117, + 1, + 118, + 1, + 118, + 1, + 119, + 1, + 119, + 1, + 120, + 1, + 120, + 1, + 121, + 1, + 121, + 1, + 122, + 1, + 122, + 1, + 123, + 1, + 123, + 1, + 124, + 1, + 124, + 1, + 125, + 1, + 125, + 0, + 0, + 126, + 1, + 1, + 3, + 2, + 5, + 3, + 7, + 4, + 9, + 5, + 11, + 6, + 13, + 7, + 15, + 8, + 17, + 9, + 19, + 10, + 21, + 11, + 23, + 12, + 25, + 13, + 27, + 14, + 29, + 15, + 31, + 16, + 33, + 17, + 35, + 0, + 37, + 0, + 39, + 18, + 41, + 19, + 43, + 20, + 45, + 21, + 47, + 22, + 49, + 23, + 51, + 24, + 53, + 25, + 55, + 26, + 57, + 27, + 59, + 28, + 61, + 29, + 63, + 30, + 65, + 31, + 67, + 0, + 69, + 32, + 71, + 33, + 73, + 34, + 75, + 35, + 77, + 36, + 79, + 0, + 81, + 0, + 83, + 0, + 85, + 0, + 87, + 0, + 89, + 0, + 91, + 0, + 93, + 0, + 95, + 0, + 97, + 0, + 99, + 0, + 101, + 0, + 103, + 0, + 105, + 0, + 107, + 0, + 109, + 0, + 111, + 0, + 113, + 0, + 115, + 0, + 117, + 0, + 119, + 0, + 121, + 0, + 123, + 0, + 125, + 0, + 127, + 0, + 129, + 0, + 131, + 0, + 133, + 0, + 135, + 37, + 137, + 38, + 139, + 39, + 141, + 40, + 143, + 41, + 145, + 42, + 147, + 43, + 149, + 44, + 151, + 45, + 153, + 46, + 155, + 47, + 157, + 48, + 159, + 49, + 161, + 50, + 163, + 51, + 165, + 52, + 167, + 53, + 169, + 54, + 171, + 55, + 173, + 56, + 175, + 57, + 177, + 58, + 179, + 59, + 181, + 60, + 183, + 61, + 185, + 62, + 187, + 63, + 189, + 64, + 191, + 65, + 193, + 66, + 195, + 67, + 197, + 68, + 199, + 69, + 201, + 70, + 203, + 71, + 205, + 72, + 207, + 73, + 209, + 74, + 211, + 75, + 213, + 76, + 215, + 77, + 217, + 78, + 219, + 79, + 221, + 80, + 223, + 81, + 225, + 82, + 227, + 83, + 229, + 84, + 231, + 85, + 233, + 86, + 235, + 87, + 237, + 88, + 239, + 89, + 241, + 90, + 243, + 91, + 245, + 92, + 247, + 93, + 249, + 94, + 251, + 95, + 1, + 0, + 36, + 2, + 0, + 10, + 10, + 13, + 13, + 2, + 0, + 43, + 43, + 45, + 45, + 1, + 0, + 48, + 57, + 2, + 0, + 69, + 69, + 101, + 101, + 2, + 0, + 39, + 39, + 92, + 92, + 1, + 0, + 42, + 42, + 2, + 0, + 42, + 42, + 47, + 47, + 3, + 0, + 9, + 10, + 13, + 13, + 32, + 32, + 2, + 0, + 65, + 65, + 97, + 97, + 2, + 0, + 66, + 66, + 98, + 98, + 2, + 0, + 67, + 67, + 99, + 99, + 2, + 0, + 68, + 68, + 100, + 100, + 2, + 0, + 70, + 70, + 102, + 102, + 2, + 0, + 71, + 71, + 103, + 103, + 2, + 0, + 72, + 72, + 104, + 104, + 2, + 0, + 73, + 73, + 105, + 105, + 2, + 0, + 74, + 74, + 106, + 106, + 2, + 0, + 75, + 75, + 107, + 107, + 2, + 0, + 76, + 76, + 108, + 108, + 2, + 0, + 77, + 77, + 109, + 109, + 2, + 0, + 78, + 78, + 110, + 110, + 2, + 0, + 79, + 79, + 111, + 111, + 2, + 0, + 80, + 80, + 112, + 112, + 2, + 0, + 81, + 81, + 113, + 113, + 2, + 0, + 82, + 82, + 114, + 114, + 2, + 0, + 83, + 83, + 115, + 115, + 2, + 0, + 84, + 84, + 116, + 116, + 2, + 0, + 85, + 85, + 117, + 117, + 2, + 0, + 86, + 86, + 118, + 118, + 2, + 0, + 87, + 87, + 119, + 119, + 2, + 0, + 88, + 88, + 120, + 120, + 2, + 0, + 89, + 89, + 121, + 121, + 2, + 0, + 90, + 90, + 122, + 122, + 1, + 0, + 49, + 57, + 3, + 0, + 65, + 90, + 95, + 95, + 97, + 122, + 4, + 0, + 48, + 57, + 65, + 90, + 95, + 95, + 97, + 122, + 1150, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 5, + 1, + 0, + 0, + 0, + 0, + 7, + 1, + 0, + 0, + 0, + 0, + 9, + 1, + 0, + 0, + 0, + 0, + 11, + 1, + 0, + 0, + 0, + 0, + 13, + 1, + 0, + 0, + 0, + 0, + 15, + 1, + 0, + 0, + 0, + 0, + 17, + 1, + 0, + 0, + 0, + 0, + 19, + 1, + 0, + 0, + 0, + 0, + 21, + 1, + 0, + 0, + 0, + 0, + 23, + 1, + 0, + 0, + 0, + 0, + 25, + 1, + 0, + 0, + 0, + 0, + 27, + 1, + 0, + 0, + 0, + 0, + 29, + 1, + 0, + 0, + 0, + 0, + 31, + 1, + 0, + 0, + 0, + 0, + 33, + 1, + 0, + 0, + 0, + 0, + 39, + 1, + 0, + 0, + 0, + 0, + 41, + 1, + 0, + 0, + 0, + 0, + 43, + 1, + 0, + 0, + 0, + 0, + 45, + 1, + 0, + 0, + 0, + 0, + 47, + 1, + 0, + 0, + 0, + 0, + 49, + 1, + 0, + 0, + 0, + 0, + 51, + 1, + 0, + 0, + 0, + 0, + 53, + 1, + 0, + 0, + 0, + 0, + 55, + 1, + 0, + 0, + 0, + 0, + 57, + 1, + 0, + 0, + 0, + 0, + 59, + 1, + 0, + 0, + 0, + 0, + 61, + 1, + 0, + 0, + 0, + 0, + 63, + 1, + 0, + 0, + 0, + 0, + 65, + 1, + 0, + 0, + 0, + 0, + 69, + 1, + 0, + 0, + 0, + 0, + 71, + 1, + 0, + 0, + 0, + 0, + 73, + 1, + 0, + 0, + 0, + 0, + 75, + 1, + 0, + 0, + 0, + 0, + 77, + 1, + 0, + 0, + 0, + 0, + 135, + 1, + 0, + 0, + 0, + 0, + 137, + 1, + 0, + 0, + 0, + 0, + 139, + 1, + 0, + 0, + 0, + 0, + 141, + 1, + 0, + 0, + 0, + 0, + 143, + 1, + 0, + 0, + 0, + 0, + 145, + 1, + 0, + 0, + 0, + 0, + 147, + 1, + 0, + 0, + 0, + 0, + 149, + 1, + 0, + 0, + 0, + 0, + 151, + 1, + 0, + 0, + 0, + 0, + 153, + 1, + 0, + 0, + 0, + 0, + 155, + 1, + 0, + 0, + 0, + 0, + 157, + 1, + 0, + 0, + 0, + 0, + 159, + 1, + 0, + 0, + 0, + 0, + 161, + 1, + 0, + 0, + 0, + 0, + 163, + 1, + 0, + 0, + 0, + 0, + 165, + 1, + 0, + 0, + 0, + 0, + 167, + 1, + 0, + 0, + 0, + 0, + 169, + 1, + 0, + 0, + 0, + 0, + 171, + 1, + 0, + 0, + 0, + 0, + 173, + 1, + 0, + 0, + 0, + 0, + 175, + 1, + 0, + 0, + 0, + 0, + 177, + 1, + 0, + 0, + 0, + 0, + 179, + 1, + 0, + 0, + 0, + 0, + 181, + 1, + 0, + 0, + 0, + 0, + 183, + 1, + 0, + 0, + 0, + 0, + 185, + 1, + 0, + 0, + 0, + 0, + 187, + 1, + 0, + 0, + 0, + 0, + 189, + 1, + 0, + 0, + 0, + 0, + 191, + 1, + 0, + 0, + 0, + 0, + 193, + 1, + 0, + 0, + 0, + 0, + 195, + 1, + 0, + 0, + 0, + 0, + 197, + 1, + 0, + 0, + 0, + 0, + 199, + 1, + 0, + 0, + 0, + 0, + 201, + 1, + 0, + 0, + 0, + 0, + 203, + 1, + 0, + 0, + 0, + 0, + 205, + 1, + 0, + 0, + 0, + 0, + 207, + 1, + 0, + 0, + 0, + 0, + 209, + 1, + 0, + 0, + 0, + 0, + 211, + 1, + 0, + 0, + 0, + 0, + 213, + 1, + 0, + 0, + 0, + 0, + 215, + 1, + 0, + 0, + 0, + 0, + 217, + 1, + 0, + 0, + 0, + 0, + 219, + 1, + 0, + 0, + 0, + 0, + 221, + 1, + 0, + 0, + 0, + 0, + 223, + 1, + 0, + 0, + 0, + 0, + 225, + 1, + 0, + 0, + 0, + 0, + 227, + 1, + 0, + 0, + 0, + 0, + 229, + 1, + 0, + 0, + 0, + 0, + 231, + 1, + 0, + 0, + 0, + 0, + 233, + 1, + 0, + 0, + 0, + 0, + 235, + 1, + 0, + 0, + 0, + 0, + 237, + 1, + 0, + 0, + 0, + 0, + 239, + 1, + 0, + 0, + 0, + 0, + 241, + 1, + 0, + 0, + 0, + 0, + 243, + 1, + 0, + 0, + 0, + 0, + 245, + 1, + 0, + 0, + 0, + 0, + 247, + 1, + 0, + 0, + 0, + 0, + 249, + 1, + 0, + 0, + 0, + 0, + 251, + 1, + 0, + 0, + 0, + 1, + 253, + 1, + 0, + 0, + 0, + 3, + 280, + 1, + 0, + 0, + 0, + 5, + 294, + 1, + 0, + 0, + 0, + 7, + 317, + 1, + 0, + 0, + 0, + 9, + 331, + 1, + 0, + 0, + 0, + 11, + 340, + 1, + 0, + 0, + 0, + 13, + 353, + 1, + 0, + 0, + 0, + 15, + 362, + 1, + 0, + 0, + 0, + 17, + 371, + 1, + 0, + 0, + 0, + 19, + 377, + 1, + 0, + 0, + 0, + 21, + 386, + 1, + 0, + 0, + 0, + 23, + 393, + 1, + 0, + 0, + 0, + 25, + 405, + 1, + 0, + 0, + 0, + 27, + 410, + 1, + 0, + 0, + 0, + 29, + 415, + 1, + 0, + 0, + 0, + 31, + 474, + 1, + 0, + 0, + 0, + 33, + 485, + 1, + 0, + 0, + 0, + 35, + 487, + 1, + 0, + 0, + 0, + 37, + 492, + 1, + 0, + 0, + 0, + 39, + 495, + 1, + 0, + 0, + 0, + 41, + 521, + 1, + 0, + 0, + 0, + 43, + 543, + 1, + 0, + 0, + 0, + 45, + 559, + 1, + 0, + 0, + 0, + 47, + 567, + 1, + 0, + 0, + 0, + 49, + 569, + 1, + 0, + 0, + 0, + 51, + 571, + 1, + 0, + 0, + 0, + 53, + 573, + 1, + 0, + 0, + 0, + 55, + 575, + 1, + 0, + 0, + 0, + 57, + 577, + 1, + 0, + 0, + 0, + 59, + 579, + 1, + 0, + 0, + 0, + 61, + 581, + 1, + 0, + 0, + 0, + 63, + 600, + 1, + 0, + 0, + 0, + 65, + 619, + 1, + 0, + 0, + 0, + 67, + 660, + 1, + 0, + 0, + 0, + 69, + 662, + 1, + 0, + 0, + 0, + 71, + 667, + 1, + 0, + 0, + 0, + 73, + 680, + 1, + 0, + 0, + 0, + 75, + 691, + 1, + 0, + 0, + 0, + 77, + 715, + 1, + 0, + 0, + 0, + 79, + 721, + 1, + 0, + 0, + 0, + 81, + 723, + 1, + 0, + 0, + 0, + 83, + 725, + 1, + 0, + 0, + 0, + 85, + 727, + 1, + 0, + 0, + 0, + 87, + 729, + 1, + 0, + 0, + 0, + 89, + 731, + 1, + 0, + 0, + 0, + 91, + 733, + 1, + 0, + 0, + 0, + 93, + 735, + 1, + 0, + 0, + 0, + 95, + 737, + 1, + 0, + 0, + 0, + 97, + 739, + 1, + 0, + 0, + 0, + 99, + 741, + 1, + 0, + 0, + 0, + 101, + 743, + 1, + 0, + 0, + 0, + 103, + 745, + 1, + 0, + 0, + 0, + 105, + 747, + 1, + 0, + 0, + 0, + 107, + 749, + 1, + 0, + 0, + 0, + 109, + 751, + 1, + 0, + 0, + 0, + 111, + 753, + 1, + 0, + 0, + 0, + 113, + 755, + 1, + 0, + 0, + 0, + 115, + 757, + 1, + 0, + 0, + 0, + 117, + 759, + 1, + 0, + 0, + 0, + 119, + 761, + 1, + 0, + 0, + 0, + 121, + 763, + 1, + 0, + 0, + 0, + 123, + 765, + 1, + 0, + 0, + 0, + 125, + 767, + 1, + 0, + 0, + 0, + 127, + 769, + 1, + 0, + 0, + 0, + 129, + 771, + 1, + 0, + 0, + 0, + 131, + 773, + 1, + 0, + 0, + 0, + 133, + 783, + 1, + 0, + 0, + 0, + 135, + 785, + 1, + 0, + 0, + 0, + 137, + 788, + 1, + 0, + 0, + 0, + 139, + 793, + 1, + 0, + 0, + 0, + 141, + 798, + 1, + 0, + 0, + 0, + 143, + 806, + 1, + 0, + 0, + 0, + 145, + 809, + 1, + 0, + 0, + 0, + 147, + 813, + 1, + 0, + 0, + 0, + 149, + 817, + 1, + 0, + 0, + 0, + 151, + 821, + 1, + 0, + 0, + 0, + 153, + 826, + 1, + 0, + 0, + 0, + 155, + 831, + 1, + 0, + 0, + 0, + 157, + 838, + 1, + 0, + 0, + 0, + 159, + 845, + 1, + 0, + 0, + 0, + 161, + 855, + 1, + 0, + 0, + 0, + 163, + 868, + 1, + 0, + 0, + 0, + 165, + 873, + 1, + 0, + 0, + 0, + 167, + 878, + 1, + 0, + 0, + 0, + 169, + 892, + 1, + 0, + 0, + 0, + 171, + 905, + 1, + 0, + 0, + 0, + 173, + 910, + 1, + 0, + 0, + 0, + 175, + 918, + 1, + 0, + 0, + 0, + 177, + 938, + 1, + 0, + 0, + 0, + 179, + 961, + 1, + 0, + 0, + 0, + 181, + 971, + 1, + 0, + 0, + 0, + 183, + 979, + 1, + 0, + 0, + 0, + 185, + 991, + 1, + 0, + 0, + 0, + 187, + 998, + 1, + 0, + 0, + 0, + 189, + 1006, + 1, + 0, + 0, + 0, + 191, + 1011, + 1, + 0, + 0, + 0, + 193, + 1015, + 1, + 0, + 0, + 0, + 195, + 1019, + 1, + 0, + 0, + 0, + 197, + 1022, + 1, + 0, + 0, + 0, + 199, + 1031, + 1, + 0, + 0, + 0, + 201, + 1036, + 1, + 0, + 0, + 0, + 203, + 1040, + 1, + 0, + 0, + 0, + 205, + 1045, + 1, + 0, + 0, + 0, + 207, + 1048, + 1, + 0, + 0, + 0, + 209, + 1053, + 1, + 0, + 0, + 0, + 211, + 1059, + 1, + 0, + 0, + 0, + 213, + 1064, + 1, + 0, + 0, + 0, + 215, + 1068, + 1, + 0, + 0, + 0, + 217, + 1072, + 1, + 0, + 0, + 0, + 219, + 1078, + 1, + 0, + 0, + 0, + 221, + 1084, + 1, + 0, + 0, + 0, + 223, + 1090, + 1, + 0, + 0, + 0, + 225, + 1095, + 1, + 0, + 0, + 0, + 227, + 1098, + 1, + 0, + 0, + 0, + 229, + 1105, + 1, + 0, + 0, + 0, + 231, + 1107, + 1, + 0, + 0, + 0, + 233, + 1109, + 1, + 0, + 0, + 0, + 235, + 1111, + 1, + 0, + 0, + 0, + 237, + 1113, + 1, + 0, + 0, + 0, + 239, + 1115, + 1, + 0, + 0, + 0, + 241, + 1117, + 1, + 0, + 0, + 0, + 243, + 1119, + 1, + 0, + 0, + 0, + 245, + 1121, + 1, + 0, + 0, + 0, + 247, + 1123, + 1, + 0, + 0, + 0, + 249, + 1125, + 1, + 0, + 0, + 0, + 251, + 1127, + 1, + 0, + 0, + 0, + 253, + 254, + 5, + 35, + 0, + 0, + 254, + 255, + 5, + 35, + 0, + 0, + 255, + 256, + 5, + 35, + 0, + 0, + 256, + 257, + 5, + 32, + 0, + 0, + 257, + 258, + 5, + 83, + 0, + 0, + 258, + 259, + 5, + 85, + 0, + 0, + 259, + 260, + 5, + 66, + 0, + 0, + 260, + 261, + 5, + 83, + 0, + 0, + 261, + 262, + 5, + 84, + 0, + 0, + 262, + 263, + 5, + 82, + 0, + 0, + 263, + 264, + 5, + 65, + 0, + 0, + 264, + 265, + 5, + 73, + 0, + 0, + 265, + 266, + 5, + 84, + 0, + 0, + 266, + 267, + 5, + 95, + 0, + 0, + 267, + 268, + 5, + 83, + 0, + 0, + 268, + 269, + 5, + 67, + 0, + 0, + 269, + 270, + 5, + 65, + 0, + 0, + 270, + 271, + 5, + 76, + 0, + 0, + 271, + 272, + 5, + 65, + 0, + 0, + 272, + 273, + 5, + 82, + 0, + 0, + 273, + 274, + 5, + 95, + 0, + 0, + 274, + 275, + 5, + 84, + 0, + 0, + 275, + 276, + 5, + 69, + 0, + 0, + 276, + 277, + 5, + 83, + 0, + 0, + 277, + 278, + 5, + 84, + 0, + 0, + 278, + 279, + 5, + 58, + 0, + 0, + 279, + 2, + 1, + 0, + 0, + 0, + 280, + 282, + 5, + 118, + 0, + 0, + 281, + 283, + 3, + 131, + 65, + 0, + 282, + 281, + 1, + 0, + 0, + 0, + 283, + 284, + 1, + 0, + 0, + 0, + 284, + 282, + 1, + 0, + 0, + 0, + 284, + 285, + 1, + 0, + 0, + 0, + 285, + 292, + 1, + 0, + 0, + 0, + 286, + 288, + 5, + 46, + 0, + 0, + 287, + 289, + 3, + 131, + 65, + 0, + 288, + 287, + 1, + 0, + 0, + 0, + 289, + 290, + 1, + 0, + 0, + 0, + 290, + 288, + 1, + 0, + 0, + 0, + 290, + 291, + 1, + 0, + 0, + 0, + 291, + 293, + 1, + 0, + 0, + 0, + 292, + 286, + 1, + 0, + 0, + 0, + 292, + 293, + 1, + 0, + 0, + 0, + 293, + 4, + 1, + 0, + 0, + 0, + 294, + 295, + 5, + 35, + 0, + 0, + 295, + 296, + 5, + 35, + 0, + 0, + 296, + 297, + 5, + 35, + 0, + 0, + 297, + 298, + 5, + 32, + 0, + 0, + 298, + 299, + 5, + 83, + 0, + 0, + 299, + 300, + 5, + 85, + 0, + 0, + 300, + 301, + 5, + 66, + 0, + 0, + 301, + 302, + 5, + 83, + 0, + 0, + 302, + 303, + 5, + 84, + 0, + 0, + 303, + 304, + 5, + 82, + 0, + 0, + 304, + 305, + 5, + 65, + 0, + 0, + 305, + 306, + 5, + 73, + 0, + 0, + 306, + 307, + 5, + 84, + 0, + 0, + 307, + 308, + 5, + 95, + 0, + 0, + 308, + 309, + 5, + 73, + 0, + 0, + 309, + 310, + 5, + 78, + 0, + 0, + 310, + 311, + 5, + 67, + 0, + 0, + 311, + 312, + 5, + 76, + 0, + 0, + 312, + 313, + 5, + 85, + 0, + 0, + 313, + 314, + 5, + 68, + 0, + 0, + 314, + 315, + 5, + 69, + 0, + 0, + 315, + 316, + 5, + 58, + 0, + 0, + 316, + 6, + 1, + 0, + 0, + 0, + 317, + 318, + 5, + 35, + 0, + 0, + 318, + 319, + 5, + 32, + 0, + 0, + 319, + 323, + 1, + 0, + 0, + 0, + 320, + 322, + 8, + 0, + 0, + 0, + 321, + 320, + 1, + 0, + 0, + 0, + 322, + 325, + 1, + 0, + 0, + 0, + 323, + 321, + 1, + 0, + 0, + 0, + 323, + 324, + 1, + 0, + 0, + 0, + 324, + 327, + 1, + 0, + 0, + 0, + 325, + 323, + 1, + 0, + 0, + 0, + 326, + 328, + 5, + 13, + 0, + 0, + 327, + 326, + 1, + 0, + 0, + 0, + 327, + 328, + 1, + 0, + 0, + 0, + 328, + 329, + 1, + 0, + 0, + 0, + 329, + 330, + 5, + 10, + 0, + 0, + 330, + 8, + 1, + 0, + 0, + 0, + 331, + 332, + 5, + 60, + 0, + 0, + 332, + 333, + 5, + 33, + 0, + 0, + 333, + 334, + 5, + 69, + 0, + 0, + 334, + 335, + 5, + 82, + 0, + 0, + 335, + 336, + 5, + 82, + 0, + 0, + 336, + 337, + 5, + 79, + 0, + 0, + 337, + 338, + 5, + 82, + 0, + 0, + 338, + 339, + 5, + 62, + 0, + 0, + 339, + 10, + 1, + 0, + 0, + 0, + 340, + 341, + 5, + 60, + 0, + 0, + 341, + 342, + 5, + 33, + 0, + 0, + 342, + 343, + 5, + 85, + 0, + 0, + 343, + 344, + 5, + 78, + 0, + 0, + 344, + 345, + 5, + 68, + 0, + 0, + 345, + 346, + 5, + 69, + 0, + 0, + 346, + 347, + 5, + 70, + 0, + 0, + 347, + 348, + 5, + 73, + 0, + 0, + 348, + 349, + 5, + 78, + 0, + 0, + 349, + 350, + 5, + 69, + 0, + 0, + 350, + 351, + 5, + 68, + 0, + 0, + 351, + 352, + 5, + 62, + 0, + 0, + 352, + 12, + 1, + 0, + 0, + 0, + 353, + 354, + 5, + 111, + 0, + 0, + 354, + 355, + 5, + 118, + 0, + 0, + 355, + 356, + 5, + 101, + 0, + 0, + 356, + 357, + 5, + 114, + 0, + 0, + 357, + 358, + 5, + 108, + 0, + 0, + 358, + 359, + 5, + 102, + 0, + 0, + 359, + 360, + 5, + 111, + 0, + 0, + 360, + 361, + 5, + 119, + 0, + 0, + 361, + 14, + 1, + 0, + 0, + 0, + 362, + 363, + 5, + 114, + 0, + 0, + 363, + 364, + 5, + 111, + 0, + 0, + 364, + 365, + 5, + 117, + 0, + 0, + 365, + 366, + 5, + 110, + 0, + 0, + 366, + 367, + 5, + 100, + 0, + 0, + 367, + 368, + 5, + 105, + 0, + 0, + 368, + 369, + 5, + 110, + 0, + 0, + 369, + 370, + 5, + 103, + 0, + 0, + 370, + 16, + 1, + 0, + 0, + 0, + 371, + 372, + 5, + 69, + 0, + 0, + 372, + 373, + 5, + 82, + 0, + 0, + 373, + 374, + 5, + 82, + 0, + 0, + 374, + 375, + 5, + 79, + 0, + 0, + 375, + 376, + 5, + 82, + 0, + 0, + 376, + 18, + 1, + 0, + 0, + 0, + 377, + 378, + 5, + 83, + 0, + 0, + 378, + 379, + 5, + 65, + 0, + 0, + 379, + 380, + 5, + 84, + 0, + 0, + 380, + 381, + 5, + 85, + 0, + 0, + 381, + 382, + 5, + 82, + 0, + 0, + 382, + 383, + 5, + 65, + 0, + 0, + 383, + 384, + 5, + 84, + 0, + 0, + 384, + 385, + 5, + 69, + 0, + 0, + 385, + 20, + 1, + 0, + 0, + 0, + 386, + 387, + 5, + 83, + 0, + 0, + 387, + 388, + 5, + 73, + 0, + 0, + 388, + 389, + 5, + 76, + 0, + 0, + 389, + 390, + 5, + 69, + 0, + 0, + 390, + 391, + 5, + 78, + 0, + 0, + 391, + 392, + 5, + 84, + 0, + 0, + 392, + 22, + 1, + 0, + 0, + 0, + 393, + 394, + 5, + 84, + 0, + 0, + 394, + 395, + 5, + 73, + 0, + 0, + 395, + 396, + 5, + 69, + 0, + 0, + 396, + 397, + 5, + 95, + 0, + 0, + 397, + 398, + 5, + 84, + 0, + 0, + 398, + 399, + 5, + 79, + 0, + 0, + 399, + 400, + 5, + 95, + 0, + 0, + 400, + 401, + 5, + 69, + 0, + 0, + 401, + 402, + 5, + 86, + 0, + 0, + 402, + 403, + 5, + 69, + 0, + 0, + 403, + 404, + 5, + 78, + 0, + 0, + 404, + 24, + 1, + 0, + 0, + 0, + 405, + 406, + 5, + 78, + 0, + 0, + 406, + 407, + 5, + 65, + 0, + 0, + 407, + 408, + 5, + 78, + 0, + 0, + 408, + 26, + 1, + 0, + 0, + 0, + 409, + 411, + 7, + 1, + 0, + 0, + 410, + 409, + 1, + 0, + 0, + 0, + 410, + 411, + 1, + 0, + 0, + 0, + 411, + 412, + 1, + 0, + 0, + 0, + 412, + 413, + 3, + 133, + 66, + 0, + 413, + 28, + 1, + 0, + 0, + 0, + 414, + 416, + 7, + 1, + 0, + 0, + 415, + 414, + 1, + 0, + 0, + 0, + 415, + 416, + 1, + 0, + 0, + 0, + 416, + 418, + 1, + 0, + 0, + 0, + 417, + 419, + 7, + 2, + 0, + 0, + 418, + 417, + 1, + 0, + 0, + 0, + 419, + 420, + 1, + 0, + 0, + 0, + 420, + 418, + 1, + 0, + 0, + 0, + 420, + 421, + 1, + 0, + 0, + 0, + 421, + 428, + 1, + 0, + 0, + 0, + 422, + 424, + 5, + 46, + 0, + 0, + 423, + 425, + 7, + 2, + 0, + 0, + 424, + 423, + 1, + 0, + 0, + 0, + 425, + 426, + 1, + 0, + 0, + 0, + 426, + 424, + 1, + 0, + 0, + 0, + 426, + 427, + 1, + 0, + 0, + 0, + 427, + 429, + 1, + 0, + 0, + 0, + 428, + 422, + 1, + 0, + 0, + 0, + 428, + 429, + 1, + 0, + 0, + 0, + 429, + 30, + 1, + 0, + 0, + 0, + 430, + 432, + 7, + 1, + 0, + 0, + 431, + 430, + 1, + 0, + 0, + 0, + 431, + 432, + 1, + 0, + 0, + 0, + 432, + 434, + 1, + 0, + 0, + 0, + 433, + 435, + 7, + 2, + 0, + 0, + 434, + 433, + 1, + 0, + 0, + 0, + 435, + 436, + 1, + 0, + 0, + 0, + 436, + 434, + 1, + 0, + 0, + 0, + 436, + 437, + 1, + 0, + 0, + 0, + 437, + 445, + 1, + 0, + 0, + 0, + 438, + 442, + 5, + 46, + 0, + 0, + 439, + 441, + 7, + 2, + 0, + 0, + 440, + 439, + 1, + 0, + 0, + 0, + 441, + 444, + 1, + 0, + 0, + 0, + 442, + 440, + 1, + 0, + 0, + 0, + 442, + 443, + 1, + 0, + 0, + 0, + 443, + 446, + 1, + 0, + 0, + 0, + 444, + 442, + 1, + 0, + 0, + 0, + 445, + 438, + 1, + 0, + 0, + 0, + 445, + 446, + 1, + 0, + 0, + 0, + 446, + 456, + 1, + 0, + 0, + 0, + 447, + 449, + 7, + 3, + 0, + 0, + 448, + 450, + 7, + 1, + 0, + 0, + 449, + 448, + 1, + 0, + 0, + 0, + 449, + 450, + 1, + 0, + 0, + 0, + 450, + 452, + 1, + 0, + 0, + 0, + 451, + 453, + 7, + 2, + 0, + 0, + 452, + 451, + 1, + 0, + 0, + 0, + 453, + 454, + 1, + 0, + 0, + 0, + 454, + 452, + 1, + 0, + 0, + 0, + 454, + 455, + 1, + 0, + 0, + 0, + 455, + 457, + 1, + 0, + 0, + 0, + 456, + 447, + 1, + 0, + 0, + 0, + 456, + 457, + 1, + 0, + 0, + 0, + 457, + 475, + 1, + 0, + 0, + 0, + 458, + 460, + 7, + 1, + 0, + 0, + 459, + 458, + 1, + 0, + 0, + 0, + 459, + 460, + 1, + 0, + 0, + 0, + 460, + 461, + 1, + 0, + 0, + 0, + 461, + 462, + 5, + 105, + 0, + 0, + 462, + 463, + 5, + 110, + 0, + 0, + 463, + 475, + 5, + 102, + 0, + 0, + 464, + 465, + 5, + 110, + 0, + 0, + 465, + 466, + 5, + 97, + 0, + 0, + 466, + 475, + 5, + 110, + 0, + 0, + 467, + 468, + 5, + 78, + 0, + 0, + 468, + 469, + 5, + 97, + 0, + 0, + 469, + 475, + 5, + 78, + 0, + 0, + 470, + 471, + 5, + 115, + 0, + 0, + 471, + 472, + 5, + 110, + 0, + 0, + 472, + 473, + 5, + 97, + 0, + 0, + 473, + 475, + 5, + 110, + 0, + 0, + 474, + 431, + 1, + 0, + 0, + 0, + 474, + 459, + 1, + 0, + 0, + 0, + 474, + 464, + 1, + 0, + 0, + 0, + 474, + 467, + 1, + 0, + 0, + 0, + 474, + 470, + 1, + 0, + 0, + 0, + 475, + 32, + 1, + 0, + 0, + 0, + 476, + 477, + 5, + 116, + 0, + 0, + 477, + 478, + 5, + 114, + 0, + 0, + 478, + 479, + 5, + 117, + 0, + 0, + 479, + 486, + 5, + 101, + 0, + 0, + 480, + 481, + 5, + 102, + 0, + 0, + 481, + 482, + 5, + 97, + 0, + 0, + 482, + 483, + 5, + 108, + 0, + 0, + 483, + 484, + 5, + 115, + 0, + 0, + 484, + 486, + 5, + 101, + 0, + 0, + 485, + 476, + 1, + 0, + 0, + 0, + 485, + 480, + 1, + 0, + 0, + 0, + 486, + 34, + 1, + 0, + 0, + 0, + 487, + 488, + 7, + 2, + 0, + 0, + 488, + 489, + 7, + 2, + 0, + 0, + 489, + 490, + 7, + 2, + 0, + 0, + 490, + 491, + 7, + 2, + 0, + 0, + 491, + 36, + 1, + 0, + 0, + 0, + 492, + 493, + 7, + 2, + 0, + 0, + 493, + 494, + 7, + 2, + 0, + 0, + 494, + 38, + 1, + 0, + 0, + 0, + 495, + 496, + 5, + 39, + 0, + 0, + 496, + 497, + 3, + 35, + 17, + 0, + 497, + 498, + 5, + 45, + 0, + 0, + 498, + 499, + 3, + 37, + 18, + 0, + 499, + 500, + 5, + 45, + 0, + 0, + 500, + 501, + 3, + 37, + 18, + 0, + 501, + 502, + 5, + 84, + 0, + 0, + 502, + 503, + 3, + 37, + 18, + 0, + 503, + 504, + 5, + 58, + 0, + 0, + 504, + 505, + 3, + 37, + 18, + 0, + 505, + 506, + 5, + 58, + 0, + 0, + 506, + 513, + 3, + 37, + 18, + 0, + 507, + 509, + 5, + 46, + 0, + 0, + 508, + 510, + 7, + 2, + 0, + 0, + 509, + 508, + 1, + 0, + 0, + 0, + 510, + 511, + 1, + 0, + 0, + 0, + 511, + 509, + 1, + 0, + 0, + 0, + 511, + 512, + 1, + 0, + 0, + 0, + 512, + 514, + 1, + 0, + 0, + 0, + 513, + 507, + 1, + 0, + 0, + 0, + 513, + 514, + 1, + 0, + 0, + 0, + 514, + 515, + 1, + 0, + 0, + 0, + 515, + 516, + 7, + 1, + 0, + 0, + 516, + 517, + 3, + 37, + 18, + 0, + 517, + 518, + 5, + 58, + 0, + 0, + 518, + 519, + 3, + 37, + 18, + 0, + 519, + 520, + 5, + 39, + 0, + 0, + 520, + 40, + 1, + 0, + 0, + 0, + 521, + 522, + 5, + 39, + 0, + 0, + 522, + 523, + 3, + 35, + 17, + 0, + 523, + 524, + 5, + 45, + 0, + 0, + 524, + 525, + 3, + 37, + 18, + 0, + 525, + 526, + 5, + 45, + 0, + 0, + 526, + 527, + 3, + 37, + 18, + 0, + 527, + 528, + 5, + 84, + 0, + 0, + 528, + 529, + 3, + 37, + 18, + 0, + 529, + 530, + 5, + 58, + 0, + 0, + 530, + 531, + 3, + 37, + 18, + 0, + 531, + 532, + 5, + 58, + 0, + 0, + 532, + 539, + 3, + 37, + 18, + 0, + 533, + 535, + 5, + 46, + 0, + 0, + 534, + 536, + 7, + 2, + 0, + 0, + 535, + 534, + 1, + 0, + 0, + 0, + 536, + 537, + 1, + 0, + 0, + 0, + 537, + 535, + 1, + 0, + 0, + 0, + 537, + 538, + 1, + 0, + 0, + 0, + 538, + 540, + 1, + 0, + 0, + 0, + 539, + 533, + 1, + 0, + 0, + 0, + 539, + 540, + 1, + 0, + 0, + 0, + 540, + 541, + 1, + 0, + 0, + 0, + 541, + 542, + 5, + 39, + 0, + 0, + 542, + 42, + 1, + 0, + 0, + 0, + 543, + 544, + 5, + 39, + 0, + 0, + 544, + 545, + 3, + 37, + 18, + 0, + 545, + 546, + 5, + 58, + 0, + 0, + 546, + 547, + 3, + 37, + 18, + 0, + 547, + 548, + 5, + 58, + 0, + 0, + 548, + 555, + 3, + 37, + 18, + 0, + 549, + 551, + 5, + 46, + 0, + 0, + 550, + 552, + 7, + 2, + 0, + 0, + 551, + 550, + 1, + 0, + 0, + 0, + 552, + 553, + 1, + 0, + 0, + 0, + 553, + 551, + 1, + 0, + 0, + 0, + 553, + 554, + 1, + 0, + 0, + 0, + 554, + 556, + 1, + 0, + 0, + 0, + 555, + 549, + 1, + 0, + 0, + 0, + 555, + 556, + 1, + 0, + 0, + 0, + 556, + 557, + 1, + 0, + 0, + 0, + 557, + 558, + 5, + 39, + 0, + 0, + 558, + 44, + 1, + 0, + 0, + 0, + 559, + 560, + 5, + 39, + 0, + 0, + 560, + 561, + 3, + 35, + 17, + 0, + 561, + 562, + 5, + 45, + 0, + 0, + 562, + 563, + 3, + 37, + 18, + 0, + 563, + 564, + 5, + 45, + 0, + 0, + 564, + 565, + 3, + 37, + 18, + 0, + 565, + 566, + 5, + 39, + 0, + 0, + 566, + 46, + 1, + 0, + 0, + 0, + 567, + 568, + 5, + 80, + 0, + 0, + 568, + 48, + 1, + 0, + 0, + 0, + 569, + 570, + 5, + 84, + 0, + 0, + 570, + 50, + 1, + 0, + 0, + 0, + 571, + 572, + 5, + 89, + 0, + 0, + 572, + 52, + 1, + 0, + 0, + 0, + 573, + 574, + 5, + 77, + 0, + 0, + 574, + 54, + 1, + 0, + 0, + 0, + 575, + 576, + 5, + 68, + 0, + 0, + 576, + 56, + 1, + 0, + 0, + 0, + 577, + 578, + 5, + 72, + 0, + 0, + 578, + 58, + 1, + 0, + 0, + 0, + 579, + 580, + 5, + 83, + 0, + 0, + 580, + 60, + 1, + 0, + 0, + 0, + 581, + 582, + 5, + 70, + 0, + 0, + 582, + 62, + 1, + 0, + 0, + 0, + 583, + 584, + 5, + 39, + 0, + 0, + 584, + 585, + 3, + 47, + 23, + 0, + 585, + 586, + 3, + 27, + 13, + 0, + 586, + 590, + 3, + 51, + 25, + 0, + 587, + 588, + 3, + 27, + 13, + 0, + 588, + 589, + 3, + 53, + 26, + 0, + 589, + 591, + 1, + 0, + 0, + 0, + 590, + 587, + 1, + 0, + 0, + 0, + 590, + 591, + 1, + 0, + 0, + 0, + 591, + 592, + 1, + 0, + 0, + 0, + 592, + 593, + 5, + 39, + 0, + 0, + 593, + 601, + 1, + 0, + 0, + 0, + 594, + 595, + 5, + 39, + 0, + 0, + 595, + 596, + 3, + 47, + 23, + 0, + 596, + 597, + 3, + 27, + 13, + 0, + 597, + 598, + 3, + 53, + 26, + 0, + 598, + 599, + 5, + 39, + 0, + 0, + 599, + 601, + 1, + 0, + 0, + 0, + 600, + 583, + 1, + 0, + 0, + 0, + 600, + 594, + 1, + 0, + 0, + 0, + 601, + 64, + 1, + 0, + 0, + 0, + 602, + 603, + 5, + 39, + 0, + 0, + 603, + 604, + 3, + 47, + 23, + 0, + 604, + 605, + 3, + 27, + 13, + 0, + 605, + 609, + 3, + 55, + 27, + 0, + 606, + 607, + 3, + 49, + 24, + 0, + 607, + 608, + 3, + 67, + 33, + 0, + 608, + 610, + 1, + 0, + 0, + 0, + 609, + 606, + 1, + 0, + 0, + 0, + 609, + 610, + 1, + 0, + 0, + 0, + 610, + 611, + 1, + 0, + 0, + 0, + 611, + 612, + 5, + 39, + 0, + 0, + 612, + 620, + 1, + 0, + 0, + 0, + 613, + 614, + 5, + 39, + 0, + 0, + 614, + 615, + 3, + 47, + 23, + 0, + 615, + 616, + 3, + 49, + 24, + 0, + 616, + 617, + 3, + 67, + 33, + 0, + 617, + 618, + 5, + 39, + 0, + 0, + 618, + 620, + 1, + 0, + 0, + 0, + 619, + 602, + 1, + 0, + 0, + 0, + 619, + 613, + 1, + 0, + 0, + 0, + 620, + 66, + 1, + 0, + 0, + 0, + 621, + 622, + 3, + 27, + 13, + 0, + 622, + 626, + 3, + 57, + 28, + 0, + 623, + 624, + 3, + 27, + 13, + 0, + 624, + 625, + 3, + 53, + 26, + 0, + 625, + 627, + 1, + 0, + 0, + 0, + 626, + 623, + 1, + 0, + 0, + 0, + 626, + 627, + 1, + 0, + 0, + 0, + 627, + 631, + 1, + 0, + 0, + 0, + 628, + 629, + 3, + 27, + 13, + 0, + 629, + 630, + 3, + 59, + 29, + 0, + 630, + 632, + 1, + 0, + 0, + 0, + 631, + 628, + 1, + 0, + 0, + 0, + 631, + 632, + 1, + 0, + 0, + 0, + 632, + 636, + 1, + 0, + 0, + 0, + 633, + 634, + 3, + 27, + 13, + 0, + 634, + 635, + 3, + 61, + 30, + 0, + 635, + 637, + 1, + 0, + 0, + 0, + 636, + 633, + 1, + 0, + 0, + 0, + 636, + 637, + 1, + 0, + 0, + 0, + 637, + 661, + 1, + 0, + 0, + 0, + 638, + 639, + 3, + 27, + 13, + 0, + 639, + 643, + 3, + 53, + 26, + 0, + 640, + 641, + 3, + 27, + 13, + 0, + 641, + 642, + 3, + 59, + 29, + 0, + 642, + 644, + 1, + 0, + 0, + 0, + 643, + 640, + 1, + 0, + 0, + 0, + 643, + 644, + 1, + 0, + 0, + 0, + 644, + 648, + 1, + 0, + 0, + 0, + 645, + 646, + 3, + 27, + 13, + 0, + 646, + 647, + 3, + 61, + 30, + 0, + 647, + 649, + 1, + 0, + 0, + 0, + 648, + 645, + 1, + 0, + 0, + 0, + 648, + 649, + 1, + 0, + 0, + 0, + 649, + 661, + 1, + 0, + 0, + 0, + 650, + 651, + 3, + 27, + 13, + 0, + 651, + 655, + 3, + 59, + 29, + 0, + 652, + 653, + 3, + 27, + 13, + 0, + 653, + 654, + 3, + 61, + 30, + 0, + 654, + 656, + 1, + 0, + 0, + 0, + 655, + 652, + 1, + 0, + 0, + 0, + 655, + 656, + 1, + 0, + 0, + 0, + 656, + 661, + 1, + 0, + 0, + 0, + 657, + 658, + 3, + 27, + 13, + 0, + 658, + 659, + 3, + 61, + 30, + 0, + 659, + 661, + 1, + 0, + 0, + 0, + 660, + 621, + 1, + 0, + 0, + 0, + 660, + 638, + 1, + 0, + 0, + 0, + 660, + 650, + 1, + 0, + 0, + 0, + 660, + 657, + 1, + 0, + 0, + 0, + 661, + 68, + 1, + 0, + 0, + 0, + 662, + 663, + 5, + 110, + 0, + 0, + 663, + 664, + 5, + 117, + 0, + 0, + 664, + 665, + 5, + 108, + 0, + 0, + 665, + 666, + 5, + 108, + 0, + 0, + 666, + 70, + 1, + 0, + 0, + 0, + 667, + 675, + 5, + 39, + 0, + 0, + 668, + 669, + 5, + 92, + 0, + 0, + 669, + 674, + 9, + 0, + 0, + 0, + 670, + 671, + 5, + 39, + 0, + 0, + 671, + 674, + 5, + 39, + 0, + 0, + 672, + 674, + 8, + 4, + 0, + 0, + 673, + 668, + 1, + 0, + 0, + 0, + 673, + 670, + 1, + 0, + 0, + 0, + 673, + 672, + 1, + 0, + 0, + 0, + 674, + 677, + 1, + 0, + 0, + 0, + 675, + 673, + 1, + 0, + 0, + 0, + 675, + 676, + 1, + 0, + 0, + 0, + 676, + 678, + 1, + 0, + 0, + 0, + 677, + 675, + 1, + 0, + 0, + 0, + 678, + 679, + 5, + 39, + 0, + 0, + 679, + 72, + 1, + 0, + 0, + 0, + 680, + 681, + 5, + 47, + 0, + 0, + 681, + 682, + 5, + 47, + 0, + 0, + 682, + 686, + 1, + 0, + 0, + 0, + 683, + 685, + 8, + 0, + 0, + 0, + 684, + 683, + 1, + 0, + 0, + 0, + 685, + 688, + 1, + 0, + 0, + 0, + 686, + 684, + 1, + 0, + 0, + 0, + 686, + 687, + 1, + 0, + 0, + 0, + 687, + 689, + 1, + 0, + 0, + 0, + 688, + 686, + 1, + 0, + 0, + 0, + 689, + 690, + 6, + 36, + 0, + 0, + 690, + 74, + 1, + 0, + 0, + 0, + 691, + 692, + 5, + 47, + 0, + 0, + 692, + 693, + 5, + 42, + 0, + 0, + 693, + 701, + 1, + 0, + 0, + 0, + 694, + 702, + 8, + 5, + 0, + 0, + 695, + 697, + 5, + 42, + 0, + 0, + 696, + 695, + 1, + 0, + 0, + 0, + 697, + 698, + 1, + 0, + 0, + 0, + 698, + 696, + 1, + 0, + 0, + 0, + 698, + 699, + 1, + 0, + 0, + 0, + 699, + 700, + 1, + 0, + 0, + 0, + 700, + 702, + 8, + 6, + 0, + 0, + 701, + 694, + 1, + 0, + 0, + 0, + 701, + 696, + 1, + 0, + 0, + 0, + 702, + 706, + 1, + 0, + 0, + 0, + 703, + 705, + 5, + 42, + 0, + 0, + 704, + 703, + 1, + 0, + 0, + 0, + 705, + 708, + 1, + 0, + 0, + 0, + 706, + 704, + 1, + 0, + 0, + 0, + 706, + 707, + 1, + 0, + 0, + 0, + 707, + 709, + 1, + 0, + 0, + 0, + 708, + 706, + 1, + 0, + 0, + 0, + 709, + 710, + 5, + 42, + 0, + 0, + 710, + 711, + 5, + 47, + 0, + 0, + 711, + 712, + 1, + 0, + 0, + 0, + 712, + 713, + 6, + 37, + 0, + 0, + 713, + 76, + 1, + 0, + 0, + 0, + 714, + 716, + 7, + 7, + 0, + 0, + 715, + 714, + 1, + 0, + 0, + 0, + 716, + 717, + 1, + 0, + 0, + 0, + 717, + 715, + 1, + 0, + 0, + 0, + 717, + 718, + 1, + 0, + 0, + 0, + 718, + 719, + 1, + 0, + 0, + 0, + 719, + 720, + 6, + 38, + 0, + 0, + 720, + 78, + 1, + 0, + 0, + 0, + 721, + 722, + 7, + 8, + 0, + 0, + 722, + 80, + 1, + 0, + 0, + 0, + 723, + 724, + 7, + 9, + 0, + 0, + 724, + 82, + 1, + 0, + 0, + 0, + 725, + 726, + 7, + 10, + 0, + 0, + 726, + 84, + 1, + 0, + 0, + 0, + 727, + 728, + 7, + 11, + 0, + 0, + 728, + 86, + 1, + 0, + 0, + 0, + 729, + 730, + 7, + 3, + 0, + 0, + 730, + 88, + 1, + 0, + 0, + 0, + 731, + 732, + 7, + 12, + 0, + 0, + 732, + 90, + 1, + 0, + 0, + 0, + 733, + 734, + 7, + 13, + 0, + 0, + 734, + 92, + 1, + 0, + 0, + 0, + 735, + 736, + 7, + 14, + 0, + 0, + 736, + 94, + 1, + 0, + 0, + 0, + 737, + 738, + 7, + 15, + 0, + 0, + 738, + 96, + 1, + 0, + 0, + 0, + 739, + 740, + 7, + 16, + 0, + 0, + 740, + 98, + 1, + 0, + 0, + 0, + 741, + 742, + 7, + 17, + 0, + 0, + 742, + 100, + 1, + 0, + 0, + 0, + 743, + 744, + 7, + 18, + 0, + 0, + 744, + 102, + 1, + 0, + 0, + 0, + 745, + 746, + 7, + 19, + 0, + 0, + 746, + 104, + 1, + 0, + 0, + 0, + 747, + 748, + 7, + 20, + 0, + 0, + 748, + 106, + 1, + 0, + 0, + 0, + 749, + 750, + 7, + 21, + 0, + 0, + 750, + 108, + 1, + 0, + 0, + 0, + 751, + 752, + 7, + 22, + 0, + 0, + 752, + 110, + 1, + 0, + 0, + 0, + 753, + 754, + 7, + 23, + 0, + 0, + 754, + 112, + 1, + 0, + 0, + 0, + 755, + 756, + 7, + 24, + 0, + 0, + 756, + 114, + 1, + 0, + 0, + 0, + 757, + 758, + 7, + 25, + 0, + 0, + 758, + 116, + 1, + 0, + 0, + 0, + 759, + 760, + 7, + 26, + 0, + 0, + 760, + 118, + 1, + 0, + 0, + 0, + 761, + 762, + 7, + 27, + 0, + 0, + 762, + 120, + 1, + 0, + 0, + 0, + 763, + 764, + 7, + 28, + 0, + 0, + 764, + 122, + 1, + 0, + 0, + 0, + 765, + 766, + 7, + 29, + 0, + 0, + 766, + 124, + 1, + 0, + 0, + 0, + 767, + 768, + 7, + 30, + 0, + 0, + 768, + 126, + 1, + 0, + 0, + 0, + 769, + 770, + 7, + 31, + 0, + 0, + 770, + 128, + 1, + 0, + 0, + 0, + 771, + 772, + 7, + 32, + 0, + 0, + 772, + 130, + 1, + 0, + 0, + 0, + 773, + 774, + 7, + 2, + 0, + 0, + 774, + 132, + 1, + 0, + 0, + 0, + 775, + 784, + 5, + 48, + 0, + 0, + 776, + 780, + 7, + 33, + 0, + 0, + 777, + 779, + 7, + 2, + 0, + 0, + 778, + 777, + 1, + 0, + 0, + 0, + 779, + 782, + 1, + 0, + 0, + 0, + 780, + 778, + 1, + 0, + 0, + 0, + 780, + 781, + 1, + 0, + 0, + 0, + 781, + 784, + 1, + 0, + 0, + 0, + 782, + 780, + 1, + 0, + 0, + 0, + 783, + 775, + 1, + 0, + 0, + 0, + 783, + 776, + 1, + 0, + 0, + 0, + 784, + 134, + 1, + 0, + 0, + 0, + 785, + 786, + 3, + 95, + 47, + 0, + 786, + 787, + 3, + 89, + 44, + 0, + 787, + 136, + 1, + 0, + 0, + 0, + 788, + 789, + 3, + 117, + 58, + 0, + 789, + 790, + 3, + 93, + 46, + 0, + 790, + 791, + 3, + 87, + 43, + 0, + 791, + 792, + 3, + 105, + 52, + 0, + 792, + 138, + 1, + 0, + 0, + 0, + 793, + 794, + 3, + 87, + 43, + 0, + 794, + 795, + 3, + 101, + 50, + 0, + 795, + 796, + 3, + 115, + 57, + 0, + 796, + 797, + 3, + 87, + 43, + 0, + 797, + 140, + 1, + 0, + 0, + 0, + 798, + 799, + 3, + 81, + 40, + 0, + 799, + 800, + 3, + 107, + 53, + 0, + 800, + 801, + 3, + 107, + 53, + 0, + 801, + 802, + 3, + 101, + 50, + 0, + 802, + 803, + 3, + 87, + 43, + 0, + 803, + 804, + 3, + 79, + 39, + 0, + 804, + 805, + 3, + 105, + 52, + 0, + 805, + 142, + 1, + 0, + 0, + 0, + 806, + 807, + 3, + 95, + 47, + 0, + 807, + 808, + 5, + 56, + 0, + 0, + 808, + 144, + 1, + 0, + 0, + 0, + 809, + 810, + 3, + 95, + 47, + 0, + 810, + 811, + 5, + 49, + 0, + 0, + 811, + 812, + 5, + 54, + 0, + 0, + 812, + 146, + 1, + 0, + 0, + 0, + 813, + 814, + 3, + 95, + 47, + 0, + 814, + 815, + 5, + 51, + 0, + 0, + 815, + 816, + 5, + 50, + 0, + 0, + 816, + 148, + 1, + 0, + 0, + 0, + 817, + 818, + 3, + 95, + 47, + 0, + 818, + 819, + 5, + 54, + 0, + 0, + 819, + 820, + 5, + 52, + 0, + 0, + 820, + 150, + 1, + 0, + 0, + 0, + 821, + 822, + 3, + 89, + 44, + 0, + 822, + 823, + 3, + 109, + 54, + 0, + 823, + 824, + 5, + 51, + 0, + 0, + 824, + 825, + 5, + 50, + 0, + 0, + 825, + 152, + 1, + 0, + 0, + 0, + 826, + 827, + 3, + 89, + 44, + 0, + 827, + 828, + 3, + 109, + 54, + 0, + 828, + 829, + 5, + 54, + 0, + 0, + 829, + 830, + 5, + 52, + 0, + 0, + 830, + 154, + 1, + 0, + 0, + 0, + 831, + 832, + 3, + 115, + 57, + 0, + 832, + 833, + 3, + 117, + 58, + 0, + 833, + 834, + 3, + 113, + 56, + 0, + 834, + 835, + 3, + 95, + 47, + 0, + 835, + 836, + 3, + 105, + 52, + 0, + 836, + 837, + 3, + 91, + 45, + 0, + 837, + 156, + 1, + 0, + 0, + 0, + 838, + 839, + 3, + 81, + 40, + 0, + 839, + 840, + 3, + 95, + 47, + 0, + 840, + 841, + 3, + 105, + 52, + 0, + 841, + 842, + 3, + 79, + 39, + 0, + 842, + 843, + 3, + 113, + 56, + 0, + 843, + 844, + 3, + 127, + 63, + 0, + 844, + 158, + 1, + 0, + 0, + 0, + 845, + 846, + 3, + 117, + 58, + 0, + 846, + 847, + 3, + 95, + 47, + 0, + 847, + 848, + 3, + 103, + 51, + 0, + 848, + 849, + 3, + 87, + 43, + 0, + 849, + 850, + 3, + 115, + 57, + 0, + 850, + 851, + 3, + 117, + 58, + 0, + 851, + 852, + 3, + 79, + 39, + 0, + 852, + 853, + 3, + 103, + 51, + 0, + 853, + 854, + 3, + 109, + 54, + 0, + 854, + 160, + 1, + 0, + 0, + 0, + 855, + 856, + 3, + 117, + 58, + 0, + 856, + 857, + 3, + 95, + 47, + 0, + 857, + 858, + 3, + 103, + 51, + 0, + 858, + 859, + 3, + 87, + 43, + 0, + 859, + 860, + 3, + 115, + 57, + 0, + 860, + 861, + 3, + 117, + 58, + 0, + 861, + 862, + 3, + 79, + 39, + 0, + 862, + 863, + 3, + 103, + 51, + 0, + 863, + 864, + 3, + 109, + 54, + 0, + 864, + 865, + 5, + 95, + 0, + 0, + 865, + 866, + 3, + 117, + 58, + 0, + 866, + 867, + 3, + 129, + 64, + 0, + 867, + 162, + 1, + 0, + 0, + 0, + 868, + 869, + 3, + 85, + 42, + 0, + 869, + 870, + 3, + 79, + 39, + 0, + 870, + 871, + 3, + 117, + 58, + 0, + 871, + 872, + 3, + 87, + 43, + 0, + 872, + 164, + 1, + 0, + 0, + 0, + 873, + 874, + 3, + 117, + 58, + 0, + 874, + 875, + 3, + 95, + 47, + 0, + 875, + 876, + 3, + 103, + 51, + 0, + 876, + 877, + 3, + 87, + 43, + 0, + 877, + 166, + 1, + 0, + 0, + 0, + 878, + 879, + 3, + 95, + 47, + 0, + 879, + 880, + 3, + 105, + 52, + 0, + 880, + 881, + 3, + 117, + 58, + 0, + 881, + 882, + 3, + 87, + 43, + 0, + 882, + 883, + 3, + 113, + 56, + 0, + 883, + 884, + 3, + 121, + 60, + 0, + 884, + 885, + 3, + 79, + 39, + 0, + 885, + 886, + 3, + 101, + 50, + 0, + 886, + 887, + 5, + 95, + 0, + 0, + 887, + 888, + 3, + 127, + 63, + 0, + 888, + 889, + 3, + 87, + 43, + 0, + 889, + 890, + 3, + 79, + 39, + 0, + 890, + 891, + 3, + 113, + 56, + 0, + 891, + 168, + 1, + 0, + 0, + 0, + 892, + 893, + 3, + 95, + 47, + 0, + 893, + 894, + 3, + 105, + 52, + 0, + 894, + 895, + 3, + 117, + 58, + 0, + 895, + 896, + 3, + 87, + 43, + 0, + 896, + 897, + 3, + 113, + 56, + 0, + 897, + 898, + 3, + 121, + 60, + 0, + 898, + 899, + 3, + 79, + 39, + 0, + 899, + 900, + 3, + 101, + 50, + 0, + 900, + 901, + 5, + 95, + 0, + 0, + 901, + 902, + 3, + 85, + 42, + 0, + 902, + 903, + 3, + 79, + 39, + 0, + 903, + 904, + 3, + 127, + 63, + 0, + 904, + 170, + 1, + 0, + 0, + 0, + 905, + 906, + 3, + 119, + 59, + 0, + 906, + 907, + 3, + 119, + 59, + 0, + 907, + 908, + 3, + 95, + 47, + 0, + 908, + 909, + 3, + 85, + 42, + 0, + 909, + 172, + 1, + 0, + 0, + 0, + 910, + 911, + 3, + 85, + 42, + 0, + 911, + 912, + 3, + 87, + 43, + 0, + 912, + 913, + 3, + 83, + 41, + 0, + 913, + 914, + 3, + 95, + 47, + 0, + 914, + 915, + 3, + 103, + 51, + 0, + 915, + 916, + 3, + 79, + 39, + 0, + 916, + 917, + 3, + 101, + 50, + 0, + 917, + 174, + 1, + 0, + 0, + 0, + 918, + 919, + 3, + 109, + 54, + 0, + 919, + 920, + 3, + 113, + 56, + 0, + 920, + 921, + 3, + 87, + 43, + 0, + 921, + 922, + 3, + 83, + 41, + 0, + 922, + 923, + 3, + 95, + 47, + 0, + 923, + 924, + 3, + 115, + 57, + 0, + 924, + 925, + 3, + 95, + 47, + 0, + 925, + 926, + 3, + 107, + 53, + 0, + 926, + 927, + 3, + 105, + 52, + 0, + 927, + 928, + 5, + 95, + 0, + 0, + 928, + 929, + 3, + 117, + 58, + 0, + 929, + 930, + 3, + 95, + 47, + 0, + 930, + 931, + 3, + 103, + 51, + 0, + 931, + 932, + 3, + 87, + 43, + 0, + 932, + 933, + 3, + 115, + 57, + 0, + 933, + 934, + 3, + 117, + 58, + 0, + 934, + 935, + 3, + 79, + 39, + 0, + 935, + 936, + 3, + 103, + 51, + 0, + 936, + 937, + 3, + 109, + 54, + 0, + 937, + 176, + 1, + 0, + 0, + 0, + 938, + 939, + 3, + 109, + 54, + 0, + 939, + 940, + 3, + 113, + 56, + 0, + 940, + 941, + 3, + 87, + 43, + 0, + 941, + 942, + 3, + 83, + 41, + 0, + 942, + 943, + 3, + 95, + 47, + 0, + 943, + 944, + 3, + 115, + 57, + 0, + 944, + 945, + 3, + 95, + 47, + 0, + 945, + 946, + 3, + 107, + 53, + 0, + 946, + 947, + 3, + 105, + 52, + 0, + 947, + 948, + 5, + 95, + 0, + 0, + 948, + 949, + 3, + 117, + 58, + 0, + 949, + 950, + 3, + 95, + 47, + 0, + 950, + 951, + 3, + 103, + 51, + 0, + 951, + 952, + 3, + 87, + 43, + 0, + 952, + 953, + 3, + 115, + 57, + 0, + 953, + 954, + 3, + 117, + 58, + 0, + 954, + 955, + 3, + 79, + 39, + 0, + 955, + 956, + 3, + 103, + 51, + 0, + 956, + 957, + 3, + 109, + 54, + 0, + 957, + 958, + 5, + 95, + 0, + 0, + 958, + 959, + 3, + 117, + 58, + 0, + 959, + 960, + 3, + 129, + 64, + 0, + 960, + 178, + 1, + 0, + 0, + 0, + 961, + 962, + 3, + 89, + 44, + 0, + 962, + 963, + 3, + 95, + 47, + 0, + 963, + 964, + 3, + 125, + 62, + 0, + 964, + 965, + 3, + 87, + 43, + 0, + 965, + 966, + 3, + 85, + 42, + 0, + 966, + 967, + 3, + 83, + 41, + 0, + 967, + 968, + 3, + 93, + 46, + 0, + 968, + 969, + 3, + 79, + 39, + 0, + 969, + 970, + 3, + 113, + 56, + 0, + 970, + 180, + 1, + 0, + 0, + 0, + 971, + 972, + 3, + 121, + 60, + 0, + 972, + 973, + 3, + 79, + 39, + 0, + 973, + 974, + 3, + 113, + 56, + 0, + 974, + 975, + 3, + 83, + 41, + 0, + 975, + 976, + 3, + 93, + 46, + 0, + 976, + 977, + 3, + 79, + 39, + 0, + 977, + 978, + 3, + 113, + 56, + 0, + 978, + 182, + 1, + 0, + 0, + 0, + 979, + 980, + 3, + 89, + 44, + 0, + 980, + 981, + 3, + 95, + 47, + 0, + 981, + 982, + 3, + 125, + 62, + 0, + 982, + 983, + 3, + 87, + 43, + 0, + 983, + 984, + 3, + 85, + 42, + 0, + 984, + 985, + 3, + 81, + 40, + 0, + 985, + 986, + 3, + 95, + 47, + 0, + 986, + 987, + 3, + 105, + 52, + 0, + 987, + 988, + 3, + 79, + 39, + 0, + 988, + 989, + 3, + 113, + 56, + 0, + 989, + 990, + 3, + 127, + 63, + 0, + 990, + 184, + 1, + 0, + 0, + 0, + 991, + 992, + 3, + 115, + 57, + 0, + 992, + 993, + 3, + 117, + 58, + 0, + 993, + 994, + 3, + 113, + 56, + 0, + 994, + 995, + 3, + 119, + 59, + 0, + 995, + 996, + 3, + 83, + 41, + 0, + 996, + 997, + 3, + 117, + 58, + 0, + 997, + 186, + 1, + 0, + 0, + 0, + 998, + 999, + 3, + 105, + 52, + 0, + 999, + 1000, + 3, + 115, + 57, + 0, + 1000, + 1001, + 3, + 117, + 58, + 0, + 1001, + 1002, + 3, + 113, + 56, + 0, + 1002, + 1003, + 3, + 119, + 59, + 0, + 1003, + 1004, + 3, + 83, + 41, + 0, + 1004, + 1005, + 3, + 117, + 58, + 0, + 1005, + 188, + 1, + 0, + 0, + 0, + 1006, + 1007, + 3, + 101, + 50, + 0, + 1007, + 1008, + 3, + 95, + 47, + 0, + 1008, + 1009, + 3, + 115, + 57, + 0, + 1009, + 1010, + 3, + 117, + 58, + 0, + 1010, + 190, + 1, + 0, + 0, + 0, + 1011, + 1012, + 3, + 103, + 51, + 0, + 1012, + 1013, + 3, + 79, + 39, + 0, + 1013, + 1014, + 3, + 109, + 54, + 0, + 1014, + 192, + 1, + 0, + 0, + 0, + 1015, + 1016, + 3, + 79, + 39, + 0, + 1016, + 1017, + 3, + 105, + 52, + 0, + 1017, + 1018, + 3, + 127, + 63, + 0, + 1018, + 194, + 1, + 0, + 0, + 0, + 1019, + 1020, + 3, + 119, + 59, + 0, + 1020, + 1021, + 5, + 33, + 0, + 0, + 1021, + 196, + 1, + 0, + 0, + 0, + 1022, + 1023, + 3, + 91, + 45, + 0, + 1023, + 1024, + 3, + 87, + 43, + 0, + 1024, + 1025, + 3, + 107, + 53, + 0, + 1025, + 1026, + 3, + 103, + 51, + 0, + 1026, + 1027, + 3, + 87, + 43, + 0, + 1027, + 1028, + 3, + 117, + 58, + 0, + 1028, + 1029, + 3, + 113, + 56, + 0, + 1029, + 1030, + 3, + 127, + 63, + 0, + 1030, + 198, + 1, + 0, + 0, + 0, + 1031, + 1032, + 3, + 81, + 40, + 0, + 1032, + 1033, + 3, + 107, + 53, + 0, + 1033, + 1034, + 3, + 107, + 53, + 0, + 1034, + 1035, + 3, + 101, + 50, + 0, + 1035, + 200, + 1, + 0, + 0, + 0, + 1036, + 1037, + 3, + 115, + 57, + 0, + 1037, + 1038, + 3, + 117, + 58, + 0, + 1038, + 1039, + 3, + 113, + 56, + 0, + 1039, + 202, + 1, + 0, + 0, + 0, + 1040, + 1041, + 3, + 121, + 60, + 0, + 1041, + 1042, + 3, + 81, + 40, + 0, + 1042, + 1043, + 3, + 95, + 47, + 0, + 1043, + 1044, + 3, + 105, + 52, + 0, + 1044, + 204, + 1, + 0, + 0, + 0, + 1045, + 1046, + 3, + 117, + 58, + 0, + 1046, + 1047, + 3, + 115, + 57, + 0, + 1047, + 206, + 1, + 0, + 0, + 0, + 1048, + 1049, + 3, + 117, + 58, + 0, + 1049, + 1050, + 3, + 115, + 57, + 0, + 1050, + 1051, + 3, + 117, + 58, + 0, + 1051, + 1052, + 3, + 129, + 64, + 0, + 1052, + 208, + 1, + 0, + 0, + 0, + 1053, + 1054, + 3, + 95, + 47, + 0, + 1054, + 1055, + 3, + 127, + 63, + 0, + 1055, + 1056, + 3, + 87, + 43, + 0, + 1056, + 1057, + 3, + 79, + 39, + 0, + 1057, + 1058, + 3, + 113, + 56, + 0, + 1058, + 210, + 1, + 0, + 0, + 0, + 1059, + 1060, + 3, + 95, + 47, + 0, + 1060, + 1061, + 3, + 85, + 42, + 0, + 1061, + 1062, + 3, + 79, + 39, + 0, + 1062, + 1063, + 3, + 127, + 63, + 0, + 1063, + 212, + 1, + 0, + 0, + 0, + 1064, + 1065, + 3, + 85, + 42, + 0, + 1065, + 1066, + 3, + 87, + 43, + 0, + 1066, + 1067, + 3, + 83, + 41, + 0, + 1067, + 214, + 1, + 0, + 0, + 0, + 1068, + 1069, + 3, + 109, + 54, + 0, + 1069, + 1070, + 3, + 117, + 58, + 0, + 1070, + 1071, + 3, + 115, + 57, + 0, + 1071, + 216, + 1, + 0, + 0, + 0, + 1072, + 1073, + 3, + 109, + 54, + 0, + 1073, + 1074, + 3, + 117, + 58, + 0, + 1074, + 1075, + 3, + 115, + 57, + 0, + 1075, + 1076, + 3, + 117, + 58, + 0, + 1076, + 1077, + 3, + 129, + 64, + 0, + 1077, + 218, + 1, + 0, + 0, + 0, + 1078, + 1079, + 3, + 89, + 44, + 0, + 1079, + 1080, + 3, + 83, + 41, + 0, + 1080, + 1081, + 3, + 93, + 46, + 0, + 1081, + 1082, + 3, + 79, + 39, + 0, + 1082, + 1083, + 3, + 113, + 56, + 0, + 1083, + 220, + 1, + 0, + 0, + 0, + 1084, + 1085, + 3, + 121, + 60, + 0, + 1085, + 1086, + 3, + 83, + 41, + 0, + 1086, + 1087, + 3, + 93, + 46, + 0, + 1087, + 1088, + 3, + 79, + 39, + 0, + 1088, + 1089, + 3, + 113, + 56, + 0, + 1089, + 222, + 1, + 0, + 0, + 0, + 1090, + 1091, + 3, + 89, + 44, + 0, + 1091, + 1092, + 3, + 81, + 40, + 0, + 1092, + 1093, + 3, + 95, + 47, + 0, + 1093, + 1094, + 3, + 105, + 52, + 0, + 1094, + 224, + 1, + 0, + 0, + 0, + 1095, + 1096, + 5, + 58, + 0, + 0, + 1096, + 1097, + 5, + 58, + 0, + 0, + 1097, + 226, + 1, + 0, + 0, + 0, + 1098, + 1102, + 7, + 34, + 0, + 0, + 1099, + 1101, + 7, + 35, + 0, + 0, + 1100, + 1099, + 1, + 0, + 0, + 0, + 1101, + 1104, + 1, + 0, + 0, + 0, + 1102, + 1100, + 1, + 0, + 0, + 0, + 1102, + 1103, + 1, + 0, + 0, + 0, + 1103, + 228, + 1, + 0, + 0, + 0, + 1104, + 1102, + 1, + 0, + 0, + 0, + 1105, + 1106, + 5, + 60, + 0, + 0, + 1106, + 230, + 1, + 0, + 0, + 0, + 1107, + 1108, + 5, + 62, + 0, + 0, + 1108, + 232, + 1, + 0, + 0, + 0, + 1109, + 1110, + 5, + 40, + 0, + 0, + 1110, + 234, + 1, + 0, + 0, + 0, + 1111, + 1112, + 5, + 41, + 0, + 0, + 1112, + 236, + 1, + 0, + 0, + 0, + 1113, + 1114, + 5, + 91, + 0, + 0, + 1114, + 238, + 1, + 0, + 0, + 0, + 1115, + 1116, + 5, + 93, + 0, + 0, + 1116, + 240, + 1, + 0, + 0, + 0, + 1117, + 1118, + 5, + 44, + 0, + 0, + 1118, + 242, + 1, + 0, + 0, + 0, + 1119, + 1120, + 5, + 61, + 0, + 0, + 1120, + 244, + 1, + 0, + 0, + 0, + 1121, + 1122, + 5, + 58, + 0, + 0, + 1122, + 246, + 1, + 0, + 0, + 0, + 1123, + 1124, + 5, + 63, + 0, + 0, + 1124, + 248, + 1, + 0, + 0, + 0, + 1125, + 1126, + 5, + 35, + 0, + 0, + 1126, + 250, + 1, + 0, + 0, + 0, + 1127, + 1128, + 5, + 46, + 0, + 0, + 1128, + 252, + 1, + 0, + 0, + 0, + 48, + 0, + 284, + 290, + 292, + 323, + 327, + 410, + 415, + 420, + 426, + 428, + 431, + 436, + 442, + 445, + 449, + 454, + 456, + 459, + 474, + 485, + 511, + 513, + 537, + 539, + 553, + 555, + 590, + 600, + 609, + 619, + 626, + 631, + 636, + 643, + 648, + 655, + 660, + 673, + 675, + 686, + 698, + 701, + 706, + 717, + 780, + 783, + 1102, + 1, + 0, + 1, + 0, + ] + + +class FuncTestCaseLexer(Lexer): + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + SUBSTRAIT_SCALAR_TEST = 1 + FORMAT_VERSION = 2 + SUBSTRAIT_INCLUDE = 3 + DESCRIPTION_LINE = 4 + ERROR_RESULT = 5 + UNDEFINED_RESULT = 6 + OVERFLOW = 7 + ROUNDING = 8 + ERROR = 9 + SATURATE = 10 + SILENT = 11 + TIE_TO_EVEN = 12 + NAN = 13 + INTEGER_LITERAL = 14 + DECIMAL_LITERAL = 15 + FLOAT_LITERAL = 16 + BOOLEAN_LITERAL = 17 + TIMESTAMP_TZ_LITERAL = 18 + TIMESTAMP_LITERAL = 19 + TIME_LITERAL = 20 + DATE_LITERAL = 21 + PERIOD_PREFIX = 22 + TIME_PREFIX = 23 + YEAR_SUFFIX = 24 + M_SUFFIX = 25 + DAY_SUFFIX = 26 + HOUR_SUFFIX = 27 + SECOND_SUFFIX = 28 + FRACTIONAL_SECOND_SUFFIX = 29 + INTERVAL_YEAR_LITERAL = 30 + INTERVAL_DAY_LITERAL = 31 + NULL_LITERAL = 32 + STRING_LITERAL = 33 + LineComment = 34 + BlockComment = 35 + Whitespace = 36 + If = 37 + Then = 38 + Else = 39 + Boolean = 40 + I8 = 41 + I16 = 42 + I32 = 43 + I64 = 44 + FP32 = 45 + FP64 = 46 + String = 47 + Binary = 48 + Timestamp = 49 + Timestamp_TZ = 50 + Date = 51 + Time = 52 + Interval_Year = 53 + Interval_Day = 54 + UUID = 55 + Decimal = 56 + Precision_Timestamp = 57 + Precision_Timestamp_TZ = 58 + FixedChar = 59 + VarChar = 60 + FixedBinary = 61 + Struct = 62 + NStruct = 63 + List = 64 + Map = 65 + ANY = 66 + UserDefined = 67 + Geometry = 68 + Bool = 69 + Str = 70 + VBin = 71 + Ts = 72 + TsTZ = 73 + IYear = 74 + IDay = 75 + Dec = 76 + PTs = 77 + PTsTZ = 78 + FChar = 79 + VChar = 80 + FBin = 81 + DOUBLE_COLON = 82 + IDENTIFIER = 83 + O_ANGLE_BRACKET = 84 + C_ANGLE_BRACKET = 85 + OPAREN = 86 + CPAREN = 87 + OBRACKET = 88 + CBRACKET = 89 + COMMA = 90 + EQ = 91 + COLON = 92 + QMARK = 93 + HASH = 94 + DOT = 95 + + channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] + + modeNames = ["DEFAULT_MODE"] + + literalNames = [ + "", + "'### SUBSTRAIT_SCALAR_TEST:'", + "'### SUBSTRAIT_INCLUDE:'", + "''", + "''", + "'overlfow'", + "'rounding'", + "'ERROR'", + "'SATURATE'", + "'SILENT'", + "'TIE_TO_EVEN'", + "'NAN'", + "'P'", + "'T'", + "'Y'", + "'M'", + "'D'", + "'H'", + "'S'", + "'F'", + "'null'", + "'::'", + "'<'", + "'>'", + "'('", + "')'", + "'['", + "']'", + "','", + "'='", + "':'", + "'?'", + "'#'", + "'.'", + ] + + symbolicNames = [ + "", + "SUBSTRAIT_SCALAR_TEST", + "FORMAT_VERSION", + "SUBSTRAIT_INCLUDE", + "DESCRIPTION_LINE", + "ERROR_RESULT", + "UNDEFINED_RESULT", + "OVERFLOW", + "ROUNDING", + "ERROR", + "SATURATE", + "SILENT", + "TIE_TO_EVEN", + "NAN", + "INTEGER_LITERAL", + "DECIMAL_LITERAL", + "FLOAT_LITERAL", + "BOOLEAN_LITERAL", + "TIMESTAMP_TZ_LITERAL", + "TIMESTAMP_LITERAL", + "TIME_LITERAL", + "DATE_LITERAL", + "PERIOD_PREFIX", + "TIME_PREFIX", + "YEAR_SUFFIX", + "M_SUFFIX", + "DAY_SUFFIX", + "HOUR_SUFFIX", + "SECOND_SUFFIX", + "FRACTIONAL_SECOND_SUFFIX", + "INTERVAL_YEAR_LITERAL", + "INTERVAL_DAY_LITERAL", + "NULL_LITERAL", + "STRING_LITERAL", + "LineComment", + "BlockComment", + "Whitespace", + "If", + "Then", + "Else", + "Boolean", + "I8", + "I16", + "I32", + "I64", + "FP32", + "FP64", + "String", + "Binary", + "Timestamp", + "Timestamp_TZ", + "Date", + "Time", + "Interval_Year", + "Interval_Day", + "UUID", + "Decimal", + "Precision_Timestamp", + "Precision_Timestamp_TZ", + "FixedChar", + "VarChar", + "FixedBinary", + "Struct", + "NStruct", + "List", + "Map", + "ANY", + "UserDefined", + "Geometry", + "Bool", + "Str", + "VBin", + "Ts", + "TsTZ", + "IYear", + "IDay", + "Dec", + "PTs", + "PTsTZ", + "FChar", + "VChar", + "FBin", + "DOUBLE_COLON", + "IDENTIFIER", + "O_ANGLE_BRACKET", + "C_ANGLE_BRACKET", + "OPAREN", + "CPAREN", + "OBRACKET", + "CBRACKET", + "COMMA", + "EQ", + "COLON", + "QMARK", + "HASH", + "DOT", + ] + + ruleNames = [ + "SUBSTRAIT_SCALAR_TEST", + "FORMAT_VERSION", + "SUBSTRAIT_INCLUDE", + "DESCRIPTION_LINE", + "ERROR_RESULT", + "UNDEFINED_RESULT", + "OVERFLOW", + "ROUNDING", + "ERROR", + "SATURATE", + "SILENT", + "TIE_TO_EVEN", + "NAN", + "INTEGER_LITERAL", + "DECIMAL_LITERAL", + "FLOAT_LITERAL", + "BOOLEAN_LITERAL", + "FourDigits", + "TwoDigits", + "TIMESTAMP_TZ_LITERAL", + "TIMESTAMP_LITERAL", + "TIME_LITERAL", + "DATE_LITERAL", + "PERIOD_PREFIX", + "TIME_PREFIX", + "YEAR_SUFFIX", + "M_SUFFIX", + "DAY_SUFFIX", + "HOUR_SUFFIX", + "SECOND_SUFFIX", + "FRACTIONAL_SECOND_SUFFIX", + "INTERVAL_YEAR_LITERAL", + "INTERVAL_DAY_LITERAL", + "TIME_INTERVAL", + "NULL_LITERAL", + "STRING_LITERAL", + "LineComment", + "BlockComment", + "Whitespace", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "DIGIT", + "INTEGER", + "If", + "Then", + "Else", + "Boolean", + "I8", + "I16", + "I32", + "I64", + "FP32", + "FP64", + "String", + "Binary", + "Timestamp", + "Timestamp_TZ", + "Date", + "Time", + "Interval_Year", + "Interval_Day", + "UUID", + "Decimal", + "Precision_Timestamp", + "Precision_Timestamp_TZ", + "FixedChar", + "VarChar", + "FixedBinary", + "Struct", + "NStruct", + "List", + "Map", + "ANY", + "UserDefined", + "Geometry", + "Bool", + "Str", + "VBin", + "Ts", + "TsTZ", + "IYear", + "IDay", + "Dec", + "PTs", + "PTsTZ", + "FChar", + "VChar", + "FBin", + "DOUBLE_COLON", + "IDENTIFIER", + "O_ANGLE_BRACKET", + "C_ANGLE_BRACKET", + "OPAREN", + "CPAREN", + "OBRACKET", + "CBRACKET", + "COMMA", + "EQ", + "COLON", + "QMARK", + "HASH", + "DOT", + ] + + grammarFileName = "FuncTestCaseLexer.g4" + + def __init__(self, input=None, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator( + self, self.atn, self.decisionsToDFA, PredictionContextCache() + ) + self._actions = None + self._predicates = None diff --git a/tests/coverage/antlr_parser/FuncTestCaseLexer.tokens b/tests/coverage/antlr_parser/FuncTestCaseLexer.tokens new file mode 100644 index 000000000..ccc9fabc8 --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseLexer.tokens @@ -0,0 +1,128 @@ +SUBSTRAIT_SCALAR_TEST=1 +FORMAT_VERSION=2 +SUBSTRAIT_INCLUDE=3 +DESCRIPTION_LINE=4 +ERROR_RESULT=5 +UNDEFINED_RESULT=6 +OVERFLOW=7 +ROUNDING=8 +ERROR=9 +SATURATE=10 +SILENT=11 +TIE_TO_EVEN=12 +NAN=13 +INTEGER_LITERAL=14 +DECIMAL_LITERAL=15 +FLOAT_LITERAL=16 +BOOLEAN_LITERAL=17 +TIMESTAMP_TZ_LITERAL=18 +TIMESTAMP_LITERAL=19 +TIME_LITERAL=20 +DATE_LITERAL=21 +PERIOD_PREFIX=22 +TIME_PREFIX=23 +YEAR_SUFFIX=24 +M_SUFFIX=25 +DAY_SUFFIX=26 +HOUR_SUFFIX=27 +SECOND_SUFFIX=28 +FRACTIONAL_SECOND_SUFFIX=29 +INTERVAL_YEAR_LITERAL=30 +INTERVAL_DAY_LITERAL=31 +NULL_LITERAL=32 +STRING_LITERAL=33 +LineComment=34 +BlockComment=35 +Whitespace=36 +If=37 +Then=38 +Else=39 +Boolean=40 +I8=41 +I16=42 +I32=43 +I64=44 +FP32=45 +FP64=46 +String=47 +Binary=48 +Timestamp=49 +Timestamp_TZ=50 +Date=51 +Time=52 +Interval_Year=53 +Interval_Day=54 +UUID=55 +Decimal=56 +Precision_Timestamp=57 +Precision_Timestamp_TZ=58 +FixedChar=59 +VarChar=60 +FixedBinary=61 +Struct=62 +NStruct=63 +List=64 +Map=65 +ANY=66 +UserDefined=67 +Geometry=68 +Bool=69 +Str=70 +VBin=71 +Ts=72 +TsTZ=73 +IYear=74 +IDay=75 +Dec=76 +PTs=77 +PTsTZ=78 +FChar=79 +VChar=80 +FBin=81 +DOUBLE_COLON=82 +IDENTIFIER=83 +O_ANGLE_BRACKET=84 +C_ANGLE_BRACKET=85 +OPAREN=86 +CPAREN=87 +OBRACKET=88 +CBRACKET=89 +COMMA=90 +EQ=91 +COLON=92 +QMARK=93 +HASH=94 +DOT=95 +'### SUBSTRAIT_SCALAR_TEST:'=1 +'### SUBSTRAIT_INCLUDE:'=3 +''=5 +''=6 +'overlfow'=7 +'rounding'=8 +'ERROR'=9 +'SATURATE'=10 +'SILENT'=11 +'TIE_TO_EVEN'=12 +'NAN'=13 +'P'=22 +'T'=23 +'Y'=24 +'M'=25 +'D'=26 +'H'=27 +'S'=28 +'F'=29 +'null'=32 +'::'=82 +'<'=84 +'>'=85 +'('=86 +')'=87 +'['=88 +']'=89 +','=90 +'='=91 +':'=92 +'?'=93 +'#'=94 +'.'=95 diff --git a/tests/coverage/antlr_parser/FuncTestCaseParser.interp b/tests/coverage/antlr_parser/FuncTestCaseParser.interp new file mode 100644 index 000000000..71841dc57 --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseParser.interp @@ -0,0 +1,246 @@ +token literal names: +null +'### SUBSTRAIT_SCALAR_TEST:' +null +'### SUBSTRAIT_INCLUDE:' +null +'' +'' +'overlfow' +'rounding' +'ERROR' +'SATURATE' +'SILENT' +'TIE_TO_EVEN' +'NAN' +null +null +null +null +null +null +null +null +'P' +'T' +'Y' +'M' +'D' +'H' +'S' +'F' +null +null +'null' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'::' +null +'<' +'>' +'(' +')' +'[' +']' +',' +'=' +':' +'?' +'#' +'.' + +token symbolic names: +null +SUBSTRAIT_SCALAR_TEST +FORMAT_VERSION +SUBSTRAIT_INCLUDE +DESCRIPTION_LINE +ERROR_RESULT +UNDEFINED_RESULT +OVERFLOW +ROUNDING +ERROR +SATURATE +SILENT +TIE_TO_EVEN +NAN +INTEGER_LITERAL +DECIMAL_LITERAL +FLOAT_LITERAL +BOOLEAN_LITERAL +TIMESTAMP_TZ_LITERAL +TIMESTAMP_LITERAL +TIME_LITERAL +DATE_LITERAL +PERIOD_PREFIX +TIME_PREFIX +YEAR_SUFFIX +M_SUFFIX +DAY_SUFFIX +HOUR_SUFFIX +SECOND_SUFFIX +FRACTIONAL_SECOND_SUFFIX +INTERVAL_YEAR_LITERAL +INTERVAL_DAY_LITERAL +NULL_LITERAL +STRING_LITERAL +LineComment +BlockComment +Whitespace +If +Then +Else +Boolean +I8 +I16 +I32 +I64 +FP32 +FP64 +String +Binary +Timestamp +Timestamp_TZ +Date +Time +Interval_Year +Interval_Day +UUID +Decimal +Precision_Timestamp +Precision_Timestamp_TZ +FixedChar +VarChar +FixedBinary +Struct +NStruct +List +Map +ANY +UserDefined +Geometry +Bool +Str +VBin +Ts +TsTZ +IYear +IDay +Dec +PTs +PTsTZ +FChar +VChar +FBin +DOUBLE_COLON +IDENTIFIER +O_ANGLE_BRACKET +C_ANGLE_BRACKET +OPAREN +CPAREN +OBRACKET +CBRACKET +COMMA +EQ +COLON +QMARK +HASH +DOT + +rule names: +doc +header +version +include +testGroupDescription +testCase +testGroup +arguments +result +argument +numericLiteral +nullArg +i8Arg +i16Arg +i32Arg +i64Arg +fp32Arg +fp64Arg +decimalArg +booleanArg +stringArg +dateArg +timeArg +timestampArg +timestampTzArg +intervalYearArg +intervalDayArg +intervalYearLiteral +intervalDayLiteral +timeInterval +datatype +scalarType +fixedCharType +varCharType +fixedBinaryType +decimalType +precisionTimestampType +precisionTimestampTZType +parameterizedType +numericParameter +substraitError +func_option +option_name +option_value +func_options + + +atn: +[4, 1, 95, 395, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 1, 0, 1, 0, 4, 0, 93, 8, 0, 11, 0, 12, 0, 94, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 109, 8, 3, 10, 3, 12, 3, 112, 9, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 124, 8, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 4, 6, 131, 8, 6, 11, 6, 12, 6, 132, 1, 7, 1, 7, 1, 7, 5, 7, 138, 8, 7, 10, 7, 12, 7, 141, 9, 7, 1, 8, 1, 8, 3, 8, 145, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 163, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 237, 8, 27, 1, 27, 1, 27, 1, 27, 3, 27, 242, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 250, 8, 28, 1, 28, 1, 28, 1, 28, 3, 28, 255, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 261, 8, 29, 1, 29, 1, 29, 3, 29, 265, 8, 29, 1, 29, 1, 29, 3, 29, 269, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 275, 8, 29, 1, 29, 1, 29, 3, 29, 279, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 285, 8, 29, 1, 29, 1, 29, 3, 29, 289, 8, 29, 1, 30, 1, 30, 3, 30, 293, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 313, 8, 31, 1, 32, 1, 32, 3, 32, 317, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 325, 8, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 333, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 3, 35, 341, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 349, 8, 35, 1, 36, 1, 36, 3, 36, 353, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 3, 37, 361, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 373, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 5, 44, 390, 8, 44, 10, 44, 12, 44, 393, 9, 44, 1, 44, 0, 0, 45, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 0, 4, 1, 0, 14, 16, 1, 0, 5, 6, 2, 0, 7, 8, 83, 83, 1, 0, 9, 13, 413, 0, 90, 1, 0, 0, 0, 2, 98, 1, 0, 0, 0, 4, 101, 1, 0, 0, 0, 6, 104, 1, 0, 0, 0, 8, 113, 1, 0, 0, 0, 10, 115, 1, 0, 0, 0, 12, 128, 1, 0, 0, 0, 14, 134, 1, 0, 0, 0, 16, 144, 1, 0, 0, 0, 18, 162, 1, 0, 0, 0, 20, 164, 1, 0, 0, 0, 22, 166, 1, 0, 0, 0, 24, 170, 1, 0, 0, 0, 26, 174, 1, 0, 0, 0, 28, 178, 1, 0, 0, 0, 30, 182, 1, 0, 0, 0, 32, 186, 1, 0, 0, 0, 34, 190, 1, 0, 0, 0, 36, 194, 1, 0, 0, 0, 38, 198, 1, 0, 0, 0, 40, 202, 1, 0, 0, 0, 42, 206, 1, 0, 0, 0, 44, 210, 1, 0, 0, 0, 46, 214, 1, 0, 0, 0, 48, 218, 1, 0, 0, 0, 50, 222, 1, 0, 0, 0, 52, 226, 1, 0, 0, 0, 54, 241, 1, 0, 0, 0, 56, 254, 1, 0, 0, 0, 58, 288, 1, 0, 0, 0, 60, 292, 1, 0, 0, 0, 62, 312, 1, 0, 0, 0, 64, 314, 1, 0, 0, 0, 66, 322, 1, 0, 0, 0, 68, 330, 1, 0, 0, 0, 70, 338, 1, 0, 0, 0, 72, 350, 1, 0, 0, 0, 74, 358, 1, 0, 0, 0, 76, 372, 1, 0, 0, 0, 78, 374, 1, 0, 0, 0, 80, 376, 1, 0, 0, 0, 82, 378, 1, 0, 0, 0, 84, 382, 1, 0, 0, 0, 86, 384, 1, 0, 0, 0, 88, 386, 1, 0, 0, 0, 90, 92, 3, 2, 1, 0, 91, 93, 3, 12, 6, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 97, 5, 0, 0, 1, 97, 1, 1, 0, 0, 0, 98, 99, 3, 4, 2, 0, 99, 100, 3, 6, 3, 0, 100, 3, 1, 0, 0, 0, 101, 102, 5, 1, 0, 0, 102, 103, 5, 2, 0, 0, 103, 5, 1, 0, 0, 0, 104, 105, 5, 3, 0, 0, 105, 110, 5, 33, 0, 0, 106, 107, 5, 90, 0, 0, 107, 109, 5, 33, 0, 0, 108, 106, 1, 0, 0, 0, 109, 112, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 7, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 113, 114, 5, 4, 0, 0, 114, 9, 1, 0, 0, 0, 115, 116, 5, 83, 0, 0, 116, 117, 5, 86, 0, 0, 117, 118, 3, 14, 7, 0, 118, 123, 5, 87, 0, 0, 119, 120, 5, 88, 0, 0, 120, 121, 3, 88, 44, 0, 121, 122, 5, 89, 0, 0, 122, 124, 1, 0, 0, 0, 123, 119, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 5, 91, 0, 0, 126, 127, 3, 16, 8, 0, 127, 11, 1, 0, 0, 0, 128, 130, 3, 8, 4, 0, 129, 131, 3, 10, 5, 0, 130, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 13, 1, 0, 0, 0, 134, 139, 3, 18, 9, 0, 135, 136, 5, 90, 0, 0, 136, 138, 3, 18, 9, 0, 137, 135, 1, 0, 0, 0, 138, 141, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 15, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 142, 145, 3, 18, 9, 0, 143, 145, 3, 80, 40, 0, 144, 142, 1, 0, 0, 0, 144, 143, 1, 0, 0, 0, 145, 17, 1, 0, 0, 0, 146, 163, 3, 22, 11, 0, 147, 163, 3, 24, 12, 0, 148, 163, 3, 26, 13, 0, 149, 163, 3, 28, 14, 0, 150, 163, 3, 30, 15, 0, 151, 163, 3, 32, 16, 0, 152, 163, 3, 34, 17, 0, 153, 163, 3, 38, 19, 0, 154, 163, 3, 40, 20, 0, 155, 163, 3, 36, 18, 0, 156, 163, 3, 42, 21, 0, 157, 163, 3, 44, 22, 0, 158, 163, 3, 46, 23, 0, 159, 163, 3, 48, 24, 0, 160, 163, 3, 50, 25, 0, 161, 163, 3, 52, 26, 0, 162, 146, 1, 0, 0, 0, 162, 147, 1, 0, 0, 0, 162, 148, 1, 0, 0, 0, 162, 149, 1, 0, 0, 0, 162, 150, 1, 0, 0, 0, 162, 151, 1, 0, 0, 0, 162, 152, 1, 0, 0, 0, 162, 153, 1, 0, 0, 0, 162, 154, 1, 0, 0, 0, 162, 155, 1, 0, 0, 0, 162, 156, 1, 0, 0, 0, 162, 157, 1, 0, 0, 0, 162, 158, 1, 0, 0, 0, 162, 159, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 161, 1, 0, 0, 0, 163, 19, 1, 0, 0, 0, 164, 165, 7, 0, 0, 0, 165, 21, 1, 0, 0, 0, 166, 167, 5, 32, 0, 0, 167, 168, 5, 82, 0, 0, 168, 169, 3, 60, 30, 0, 169, 23, 1, 0, 0, 0, 170, 171, 5, 14, 0, 0, 171, 172, 5, 82, 0, 0, 172, 173, 5, 41, 0, 0, 173, 25, 1, 0, 0, 0, 174, 175, 5, 14, 0, 0, 175, 176, 5, 82, 0, 0, 176, 177, 5, 42, 0, 0, 177, 27, 1, 0, 0, 0, 178, 179, 5, 14, 0, 0, 179, 180, 5, 82, 0, 0, 180, 181, 5, 43, 0, 0, 181, 29, 1, 0, 0, 0, 182, 183, 5, 14, 0, 0, 183, 184, 5, 82, 0, 0, 184, 185, 5, 44, 0, 0, 185, 31, 1, 0, 0, 0, 186, 187, 3, 20, 10, 0, 187, 188, 5, 82, 0, 0, 188, 189, 5, 45, 0, 0, 189, 33, 1, 0, 0, 0, 190, 191, 3, 20, 10, 0, 191, 192, 5, 82, 0, 0, 192, 193, 5, 46, 0, 0, 193, 35, 1, 0, 0, 0, 194, 195, 3, 20, 10, 0, 195, 196, 5, 82, 0, 0, 196, 197, 3, 70, 35, 0, 197, 37, 1, 0, 0, 0, 198, 199, 5, 17, 0, 0, 199, 200, 5, 82, 0, 0, 200, 201, 5, 69, 0, 0, 201, 39, 1, 0, 0, 0, 202, 203, 5, 33, 0, 0, 203, 204, 5, 82, 0, 0, 204, 205, 5, 70, 0, 0, 205, 41, 1, 0, 0, 0, 206, 207, 5, 21, 0, 0, 207, 208, 5, 82, 0, 0, 208, 209, 5, 51, 0, 0, 209, 43, 1, 0, 0, 0, 210, 211, 5, 20, 0, 0, 211, 212, 5, 82, 0, 0, 212, 213, 5, 52, 0, 0, 213, 45, 1, 0, 0, 0, 214, 215, 5, 19, 0, 0, 215, 216, 5, 82, 0, 0, 216, 217, 5, 72, 0, 0, 217, 47, 1, 0, 0, 0, 218, 219, 5, 18, 0, 0, 219, 220, 5, 82, 0, 0, 220, 221, 5, 73, 0, 0, 221, 49, 1, 0, 0, 0, 222, 223, 5, 30, 0, 0, 223, 224, 5, 82, 0, 0, 224, 225, 5, 74, 0, 0, 225, 51, 1, 0, 0, 0, 226, 227, 5, 31, 0, 0, 227, 228, 5, 82, 0, 0, 228, 229, 5, 75, 0, 0, 229, 53, 1, 0, 0, 0, 230, 231, 5, 22, 0, 0, 231, 232, 5, 14, 0, 0, 232, 233, 5, 24, 0, 0, 233, 236, 1, 0, 0, 0, 234, 235, 5, 14, 0, 0, 235, 237, 5, 25, 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 242, 1, 0, 0, 0, 238, 239, 5, 22, 0, 0, 239, 240, 5, 14, 0, 0, 240, 242, 5, 25, 0, 0, 241, 230, 1, 0, 0, 0, 241, 238, 1, 0, 0, 0, 242, 55, 1, 0, 0, 0, 243, 244, 5, 22, 0, 0, 244, 245, 5, 14, 0, 0, 245, 246, 5, 26, 0, 0, 246, 249, 1, 0, 0, 0, 247, 248, 5, 23, 0, 0, 248, 250, 3, 58, 29, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 255, 1, 0, 0, 0, 251, 252, 5, 22, 0, 0, 252, 253, 5, 23, 0, 0, 253, 255, 3, 58, 29, 0, 254, 243, 1, 0, 0, 0, 254, 251, 1, 0, 0, 0, 255, 57, 1, 0, 0, 0, 256, 257, 5, 14, 0, 0, 257, 260, 5, 27, 0, 0, 258, 259, 5, 14, 0, 0, 259, 261, 5, 25, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 263, 5, 14, 0, 0, 263, 265, 5, 28, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 267, 5, 14, 0, 0, 267, 269, 5, 29, 0, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 289, 1, 0, 0, 0, 270, 271, 5, 14, 0, 0, 271, 274, 5, 25, 0, 0, 272, 273, 5, 14, 0, 0, 273, 275, 5, 28, 0, 0, 274, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 278, 1, 0, 0, 0, 276, 277, 5, 14, 0, 0, 277, 279, 5, 29, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 289, 1, 0, 0, 0, 280, 281, 5, 14, 0, 0, 281, 284, 5, 28, 0, 0, 282, 283, 5, 14, 0, 0, 283, 285, 5, 29, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 289, 1, 0, 0, 0, 286, 287, 5, 14, 0, 0, 287, 289, 5, 29, 0, 0, 288, 256, 1, 0, 0, 0, 288, 270, 1, 0, 0, 0, 288, 280, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 59, 1, 0, 0, 0, 290, 293, 3, 62, 31, 0, 291, 293, 3, 76, 38, 0, 292, 290, 1, 0, 0, 0, 292, 291, 1, 0, 0, 0, 293, 61, 1, 0, 0, 0, 294, 313, 5, 69, 0, 0, 295, 313, 5, 41, 0, 0, 296, 313, 5, 42, 0, 0, 297, 313, 5, 43, 0, 0, 298, 313, 5, 44, 0, 0, 299, 313, 5, 45, 0, 0, 300, 313, 5, 46, 0, 0, 301, 313, 5, 70, 0, 0, 302, 313, 5, 48, 0, 0, 303, 313, 5, 72, 0, 0, 304, 313, 5, 73, 0, 0, 305, 313, 5, 51, 0, 0, 306, 313, 5, 52, 0, 0, 307, 313, 5, 75, 0, 0, 308, 313, 5, 74, 0, 0, 309, 313, 5, 55, 0, 0, 310, 311, 5, 67, 0, 0, 311, 313, 5, 83, 0, 0, 312, 294, 1, 0, 0, 0, 312, 295, 1, 0, 0, 0, 312, 296, 1, 0, 0, 0, 312, 297, 1, 0, 0, 0, 312, 298, 1, 0, 0, 0, 312, 299, 1, 0, 0, 0, 312, 300, 1, 0, 0, 0, 312, 301, 1, 0, 0, 0, 312, 302, 1, 0, 0, 0, 312, 303, 1, 0, 0, 0, 312, 304, 1, 0, 0, 0, 312, 305, 1, 0, 0, 0, 312, 306, 1, 0, 0, 0, 312, 307, 1, 0, 0, 0, 312, 308, 1, 0, 0, 0, 312, 309, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 313, 63, 1, 0, 0, 0, 314, 316, 5, 79, 0, 0, 315, 317, 5, 93, 0, 0, 316, 315, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 319, 5, 84, 0, 0, 319, 320, 3, 78, 39, 0, 320, 321, 5, 85, 0, 0, 321, 65, 1, 0, 0, 0, 322, 324, 5, 80, 0, 0, 323, 325, 5, 93, 0, 0, 324, 323, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 327, 5, 84, 0, 0, 327, 328, 3, 78, 39, 0, 328, 329, 5, 85, 0, 0, 329, 67, 1, 0, 0, 0, 330, 332, 5, 81, 0, 0, 331, 333, 5, 93, 0, 0, 332, 331, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 5, 84, 0, 0, 335, 336, 3, 78, 39, 0, 336, 337, 5, 85, 0, 0, 337, 69, 1, 0, 0, 0, 338, 340, 5, 76, 0, 0, 339, 341, 5, 93, 0, 0, 340, 339, 1, 0, 0, 0, 340, 341, 1, 0, 0, 0, 341, 348, 1, 0, 0, 0, 342, 343, 5, 84, 0, 0, 343, 344, 3, 78, 39, 0, 344, 345, 5, 90, 0, 0, 345, 346, 3, 78, 39, 0, 346, 347, 5, 85, 0, 0, 347, 349, 1, 0, 0, 0, 348, 342, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 71, 1, 0, 0, 0, 350, 352, 5, 77, 0, 0, 351, 353, 5, 93, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 355, 5, 84, 0, 0, 355, 356, 3, 78, 39, 0, 356, 357, 5, 85, 0, 0, 357, 73, 1, 0, 0, 0, 358, 360, 5, 78, 0, 0, 359, 361, 5, 93, 0, 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 363, 5, 84, 0, 0, 363, 364, 3, 78, 39, 0, 364, 365, 5, 85, 0, 0, 365, 75, 1, 0, 0, 0, 366, 373, 3, 64, 32, 0, 367, 373, 3, 66, 33, 0, 368, 373, 3, 68, 34, 0, 369, 373, 3, 70, 35, 0, 370, 373, 3, 72, 36, 0, 371, 373, 3, 74, 37, 0, 372, 366, 1, 0, 0, 0, 372, 367, 1, 0, 0, 0, 372, 368, 1, 0, 0, 0, 372, 369, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 371, 1, 0, 0, 0, 373, 77, 1, 0, 0, 0, 374, 375, 5, 14, 0, 0, 375, 79, 1, 0, 0, 0, 376, 377, 7, 1, 0, 0, 377, 81, 1, 0, 0, 0, 378, 379, 3, 84, 42, 0, 379, 380, 5, 92, 0, 0, 380, 381, 3, 86, 43, 0, 381, 83, 1, 0, 0, 0, 382, 383, 7, 2, 0, 0, 383, 85, 1, 0, 0, 0, 384, 385, 7, 3, 0, 0, 385, 87, 1, 0, 0, 0, 386, 391, 3, 82, 41, 0, 387, 388, 5, 90, 0, 0, 388, 390, 3, 82, 41, 0, 389, 387, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 89, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 29, 94, 110, 123, 132, 139, 144, 162, 236, 241, 249, 254, 260, 264, 268, 274, 278, 284, 288, 292, 312, 316, 324, 332, 340, 348, 352, 360, 372, 391] \ No newline at end of file diff --git a/tests/coverage/antlr_parser/FuncTestCaseParser.py b/tests/coverage/antlr_parser/FuncTestCaseParser.py new file mode 100644 index 000000000..eff18224a --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseParser.py @@ -0,0 +1,7466 @@ +# SPDX-License-Identifier: Apache-2.0 +# Generated from FuncTestCaseParser.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import ( + ATNDeserializer, + DFA, + NoViableAltException, + ParseTreeListener, + ParseTreeVisitor, + Parser, + ParserATNSimulator, + ParserRuleContext, + PredictionContextCache, + RecognitionException, + Token, + TokenStream, +) +import sys + +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4, + 1, + 95, + 395, + 2, + 0, + 7, + 0, + 2, + 1, + 7, + 1, + 2, + 2, + 7, + 2, + 2, + 3, + 7, + 3, + 2, + 4, + 7, + 4, + 2, + 5, + 7, + 5, + 2, + 6, + 7, + 6, + 2, + 7, + 7, + 7, + 2, + 8, + 7, + 8, + 2, + 9, + 7, + 9, + 2, + 10, + 7, + 10, + 2, + 11, + 7, + 11, + 2, + 12, + 7, + 12, + 2, + 13, + 7, + 13, + 2, + 14, + 7, + 14, + 2, + 15, + 7, + 15, + 2, + 16, + 7, + 16, + 2, + 17, + 7, + 17, + 2, + 18, + 7, + 18, + 2, + 19, + 7, + 19, + 2, + 20, + 7, + 20, + 2, + 21, + 7, + 21, + 2, + 22, + 7, + 22, + 2, + 23, + 7, + 23, + 2, + 24, + 7, + 24, + 2, + 25, + 7, + 25, + 2, + 26, + 7, + 26, + 2, + 27, + 7, + 27, + 2, + 28, + 7, + 28, + 2, + 29, + 7, + 29, + 2, + 30, + 7, + 30, + 2, + 31, + 7, + 31, + 2, + 32, + 7, + 32, + 2, + 33, + 7, + 33, + 2, + 34, + 7, + 34, + 2, + 35, + 7, + 35, + 2, + 36, + 7, + 36, + 2, + 37, + 7, + 37, + 2, + 38, + 7, + 38, + 2, + 39, + 7, + 39, + 2, + 40, + 7, + 40, + 2, + 41, + 7, + 41, + 2, + 42, + 7, + 42, + 2, + 43, + 7, + 43, + 2, + 44, + 7, + 44, + 1, + 0, + 1, + 0, + 4, + 0, + 93, + 8, + 0, + 11, + 0, + 12, + 0, + 94, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 5, + 3, + 109, + 8, + 3, + 10, + 3, + 12, + 3, + 112, + 9, + 3, + 1, + 4, + 1, + 4, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 3, + 5, + 124, + 8, + 5, + 1, + 5, + 1, + 5, + 1, + 5, + 1, + 6, + 1, + 6, + 4, + 6, + 131, + 8, + 6, + 11, + 6, + 12, + 6, + 132, + 1, + 7, + 1, + 7, + 1, + 7, + 5, + 7, + 138, + 8, + 7, + 10, + 7, + 12, + 7, + 141, + 9, + 7, + 1, + 8, + 1, + 8, + 3, + 8, + 145, + 8, + 8, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 1, + 9, + 3, + 9, + 163, + 8, + 9, + 1, + 10, + 1, + 10, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 11, + 1, + 12, + 1, + 12, + 1, + 12, + 1, + 12, + 1, + 13, + 1, + 13, + 1, + 13, + 1, + 13, + 1, + 14, + 1, + 14, + 1, + 14, + 1, + 14, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 15, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 16, + 1, + 17, + 1, + 17, + 1, + 17, + 1, + 17, + 1, + 18, + 1, + 18, + 1, + 18, + 1, + 18, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 19, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 20, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 21, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 22, + 1, + 23, + 1, + 23, + 1, + 23, + 1, + 23, + 1, + 24, + 1, + 24, + 1, + 24, + 1, + 24, + 1, + 25, + 1, + 25, + 1, + 25, + 1, + 25, + 1, + 26, + 1, + 26, + 1, + 26, + 1, + 26, + 1, + 27, + 1, + 27, + 1, + 27, + 1, + 27, + 1, + 27, + 1, + 27, + 3, + 27, + 237, + 8, + 27, + 1, + 27, + 1, + 27, + 1, + 27, + 3, + 27, + 242, + 8, + 27, + 1, + 28, + 1, + 28, + 1, + 28, + 1, + 28, + 1, + 28, + 1, + 28, + 3, + 28, + 250, + 8, + 28, + 1, + 28, + 1, + 28, + 1, + 28, + 3, + 28, + 255, + 8, + 28, + 1, + 29, + 1, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 261, + 8, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 265, + 8, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 269, + 8, + 29, + 1, + 29, + 1, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 275, + 8, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 279, + 8, + 29, + 1, + 29, + 1, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 285, + 8, + 29, + 1, + 29, + 1, + 29, + 3, + 29, + 289, + 8, + 29, + 1, + 30, + 1, + 30, + 3, + 30, + 293, + 8, + 30, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 31, + 3, + 31, + 313, + 8, + 31, + 1, + 32, + 1, + 32, + 3, + 32, + 317, + 8, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 33, + 1, + 33, + 3, + 33, + 325, + 8, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 34, + 1, + 34, + 3, + 34, + 333, + 8, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 35, + 1, + 35, + 3, + 35, + 341, + 8, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 35, + 3, + 35, + 349, + 8, + 35, + 1, + 36, + 1, + 36, + 3, + 36, + 353, + 8, + 36, + 1, + 36, + 1, + 36, + 1, + 36, + 1, + 36, + 1, + 37, + 1, + 37, + 3, + 37, + 361, + 8, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 38, + 1, + 38, + 1, + 38, + 1, + 38, + 1, + 38, + 1, + 38, + 3, + 38, + 373, + 8, + 38, + 1, + 39, + 1, + 39, + 1, + 40, + 1, + 40, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 42, + 1, + 42, + 1, + 43, + 1, + 43, + 1, + 44, + 1, + 44, + 1, + 44, + 5, + 44, + 390, + 8, + 44, + 10, + 44, + 12, + 44, + 393, + 9, + 44, + 1, + 44, + 0, + 0, + 45, + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 40, + 42, + 44, + 46, + 48, + 50, + 52, + 54, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 74, + 76, + 78, + 80, + 82, + 84, + 86, + 88, + 0, + 4, + 1, + 0, + 14, + 16, + 1, + 0, + 5, + 6, + 2, + 0, + 7, + 8, + 83, + 83, + 1, + 0, + 9, + 13, + 413, + 0, + 90, + 1, + 0, + 0, + 0, + 2, + 98, + 1, + 0, + 0, + 0, + 4, + 101, + 1, + 0, + 0, + 0, + 6, + 104, + 1, + 0, + 0, + 0, + 8, + 113, + 1, + 0, + 0, + 0, + 10, + 115, + 1, + 0, + 0, + 0, + 12, + 128, + 1, + 0, + 0, + 0, + 14, + 134, + 1, + 0, + 0, + 0, + 16, + 144, + 1, + 0, + 0, + 0, + 18, + 162, + 1, + 0, + 0, + 0, + 20, + 164, + 1, + 0, + 0, + 0, + 22, + 166, + 1, + 0, + 0, + 0, + 24, + 170, + 1, + 0, + 0, + 0, + 26, + 174, + 1, + 0, + 0, + 0, + 28, + 178, + 1, + 0, + 0, + 0, + 30, + 182, + 1, + 0, + 0, + 0, + 32, + 186, + 1, + 0, + 0, + 0, + 34, + 190, + 1, + 0, + 0, + 0, + 36, + 194, + 1, + 0, + 0, + 0, + 38, + 198, + 1, + 0, + 0, + 0, + 40, + 202, + 1, + 0, + 0, + 0, + 42, + 206, + 1, + 0, + 0, + 0, + 44, + 210, + 1, + 0, + 0, + 0, + 46, + 214, + 1, + 0, + 0, + 0, + 48, + 218, + 1, + 0, + 0, + 0, + 50, + 222, + 1, + 0, + 0, + 0, + 52, + 226, + 1, + 0, + 0, + 0, + 54, + 241, + 1, + 0, + 0, + 0, + 56, + 254, + 1, + 0, + 0, + 0, + 58, + 288, + 1, + 0, + 0, + 0, + 60, + 292, + 1, + 0, + 0, + 0, + 62, + 312, + 1, + 0, + 0, + 0, + 64, + 314, + 1, + 0, + 0, + 0, + 66, + 322, + 1, + 0, + 0, + 0, + 68, + 330, + 1, + 0, + 0, + 0, + 70, + 338, + 1, + 0, + 0, + 0, + 72, + 350, + 1, + 0, + 0, + 0, + 74, + 358, + 1, + 0, + 0, + 0, + 76, + 372, + 1, + 0, + 0, + 0, + 78, + 374, + 1, + 0, + 0, + 0, + 80, + 376, + 1, + 0, + 0, + 0, + 82, + 378, + 1, + 0, + 0, + 0, + 84, + 382, + 1, + 0, + 0, + 0, + 86, + 384, + 1, + 0, + 0, + 0, + 88, + 386, + 1, + 0, + 0, + 0, + 90, + 92, + 3, + 2, + 1, + 0, + 91, + 93, + 3, + 12, + 6, + 0, + 92, + 91, + 1, + 0, + 0, + 0, + 93, + 94, + 1, + 0, + 0, + 0, + 94, + 92, + 1, + 0, + 0, + 0, + 94, + 95, + 1, + 0, + 0, + 0, + 95, + 96, + 1, + 0, + 0, + 0, + 96, + 97, + 5, + 0, + 0, + 1, + 97, + 1, + 1, + 0, + 0, + 0, + 98, + 99, + 3, + 4, + 2, + 0, + 99, + 100, + 3, + 6, + 3, + 0, + 100, + 3, + 1, + 0, + 0, + 0, + 101, + 102, + 5, + 1, + 0, + 0, + 102, + 103, + 5, + 2, + 0, + 0, + 103, + 5, + 1, + 0, + 0, + 0, + 104, + 105, + 5, + 3, + 0, + 0, + 105, + 110, + 5, + 33, + 0, + 0, + 106, + 107, + 5, + 90, + 0, + 0, + 107, + 109, + 5, + 33, + 0, + 0, + 108, + 106, + 1, + 0, + 0, + 0, + 109, + 112, + 1, + 0, + 0, + 0, + 110, + 108, + 1, + 0, + 0, + 0, + 110, + 111, + 1, + 0, + 0, + 0, + 111, + 7, + 1, + 0, + 0, + 0, + 112, + 110, + 1, + 0, + 0, + 0, + 113, + 114, + 5, + 4, + 0, + 0, + 114, + 9, + 1, + 0, + 0, + 0, + 115, + 116, + 5, + 83, + 0, + 0, + 116, + 117, + 5, + 86, + 0, + 0, + 117, + 118, + 3, + 14, + 7, + 0, + 118, + 123, + 5, + 87, + 0, + 0, + 119, + 120, + 5, + 88, + 0, + 0, + 120, + 121, + 3, + 88, + 44, + 0, + 121, + 122, + 5, + 89, + 0, + 0, + 122, + 124, + 1, + 0, + 0, + 0, + 123, + 119, + 1, + 0, + 0, + 0, + 123, + 124, + 1, + 0, + 0, + 0, + 124, + 125, + 1, + 0, + 0, + 0, + 125, + 126, + 5, + 91, + 0, + 0, + 126, + 127, + 3, + 16, + 8, + 0, + 127, + 11, + 1, + 0, + 0, + 0, + 128, + 130, + 3, + 8, + 4, + 0, + 129, + 131, + 3, + 10, + 5, + 0, + 130, + 129, + 1, + 0, + 0, + 0, + 131, + 132, + 1, + 0, + 0, + 0, + 132, + 130, + 1, + 0, + 0, + 0, + 132, + 133, + 1, + 0, + 0, + 0, + 133, + 13, + 1, + 0, + 0, + 0, + 134, + 139, + 3, + 18, + 9, + 0, + 135, + 136, + 5, + 90, + 0, + 0, + 136, + 138, + 3, + 18, + 9, + 0, + 137, + 135, + 1, + 0, + 0, + 0, + 138, + 141, + 1, + 0, + 0, + 0, + 139, + 137, + 1, + 0, + 0, + 0, + 139, + 140, + 1, + 0, + 0, + 0, + 140, + 15, + 1, + 0, + 0, + 0, + 141, + 139, + 1, + 0, + 0, + 0, + 142, + 145, + 3, + 18, + 9, + 0, + 143, + 145, + 3, + 80, + 40, + 0, + 144, + 142, + 1, + 0, + 0, + 0, + 144, + 143, + 1, + 0, + 0, + 0, + 145, + 17, + 1, + 0, + 0, + 0, + 146, + 163, + 3, + 22, + 11, + 0, + 147, + 163, + 3, + 24, + 12, + 0, + 148, + 163, + 3, + 26, + 13, + 0, + 149, + 163, + 3, + 28, + 14, + 0, + 150, + 163, + 3, + 30, + 15, + 0, + 151, + 163, + 3, + 32, + 16, + 0, + 152, + 163, + 3, + 34, + 17, + 0, + 153, + 163, + 3, + 38, + 19, + 0, + 154, + 163, + 3, + 40, + 20, + 0, + 155, + 163, + 3, + 36, + 18, + 0, + 156, + 163, + 3, + 42, + 21, + 0, + 157, + 163, + 3, + 44, + 22, + 0, + 158, + 163, + 3, + 46, + 23, + 0, + 159, + 163, + 3, + 48, + 24, + 0, + 160, + 163, + 3, + 50, + 25, + 0, + 161, + 163, + 3, + 52, + 26, + 0, + 162, + 146, + 1, + 0, + 0, + 0, + 162, + 147, + 1, + 0, + 0, + 0, + 162, + 148, + 1, + 0, + 0, + 0, + 162, + 149, + 1, + 0, + 0, + 0, + 162, + 150, + 1, + 0, + 0, + 0, + 162, + 151, + 1, + 0, + 0, + 0, + 162, + 152, + 1, + 0, + 0, + 0, + 162, + 153, + 1, + 0, + 0, + 0, + 162, + 154, + 1, + 0, + 0, + 0, + 162, + 155, + 1, + 0, + 0, + 0, + 162, + 156, + 1, + 0, + 0, + 0, + 162, + 157, + 1, + 0, + 0, + 0, + 162, + 158, + 1, + 0, + 0, + 0, + 162, + 159, + 1, + 0, + 0, + 0, + 162, + 160, + 1, + 0, + 0, + 0, + 162, + 161, + 1, + 0, + 0, + 0, + 163, + 19, + 1, + 0, + 0, + 0, + 164, + 165, + 7, + 0, + 0, + 0, + 165, + 21, + 1, + 0, + 0, + 0, + 166, + 167, + 5, + 32, + 0, + 0, + 167, + 168, + 5, + 82, + 0, + 0, + 168, + 169, + 3, + 60, + 30, + 0, + 169, + 23, + 1, + 0, + 0, + 0, + 170, + 171, + 5, + 14, + 0, + 0, + 171, + 172, + 5, + 82, + 0, + 0, + 172, + 173, + 5, + 41, + 0, + 0, + 173, + 25, + 1, + 0, + 0, + 0, + 174, + 175, + 5, + 14, + 0, + 0, + 175, + 176, + 5, + 82, + 0, + 0, + 176, + 177, + 5, + 42, + 0, + 0, + 177, + 27, + 1, + 0, + 0, + 0, + 178, + 179, + 5, + 14, + 0, + 0, + 179, + 180, + 5, + 82, + 0, + 0, + 180, + 181, + 5, + 43, + 0, + 0, + 181, + 29, + 1, + 0, + 0, + 0, + 182, + 183, + 5, + 14, + 0, + 0, + 183, + 184, + 5, + 82, + 0, + 0, + 184, + 185, + 5, + 44, + 0, + 0, + 185, + 31, + 1, + 0, + 0, + 0, + 186, + 187, + 3, + 20, + 10, + 0, + 187, + 188, + 5, + 82, + 0, + 0, + 188, + 189, + 5, + 45, + 0, + 0, + 189, + 33, + 1, + 0, + 0, + 0, + 190, + 191, + 3, + 20, + 10, + 0, + 191, + 192, + 5, + 82, + 0, + 0, + 192, + 193, + 5, + 46, + 0, + 0, + 193, + 35, + 1, + 0, + 0, + 0, + 194, + 195, + 3, + 20, + 10, + 0, + 195, + 196, + 5, + 82, + 0, + 0, + 196, + 197, + 3, + 70, + 35, + 0, + 197, + 37, + 1, + 0, + 0, + 0, + 198, + 199, + 5, + 17, + 0, + 0, + 199, + 200, + 5, + 82, + 0, + 0, + 200, + 201, + 5, + 69, + 0, + 0, + 201, + 39, + 1, + 0, + 0, + 0, + 202, + 203, + 5, + 33, + 0, + 0, + 203, + 204, + 5, + 82, + 0, + 0, + 204, + 205, + 5, + 70, + 0, + 0, + 205, + 41, + 1, + 0, + 0, + 0, + 206, + 207, + 5, + 21, + 0, + 0, + 207, + 208, + 5, + 82, + 0, + 0, + 208, + 209, + 5, + 51, + 0, + 0, + 209, + 43, + 1, + 0, + 0, + 0, + 210, + 211, + 5, + 20, + 0, + 0, + 211, + 212, + 5, + 82, + 0, + 0, + 212, + 213, + 5, + 52, + 0, + 0, + 213, + 45, + 1, + 0, + 0, + 0, + 214, + 215, + 5, + 19, + 0, + 0, + 215, + 216, + 5, + 82, + 0, + 0, + 216, + 217, + 5, + 72, + 0, + 0, + 217, + 47, + 1, + 0, + 0, + 0, + 218, + 219, + 5, + 18, + 0, + 0, + 219, + 220, + 5, + 82, + 0, + 0, + 220, + 221, + 5, + 73, + 0, + 0, + 221, + 49, + 1, + 0, + 0, + 0, + 222, + 223, + 5, + 30, + 0, + 0, + 223, + 224, + 5, + 82, + 0, + 0, + 224, + 225, + 5, + 74, + 0, + 0, + 225, + 51, + 1, + 0, + 0, + 0, + 226, + 227, + 5, + 31, + 0, + 0, + 227, + 228, + 5, + 82, + 0, + 0, + 228, + 229, + 5, + 75, + 0, + 0, + 229, + 53, + 1, + 0, + 0, + 0, + 230, + 231, + 5, + 22, + 0, + 0, + 231, + 232, + 5, + 14, + 0, + 0, + 232, + 233, + 5, + 24, + 0, + 0, + 233, + 236, + 1, + 0, + 0, + 0, + 234, + 235, + 5, + 14, + 0, + 0, + 235, + 237, + 5, + 25, + 0, + 0, + 236, + 234, + 1, + 0, + 0, + 0, + 236, + 237, + 1, + 0, + 0, + 0, + 237, + 242, + 1, + 0, + 0, + 0, + 238, + 239, + 5, + 22, + 0, + 0, + 239, + 240, + 5, + 14, + 0, + 0, + 240, + 242, + 5, + 25, + 0, + 0, + 241, + 230, + 1, + 0, + 0, + 0, + 241, + 238, + 1, + 0, + 0, + 0, + 242, + 55, + 1, + 0, + 0, + 0, + 243, + 244, + 5, + 22, + 0, + 0, + 244, + 245, + 5, + 14, + 0, + 0, + 245, + 246, + 5, + 26, + 0, + 0, + 246, + 249, + 1, + 0, + 0, + 0, + 247, + 248, + 5, + 23, + 0, + 0, + 248, + 250, + 3, + 58, + 29, + 0, + 249, + 247, + 1, + 0, + 0, + 0, + 249, + 250, + 1, + 0, + 0, + 0, + 250, + 255, + 1, + 0, + 0, + 0, + 251, + 252, + 5, + 22, + 0, + 0, + 252, + 253, + 5, + 23, + 0, + 0, + 253, + 255, + 3, + 58, + 29, + 0, + 254, + 243, + 1, + 0, + 0, + 0, + 254, + 251, + 1, + 0, + 0, + 0, + 255, + 57, + 1, + 0, + 0, + 0, + 256, + 257, + 5, + 14, + 0, + 0, + 257, + 260, + 5, + 27, + 0, + 0, + 258, + 259, + 5, + 14, + 0, + 0, + 259, + 261, + 5, + 25, + 0, + 0, + 260, + 258, + 1, + 0, + 0, + 0, + 260, + 261, + 1, + 0, + 0, + 0, + 261, + 264, + 1, + 0, + 0, + 0, + 262, + 263, + 5, + 14, + 0, + 0, + 263, + 265, + 5, + 28, + 0, + 0, + 264, + 262, + 1, + 0, + 0, + 0, + 264, + 265, + 1, + 0, + 0, + 0, + 265, + 268, + 1, + 0, + 0, + 0, + 266, + 267, + 5, + 14, + 0, + 0, + 267, + 269, + 5, + 29, + 0, + 0, + 268, + 266, + 1, + 0, + 0, + 0, + 268, + 269, + 1, + 0, + 0, + 0, + 269, + 289, + 1, + 0, + 0, + 0, + 270, + 271, + 5, + 14, + 0, + 0, + 271, + 274, + 5, + 25, + 0, + 0, + 272, + 273, + 5, + 14, + 0, + 0, + 273, + 275, + 5, + 28, + 0, + 0, + 274, + 272, + 1, + 0, + 0, + 0, + 274, + 275, + 1, + 0, + 0, + 0, + 275, + 278, + 1, + 0, + 0, + 0, + 276, + 277, + 5, + 14, + 0, + 0, + 277, + 279, + 5, + 29, + 0, + 0, + 278, + 276, + 1, + 0, + 0, + 0, + 278, + 279, + 1, + 0, + 0, + 0, + 279, + 289, + 1, + 0, + 0, + 0, + 280, + 281, + 5, + 14, + 0, + 0, + 281, + 284, + 5, + 28, + 0, + 0, + 282, + 283, + 5, + 14, + 0, + 0, + 283, + 285, + 5, + 29, + 0, + 0, + 284, + 282, + 1, + 0, + 0, + 0, + 284, + 285, + 1, + 0, + 0, + 0, + 285, + 289, + 1, + 0, + 0, + 0, + 286, + 287, + 5, + 14, + 0, + 0, + 287, + 289, + 5, + 29, + 0, + 0, + 288, + 256, + 1, + 0, + 0, + 0, + 288, + 270, + 1, + 0, + 0, + 0, + 288, + 280, + 1, + 0, + 0, + 0, + 288, + 286, + 1, + 0, + 0, + 0, + 289, + 59, + 1, + 0, + 0, + 0, + 290, + 293, + 3, + 62, + 31, + 0, + 291, + 293, + 3, + 76, + 38, + 0, + 292, + 290, + 1, + 0, + 0, + 0, + 292, + 291, + 1, + 0, + 0, + 0, + 293, + 61, + 1, + 0, + 0, + 0, + 294, + 313, + 5, + 69, + 0, + 0, + 295, + 313, + 5, + 41, + 0, + 0, + 296, + 313, + 5, + 42, + 0, + 0, + 297, + 313, + 5, + 43, + 0, + 0, + 298, + 313, + 5, + 44, + 0, + 0, + 299, + 313, + 5, + 45, + 0, + 0, + 300, + 313, + 5, + 46, + 0, + 0, + 301, + 313, + 5, + 70, + 0, + 0, + 302, + 313, + 5, + 48, + 0, + 0, + 303, + 313, + 5, + 72, + 0, + 0, + 304, + 313, + 5, + 73, + 0, + 0, + 305, + 313, + 5, + 51, + 0, + 0, + 306, + 313, + 5, + 52, + 0, + 0, + 307, + 313, + 5, + 75, + 0, + 0, + 308, + 313, + 5, + 74, + 0, + 0, + 309, + 313, + 5, + 55, + 0, + 0, + 310, + 311, + 5, + 67, + 0, + 0, + 311, + 313, + 5, + 83, + 0, + 0, + 312, + 294, + 1, + 0, + 0, + 0, + 312, + 295, + 1, + 0, + 0, + 0, + 312, + 296, + 1, + 0, + 0, + 0, + 312, + 297, + 1, + 0, + 0, + 0, + 312, + 298, + 1, + 0, + 0, + 0, + 312, + 299, + 1, + 0, + 0, + 0, + 312, + 300, + 1, + 0, + 0, + 0, + 312, + 301, + 1, + 0, + 0, + 0, + 312, + 302, + 1, + 0, + 0, + 0, + 312, + 303, + 1, + 0, + 0, + 0, + 312, + 304, + 1, + 0, + 0, + 0, + 312, + 305, + 1, + 0, + 0, + 0, + 312, + 306, + 1, + 0, + 0, + 0, + 312, + 307, + 1, + 0, + 0, + 0, + 312, + 308, + 1, + 0, + 0, + 0, + 312, + 309, + 1, + 0, + 0, + 0, + 312, + 310, + 1, + 0, + 0, + 0, + 313, + 63, + 1, + 0, + 0, + 0, + 314, + 316, + 5, + 79, + 0, + 0, + 315, + 317, + 5, + 93, + 0, + 0, + 316, + 315, + 1, + 0, + 0, + 0, + 316, + 317, + 1, + 0, + 0, + 0, + 317, + 318, + 1, + 0, + 0, + 0, + 318, + 319, + 5, + 84, + 0, + 0, + 319, + 320, + 3, + 78, + 39, + 0, + 320, + 321, + 5, + 85, + 0, + 0, + 321, + 65, + 1, + 0, + 0, + 0, + 322, + 324, + 5, + 80, + 0, + 0, + 323, + 325, + 5, + 93, + 0, + 0, + 324, + 323, + 1, + 0, + 0, + 0, + 324, + 325, + 1, + 0, + 0, + 0, + 325, + 326, + 1, + 0, + 0, + 0, + 326, + 327, + 5, + 84, + 0, + 0, + 327, + 328, + 3, + 78, + 39, + 0, + 328, + 329, + 5, + 85, + 0, + 0, + 329, + 67, + 1, + 0, + 0, + 0, + 330, + 332, + 5, + 81, + 0, + 0, + 331, + 333, + 5, + 93, + 0, + 0, + 332, + 331, + 1, + 0, + 0, + 0, + 332, + 333, + 1, + 0, + 0, + 0, + 333, + 334, + 1, + 0, + 0, + 0, + 334, + 335, + 5, + 84, + 0, + 0, + 335, + 336, + 3, + 78, + 39, + 0, + 336, + 337, + 5, + 85, + 0, + 0, + 337, + 69, + 1, + 0, + 0, + 0, + 338, + 340, + 5, + 76, + 0, + 0, + 339, + 341, + 5, + 93, + 0, + 0, + 340, + 339, + 1, + 0, + 0, + 0, + 340, + 341, + 1, + 0, + 0, + 0, + 341, + 348, + 1, + 0, + 0, + 0, + 342, + 343, + 5, + 84, + 0, + 0, + 343, + 344, + 3, + 78, + 39, + 0, + 344, + 345, + 5, + 90, + 0, + 0, + 345, + 346, + 3, + 78, + 39, + 0, + 346, + 347, + 5, + 85, + 0, + 0, + 347, + 349, + 1, + 0, + 0, + 0, + 348, + 342, + 1, + 0, + 0, + 0, + 348, + 349, + 1, + 0, + 0, + 0, + 349, + 71, + 1, + 0, + 0, + 0, + 350, + 352, + 5, + 77, + 0, + 0, + 351, + 353, + 5, + 93, + 0, + 0, + 352, + 351, + 1, + 0, + 0, + 0, + 352, + 353, + 1, + 0, + 0, + 0, + 353, + 354, + 1, + 0, + 0, + 0, + 354, + 355, + 5, + 84, + 0, + 0, + 355, + 356, + 3, + 78, + 39, + 0, + 356, + 357, + 5, + 85, + 0, + 0, + 357, + 73, + 1, + 0, + 0, + 0, + 358, + 360, + 5, + 78, + 0, + 0, + 359, + 361, + 5, + 93, + 0, + 0, + 360, + 359, + 1, + 0, + 0, + 0, + 360, + 361, + 1, + 0, + 0, + 0, + 361, + 362, + 1, + 0, + 0, + 0, + 362, + 363, + 5, + 84, + 0, + 0, + 363, + 364, + 3, + 78, + 39, + 0, + 364, + 365, + 5, + 85, + 0, + 0, + 365, + 75, + 1, + 0, + 0, + 0, + 366, + 373, + 3, + 64, + 32, + 0, + 367, + 373, + 3, + 66, + 33, + 0, + 368, + 373, + 3, + 68, + 34, + 0, + 369, + 373, + 3, + 70, + 35, + 0, + 370, + 373, + 3, + 72, + 36, + 0, + 371, + 373, + 3, + 74, + 37, + 0, + 372, + 366, + 1, + 0, + 0, + 0, + 372, + 367, + 1, + 0, + 0, + 0, + 372, + 368, + 1, + 0, + 0, + 0, + 372, + 369, + 1, + 0, + 0, + 0, + 372, + 370, + 1, + 0, + 0, + 0, + 372, + 371, + 1, + 0, + 0, + 0, + 373, + 77, + 1, + 0, + 0, + 0, + 374, + 375, + 5, + 14, + 0, + 0, + 375, + 79, + 1, + 0, + 0, + 0, + 376, + 377, + 7, + 1, + 0, + 0, + 377, + 81, + 1, + 0, + 0, + 0, + 378, + 379, + 3, + 84, + 42, + 0, + 379, + 380, + 5, + 92, + 0, + 0, + 380, + 381, + 3, + 86, + 43, + 0, + 381, + 83, + 1, + 0, + 0, + 0, + 382, + 383, + 7, + 2, + 0, + 0, + 383, + 85, + 1, + 0, + 0, + 0, + 384, + 385, + 7, + 3, + 0, + 0, + 385, + 87, + 1, + 0, + 0, + 0, + 386, + 391, + 3, + 82, + 41, + 0, + 387, + 388, + 5, + 90, + 0, + 0, + 388, + 390, + 3, + 82, + 41, + 0, + 389, + 387, + 1, + 0, + 0, + 0, + 390, + 393, + 1, + 0, + 0, + 0, + 391, + 389, + 1, + 0, + 0, + 0, + 391, + 392, + 1, + 0, + 0, + 0, + 392, + 89, + 1, + 0, + 0, + 0, + 393, + 391, + 1, + 0, + 0, + 0, + 29, + 94, + 110, + 123, + 132, + 139, + 144, + 162, + 236, + 241, + 249, + 254, + 260, + 264, + 268, + 274, + 278, + 284, + 288, + 292, + 312, + 316, + 324, + 332, + 340, + 348, + 352, + 360, + 372, + 391, + ] + + +class FuncTestCaseParser(Parser): + grammarFileName = "FuncTestCaseParser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + sharedContextCache = PredictionContextCache() + + literalNames = [ + "", + "'### SUBSTRAIT_SCALAR_TEST:'", + "", + "'### SUBSTRAIT_INCLUDE:'", + "", + "''", + "''", + "'overlfow'", + "'rounding'", + "'ERROR'", + "'SATURATE'", + "'SILENT'", + "'TIE_TO_EVEN'", + "'NAN'", + "", + "", + "", + "", + "", + "", + "", + "", + "'P'", + "'T'", + "'Y'", + "'M'", + "'D'", + "'H'", + "'S'", + "'F'", + "", + "", + "'null'", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "'::'", + "", + "'<'", + "'>'", + "'('", + "')'", + "'['", + "']'", + "','", + "'='", + "':'", + "'?'", + "'#'", + "'.'", + ] + + symbolicNames = [ + "", + "SUBSTRAIT_SCALAR_TEST", + "FORMAT_VERSION", + "SUBSTRAIT_INCLUDE", + "DESCRIPTION_LINE", + "ERROR_RESULT", + "UNDEFINED_RESULT", + "OVERFLOW", + "ROUNDING", + "ERROR", + "SATURATE", + "SILENT", + "TIE_TO_EVEN", + "NAN", + "INTEGER_LITERAL", + "DECIMAL_LITERAL", + "FLOAT_LITERAL", + "BOOLEAN_LITERAL", + "TIMESTAMP_TZ_LITERAL", + "TIMESTAMP_LITERAL", + "TIME_LITERAL", + "DATE_LITERAL", + "PERIOD_PREFIX", + "TIME_PREFIX", + "YEAR_SUFFIX", + "M_SUFFIX", + "DAY_SUFFIX", + "HOUR_SUFFIX", + "SECOND_SUFFIX", + "FRACTIONAL_SECOND_SUFFIX", + "INTERVAL_YEAR_LITERAL", + "INTERVAL_DAY_LITERAL", + "NULL_LITERAL", + "STRING_LITERAL", + "LineComment", + "BlockComment", + "Whitespace", + "If", + "Then", + "Else", + "Boolean", + "I8", + "I16", + "I32", + "I64", + "FP32", + "FP64", + "String", + "Binary", + "Timestamp", + "Timestamp_TZ", + "Date", + "Time", + "Interval_Year", + "Interval_Day", + "UUID", + "Decimal", + "Precision_Timestamp", + "Precision_Timestamp_TZ", + "FixedChar", + "VarChar", + "FixedBinary", + "Struct", + "NStruct", + "List", + "Map", + "ANY", + "UserDefined", + "Geometry", + "Bool", + "Str", + "VBin", + "Ts", + "TsTZ", + "IYear", + "IDay", + "Dec", + "PTs", + "PTsTZ", + "FChar", + "VChar", + "FBin", + "DOUBLE_COLON", + "IDENTIFIER", + "O_ANGLE_BRACKET", + "C_ANGLE_BRACKET", + "OPAREN", + "CPAREN", + "OBRACKET", + "CBRACKET", + "COMMA", + "EQ", + "COLON", + "QMARK", + "HASH", + "DOT", + ] + + RULE_doc = 0 + RULE_header = 1 + RULE_version = 2 + RULE_include = 3 + RULE_testGroupDescription = 4 + RULE_testCase = 5 + RULE_testGroup = 6 + RULE_arguments = 7 + RULE_result = 8 + RULE_argument = 9 + RULE_numericLiteral = 10 + RULE_nullArg = 11 + RULE_i8Arg = 12 + RULE_i16Arg = 13 + RULE_i32Arg = 14 + RULE_i64Arg = 15 + RULE_fp32Arg = 16 + RULE_fp64Arg = 17 + RULE_decimalArg = 18 + RULE_booleanArg = 19 + RULE_stringArg = 20 + RULE_dateArg = 21 + RULE_timeArg = 22 + RULE_timestampArg = 23 + RULE_timestampTzArg = 24 + RULE_intervalYearArg = 25 + RULE_intervalDayArg = 26 + RULE_intervalYearLiteral = 27 + RULE_intervalDayLiteral = 28 + RULE_timeInterval = 29 + RULE_datatype = 30 + RULE_scalarType = 31 + RULE_fixedCharType = 32 + RULE_varCharType = 33 + RULE_fixedBinaryType = 34 + RULE_decimalType = 35 + RULE_precisionTimestampType = 36 + RULE_precisionTimestampTZType = 37 + RULE_parameterizedType = 38 + RULE_numericParameter = 39 + RULE_substraitError = 40 + RULE_func_option = 41 + RULE_option_name = 42 + RULE_option_value = 43 + RULE_func_options = 44 + + ruleNames = [ + "doc", + "header", + "version", + "include", + "testGroupDescription", + "testCase", + "testGroup", + "arguments", + "result", + "argument", + "numericLiteral", + "nullArg", + "i8Arg", + "i16Arg", + "i32Arg", + "i64Arg", + "fp32Arg", + "fp64Arg", + "decimalArg", + "booleanArg", + "stringArg", + "dateArg", + "timeArg", + "timestampArg", + "timestampTzArg", + "intervalYearArg", + "intervalDayArg", + "intervalYearLiteral", + "intervalDayLiteral", + "timeInterval", + "datatype", + "scalarType", + "fixedCharType", + "varCharType", + "fixedBinaryType", + "decimalType", + "precisionTimestampType", + "precisionTimestampTZType", + "parameterizedType", + "numericParameter", + "substraitError", + "func_option", + "option_name", + "option_value", + "func_options", + ] + + EOF = Token.EOF + SUBSTRAIT_SCALAR_TEST = 1 + FORMAT_VERSION = 2 + SUBSTRAIT_INCLUDE = 3 + DESCRIPTION_LINE = 4 + ERROR_RESULT = 5 + UNDEFINED_RESULT = 6 + OVERFLOW = 7 + ROUNDING = 8 + ERROR = 9 + SATURATE = 10 + SILENT = 11 + TIE_TO_EVEN = 12 + NAN = 13 + INTEGER_LITERAL = 14 + DECIMAL_LITERAL = 15 + FLOAT_LITERAL = 16 + BOOLEAN_LITERAL = 17 + TIMESTAMP_TZ_LITERAL = 18 + TIMESTAMP_LITERAL = 19 + TIME_LITERAL = 20 + DATE_LITERAL = 21 + PERIOD_PREFIX = 22 + TIME_PREFIX = 23 + YEAR_SUFFIX = 24 + M_SUFFIX = 25 + DAY_SUFFIX = 26 + HOUR_SUFFIX = 27 + SECOND_SUFFIX = 28 + FRACTIONAL_SECOND_SUFFIX = 29 + INTERVAL_YEAR_LITERAL = 30 + INTERVAL_DAY_LITERAL = 31 + NULL_LITERAL = 32 + STRING_LITERAL = 33 + LineComment = 34 + BlockComment = 35 + Whitespace = 36 + If = 37 + Then = 38 + Else = 39 + Boolean = 40 + I8 = 41 + I16 = 42 + I32 = 43 + I64 = 44 + FP32 = 45 + FP64 = 46 + String = 47 + Binary = 48 + Timestamp = 49 + Timestamp_TZ = 50 + Date = 51 + Time = 52 + Interval_Year = 53 + Interval_Day = 54 + UUID = 55 + Decimal = 56 + Precision_Timestamp = 57 + Precision_Timestamp_TZ = 58 + FixedChar = 59 + VarChar = 60 + FixedBinary = 61 + Struct = 62 + NStruct = 63 + List = 64 + Map = 65 + ANY = 66 + UserDefined = 67 + Geometry = 68 + Bool = 69 + Str = 70 + VBin = 71 + Ts = 72 + TsTZ = 73 + IYear = 74 + IDay = 75 + Dec = 76 + PTs = 77 + PTsTZ = 78 + FChar = 79 + VChar = 80 + FBin = 81 + DOUBLE_COLON = 82 + IDENTIFIER = 83 + O_ANGLE_BRACKET = 84 + C_ANGLE_BRACKET = 85 + OPAREN = 86 + CPAREN = 87 + OBRACKET = 88 + CBRACKET = 89 + COMMA = 90 + EQ = 91 + COLON = 92 + QMARK = 93 + HASH = 94 + DOT = 95 + + def __init__(self, input: TokenStream, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator( + self, self.atn, self.decisionsToDFA, self.sharedContextCache + ) + self._predicates = None + + class DocContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def header(self): + return self.getTypedRuleContext(FuncTestCaseParser.HeaderContext, 0) + + def EOF(self): + return self.getToken(FuncTestCaseParser.EOF, 0) + + def testGroup(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(FuncTestCaseParser.TestGroupContext) + else: + return self.getTypedRuleContext(FuncTestCaseParser.TestGroupContext, i) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_doc + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDoc"): + listener.enterDoc(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDoc"): + listener.exitDoc(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDoc"): + return visitor.visitDoc(self) + else: + return visitor.visitChildren(self) + + def doc(self): + localctx = FuncTestCaseParser.DocContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_doc) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 90 + self.header() + self.state = 92 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 91 + self.testGroup() + self.state = 94 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 4): + break + + self.state = 96 + self.match(FuncTestCaseParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class HeaderContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def version(self): + return self.getTypedRuleContext(FuncTestCaseParser.VersionContext, 0) + + def include(self): + return self.getTypedRuleContext(FuncTestCaseParser.IncludeContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_header + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterHeader"): + listener.enterHeader(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitHeader"): + listener.exitHeader(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitHeader"): + return visitor.visitHeader(self) + else: + return visitor.visitChildren(self) + + def header(self): + localctx = FuncTestCaseParser.HeaderContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_header) + try: + self.enterOuterAlt(localctx, 1) + self.state = 98 + self.version() + self.state = 99 + self.include() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VersionContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def SUBSTRAIT_SCALAR_TEST(self): + return self.getToken(FuncTestCaseParser.SUBSTRAIT_SCALAR_TEST, 0) + + def FORMAT_VERSION(self): + return self.getToken(FuncTestCaseParser.FORMAT_VERSION, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_version + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVersion"): + listener.enterVersion(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVersion"): + listener.exitVersion(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVersion"): + return visitor.visitVersion(self) + else: + return visitor.visitChildren(self) + + def version(self): + localctx = FuncTestCaseParser.VersionContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_version) + try: + self.enterOuterAlt(localctx, 1) + self.state = 101 + self.match(FuncTestCaseParser.SUBSTRAIT_SCALAR_TEST) + self.state = 102 + self.match(FuncTestCaseParser.FORMAT_VERSION) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IncludeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def SUBSTRAIT_INCLUDE(self): + return self.getToken(FuncTestCaseParser.SUBSTRAIT_INCLUDE, 0) + + def STRING_LITERAL(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.STRING_LITERAL) + else: + return self.getToken(FuncTestCaseParser.STRING_LITERAL, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.COMMA) + else: + return self.getToken(FuncTestCaseParser.COMMA, i) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_include + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterInclude"): + listener.enterInclude(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitInclude"): + listener.exitInclude(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitInclude"): + return visitor.visitInclude(self) + else: + return visitor.visitChildren(self) + + def include(self): + localctx = FuncTestCaseParser.IncludeContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_include) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 104 + self.match(FuncTestCaseParser.SUBSTRAIT_INCLUDE) + self.state = 105 + self.match(FuncTestCaseParser.STRING_LITERAL) + self.state = 110 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 90: + self.state = 106 + self.match(FuncTestCaseParser.COMMA) + self.state = 107 + self.match(FuncTestCaseParser.STRING_LITERAL) + self.state = 112 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TestGroupDescriptionContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def DESCRIPTION_LINE(self): + return self.getToken(FuncTestCaseParser.DESCRIPTION_LINE, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_testGroupDescription + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestGroupDescription"): + listener.enterTestGroupDescription(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestGroupDescription"): + listener.exitTestGroupDescription(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestGroupDescription"): + return visitor.visitTestGroupDescription(self) + else: + return visitor.visitChildren(self) + + def testGroupDescription(self): + localctx = FuncTestCaseParser.TestGroupDescriptionContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 8, self.RULE_testGroupDescription) + try: + self.enterOuterAlt(localctx, 1) + self.state = 113 + self.match(FuncTestCaseParser.DESCRIPTION_LINE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TestCaseContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + self.functionName = None # Token + + def OPAREN(self): + return self.getToken(FuncTestCaseParser.OPAREN, 0) + + def arguments(self): + return self.getTypedRuleContext(FuncTestCaseParser.ArgumentsContext, 0) + + def CPAREN(self): + return self.getToken(FuncTestCaseParser.CPAREN, 0) + + def EQ(self): + return self.getToken(FuncTestCaseParser.EQ, 0) + + def result(self): + return self.getTypedRuleContext(FuncTestCaseParser.ResultContext, 0) + + def IDENTIFIER(self): + return self.getToken(FuncTestCaseParser.IDENTIFIER, 0) + + def OBRACKET(self): + return self.getToken(FuncTestCaseParser.OBRACKET, 0) + + def func_options(self): + return self.getTypedRuleContext(FuncTestCaseParser.Func_optionsContext, 0) + + def CBRACKET(self): + return self.getToken(FuncTestCaseParser.CBRACKET, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_testCase + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestCase"): + listener.enterTestCase(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestCase"): + listener.exitTestCase(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestCase"): + return visitor.visitTestCase(self) + else: + return visitor.visitChildren(self) + + def testCase(self): + localctx = FuncTestCaseParser.TestCaseContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_testCase) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 115 + localctx.functionName = self.match(FuncTestCaseParser.IDENTIFIER) + self.state = 116 + self.match(FuncTestCaseParser.OPAREN) + self.state = 117 + self.arguments() + self.state = 118 + self.match(FuncTestCaseParser.CPAREN) + self.state = 123 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 88: + self.state = 119 + self.match(FuncTestCaseParser.OBRACKET) + self.state = 120 + self.func_options() + self.state = 121 + self.match(FuncTestCaseParser.CBRACKET) + + self.state = 125 + self.match(FuncTestCaseParser.EQ) + self.state = 126 + self.result() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TestGroupContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def testGroupDescription(self): + return self.getTypedRuleContext( + FuncTestCaseParser.TestGroupDescriptionContext, 0 + ) + + def testCase(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(FuncTestCaseParser.TestCaseContext) + else: + return self.getTypedRuleContext(FuncTestCaseParser.TestCaseContext, i) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_testGroup + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTestGroup"): + listener.enterTestGroup(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTestGroup"): + listener.exitTestGroup(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTestGroup"): + return visitor.visitTestGroup(self) + else: + return visitor.visitChildren(self) + + def testGroup(self): + localctx = FuncTestCaseParser.TestGroupContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_testGroup) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 128 + self.testGroupDescription() + self.state = 130 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 129 + self.testCase() + self.state = 132 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la == 83): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArgumentsContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def argument(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(FuncTestCaseParser.ArgumentContext) + else: + return self.getTypedRuleContext(FuncTestCaseParser.ArgumentContext, i) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.COMMA) + else: + return self.getToken(FuncTestCaseParser.COMMA, i) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_arguments + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArguments"): + listener.enterArguments(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArguments"): + listener.exitArguments(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArguments"): + return visitor.visitArguments(self) + else: + return visitor.visitChildren(self) + + def arguments(self): + localctx = FuncTestCaseParser.ArgumentsContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_arguments) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 134 + self.argument() + self.state = 139 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 90: + self.state = 135 + self.match(FuncTestCaseParser.COMMA) + self.state = 136 + self.argument() + self.state = 141 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ResultContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def argument(self): + return self.getTypedRuleContext(FuncTestCaseParser.ArgumentContext, 0) + + def substraitError(self): + return self.getTypedRuleContext(FuncTestCaseParser.SubstraitErrorContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_result + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterResult"): + listener.enterResult(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitResult"): + listener.exitResult(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitResult"): + return visitor.visitResult(self) + else: + return visitor.visitChildren(self) + + def result(self): + localctx = FuncTestCaseParser.ResultContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_result) + try: + self.state = 144 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [14, 15, 16, 17, 18, 19, 20, 21, 30, 31, 32, 33]: + self.enterOuterAlt(localctx, 1) + self.state = 142 + self.argument() + pass + elif token in [5, 6]: + self.enterOuterAlt(localctx, 2) + self.state = 143 + self.substraitError() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ArgumentContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def nullArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.NullArgContext, 0) + + def i8Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.I8ArgContext, 0) + + def i16Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.I16ArgContext, 0) + + def i32Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.I32ArgContext, 0) + + def i64Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.I64ArgContext, 0) + + def fp32Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.Fp32ArgContext, 0) + + def fp64Arg(self): + return self.getTypedRuleContext(FuncTestCaseParser.Fp64ArgContext, 0) + + def booleanArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.BooleanArgContext, 0) + + def stringArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.StringArgContext, 0) + + def decimalArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.DecimalArgContext, 0) + + def dateArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.DateArgContext, 0) + + def timeArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.TimeArgContext, 0) + + def timestampArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.TimestampArgContext, 0) + + def timestampTzArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.TimestampTzArgContext, 0) + + def intervalYearArg(self): + return self.getTypedRuleContext( + FuncTestCaseParser.IntervalYearArgContext, 0 + ) + + def intervalDayArg(self): + return self.getTypedRuleContext(FuncTestCaseParser.IntervalDayArgContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_argument + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterArgument"): + listener.enterArgument(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitArgument"): + listener.exitArgument(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitArgument"): + return visitor.visitArgument(self) + else: + return visitor.visitChildren(self) + + def argument(self): + localctx = FuncTestCaseParser.ArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_argument) + try: + self.state = 162 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 6, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 146 + self.nullArg() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 147 + self.i8Arg() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 148 + self.i16Arg() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 149 + self.i32Arg() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 150 + self.i64Arg() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 151 + self.fp32Arg() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 152 + self.fp64Arg() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 153 + self.booleanArg() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 154 + self.stringArg() + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 155 + self.decimalArg() + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 156 + self.dateArg() + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 157 + self.timeArg() + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 158 + self.timestampArg() + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 159 + self.timestampTzArg() + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 160 + self.intervalYearArg() + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 161 + self.intervalDayArg() + pass + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NumericLiteralContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def DECIMAL_LITERAL(self): + return self.getToken(FuncTestCaseParser.DECIMAL_LITERAL, 0) + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def FLOAT_LITERAL(self): + return self.getToken(FuncTestCaseParser.FLOAT_LITERAL, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_numericLiteral + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNumericLiteral"): + listener.enterNumericLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNumericLiteral"): + listener.exitNumericLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNumericLiteral"): + return visitor.visitNumericLiteral(self) + else: + return visitor.visitChildren(self) + + def numericLiteral(self): + localctx = FuncTestCaseParser.NumericLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_numericLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 164 + _la = self._input.LA(1) + if not ((((_la) & ~0x3F) == 0 and ((1 << _la) & 114688) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NullArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def NULL_LITERAL(self): + return self.getToken(FuncTestCaseParser.NULL_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def datatype(self): + return self.getTypedRuleContext(FuncTestCaseParser.DatatypeContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_nullArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterNullArg"): + listener.enterNullArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitNullArg"): + listener.exitNullArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitNullArg"): + return visitor.visitNullArg(self) + else: + return visitor.visitChildren(self) + + def nullArg(self): + localctx = FuncTestCaseParser.NullArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_nullArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 166 + self.match(FuncTestCaseParser.NULL_LITERAL) + self.state = 167 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 168 + self.datatype() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class I8ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def I8(self): + return self.getToken(FuncTestCaseParser.I8, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_i8Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI8Arg"): + listener.enterI8Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI8Arg"): + listener.exitI8Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI8Arg"): + return visitor.visitI8Arg(self) + else: + return visitor.visitChildren(self) + + def i8Arg(self): + localctx = FuncTestCaseParser.I8ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_i8Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 170 + self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 171 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 172 + self.match(FuncTestCaseParser.I8) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class I16ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def I16(self): + return self.getToken(FuncTestCaseParser.I16, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_i16Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI16Arg"): + listener.enterI16Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI16Arg"): + listener.exitI16Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI16Arg"): + return visitor.visitI16Arg(self) + else: + return visitor.visitChildren(self) + + def i16Arg(self): + localctx = FuncTestCaseParser.I16ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_i16Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 174 + self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 175 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 176 + self.match(FuncTestCaseParser.I16) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class I32ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def I32(self): + return self.getToken(FuncTestCaseParser.I32, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_i32Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI32Arg"): + listener.enterI32Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI32Arg"): + listener.exitI32Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI32Arg"): + return visitor.visitI32Arg(self) + else: + return visitor.visitChildren(self) + + def i32Arg(self): + localctx = FuncTestCaseParser.I32ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_i32Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 178 + self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 179 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 180 + self.match(FuncTestCaseParser.I32) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class I64ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def I64(self): + return self.getToken(FuncTestCaseParser.I64, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_i64Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI64Arg"): + listener.enterI64Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI64Arg"): + listener.exitI64Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI64Arg"): + return visitor.visitI64Arg(self) + else: + return visitor.visitChildren(self) + + def i64Arg(self): + localctx = FuncTestCaseParser.I64ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_i64Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 182 + self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 183 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 184 + self.match(FuncTestCaseParser.I64) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Fp32ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def numericLiteral(self): + return self.getTypedRuleContext(FuncTestCaseParser.NumericLiteralContext, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def FP32(self): + return self.getToken(FuncTestCaseParser.FP32, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_fp32Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFp32Arg"): + listener.enterFp32Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFp32Arg"): + listener.exitFp32Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFp32Arg"): + return visitor.visitFp32Arg(self) + else: + return visitor.visitChildren(self) + + def fp32Arg(self): + localctx = FuncTestCaseParser.Fp32ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_fp32Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 186 + self.numericLiteral() + self.state = 187 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 188 + self.match(FuncTestCaseParser.FP32) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Fp64ArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def numericLiteral(self): + return self.getTypedRuleContext(FuncTestCaseParser.NumericLiteralContext, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def FP64(self): + return self.getToken(FuncTestCaseParser.FP64, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_fp64Arg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFp64Arg"): + listener.enterFp64Arg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFp64Arg"): + listener.exitFp64Arg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFp64Arg"): + return visitor.visitFp64Arg(self) + else: + return visitor.visitChildren(self) + + def fp64Arg(self): + localctx = FuncTestCaseParser.Fp64ArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_fp64Arg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 190 + self.numericLiteral() + self.state = 191 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 192 + self.match(FuncTestCaseParser.FP64) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DecimalArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def numericLiteral(self): + return self.getTypedRuleContext(FuncTestCaseParser.NumericLiteralContext, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def decimalType(self): + return self.getTypedRuleContext(FuncTestCaseParser.DecimalTypeContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_decimalArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDecimalArg"): + listener.enterDecimalArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDecimalArg"): + listener.exitDecimalArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDecimalArg"): + return visitor.visitDecimalArg(self) + else: + return visitor.visitChildren(self) + + def decimalArg(self): + localctx = FuncTestCaseParser.DecimalArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_decimalArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 194 + self.numericLiteral() + self.state = 195 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 196 + self.decimalType() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class BooleanArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def BOOLEAN_LITERAL(self): + return self.getToken(FuncTestCaseParser.BOOLEAN_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def Bool(self): + return self.getToken(FuncTestCaseParser.Bool, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_booleanArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBooleanArg"): + listener.enterBooleanArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBooleanArg"): + listener.exitBooleanArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBooleanArg"): + return visitor.visitBooleanArg(self) + else: + return visitor.visitChildren(self) + + def booleanArg(self): + localctx = FuncTestCaseParser.BooleanArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_booleanArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 198 + self.match(FuncTestCaseParser.BOOLEAN_LITERAL) + self.state = 199 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 200 + self.match(FuncTestCaseParser.Bool) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class StringArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def STRING_LITERAL(self): + return self.getToken(FuncTestCaseParser.STRING_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def Str(self): + return self.getToken(FuncTestCaseParser.Str, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_stringArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterStringArg"): + listener.enterStringArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitStringArg"): + listener.exitStringArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitStringArg"): + return visitor.visitStringArg(self) + else: + return visitor.visitChildren(self) + + def stringArg(self): + localctx = FuncTestCaseParser.StringArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_stringArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 202 + self.match(FuncTestCaseParser.STRING_LITERAL) + self.state = 203 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 204 + self.match(FuncTestCaseParser.Str) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DateArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def DATE_LITERAL(self): + return self.getToken(FuncTestCaseParser.DATE_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def Date(self): + return self.getToken(FuncTestCaseParser.Date, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_dateArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDateArg"): + listener.enterDateArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDateArg"): + listener.exitDateArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDateArg"): + return visitor.visitDateArg(self) + else: + return visitor.visitChildren(self) + + def dateArg(self): + localctx = FuncTestCaseParser.DateArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_dateArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 206 + self.match(FuncTestCaseParser.DATE_LITERAL) + self.state = 207 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 208 + self.match(FuncTestCaseParser.Date) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TimeArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def TIME_LITERAL(self): + return self.getToken(FuncTestCaseParser.TIME_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def Time(self): + return self.getToken(FuncTestCaseParser.Time, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_timeArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimeArg"): + listener.enterTimeArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimeArg"): + listener.exitTimeArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimeArg"): + return visitor.visitTimeArg(self) + else: + return visitor.visitChildren(self) + + def timeArg(self): + localctx = FuncTestCaseParser.TimeArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_timeArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 210 + self.match(FuncTestCaseParser.TIME_LITERAL) + self.state = 211 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 212 + self.match(FuncTestCaseParser.Time) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TimestampArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def TIMESTAMP_LITERAL(self): + return self.getToken(FuncTestCaseParser.TIMESTAMP_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def Ts(self): + return self.getToken(FuncTestCaseParser.Ts, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_timestampArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimestampArg"): + listener.enterTimestampArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimestampArg"): + listener.exitTimestampArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimestampArg"): + return visitor.visitTimestampArg(self) + else: + return visitor.visitChildren(self) + + def timestampArg(self): + localctx = FuncTestCaseParser.TimestampArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_timestampArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 214 + self.match(FuncTestCaseParser.TIMESTAMP_LITERAL) + self.state = 215 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 216 + self.match(FuncTestCaseParser.Ts) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TimestampTzArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def TIMESTAMP_TZ_LITERAL(self): + return self.getToken(FuncTestCaseParser.TIMESTAMP_TZ_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def TsTZ(self): + return self.getToken(FuncTestCaseParser.TsTZ, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_timestampTzArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimestampTzArg"): + listener.enterTimestampTzArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimestampTzArg"): + listener.exitTimestampTzArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimestampTzArg"): + return visitor.visitTimestampTzArg(self) + else: + return visitor.visitChildren(self) + + def timestampTzArg(self): + localctx = FuncTestCaseParser.TimestampTzArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_timestampTzArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 218 + self.match(FuncTestCaseParser.TIMESTAMP_TZ_LITERAL) + self.state = 219 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 220 + self.match(FuncTestCaseParser.TsTZ) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntervalYearArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTERVAL_YEAR_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTERVAL_YEAR_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def IYear(self): + return self.getToken(FuncTestCaseParser.IYear, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_intervalYearArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalYearArg"): + listener.enterIntervalYearArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalYearArg"): + listener.exitIntervalYearArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalYearArg"): + return visitor.visitIntervalYearArg(self) + else: + return visitor.visitChildren(self) + + def intervalYearArg(self): + localctx = FuncTestCaseParser.IntervalYearArgContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 50, self.RULE_intervalYearArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 222 + self.match(FuncTestCaseParser.INTERVAL_YEAR_LITERAL) + self.state = 223 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 224 + self.match(FuncTestCaseParser.IYear) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntervalDayArgContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def INTERVAL_DAY_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTERVAL_DAY_LITERAL, 0) + + def DOUBLE_COLON(self): + return self.getToken(FuncTestCaseParser.DOUBLE_COLON, 0) + + def IDay(self): + return self.getToken(FuncTestCaseParser.IDay, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_intervalDayArg + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalDayArg"): + listener.enterIntervalDayArg(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalDayArg"): + listener.exitIntervalDayArg(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalDayArg"): + return visitor.visitIntervalDayArg(self) + else: + return visitor.visitChildren(self) + + def intervalDayArg(self): + localctx = FuncTestCaseParser.IntervalDayArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_intervalDayArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 226 + self.match(FuncTestCaseParser.INTERVAL_DAY_LITERAL) + self.state = 227 + self.match(FuncTestCaseParser.DOUBLE_COLON) + self.state = 228 + self.match(FuncTestCaseParser.IDay) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntervalYearLiteralContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + self.years = None # Token + self.months = None # Token + + def PERIOD_PREFIX(self): + return self.getToken(FuncTestCaseParser.PERIOD_PREFIX, 0) + + def YEAR_SUFFIX(self): + return self.getToken(FuncTestCaseParser.YEAR_SUFFIX, 0) + + def INTEGER_LITERAL(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.INTEGER_LITERAL) + else: + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, i) + + def M_SUFFIX(self): + return self.getToken(FuncTestCaseParser.M_SUFFIX, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_intervalYearLiteral + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalYearLiteral"): + listener.enterIntervalYearLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalYearLiteral"): + listener.exitIntervalYearLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalYearLiteral"): + return visitor.visitIntervalYearLiteral(self) + else: + return visitor.visitChildren(self) + + def intervalYearLiteral(self): + localctx = FuncTestCaseParser.IntervalYearLiteralContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 54, self.RULE_intervalYearLiteral) + self._la = 0 # Token type + try: + self.state = 241 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 8, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 230 + self.match(FuncTestCaseParser.PERIOD_PREFIX) + + self.state = 231 + localctx.years = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 232 + self.match(FuncTestCaseParser.YEAR_SUFFIX) + self.state = 236 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 14: + self.state = 234 + localctx.months = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 235 + self.match(FuncTestCaseParser.M_SUFFIX) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 238 + self.match(FuncTestCaseParser.PERIOD_PREFIX) + + self.state = 239 + localctx.months = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 240 + self.match(FuncTestCaseParser.M_SUFFIX) + pass + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class IntervalDayLiteralContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + self.days = None # Token + + def PERIOD_PREFIX(self): + return self.getToken(FuncTestCaseParser.PERIOD_PREFIX, 0) + + def DAY_SUFFIX(self): + return self.getToken(FuncTestCaseParser.DAY_SUFFIX, 0) + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def TIME_PREFIX(self): + return self.getToken(FuncTestCaseParser.TIME_PREFIX, 0) + + def timeInterval(self): + return self.getTypedRuleContext(FuncTestCaseParser.TimeIntervalContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_intervalDayLiteral + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalDayLiteral"): + listener.enterIntervalDayLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalDayLiteral"): + listener.exitIntervalDayLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalDayLiteral"): + return visitor.visitIntervalDayLiteral(self) + else: + return visitor.visitChildren(self) + + def intervalDayLiteral(self): + localctx = FuncTestCaseParser.IntervalDayLiteralContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 56, self.RULE_intervalDayLiteral) + self._la = 0 # Token type + try: + self.state = 254 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 10, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 243 + self.match(FuncTestCaseParser.PERIOD_PREFIX) + + self.state = 244 + localctx.days = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 245 + self.match(FuncTestCaseParser.DAY_SUFFIX) + self.state = 249 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 23: + self.state = 247 + self.match(FuncTestCaseParser.TIME_PREFIX) + self.state = 248 + self.timeInterval() + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 251 + self.match(FuncTestCaseParser.PERIOD_PREFIX) + self.state = 252 + self.match(FuncTestCaseParser.TIME_PREFIX) + self.state = 253 + self.timeInterval() + pass + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class TimeIntervalContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + self.hours = None # Token + self.minutes = None # Token + self.seconds = None # Token + self.fractionalSeconds = None # Token + + def HOUR_SUFFIX(self): + return self.getToken(FuncTestCaseParser.HOUR_SUFFIX, 0) + + def INTEGER_LITERAL(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.INTEGER_LITERAL) + else: + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, i) + + def M_SUFFIX(self): + return self.getToken(FuncTestCaseParser.M_SUFFIX, 0) + + def SECOND_SUFFIX(self): + return self.getToken(FuncTestCaseParser.SECOND_SUFFIX, 0) + + def FRACTIONAL_SECOND_SUFFIX(self): + return self.getToken(FuncTestCaseParser.FRACTIONAL_SECOND_SUFFIX, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_timeInterval + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimeInterval"): + listener.enterTimeInterval(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimeInterval"): + listener.exitTimeInterval(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimeInterval"): + return visitor.visitTimeInterval(self) + else: + return visitor.visitChildren(self) + + def timeInterval(self): + localctx = FuncTestCaseParser.TimeIntervalContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_timeInterval) + self._la = 0 # Token type + try: + self.state = 288 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 17, self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 256 + localctx.hours = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 257 + self.match(FuncTestCaseParser.HOUR_SUFFIX) + self.state = 260 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 11, self._ctx) + if la_ == 1: + self.state = 258 + localctx.minutes = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 259 + self.match(FuncTestCaseParser.M_SUFFIX) + + self.state = 264 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 12, self._ctx) + if la_ == 1: + self.state = 262 + localctx.seconds = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 263 + self.match(FuncTestCaseParser.SECOND_SUFFIX) + + self.state = 268 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 14: + self.state = 266 + localctx.fractionalSeconds = self.match( + FuncTestCaseParser.INTEGER_LITERAL + ) + self.state = 267 + self.match(FuncTestCaseParser.FRACTIONAL_SECOND_SUFFIX) + + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 270 + localctx.minutes = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 271 + self.match(FuncTestCaseParser.M_SUFFIX) + self.state = 274 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input, 14, self._ctx) + if la_ == 1: + self.state = 272 + localctx.seconds = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 273 + self.match(FuncTestCaseParser.SECOND_SUFFIX) + + self.state = 278 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 14: + self.state = 276 + localctx.fractionalSeconds = self.match( + FuncTestCaseParser.INTEGER_LITERAL + ) + self.state = 277 + self.match(FuncTestCaseParser.FRACTIONAL_SECOND_SUFFIX) + + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 280 + localctx.seconds = self.match(FuncTestCaseParser.INTEGER_LITERAL) + self.state = 281 + self.match(FuncTestCaseParser.SECOND_SUFFIX) + self.state = 284 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 14: + self.state = 282 + localctx.fractionalSeconds = self.match( + FuncTestCaseParser.INTEGER_LITERAL + ) + self.state = 283 + self.match(FuncTestCaseParser.FRACTIONAL_SECOND_SUFFIX) + + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 286 + localctx.fractionalSeconds = self.match( + FuncTestCaseParser.INTEGER_LITERAL + ) + self.state = 287 + self.match(FuncTestCaseParser.FRACTIONAL_SECOND_SUFFIX) + pass + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DatatypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def scalarType(self): + return self.getTypedRuleContext(FuncTestCaseParser.ScalarTypeContext, 0) + + def parameterizedType(self): + return self.getTypedRuleContext( + FuncTestCaseParser.ParameterizedTypeContext, 0 + ) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_datatype + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDatatype"): + listener.enterDatatype(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDatatype"): + listener.exitDatatype(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDatatype"): + return visitor.visitDatatype(self) + else: + return visitor.visitChildren(self) + + def datatype(self): + localctx = FuncTestCaseParser.DatatypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_datatype) + try: + self.state = 292 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [ + 41, + 42, + 43, + 44, + 45, + 46, + 48, + 51, + 52, + 55, + 67, + 69, + 70, + 72, + 73, + 74, + 75, + ]: + self.enterOuterAlt(localctx, 1) + self.state = 290 + self.scalarType() + pass + elif token in [76, 77, 78, 79, 80, 81]: + self.enterOuterAlt(localctx, 2) + self.state = 291 + self.parameterizedType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ScalarTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_scalarType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class DateContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Date(self): + return self.getToken(FuncTestCaseParser.Date, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDate"): + listener.enterDate(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDate"): + listener.exitDate(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDate"): + return visitor.visitDate(self) + else: + return visitor.visitChildren(self) + + class StringContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Str(self): + return self.getToken(FuncTestCaseParser.Str, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterString"): + listener.enterString(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitString"): + listener.exitString(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitString"): + return visitor.visitString(self) + else: + return visitor.visitChildren(self) + + class I64Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def I64(self): + return self.getToken(FuncTestCaseParser.I64, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI64"): + listener.enterI64(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI64"): + listener.exitI64(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI64"): + return visitor.visitI64(self) + else: + return visitor.visitChildren(self) + + class UserDefinedContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def UserDefined(self): + return self.getToken(FuncTestCaseParser.UserDefined, 0) + + def IDENTIFIER(self): + return self.getToken(FuncTestCaseParser.IDENTIFIER, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUserDefined"): + listener.enterUserDefined(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUserDefined"): + listener.exitUserDefined(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUserDefined"): + return visitor.visitUserDefined(self) + else: + return visitor.visitChildren(self) + + class I32Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def I32(self): + return self.getToken(FuncTestCaseParser.I32, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI32"): + listener.enterI32(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI32"): + listener.exitI32(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI32"): + return visitor.visitI32(self) + else: + return visitor.visitChildren(self) + + class IntervalYearContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def IYear(self): + return self.getToken(FuncTestCaseParser.IYear, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalYear"): + listener.enterIntervalYear(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalYear"): + listener.exitIntervalYear(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalYear"): + return visitor.visitIntervalYear(self) + else: + return visitor.visitChildren(self) + + class UuidContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def UUID(self): + return self.getToken(FuncTestCaseParser.UUID, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterUuid"): + listener.enterUuid(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitUuid"): + listener.exitUuid(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitUuid"): + return visitor.visitUuid(self) + else: + return visitor.visitChildren(self) + + class I8Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def I8(self): + return self.getToken(FuncTestCaseParser.I8, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI8"): + listener.enterI8(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI8"): + listener.exitI8(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI8"): + return visitor.visitI8(self) + else: + return visitor.visitChildren(self) + + class I16Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def I16(self): + return self.getToken(FuncTestCaseParser.I16, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterI16"): + listener.enterI16(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitI16"): + listener.exitI16(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitI16"): + return visitor.visitI16(self) + else: + return visitor.visitChildren(self) + + class BinaryContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Binary(self): + return self.getToken(FuncTestCaseParser.Binary, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBinary"): + listener.enterBinary(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBinary"): + listener.exitBinary(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBinary"): + return visitor.visitBinary(self) + else: + return visitor.visitChildren(self) + + class IntervalDayContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def IDay(self): + return self.getToken(FuncTestCaseParser.IDay, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntervalDay"): + listener.enterIntervalDay(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntervalDay"): + listener.exitIntervalDay(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntervalDay"): + return visitor.visitIntervalDay(self) + else: + return visitor.visitChildren(self) + + class Fp64Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def FP64(self): + return self.getToken(FuncTestCaseParser.FP64, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFp64"): + listener.enterFp64(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFp64"): + listener.exitFp64(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFp64"): + return visitor.visitFp64(self) + else: + return visitor.visitChildren(self) + + class Fp32Context(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def FP32(self): + return self.getToken(FuncTestCaseParser.FP32, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFp32"): + listener.enterFp32(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFp32"): + listener.exitFp32(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFp32"): + return visitor.visitFp32(self) + else: + return visitor.visitChildren(self) + + class TimeContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Time(self): + return self.getToken(FuncTestCaseParser.Time, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTime"): + listener.enterTime(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTime"): + listener.exitTime(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTime"): + return visitor.visitTime(self) + else: + return visitor.visitChildren(self) + + class BooleanContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Bool(self): + return self.getToken(FuncTestCaseParser.Bool, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterBoolean"): + listener.enterBoolean(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitBoolean"): + listener.exitBoolean(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitBoolean"): + return visitor.visitBoolean(self) + else: + return visitor.visitChildren(self) + + class TimestampContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Ts(self): + return self.getToken(FuncTestCaseParser.Ts, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimestamp"): + listener.enterTimestamp(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimestamp"): + listener.exitTimestamp(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimestamp"): + return visitor.visitTimestamp(self) + else: + return visitor.visitChildren(self) + + class TimestampTzContext(ScalarTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def TsTZ(self): + return self.getToken(FuncTestCaseParser.TsTZ, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterTimestampTz"): + listener.enterTimestampTz(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitTimestampTz"): + listener.exitTimestampTz(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitTimestampTz"): + return visitor.visitTimestampTz(self) + else: + return visitor.visitChildren(self) + + def scalarType(self): + localctx = FuncTestCaseParser.ScalarTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_scalarType) + try: + self.state = 312 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [69]: + localctx = FuncTestCaseParser.BooleanContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 294 + self.match(FuncTestCaseParser.Bool) + pass + elif token in [41]: + localctx = FuncTestCaseParser.I8Context(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 295 + self.match(FuncTestCaseParser.I8) + pass + elif token in [42]: + localctx = FuncTestCaseParser.I16Context(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 296 + self.match(FuncTestCaseParser.I16) + pass + elif token in [43]: + localctx = FuncTestCaseParser.I32Context(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 297 + self.match(FuncTestCaseParser.I32) + pass + elif token in [44]: + localctx = FuncTestCaseParser.I64Context(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 298 + self.match(FuncTestCaseParser.I64) + pass + elif token in [45]: + localctx = FuncTestCaseParser.Fp32Context(self, localctx) + self.enterOuterAlt(localctx, 6) + self.state = 299 + self.match(FuncTestCaseParser.FP32) + pass + elif token in [46]: + localctx = FuncTestCaseParser.Fp64Context(self, localctx) + self.enterOuterAlt(localctx, 7) + self.state = 300 + self.match(FuncTestCaseParser.FP64) + pass + elif token in [70]: + localctx = FuncTestCaseParser.StringContext(self, localctx) + self.enterOuterAlt(localctx, 8) + self.state = 301 + self.match(FuncTestCaseParser.Str) + pass + elif token in [48]: + localctx = FuncTestCaseParser.BinaryContext(self, localctx) + self.enterOuterAlt(localctx, 9) + self.state = 302 + self.match(FuncTestCaseParser.Binary) + pass + elif token in [72]: + localctx = FuncTestCaseParser.TimestampContext(self, localctx) + self.enterOuterAlt(localctx, 10) + self.state = 303 + self.match(FuncTestCaseParser.Ts) + pass + elif token in [73]: + localctx = FuncTestCaseParser.TimestampTzContext(self, localctx) + self.enterOuterAlt(localctx, 11) + self.state = 304 + self.match(FuncTestCaseParser.TsTZ) + pass + elif token in [51]: + localctx = FuncTestCaseParser.DateContext(self, localctx) + self.enterOuterAlt(localctx, 12) + self.state = 305 + self.match(FuncTestCaseParser.Date) + pass + elif token in [52]: + localctx = FuncTestCaseParser.TimeContext(self, localctx) + self.enterOuterAlt(localctx, 13) + self.state = 306 + self.match(FuncTestCaseParser.Time) + pass + elif token in [75]: + localctx = FuncTestCaseParser.IntervalDayContext(self, localctx) + self.enterOuterAlt(localctx, 14) + self.state = 307 + self.match(FuncTestCaseParser.IDay) + pass + elif token in [74]: + localctx = FuncTestCaseParser.IntervalYearContext(self, localctx) + self.enterOuterAlt(localctx, 15) + self.state = 308 + self.match(FuncTestCaseParser.IYear) + pass + elif token in [55]: + localctx = FuncTestCaseParser.UuidContext(self, localctx) + self.enterOuterAlt(localctx, 16) + self.state = 309 + self.match(FuncTestCaseParser.UUID) + pass + elif token in [67]: + localctx = FuncTestCaseParser.UserDefinedContext(self, localctx) + self.enterOuterAlt(localctx, 17) + self.state = 310 + self.match(FuncTestCaseParser.UserDefined) + self.state = 311 + self.match(FuncTestCaseParser.IDENTIFIER) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FixedCharTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_fixedCharType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class FixedCharContext(FixedCharTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.FixedCharTypeContext + super().__init__(parser) + self.isnull = None # Token + self.len_ = None # NumericParameterContext + self.copyFrom(ctx) + + def FChar(self): + return self.getToken(FuncTestCaseParser.FChar, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def numericParameter(self): + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, 0 + ) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFixedChar"): + listener.enterFixedChar(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFixedChar"): + listener.exitFixedChar(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFixedChar"): + return visitor.visitFixedChar(self) + else: + return visitor.visitChildren(self) + + def fixedCharType(self): + localctx = FuncTestCaseParser.FixedCharTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_fixedCharType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.FixedCharContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 314 + self.match(FuncTestCaseParser.FChar) + self.state = 316 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 315 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 318 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 319 + localctx.len_ = self.numericParameter() + self.state = 320 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class VarCharTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_varCharType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class VarCharContext(VarCharTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.VarCharTypeContext + super().__init__(parser) + self.isnull = None # Token + self.len_ = None # NumericParameterContext + self.copyFrom(ctx) + + def VChar(self): + return self.getToken(FuncTestCaseParser.VChar, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def numericParameter(self): + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, 0 + ) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterVarChar"): + listener.enterVarChar(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitVarChar"): + listener.exitVarChar(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitVarChar"): + return visitor.visitVarChar(self) + else: + return visitor.visitChildren(self) + + def varCharType(self): + localctx = FuncTestCaseParser.VarCharTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_varCharType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.VarCharContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 322 + self.match(FuncTestCaseParser.VChar) + self.state = 324 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 323 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 326 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 327 + localctx.len_ = self.numericParameter() + self.state = 328 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class FixedBinaryTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_fixedBinaryType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class FixedBinaryContext(FixedBinaryTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.FixedBinaryTypeContext + super().__init__(parser) + self.isnull = None # Token + self.len_ = None # NumericParameterContext + self.copyFrom(ctx) + + def FBin(self): + return self.getToken(FuncTestCaseParser.FBin, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def numericParameter(self): + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, 0 + ) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFixedBinary"): + listener.enterFixedBinary(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFixedBinary"): + listener.exitFixedBinary(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFixedBinary"): + return visitor.visitFixedBinary(self) + else: + return visitor.visitChildren(self) + + def fixedBinaryType(self): + localctx = FuncTestCaseParser.FixedBinaryTypeContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 68, self.RULE_fixedBinaryType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.FixedBinaryContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 330 + self.match(FuncTestCaseParser.FBin) + self.state = 332 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 331 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 334 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 335 + localctx.len_ = self.numericParameter() + self.state = 336 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class DecimalTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_decimalType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class DecimalContext(DecimalTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.DecimalTypeContext + super().__init__(parser) + self.isnull = None # Token + self.precision = None # NumericParameterContext + self.scale = None # NumericParameterContext + self.copyFrom(ctx) + + def Dec(self): + return self.getToken(FuncTestCaseParser.Dec, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def COMMA(self): + return self.getToken(FuncTestCaseParser.COMMA, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def numericParameter(self, i: int = None): + if i is None: + return self.getTypedRuleContexts( + FuncTestCaseParser.NumericParameterContext + ) + else: + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, i + ) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterDecimal"): + listener.enterDecimal(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitDecimal"): + listener.exitDecimal(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitDecimal"): + return visitor.visitDecimal(self) + else: + return visitor.visitChildren(self) + + def decimalType(self): + localctx = FuncTestCaseParser.DecimalTypeContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_decimalType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.DecimalContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 338 + self.match(FuncTestCaseParser.Dec) + self.state = 340 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 339 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 348 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 84: + self.state = 342 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 343 + localctx.precision = self.numericParameter() + self.state = 344 + self.match(FuncTestCaseParser.COMMA) + self.state = 345 + localctx.scale = self.numericParameter() + self.state = 346 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrecisionTimestampTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_precisionTimestampType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class PrecisionTimestampContext(PrecisionTimestampTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.PrecisionTimestampTypeContext + super().__init__(parser) + self.isnull = None # Token + self.precision = None # NumericParameterContext + self.copyFrom(ctx) + + def PTs(self): + return self.getToken(FuncTestCaseParser.PTs, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def numericParameter(self): + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, 0 + ) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrecisionTimestamp"): + listener.enterPrecisionTimestamp(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrecisionTimestamp"): + listener.exitPrecisionTimestamp(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrecisionTimestamp"): + return visitor.visitPrecisionTimestamp(self) + else: + return visitor.visitChildren(self) + + def precisionTimestampType(self): + localctx = FuncTestCaseParser.PrecisionTimestampTypeContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 72, self.RULE_precisionTimestampType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.PrecisionTimestampContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 350 + self.match(FuncTestCaseParser.PTs) + self.state = 352 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 351 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 354 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 355 + localctx.precision = self.numericParameter() + self.state = 356 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class PrecisionTimestampTZTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_precisionTimestampTZType + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class PrecisionTimestampTZContext(PrecisionTimestampTZTypeContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.PrecisionTimestampTZTypeContext + super().__init__(parser) + self.isnull = None # Token + self.precision = None # NumericParameterContext + self.copyFrom(ctx) + + def PTsTZ(self): + return self.getToken(FuncTestCaseParser.PTsTZ, 0) + + def O_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.O_ANGLE_BRACKET, 0) + + def C_ANGLE_BRACKET(self): + return self.getToken(FuncTestCaseParser.C_ANGLE_BRACKET, 0) + + def numericParameter(self): + return self.getTypedRuleContext( + FuncTestCaseParser.NumericParameterContext, 0 + ) + + def QMARK(self): + return self.getToken(FuncTestCaseParser.QMARK, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterPrecisionTimestampTZ"): + listener.enterPrecisionTimestampTZ(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitPrecisionTimestampTZ"): + listener.exitPrecisionTimestampTZ(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitPrecisionTimestampTZ"): + return visitor.visitPrecisionTimestampTZ(self) + else: + return visitor.visitChildren(self) + + def precisionTimestampTZType(self): + localctx = FuncTestCaseParser.PrecisionTimestampTZTypeContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 74, self.RULE_precisionTimestampTZType) + self._la = 0 # Token type + try: + localctx = FuncTestCaseParser.PrecisionTimestampTZContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 358 + self.match(FuncTestCaseParser.PTsTZ) + self.state = 360 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la == 93: + self.state = 359 + localctx.isnull = self.match(FuncTestCaseParser.QMARK) + + self.state = 362 + self.match(FuncTestCaseParser.O_ANGLE_BRACKET) + self.state = 363 + localctx.precision = self.numericParameter() + self.state = 364 + self.match(FuncTestCaseParser.C_ANGLE_BRACKET) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class ParameterizedTypeContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def fixedCharType(self): + return self.getTypedRuleContext(FuncTestCaseParser.FixedCharTypeContext, 0) + + def varCharType(self): + return self.getTypedRuleContext(FuncTestCaseParser.VarCharTypeContext, 0) + + def fixedBinaryType(self): + return self.getTypedRuleContext( + FuncTestCaseParser.FixedBinaryTypeContext, 0 + ) + + def decimalType(self): + return self.getTypedRuleContext(FuncTestCaseParser.DecimalTypeContext, 0) + + def precisionTimestampType(self): + return self.getTypedRuleContext( + FuncTestCaseParser.PrecisionTimestampTypeContext, 0 + ) + + def precisionTimestampTZType(self): + return self.getTypedRuleContext( + FuncTestCaseParser.PrecisionTimestampTZTypeContext, 0 + ) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_parameterizedType + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterParameterizedType"): + listener.enterParameterizedType(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitParameterizedType"): + listener.exitParameterizedType(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitParameterizedType"): + return visitor.visitParameterizedType(self) + else: + return visitor.visitChildren(self) + + def parameterizedType(self): + localctx = FuncTestCaseParser.ParameterizedTypeContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 76, self.RULE_parameterizedType) + try: + self.state = 372 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [79]: + self.enterOuterAlt(localctx, 1) + self.state = 366 + self.fixedCharType() + pass + elif token in [80]: + self.enterOuterAlt(localctx, 2) + self.state = 367 + self.varCharType() + pass + elif token in [81]: + self.enterOuterAlt(localctx, 3) + self.state = 368 + self.fixedBinaryType() + pass + elif token in [76]: + self.enterOuterAlt(localctx, 4) + self.state = 369 + self.decimalType() + pass + elif token in [77]: + self.enterOuterAlt(localctx, 5) + self.state = 370 + self.precisionTimestampType() + pass + elif token in [78]: + self.enterOuterAlt(localctx, 6) + self.state = 371 + self.precisionTimestampTZType() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class NumericParameterContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_numericParameter + + def copyFrom(self, ctx: ParserRuleContext): + super().copyFrom(ctx) + + class IntegerLiteralContext(NumericParameterContext): + def __init__( + self, parser, ctx: ParserRuleContext + ): # actually a FuncTestCaseParser.NumericParameterContext + super().__init__(parser) + self.copyFrom(ctx) + + def INTEGER_LITERAL(self): + return self.getToken(FuncTestCaseParser.INTEGER_LITERAL, 0) + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterIntegerLiteral"): + listener.enterIntegerLiteral(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitIntegerLiteral"): + listener.exitIntegerLiteral(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitIntegerLiteral"): + return visitor.visitIntegerLiteral(self) + else: + return visitor.visitChildren(self) + + def numericParameter(self): + localctx = FuncTestCaseParser.NumericParameterContext( + self, self._ctx, self.state + ) + self.enterRule(localctx, 78, self.RULE_numericParameter) + try: + localctx = FuncTestCaseParser.IntegerLiteralContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 374 + self.match(FuncTestCaseParser.INTEGER_LITERAL) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class SubstraitErrorContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def ERROR_RESULT(self): + return self.getToken(FuncTestCaseParser.ERROR_RESULT, 0) + + def UNDEFINED_RESULT(self): + return self.getToken(FuncTestCaseParser.UNDEFINED_RESULT, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_substraitError + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterSubstraitError"): + listener.enterSubstraitError(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitSubstraitError"): + listener.exitSubstraitError(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitSubstraitError"): + return visitor.visitSubstraitError(self) + else: + return visitor.visitChildren(self) + + def substraitError(self): + localctx = FuncTestCaseParser.SubstraitErrorContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_substraitError) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 376 + _la = self._input.LA(1) + if not (_la == 5 or _la == 6): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Func_optionContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def option_name(self): + return self.getTypedRuleContext(FuncTestCaseParser.Option_nameContext, 0) + + def COLON(self): + return self.getToken(FuncTestCaseParser.COLON, 0) + + def option_value(self): + return self.getTypedRuleContext(FuncTestCaseParser.Option_valueContext, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_func_option + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunc_option"): + listener.enterFunc_option(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunc_option"): + listener.exitFunc_option(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunc_option"): + return visitor.visitFunc_option(self) + else: + return visitor.visitChildren(self) + + def func_option(self): + localctx = FuncTestCaseParser.Func_optionContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_func_option) + try: + self.enterOuterAlt(localctx, 1) + self.state = 378 + self.option_name() + self.state = 379 + self.match(FuncTestCaseParser.COLON) + self.state = 380 + self.option_value() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Option_nameContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def OVERFLOW(self): + return self.getToken(FuncTestCaseParser.OVERFLOW, 0) + + def ROUNDING(self): + return self.getToken(FuncTestCaseParser.ROUNDING, 0) + + def IDENTIFIER(self): + return self.getToken(FuncTestCaseParser.IDENTIFIER, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_option_name + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOption_name"): + listener.enterOption_name(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOption_name"): + listener.exitOption_name(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOption_name"): + return visitor.visitOption_name(self) + else: + return visitor.visitChildren(self) + + def option_name(self): + localctx = FuncTestCaseParser.Option_nameContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_option_name) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 382 + _la = self._input.LA(1) + if not (_la == 7 or _la == 8 or _la == 83): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Option_valueContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def ERROR(self): + return self.getToken(FuncTestCaseParser.ERROR, 0) + + def SATURATE(self): + return self.getToken(FuncTestCaseParser.SATURATE, 0) + + def SILENT(self): + return self.getToken(FuncTestCaseParser.SILENT, 0) + + def TIE_TO_EVEN(self): + return self.getToken(FuncTestCaseParser.TIE_TO_EVEN, 0) + + def NAN(self): + return self.getToken(FuncTestCaseParser.NAN, 0) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_option_value + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterOption_value"): + listener.enterOption_value(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitOption_value"): + listener.exitOption_value(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitOption_value"): + return visitor.visitOption_value(self) + else: + return visitor.visitChildren(self) + + def option_value(self): + localctx = FuncTestCaseParser.Option_valueContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_option_value) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 384 + _la = self._input.LA(1) + if not ((((_la) & ~0x3F) == 0 and ((1 << _la) & 15872) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class Func_optionsContext(ParserRuleContext): + __slots__ = "parser" + + def __init__( + self, parser, parent: ParserRuleContext = None, invokingState: int = -1 + ): + super().__init__(parent, invokingState) + self.parser = parser + + def func_option(self, i: int = None): + if i is None: + return self.getTypedRuleContexts(FuncTestCaseParser.Func_optionContext) + else: + return self.getTypedRuleContext( + FuncTestCaseParser.Func_optionContext, i + ) + + def COMMA(self, i: int = None): + if i is None: + return self.getTokens(FuncTestCaseParser.COMMA) + else: + return self.getToken(FuncTestCaseParser.COMMA, i) + + def getRuleIndex(self): + return FuncTestCaseParser.RULE_func_options + + def enterRule(self, listener: ParseTreeListener): + if hasattr(listener, "enterFunc_options"): + listener.enterFunc_options(self) + + def exitRule(self, listener: ParseTreeListener): + if hasattr(listener, "exitFunc_options"): + listener.exitFunc_options(self) + + def accept(self, visitor: ParseTreeVisitor): + if hasattr(visitor, "visitFunc_options"): + return visitor.visitFunc_options(self) + else: + return visitor.visitChildren(self) + + def func_options(self): + localctx = FuncTestCaseParser.Func_optionsContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_func_options) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 386 + self.func_option() + self.state = 391 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la == 90: + self.state = 387 + self.match(FuncTestCaseParser.COMMA) + self.state = 388 + self.func_option() + self.state = 393 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx diff --git a/tests/coverage/antlr_parser/FuncTestCaseParser.tokens b/tests/coverage/antlr_parser/FuncTestCaseParser.tokens new file mode 100644 index 000000000..ccc9fabc8 --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseParser.tokens @@ -0,0 +1,128 @@ +SUBSTRAIT_SCALAR_TEST=1 +FORMAT_VERSION=2 +SUBSTRAIT_INCLUDE=3 +DESCRIPTION_LINE=4 +ERROR_RESULT=5 +UNDEFINED_RESULT=6 +OVERFLOW=7 +ROUNDING=8 +ERROR=9 +SATURATE=10 +SILENT=11 +TIE_TO_EVEN=12 +NAN=13 +INTEGER_LITERAL=14 +DECIMAL_LITERAL=15 +FLOAT_LITERAL=16 +BOOLEAN_LITERAL=17 +TIMESTAMP_TZ_LITERAL=18 +TIMESTAMP_LITERAL=19 +TIME_LITERAL=20 +DATE_LITERAL=21 +PERIOD_PREFIX=22 +TIME_PREFIX=23 +YEAR_SUFFIX=24 +M_SUFFIX=25 +DAY_SUFFIX=26 +HOUR_SUFFIX=27 +SECOND_SUFFIX=28 +FRACTIONAL_SECOND_SUFFIX=29 +INTERVAL_YEAR_LITERAL=30 +INTERVAL_DAY_LITERAL=31 +NULL_LITERAL=32 +STRING_LITERAL=33 +LineComment=34 +BlockComment=35 +Whitespace=36 +If=37 +Then=38 +Else=39 +Boolean=40 +I8=41 +I16=42 +I32=43 +I64=44 +FP32=45 +FP64=46 +String=47 +Binary=48 +Timestamp=49 +Timestamp_TZ=50 +Date=51 +Time=52 +Interval_Year=53 +Interval_Day=54 +UUID=55 +Decimal=56 +Precision_Timestamp=57 +Precision_Timestamp_TZ=58 +FixedChar=59 +VarChar=60 +FixedBinary=61 +Struct=62 +NStruct=63 +List=64 +Map=65 +ANY=66 +UserDefined=67 +Geometry=68 +Bool=69 +Str=70 +VBin=71 +Ts=72 +TsTZ=73 +IYear=74 +IDay=75 +Dec=76 +PTs=77 +PTsTZ=78 +FChar=79 +VChar=80 +FBin=81 +DOUBLE_COLON=82 +IDENTIFIER=83 +O_ANGLE_BRACKET=84 +C_ANGLE_BRACKET=85 +OPAREN=86 +CPAREN=87 +OBRACKET=88 +CBRACKET=89 +COMMA=90 +EQ=91 +COLON=92 +QMARK=93 +HASH=94 +DOT=95 +'### SUBSTRAIT_SCALAR_TEST:'=1 +'### SUBSTRAIT_INCLUDE:'=3 +''=5 +''=6 +'overlfow'=7 +'rounding'=8 +'ERROR'=9 +'SATURATE'=10 +'SILENT'=11 +'TIE_TO_EVEN'=12 +'NAN'=13 +'P'=22 +'T'=23 +'Y'=24 +'M'=25 +'D'=26 +'H'=27 +'S'=28 +'F'=29 +'null'=32 +'::'=82 +'<'=84 +'>'=85 +'('=86 +')'=87 +'['=88 +']'=89 +','=90 +'='=91 +':'=92 +'?'=93 +'#'=94 +'.'=95 diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserListener.py b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py new file mode 100644 index 000000000..ea0e10aee --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py @@ -0,0 +1,518 @@ +# SPDX-License-Identifier: Apache-2.0 +# Generated from FuncTestCaseParser.g4 by ANTLR 4.13.2 +from antlr4 import ParseTreeListener + +if "." in __name__: + from .FuncTestCaseParser import FuncTestCaseParser +else: + from FuncTestCaseParser import FuncTestCaseParser + + +# This class defines a complete listener for a parse tree produced by FuncTestCaseParser. +class FuncTestCaseParserListener(ParseTreeListener): + # Enter a parse tree produced by FuncTestCaseParser#doc. + def enterDoc(self, ctx: FuncTestCaseParser.DocContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#doc. + def exitDoc(self, ctx: FuncTestCaseParser.DocContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#header. + def enterHeader(self, ctx: FuncTestCaseParser.HeaderContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#header. + def exitHeader(self, ctx: FuncTestCaseParser.HeaderContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#version. + def enterVersion(self, ctx: FuncTestCaseParser.VersionContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#version. + def exitVersion(self, ctx: FuncTestCaseParser.VersionContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#include. + def enterInclude(self, ctx: FuncTestCaseParser.IncludeContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#include. + def exitInclude(self, ctx: FuncTestCaseParser.IncludeContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#testGroupDescription. + def enterTestGroupDescription( + self, ctx: FuncTestCaseParser.TestGroupDescriptionContext + ): + pass + + # Exit a parse tree produced by FuncTestCaseParser#testGroupDescription. + def exitTestGroupDescription( + self, ctx: FuncTestCaseParser.TestGroupDescriptionContext + ): + pass + + # Enter a parse tree produced by FuncTestCaseParser#testCase. + def enterTestCase(self, ctx: FuncTestCaseParser.TestCaseContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#testCase. + def exitTestCase(self, ctx: FuncTestCaseParser.TestCaseContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#testGroup. + def enterTestGroup(self, ctx: FuncTestCaseParser.TestGroupContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#testGroup. + def exitTestGroup(self, ctx: FuncTestCaseParser.TestGroupContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#arguments. + def enterArguments(self, ctx: FuncTestCaseParser.ArgumentsContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#arguments. + def exitArguments(self, ctx: FuncTestCaseParser.ArgumentsContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#result. + def enterResult(self, ctx: FuncTestCaseParser.ResultContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#result. + def exitResult(self, ctx: FuncTestCaseParser.ResultContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#argument. + def enterArgument(self, ctx: FuncTestCaseParser.ArgumentContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#argument. + def exitArgument(self, ctx: FuncTestCaseParser.ArgumentContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#numericLiteral. + def enterNumericLiteral(self, ctx: FuncTestCaseParser.NumericLiteralContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#numericLiteral. + def exitNumericLiteral(self, ctx: FuncTestCaseParser.NumericLiteralContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#nullArg. + def enterNullArg(self, ctx: FuncTestCaseParser.NullArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#nullArg. + def exitNullArg(self, ctx: FuncTestCaseParser.NullArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i8Arg. + def enterI8Arg(self, ctx: FuncTestCaseParser.I8ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i8Arg. + def exitI8Arg(self, ctx: FuncTestCaseParser.I8ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i16Arg. + def enterI16Arg(self, ctx: FuncTestCaseParser.I16ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i16Arg. + def exitI16Arg(self, ctx: FuncTestCaseParser.I16ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i32Arg. + def enterI32Arg(self, ctx: FuncTestCaseParser.I32ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i32Arg. + def exitI32Arg(self, ctx: FuncTestCaseParser.I32ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i64Arg. + def enterI64Arg(self, ctx: FuncTestCaseParser.I64ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i64Arg. + def exitI64Arg(self, ctx: FuncTestCaseParser.I64ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fp32Arg. + def enterFp32Arg(self, ctx: FuncTestCaseParser.Fp32ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fp32Arg. + def exitFp32Arg(self, ctx: FuncTestCaseParser.Fp32ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fp64Arg. + def enterFp64Arg(self, ctx: FuncTestCaseParser.Fp64ArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fp64Arg. + def exitFp64Arg(self, ctx: FuncTestCaseParser.Fp64ArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#decimalArg. + def enterDecimalArg(self, ctx: FuncTestCaseParser.DecimalArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#decimalArg. + def exitDecimalArg(self, ctx: FuncTestCaseParser.DecimalArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#booleanArg. + def enterBooleanArg(self, ctx: FuncTestCaseParser.BooleanArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#booleanArg. + def exitBooleanArg(self, ctx: FuncTestCaseParser.BooleanArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#stringArg. + def enterStringArg(self, ctx: FuncTestCaseParser.StringArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#stringArg. + def exitStringArg(self, ctx: FuncTestCaseParser.StringArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#dateArg. + def enterDateArg(self, ctx: FuncTestCaseParser.DateArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#dateArg. + def exitDateArg(self, ctx: FuncTestCaseParser.DateArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timeArg. + def enterTimeArg(self, ctx: FuncTestCaseParser.TimeArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timeArg. + def exitTimeArg(self, ctx: FuncTestCaseParser.TimeArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timestampArg. + def enterTimestampArg(self, ctx: FuncTestCaseParser.TimestampArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timestampArg. + def exitTimestampArg(self, ctx: FuncTestCaseParser.TimestampArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timestampTzArg. + def enterTimestampTzArg(self, ctx: FuncTestCaseParser.TimestampTzArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timestampTzArg. + def exitTimestampTzArg(self, ctx: FuncTestCaseParser.TimestampTzArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalYearArg. + def enterIntervalYearArg(self, ctx: FuncTestCaseParser.IntervalYearArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalYearArg. + def exitIntervalYearArg(self, ctx: FuncTestCaseParser.IntervalYearArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalDayArg. + def enterIntervalDayArg(self, ctx: FuncTestCaseParser.IntervalDayArgContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalDayArg. + def exitIntervalDayArg(self, ctx: FuncTestCaseParser.IntervalDayArgContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalYearLiteral. + def enterIntervalYearLiteral( + self, ctx: FuncTestCaseParser.IntervalYearLiteralContext + ): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalYearLiteral. + def exitIntervalYearLiteral( + self, ctx: FuncTestCaseParser.IntervalYearLiteralContext + ): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalDayLiteral. + def enterIntervalDayLiteral( + self, ctx: FuncTestCaseParser.IntervalDayLiteralContext + ): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalDayLiteral. + def exitIntervalDayLiteral(self, ctx: FuncTestCaseParser.IntervalDayLiteralContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timeInterval. + def enterTimeInterval(self, ctx: FuncTestCaseParser.TimeIntervalContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timeInterval. + def exitTimeInterval(self, ctx: FuncTestCaseParser.TimeIntervalContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#datatype. + def enterDatatype(self, ctx: FuncTestCaseParser.DatatypeContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#datatype. + def exitDatatype(self, ctx: FuncTestCaseParser.DatatypeContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#Boolean. + def enterBoolean(self, ctx: FuncTestCaseParser.BooleanContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#Boolean. + def exitBoolean(self, ctx: FuncTestCaseParser.BooleanContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i8. + def enterI8(self, ctx: FuncTestCaseParser.I8Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i8. + def exitI8(self, ctx: FuncTestCaseParser.I8Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i16. + def enterI16(self, ctx: FuncTestCaseParser.I16Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i16. + def exitI16(self, ctx: FuncTestCaseParser.I16Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i32. + def enterI32(self, ctx: FuncTestCaseParser.I32Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i32. + def exitI32(self, ctx: FuncTestCaseParser.I32Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#i64. + def enterI64(self, ctx: FuncTestCaseParser.I64Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#i64. + def exitI64(self, ctx: FuncTestCaseParser.I64Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fp32. + def enterFp32(self, ctx: FuncTestCaseParser.Fp32Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fp32. + def exitFp32(self, ctx: FuncTestCaseParser.Fp32Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fp64. + def enterFp64(self, ctx: FuncTestCaseParser.Fp64Context): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fp64. + def exitFp64(self, ctx: FuncTestCaseParser.Fp64Context): + pass + + # Enter a parse tree produced by FuncTestCaseParser#string. + def enterString(self, ctx: FuncTestCaseParser.StringContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#string. + def exitString(self, ctx: FuncTestCaseParser.StringContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#binary. + def enterBinary(self, ctx: FuncTestCaseParser.BinaryContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#binary. + def exitBinary(self, ctx: FuncTestCaseParser.BinaryContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timestamp. + def enterTimestamp(self, ctx: FuncTestCaseParser.TimestampContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timestamp. + def exitTimestamp(self, ctx: FuncTestCaseParser.TimestampContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#timestampTz. + def enterTimestampTz(self, ctx: FuncTestCaseParser.TimestampTzContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#timestampTz. + def exitTimestampTz(self, ctx: FuncTestCaseParser.TimestampTzContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#date. + def enterDate(self, ctx: FuncTestCaseParser.DateContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#date. + def exitDate(self, ctx: FuncTestCaseParser.DateContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#time. + def enterTime(self, ctx: FuncTestCaseParser.TimeContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#time. + def exitTime(self, ctx: FuncTestCaseParser.TimeContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalDay. + def enterIntervalDay(self, ctx: FuncTestCaseParser.IntervalDayContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalDay. + def exitIntervalDay(self, ctx: FuncTestCaseParser.IntervalDayContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#intervalYear. + def enterIntervalYear(self, ctx: FuncTestCaseParser.IntervalYearContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#intervalYear. + def exitIntervalYear(self, ctx: FuncTestCaseParser.IntervalYearContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#uuid. + def enterUuid(self, ctx: FuncTestCaseParser.UuidContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#uuid. + def exitUuid(self, ctx: FuncTestCaseParser.UuidContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#userDefined. + def enterUserDefined(self, ctx: FuncTestCaseParser.UserDefinedContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#userDefined. + def exitUserDefined(self, ctx: FuncTestCaseParser.UserDefinedContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fixedChar. + def enterFixedChar(self, ctx: FuncTestCaseParser.FixedCharContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fixedChar. + def exitFixedChar(self, ctx: FuncTestCaseParser.FixedCharContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#varChar. + def enterVarChar(self, ctx: FuncTestCaseParser.VarCharContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#varChar. + def exitVarChar(self, ctx: FuncTestCaseParser.VarCharContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#fixedBinary. + def enterFixedBinary(self, ctx: FuncTestCaseParser.FixedBinaryContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#fixedBinary. + def exitFixedBinary(self, ctx: FuncTestCaseParser.FixedBinaryContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#decimal. + def enterDecimal(self, ctx: FuncTestCaseParser.DecimalContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#decimal. + def exitDecimal(self, ctx: FuncTestCaseParser.DecimalContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#precisionTimestamp. + def enterPrecisionTimestamp( + self, ctx: FuncTestCaseParser.PrecisionTimestampContext + ): + pass + + # Exit a parse tree produced by FuncTestCaseParser#precisionTimestamp. + def exitPrecisionTimestamp(self, ctx: FuncTestCaseParser.PrecisionTimestampContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#precisionTimestampTZ. + def enterPrecisionTimestampTZ( + self, ctx: FuncTestCaseParser.PrecisionTimestampTZContext + ): + pass + + # Exit a parse tree produced by FuncTestCaseParser#precisionTimestampTZ. + def exitPrecisionTimestampTZ( + self, ctx: FuncTestCaseParser.PrecisionTimestampTZContext + ): + pass + + # Enter a parse tree produced by FuncTestCaseParser#parameterizedType. + def enterParameterizedType(self, ctx: FuncTestCaseParser.ParameterizedTypeContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#parameterizedType. + def exitParameterizedType(self, ctx: FuncTestCaseParser.ParameterizedTypeContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#integerLiteral. + def enterIntegerLiteral(self, ctx: FuncTestCaseParser.IntegerLiteralContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#integerLiteral. + def exitIntegerLiteral(self, ctx: FuncTestCaseParser.IntegerLiteralContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#substraitError. + def enterSubstraitError(self, ctx: FuncTestCaseParser.SubstraitErrorContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#substraitError. + def exitSubstraitError(self, ctx: FuncTestCaseParser.SubstraitErrorContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#func_option. + def enterFunc_option(self, ctx: FuncTestCaseParser.Func_optionContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#func_option. + def exitFunc_option(self, ctx: FuncTestCaseParser.Func_optionContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#option_name. + def enterOption_name(self, ctx: FuncTestCaseParser.Option_nameContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#option_name. + def exitOption_name(self, ctx: FuncTestCaseParser.Option_nameContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#option_value. + def enterOption_value(self, ctx: FuncTestCaseParser.Option_valueContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#option_value. + def exitOption_value(self, ctx: FuncTestCaseParser.Option_valueContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#func_options. + def enterFunc_options(self, ctx: FuncTestCaseParser.Func_optionsContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#func_options. + def exitFunc_options(self, ctx: FuncTestCaseParser.Func_optionsContext): + pass + + +del FuncTestCaseParser diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py new file mode 100644 index 000000000..034848b49 --- /dev/null +++ b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py @@ -0,0 +1,269 @@ +# SPDX-License-Identifier: Apache-2.0 +# Generated from FuncTestCaseParser.g4 by ANTLR 4.13.2 +from antlr4 import ParseTreeVisitor + +if "." in __name__: + from .FuncTestCaseParser import FuncTestCaseParser +else: + from FuncTestCaseParser import FuncTestCaseParser + +# This class defines a complete generic visitor for a parse tree produced by FuncTestCaseParser. + + +class FuncTestCaseParserVisitor(ParseTreeVisitor): + # Visit a parse tree produced by FuncTestCaseParser#doc. + def visitDoc(self, ctx: FuncTestCaseParser.DocContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#header. + def visitHeader(self, ctx: FuncTestCaseParser.HeaderContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#version. + def visitVersion(self, ctx: FuncTestCaseParser.VersionContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#include. + def visitInclude(self, ctx: FuncTestCaseParser.IncludeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#testGroupDescription. + def visitTestGroupDescription( + self, ctx: FuncTestCaseParser.TestGroupDescriptionContext + ): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#testCase. + def visitTestCase(self, ctx: FuncTestCaseParser.TestCaseContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#testGroup. + def visitTestGroup(self, ctx: FuncTestCaseParser.TestGroupContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#arguments. + def visitArguments(self, ctx: FuncTestCaseParser.ArgumentsContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#result. + def visitResult(self, ctx: FuncTestCaseParser.ResultContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#argument. + def visitArgument(self, ctx: FuncTestCaseParser.ArgumentContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#numericLiteral. + def visitNumericLiteral(self, ctx: FuncTestCaseParser.NumericLiteralContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#nullArg. + def visitNullArg(self, ctx: FuncTestCaseParser.NullArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i8Arg. + def visitI8Arg(self, ctx: FuncTestCaseParser.I8ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i16Arg. + def visitI16Arg(self, ctx: FuncTestCaseParser.I16ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i32Arg. + def visitI32Arg(self, ctx: FuncTestCaseParser.I32ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i64Arg. + def visitI64Arg(self, ctx: FuncTestCaseParser.I64ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fp32Arg. + def visitFp32Arg(self, ctx: FuncTestCaseParser.Fp32ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fp64Arg. + def visitFp64Arg(self, ctx: FuncTestCaseParser.Fp64ArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#decimalArg. + def visitDecimalArg(self, ctx: FuncTestCaseParser.DecimalArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#booleanArg. + def visitBooleanArg(self, ctx: FuncTestCaseParser.BooleanArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#stringArg. + def visitStringArg(self, ctx: FuncTestCaseParser.StringArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#dateArg. + def visitDateArg(self, ctx: FuncTestCaseParser.DateArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timeArg. + def visitTimeArg(self, ctx: FuncTestCaseParser.TimeArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timestampArg. + def visitTimestampArg(self, ctx: FuncTestCaseParser.TimestampArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timestampTzArg. + def visitTimestampTzArg(self, ctx: FuncTestCaseParser.TimestampTzArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalYearArg. + def visitIntervalYearArg(self, ctx: FuncTestCaseParser.IntervalYearArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalDayArg. + def visitIntervalDayArg(self, ctx: FuncTestCaseParser.IntervalDayArgContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalYearLiteral. + def visitIntervalYearLiteral( + self, ctx: FuncTestCaseParser.IntervalYearLiteralContext + ): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalDayLiteral. + def visitIntervalDayLiteral( + self, ctx: FuncTestCaseParser.IntervalDayLiteralContext + ): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timeInterval. + def visitTimeInterval(self, ctx: FuncTestCaseParser.TimeIntervalContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#datatype. + def visitDatatype(self, ctx: FuncTestCaseParser.DatatypeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#Boolean. + def visitBoolean(self, ctx: FuncTestCaseParser.BooleanContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i8. + def visitI8(self, ctx: FuncTestCaseParser.I8Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i16. + def visitI16(self, ctx: FuncTestCaseParser.I16Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i32. + def visitI32(self, ctx: FuncTestCaseParser.I32Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#i64. + def visitI64(self, ctx: FuncTestCaseParser.I64Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fp32. + def visitFp32(self, ctx: FuncTestCaseParser.Fp32Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fp64. + def visitFp64(self, ctx: FuncTestCaseParser.Fp64Context): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#string. + def visitString(self, ctx: FuncTestCaseParser.StringContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#binary. + def visitBinary(self, ctx: FuncTestCaseParser.BinaryContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timestamp. + def visitTimestamp(self, ctx: FuncTestCaseParser.TimestampContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#timestampTz. + def visitTimestampTz(self, ctx: FuncTestCaseParser.TimestampTzContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#date. + def visitDate(self, ctx: FuncTestCaseParser.DateContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#time. + def visitTime(self, ctx: FuncTestCaseParser.TimeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalDay. + def visitIntervalDay(self, ctx: FuncTestCaseParser.IntervalDayContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#intervalYear. + def visitIntervalYear(self, ctx: FuncTestCaseParser.IntervalYearContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#uuid. + def visitUuid(self, ctx: FuncTestCaseParser.UuidContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#userDefined. + def visitUserDefined(self, ctx: FuncTestCaseParser.UserDefinedContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fixedChar. + def visitFixedChar(self, ctx: FuncTestCaseParser.FixedCharContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#varChar. + def visitVarChar(self, ctx: FuncTestCaseParser.VarCharContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#fixedBinary. + def visitFixedBinary(self, ctx: FuncTestCaseParser.FixedBinaryContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#decimal. + def visitDecimal(self, ctx: FuncTestCaseParser.DecimalContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#precisionTimestamp. + def visitPrecisionTimestamp( + self, ctx: FuncTestCaseParser.PrecisionTimestampContext + ): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#precisionTimestampTZ. + def visitPrecisionTimestampTZ( + self, ctx: FuncTestCaseParser.PrecisionTimestampTZContext + ): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#parameterizedType. + def visitParameterizedType(self, ctx: FuncTestCaseParser.ParameterizedTypeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#integerLiteral. + def visitIntegerLiteral(self, ctx: FuncTestCaseParser.IntegerLiteralContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#substraitError. + def visitSubstraitError(self, ctx: FuncTestCaseParser.SubstraitErrorContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#func_option. + def visitFunc_option(self, ctx: FuncTestCaseParser.Func_optionContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#option_name. + def visitOption_name(self, ctx: FuncTestCaseParser.Option_nameContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#option_value. + def visitOption_value(self, ctx: FuncTestCaseParser.Option_valueContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#func_options. + def visitFunc_options(self, ctx: FuncTestCaseParser.Func_optionsContext): + return self.visitChildren(ctx) + + +del FuncTestCaseParser diff --git a/tests/coverage/antlr_parser/SubstraitLexer.interp b/tests/coverage/antlr_parser/SubstraitLexer.interp new file mode 100644 index 000000000..cb67ea7cf --- /dev/null +++ b/tests/coverage/antlr_parser/SubstraitLexer.interp @@ -0,0 +1,231 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'::' +null +'<' +'>' +'(' +')' +'[' +']' +',' +'=' +':' +'?' +'#' +'.' + +token symbolic names: +null +LineComment +BlockComment +Whitespace +If +Then +Else +Boolean +I8 +I16 +I32 +I64 +FP32 +FP64 +String +Binary +Timestamp +Timestamp_TZ +Date +Time +Interval_Year +Interval_Day +UUID +Decimal +Precision_Timestamp +Precision_Timestamp_TZ +FixedChar +VarChar +FixedBinary +Struct +NStruct +List +Map +ANY +UserDefined +Geometry +Bool +Str +VBin +Ts +TsTZ +IYear +IDay +Dec +PTs +PTsTZ +FChar +VChar +FBin +DOUBLE_COLON +IDENTIFIER +O_ANGLE_BRACKET +C_ANGLE_BRACKET +OPAREN +CPAREN +OBRACKET +CBRACKET +COMMA +EQ +COLON +QMARK +HASH +DOT + +rule names: +LineComment +BlockComment +Whitespace +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +DIGIT +INTEGER +If +Then +Else +Boolean +I8 +I16 +I32 +I64 +FP32 +FP64 +String +Binary +Timestamp +Timestamp_TZ +Date +Time +Interval_Year +Interval_Day +UUID +Decimal +Precision_Timestamp +Precision_Timestamp_TZ +FixedChar +VarChar +FixedBinary +Struct +NStruct +List +Map +ANY +UserDefined +Geometry +Bool +Str +VBin +Ts +TsTZ +IYear +IDay +Dec +PTs +PTsTZ +FChar +VChar +FBin +DOUBLE_COLON +IDENTIFIER +O_ANGLE_BRACKET +C_ANGLE_BRACKET +OPAREN +CPAREN +OBRACKET +CBRACKET +COMMA +EQ +COLON +QMARK +HASH +DOT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 62, 630, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 186, 8, 0, 10, 0, 12, 0, 189, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 198, 8, 1, 11, 1, 12, 1, 199, 1, 1, 3, 1, 203, 8, 1, 1, 1, 5, 1, 206, 8, 1, 10, 1, 12, 1, 209, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 2, 217, 8, 2, 11, 2, 12, 2, 218, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 5, 30, 280, 8, 30, 10, 30, 12, 30, 283, 9, 30, 3, 30, 285, 8, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 5, 77, 602, 8, 77, 10, 77, 12, 77, 605, 9, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 0, 0, 90, 1, 1, 3, 2, 5, 3, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0, 25, 0, 27, 0, 29, 0, 31, 0, 33, 0, 35, 0, 37, 0, 39, 0, 41, 0, 43, 0, 45, 0, 47, 0, 49, 0, 51, 0, 53, 0, 55, 0, 57, 0, 59, 0, 61, 0, 63, 4, 65, 5, 67, 6, 69, 7, 71, 8, 73, 9, 75, 10, 77, 11, 79, 12, 81, 13, 83, 14, 85, 15, 87, 16, 89, 17, 91, 18, 93, 19, 95, 20, 97, 21, 99, 22, 101, 23, 103, 24, 105, 25, 107, 26, 109, 27, 111, 28, 113, 29, 115, 30, 117, 31, 119, 32, 121, 33, 123, 34, 125, 35, 127, 36, 129, 37, 131, 38, 133, 39, 135, 40, 137, 41, 139, 42, 141, 43, 143, 44, 145, 45, 147, 46, 149, 47, 151, 48, 153, 49, 155, 50, 157, 51, 159, 52, 161, 53, 163, 54, 165, 55, 167, 56, 169, 57, 171, 58, 173, 59, 175, 60, 177, 61, 179, 62, 1, 0, 34, 2, 0, 10, 10, 13, 13, 1, 0, 42, 42, 2, 0, 42, 42, 47, 47, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 1, 0, 48, 57, 1, 0, 49, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 609, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 1, 181, 1, 0, 0, 0, 3, 192, 1, 0, 0, 0, 5, 216, 1, 0, 0, 0, 7, 222, 1, 0, 0, 0, 9, 224, 1, 0, 0, 0, 11, 226, 1, 0, 0, 0, 13, 228, 1, 0, 0, 0, 15, 230, 1, 0, 0, 0, 17, 232, 1, 0, 0, 0, 19, 234, 1, 0, 0, 0, 21, 236, 1, 0, 0, 0, 23, 238, 1, 0, 0, 0, 25, 240, 1, 0, 0, 0, 27, 242, 1, 0, 0, 0, 29, 244, 1, 0, 0, 0, 31, 246, 1, 0, 0, 0, 33, 248, 1, 0, 0, 0, 35, 250, 1, 0, 0, 0, 37, 252, 1, 0, 0, 0, 39, 254, 1, 0, 0, 0, 41, 256, 1, 0, 0, 0, 43, 258, 1, 0, 0, 0, 45, 260, 1, 0, 0, 0, 47, 262, 1, 0, 0, 0, 49, 264, 1, 0, 0, 0, 51, 266, 1, 0, 0, 0, 53, 268, 1, 0, 0, 0, 55, 270, 1, 0, 0, 0, 57, 272, 1, 0, 0, 0, 59, 274, 1, 0, 0, 0, 61, 284, 1, 0, 0, 0, 63, 286, 1, 0, 0, 0, 65, 289, 1, 0, 0, 0, 67, 294, 1, 0, 0, 0, 69, 299, 1, 0, 0, 0, 71, 307, 1, 0, 0, 0, 73, 310, 1, 0, 0, 0, 75, 314, 1, 0, 0, 0, 77, 318, 1, 0, 0, 0, 79, 322, 1, 0, 0, 0, 81, 327, 1, 0, 0, 0, 83, 332, 1, 0, 0, 0, 85, 339, 1, 0, 0, 0, 87, 346, 1, 0, 0, 0, 89, 356, 1, 0, 0, 0, 91, 369, 1, 0, 0, 0, 93, 374, 1, 0, 0, 0, 95, 379, 1, 0, 0, 0, 97, 393, 1, 0, 0, 0, 99, 406, 1, 0, 0, 0, 101, 411, 1, 0, 0, 0, 103, 419, 1, 0, 0, 0, 105, 439, 1, 0, 0, 0, 107, 462, 1, 0, 0, 0, 109, 472, 1, 0, 0, 0, 111, 480, 1, 0, 0, 0, 113, 492, 1, 0, 0, 0, 115, 499, 1, 0, 0, 0, 117, 507, 1, 0, 0, 0, 119, 512, 1, 0, 0, 0, 121, 516, 1, 0, 0, 0, 123, 520, 1, 0, 0, 0, 125, 523, 1, 0, 0, 0, 127, 532, 1, 0, 0, 0, 129, 537, 1, 0, 0, 0, 131, 541, 1, 0, 0, 0, 133, 546, 1, 0, 0, 0, 135, 549, 1, 0, 0, 0, 137, 554, 1, 0, 0, 0, 139, 560, 1, 0, 0, 0, 141, 565, 1, 0, 0, 0, 143, 569, 1, 0, 0, 0, 145, 573, 1, 0, 0, 0, 147, 579, 1, 0, 0, 0, 149, 585, 1, 0, 0, 0, 151, 591, 1, 0, 0, 0, 153, 596, 1, 0, 0, 0, 155, 599, 1, 0, 0, 0, 157, 606, 1, 0, 0, 0, 159, 608, 1, 0, 0, 0, 161, 610, 1, 0, 0, 0, 163, 612, 1, 0, 0, 0, 165, 614, 1, 0, 0, 0, 167, 616, 1, 0, 0, 0, 169, 618, 1, 0, 0, 0, 171, 620, 1, 0, 0, 0, 173, 622, 1, 0, 0, 0, 175, 624, 1, 0, 0, 0, 177, 626, 1, 0, 0, 0, 179, 628, 1, 0, 0, 0, 181, 182, 5, 47, 0, 0, 182, 183, 5, 47, 0, 0, 183, 187, 1, 0, 0, 0, 184, 186, 8, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 6, 0, 0, 0, 191, 2, 1, 0, 0, 0, 192, 193, 5, 47, 0, 0, 193, 194, 5, 42, 0, 0, 194, 202, 1, 0, 0, 0, 195, 203, 8, 1, 0, 0, 196, 198, 5, 42, 0, 0, 197, 196, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 203, 8, 2, 0, 0, 202, 195, 1, 0, 0, 0, 202, 197, 1, 0, 0, 0, 203, 207, 1, 0, 0, 0, 204, 206, 5, 42, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 210, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 210, 211, 5, 42, 0, 0, 211, 212, 5, 47, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 6, 1, 0, 0, 214, 4, 1, 0, 0, 0, 215, 217, 7, 3, 0, 0, 216, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 221, 6, 2, 0, 0, 221, 6, 1, 0, 0, 0, 222, 223, 7, 4, 0, 0, 223, 8, 1, 0, 0, 0, 224, 225, 7, 5, 0, 0, 225, 10, 1, 0, 0, 0, 226, 227, 7, 6, 0, 0, 227, 12, 1, 0, 0, 0, 228, 229, 7, 7, 0, 0, 229, 14, 1, 0, 0, 0, 230, 231, 7, 8, 0, 0, 231, 16, 1, 0, 0, 0, 232, 233, 7, 9, 0, 0, 233, 18, 1, 0, 0, 0, 234, 235, 7, 10, 0, 0, 235, 20, 1, 0, 0, 0, 236, 237, 7, 11, 0, 0, 237, 22, 1, 0, 0, 0, 238, 239, 7, 12, 0, 0, 239, 24, 1, 0, 0, 0, 240, 241, 7, 13, 0, 0, 241, 26, 1, 0, 0, 0, 242, 243, 7, 14, 0, 0, 243, 28, 1, 0, 0, 0, 244, 245, 7, 15, 0, 0, 245, 30, 1, 0, 0, 0, 246, 247, 7, 16, 0, 0, 247, 32, 1, 0, 0, 0, 248, 249, 7, 17, 0, 0, 249, 34, 1, 0, 0, 0, 250, 251, 7, 18, 0, 0, 251, 36, 1, 0, 0, 0, 252, 253, 7, 19, 0, 0, 253, 38, 1, 0, 0, 0, 254, 255, 7, 20, 0, 0, 255, 40, 1, 0, 0, 0, 256, 257, 7, 21, 0, 0, 257, 42, 1, 0, 0, 0, 258, 259, 7, 22, 0, 0, 259, 44, 1, 0, 0, 0, 260, 261, 7, 23, 0, 0, 261, 46, 1, 0, 0, 0, 262, 263, 7, 24, 0, 0, 263, 48, 1, 0, 0, 0, 264, 265, 7, 25, 0, 0, 265, 50, 1, 0, 0, 0, 266, 267, 7, 26, 0, 0, 267, 52, 1, 0, 0, 0, 268, 269, 7, 27, 0, 0, 269, 54, 1, 0, 0, 0, 270, 271, 7, 28, 0, 0, 271, 56, 1, 0, 0, 0, 272, 273, 7, 29, 0, 0, 273, 58, 1, 0, 0, 0, 274, 275, 7, 30, 0, 0, 275, 60, 1, 0, 0, 0, 276, 285, 5, 48, 0, 0, 277, 281, 7, 31, 0, 0, 278, 280, 7, 30, 0, 0, 279, 278, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 285, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 276, 1, 0, 0, 0, 284, 277, 1, 0, 0, 0, 285, 62, 1, 0, 0, 0, 286, 287, 3, 23, 11, 0, 287, 288, 3, 17, 8, 0, 288, 64, 1, 0, 0, 0, 289, 290, 3, 45, 22, 0, 290, 291, 3, 21, 10, 0, 291, 292, 3, 15, 7, 0, 292, 293, 3, 33, 16, 0, 293, 66, 1, 0, 0, 0, 294, 295, 3, 15, 7, 0, 295, 296, 3, 29, 14, 0, 296, 297, 3, 43, 21, 0, 297, 298, 3, 15, 7, 0, 298, 68, 1, 0, 0, 0, 299, 300, 3, 9, 4, 0, 300, 301, 3, 35, 17, 0, 301, 302, 3, 35, 17, 0, 302, 303, 3, 29, 14, 0, 303, 304, 3, 15, 7, 0, 304, 305, 3, 7, 3, 0, 305, 306, 3, 33, 16, 0, 306, 70, 1, 0, 0, 0, 307, 308, 3, 23, 11, 0, 308, 309, 5, 56, 0, 0, 309, 72, 1, 0, 0, 0, 310, 311, 3, 23, 11, 0, 311, 312, 5, 49, 0, 0, 312, 313, 5, 54, 0, 0, 313, 74, 1, 0, 0, 0, 314, 315, 3, 23, 11, 0, 315, 316, 5, 51, 0, 0, 316, 317, 5, 50, 0, 0, 317, 76, 1, 0, 0, 0, 318, 319, 3, 23, 11, 0, 319, 320, 5, 54, 0, 0, 320, 321, 5, 52, 0, 0, 321, 78, 1, 0, 0, 0, 322, 323, 3, 17, 8, 0, 323, 324, 3, 37, 18, 0, 324, 325, 5, 51, 0, 0, 325, 326, 5, 50, 0, 0, 326, 80, 1, 0, 0, 0, 327, 328, 3, 17, 8, 0, 328, 329, 3, 37, 18, 0, 329, 330, 5, 54, 0, 0, 330, 331, 5, 52, 0, 0, 331, 82, 1, 0, 0, 0, 332, 333, 3, 43, 21, 0, 333, 334, 3, 45, 22, 0, 334, 335, 3, 41, 20, 0, 335, 336, 3, 23, 11, 0, 336, 337, 3, 33, 16, 0, 337, 338, 3, 19, 9, 0, 338, 84, 1, 0, 0, 0, 339, 340, 3, 9, 4, 0, 340, 341, 3, 23, 11, 0, 341, 342, 3, 33, 16, 0, 342, 343, 3, 7, 3, 0, 343, 344, 3, 41, 20, 0, 344, 345, 3, 55, 27, 0, 345, 86, 1, 0, 0, 0, 346, 347, 3, 45, 22, 0, 347, 348, 3, 23, 11, 0, 348, 349, 3, 31, 15, 0, 349, 350, 3, 15, 7, 0, 350, 351, 3, 43, 21, 0, 351, 352, 3, 45, 22, 0, 352, 353, 3, 7, 3, 0, 353, 354, 3, 31, 15, 0, 354, 355, 3, 37, 18, 0, 355, 88, 1, 0, 0, 0, 356, 357, 3, 45, 22, 0, 357, 358, 3, 23, 11, 0, 358, 359, 3, 31, 15, 0, 359, 360, 3, 15, 7, 0, 360, 361, 3, 43, 21, 0, 361, 362, 3, 45, 22, 0, 362, 363, 3, 7, 3, 0, 363, 364, 3, 31, 15, 0, 364, 365, 3, 37, 18, 0, 365, 366, 5, 95, 0, 0, 366, 367, 3, 45, 22, 0, 367, 368, 3, 57, 28, 0, 368, 90, 1, 0, 0, 0, 369, 370, 3, 13, 6, 0, 370, 371, 3, 7, 3, 0, 371, 372, 3, 45, 22, 0, 372, 373, 3, 15, 7, 0, 373, 92, 1, 0, 0, 0, 374, 375, 3, 45, 22, 0, 375, 376, 3, 23, 11, 0, 376, 377, 3, 31, 15, 0, 377, 378, 3, 15, 7, 0, 378, 94, 1, 0, 0, 0, 379, 380, 3, 23, 11, 0, 380, 381, 3, 33, 16, 0, 381, 382, 3, 45, 22, 0, 382, 383, 3, 15, 7, 0, 383, 384, 3, 41, 20, 0, 384, 385, 3, 49, 24, 0, 385, 386, 3, 7, 3, 0, 386, 387, 3, 29, 14, 0, 387, 388, 5, 95, 0, 0, 388, 389, 3, 55, 27, 0, 389, 390, 3, 15, 7, 0, 390, 391, 3, 7, 3, 0, 391, 392, 3, 41, 20, 0, 392, 96, 1, 0, 0, 0, 393, 394, 3, 23, 11, 0, 394, 395, 3, 33, 16, 0, 395, 396, 3, 45, 22, 0, 396, 397, 3, 15, 7, 0, 397, 398, 3, 41, 20, 0, 398, 399, 3, 49, 24, 0, 399, 400, 3, 7, 3, 0, 400, 401, 3, 29, 14, 0, 401, 402, 5, 95, 0, 0, 402, 403, 3, 13, 6, 0, 403, 404, 3, 7, 3, 0, 404, 405, 3, 55, 27, 0, 405, 98, 1, 0, 0, 0, 406, 407, 3, 47, 23, 0, 407, 408, 3, 47, 23, 0, 408, 409, 3, 23, 11, 0, 409, 410, 3, 13, 6, 0, 410, 100, 1, 0, 0, 0, 411, 412, 3, 13, 6, 0, 412, 413, 3, 15, 7, 0, 413, 414, 3, 11, 5, 0, 414, 415, 3, 23, 11, 0, 415, 416, 3, 31, 15, 0, 416, 417, 3, 7, 3, 0, 417, 418, 3, 29, 14, 0, 418, 102, 1, 0, 0, 0, 419, 420, 3, 37, 18, 0, 420, 421, 3, 41, 20, 0, 421, 422, 3, 15, 7, 0, 422, 423, 3, 11, 5, 0, 423, 424, 3, 23, 11, 0, 424, 425, 3, 43, 21, 0, 425, 426, 3, 23, 11, 0, 426, 427, 3, 35, 17, 0, 427, 428, 3, 33, 16, 0, 428, 429, 5, 95, 0, 0, 429, 430, 3, 45, 22, 0, 430, 431, 3, 23, 11, 0, 431, 432, 3, 31, 15, 0, 432, 433, 3, 15, 7, 0, 433, 434, 3, 43, 21, 0, 434, 435, 3, 45, 22, 0, 435, 436, 3, 7, 3, 0, 436, 437, 3, 31, 15, 0, 437, 438, 3, 37, 18, 0, 438, 104, 1, 0, 0, 0, 439, 440, 3, 37, 18, 0, 440, 441, 3, 41, 20, 0, 441, 442, 3, 15, 7, 0, 442, 443, 3, 11, 5, 0, 443, 444, 3, 23, 11, 0, 444, 445, 3, 43, 21, 0, 445, 446, 3, 23, 11, 0, 446, 447, 3, 35, 17, 0, 447, 448, 3, 33, 16, 0, 448, 449, 5, 95, 0, 0, 449, 450, 3, 45, 22, 0, 450, 451, 3, 23, 11, 0, 451, 452, 3, 31, 15, 0, 452, 453, 3, 15, 7, 0, 453, 454, 3, 43, 21, 0, 454, 455, 3, 45, 22, 0, 455, 456, 3, 7, 3, 0, 456, 457, 3, 31, 15, 0, 457, 458, 3, 37, 18, 0, 458, 459, 5, 95, 0, 0, 459, 460, 3, 45, 22, 0, 460, 461, 3, 57, 28, 0, 461, 106, 1, 0, 0, 0, 462, 463, 3, 17, 8, 0, 463, 464, 3, 23, 11, 0, 464, 465, 3, 53, 26, 0, 465, 466, 3, 15, 7, 0, 466, 467, 3, 13, 6, 0, 467, 468, 3, 11, 5, 0, 468, 469, 3, 21, 10, 0, 469, 470, 3, 7, 3, 0, 470, 471, 3, 41, 20, 0, 471, 108, 1, 0, 0, 0, 472, 473, 3, 49, 24, 0, 473, 474, 3, 7, 3, 0, 474, 475, 3, 41, 20, 0, 475, 476, 3, 11, 5, 0, 476, 477, 3, 21, 10, 0, 477, 478, 3, 7, 3, 0, 478, 479, 3, 41, 20, 0, 479, 110, 1, 0, 0, 0, 480, 481, 3, 17, 8, 0, 481, 482, 3, 23, 11, 0, 482, 483, 3, 53, 26, 0, 483, 484, 3, 15, 7, 0, 484, 485, 3, 13, 6, 0, 485, 486, 3, 9, 4, 0, 486, 487, 3, 23, 11, 0, 487, 488, 3, 33, 16, 0, 488, 489, 3, 7, 3, 0, 489, 490, 3, 41, 20, 0, 490, 491, 3, 55, 27, 0, 491, 112, 1, 0, 0, 0, 492, 493, 3, 43, 21, 0, 493, 494, 3, 45, 22, 0, 494, 495, 3, 41, 20, 0, 495, 496, 3, 47, 23, 0, 496, 497, 3, 11, 5, 0, 497, 498, 3, 45, 22, 0, 498, 114, 1, 0, 0, 0, 499, 500, 3, 33, 16, 0, 500, 501, 3, 43, 21, 0, 501, 502, 3, 45, 22, 0, 502, 503, 3, 41, 20, 0, 503, 504, 3, 47, 23, 0, 504, 505, 3, 11, 5, 0, 505, 506, 3, 45, 22, 0, 506, 116, 1, 0, 0, 0, 507, 508, 3, 29, 14, 0, 508, 509, 3, 23, 11, 0, 509, 510, 3, 43, 21, 0, 510, 511, 3, 45, 22, 0, 511, 118, 1, 0, 0, 0, 512, 513, 3, 31, 15, 0, 513, 514, 3, 7, 3, 0, 514, 515, 3, 37, 18, 0, 515, 120, 1, 0, 0, 0, 516, 517, 3, 7, 3, 0, 517, 518, 3, 33, 16, 0, 518, 519, 3, 55, 27, 0, 519, 122, 1, 0, 0, 0, 520, 521, 3, 47, 23, 0, 521, 522, 5, 33, 0, 0, 522, 124, 1, 0, 0, 0, 523, 524, 3, 19, 9, 0, 524, 525, 3, 15, 7, 0, 525, 526, 3, 35, 17, 0, 526, 527, 3, 31, 15, 0, 527, 528, 3, 15, 7, 0, 528, 529, 3, 45, 22, 0, 529, 530, 3, 41, 20, 0, 530, 531, 3, 55, 27, 0, 531, 126, 1, 0, 0, 0, 532, 533, 3, 9, 4, 0, 533, 534, 3, 35, 17, 0, 534, 535, 3, 35, 17, 0, 535, 536, 3, 29, 14, 0, 536, 128, 1, 0, 0, 0, 537, 538, 3, 43, 21, 0, 538, 539, 3, 45, 22, 0, 539, 540, 3, 41, 20, 0, 540, 130, 1, 0, 0, 0, 541, 542, 3, 49, 24, 0, 542, 543, 3, 9, 4, 0, 543, 544, 3, 23, 11, 0, 544, 545, 3, 33, 16, 0, 545, 132, 1, 0, 0, 0, 546, 547, 3, 45, 22, 0, 547, 548, 3, 43, 21, 0, 548, 134, 1, 0, 0, 0, 549, 550, 3, 45, 22, 0, 550, 551, 3, 43, 21, 0, 551, 552, 3, 45, 22, 0, 552, 553, 3, 57, 28, 0, 553, 136, 1, 0, 0, 0, 554, 555, 3, 23, 11, 0, 555, 556, 3, 55, 27, 0, 556, 557, 3, 15, 7, 0, 557, 558, 3, 7, 3, 0, 558, 559, 3, 41, 20, 0, 559, 138, 1, 0, 0, 0, 560, 561, 3, 23, 11, 0, 561, 562, 3, 13, 6, 0, 562, 563, 3, 7, 3, 0, 563, 564, 3, 55, 27, 0, 564, 140, 1, 0, 0, 0, 565, 566, 3, 13, 6, 0, 566, 567, 3, 15, 7, 0, 567, 568, 3, 11, 5, 0, 568, 142, 1, 0, 0, 0, 569, 570, 3, 37, 18, 0, 570, 571, 3, 45, 22, 0, 571, 572, 3, 43, 21, 0, 572, 144, 1, 0, 0, 0, 573, 574, 3, 37, 18, 0, 574, 575, 3, 45, 22, 0, 575, 576, 3, 43, 21, 0, 576, 577, 3, 45, 22, 0, 577, 578, 3, 57, 28, 0, 578, 146, 1, 0, 0, 0, 579, 580, 3, 17, 8, 0, 580, 581, 3, 11, 5, 0, 581, 582, 3, 21, 10, 0, 582, 583, 3, 7, 3, 0, 583, 584, 3, 41, 20, 0, 584, 148, 1, 0, 0, 0, 585, 586, 3, 49, 24, 0, 586, 587, 3, 11, 5, 0, 587, 588, 3, 21, 10, 0, 588, 589, 3, 7, 3, 0, 589, 590, 3, 41, 20, 0, 590, 150, 1, 0, 0, 0, 591, 592, 3, 17, 8, 0, 592, 593, 3, 9, 4, 0, 593, 594, 3, 23, 11, 0, 594, 595, 3, 33, 16, 0, 595, 152, 1, 0, 0, 0, 596, 597, 5, 58, 0, 0, 597, 598, 5, 58, 0, 0, 598, 154, 1, 0, 0, 0, 599, 603, 7, 32, 0, 0, 600, 602, 7, 33, 0, 0, 601, 600, 1, 0, 0, 0, 602, 605, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 156, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 606, 607, 5, 60, 0, 0, 607, 158, 1, 0, 0, 0, 608, 609, 5, 62, 0, 0, 609, 160, 1, 0, 0, 0, 610, 611, 5, 40, 0, 0, 611, 162, 1, 0, 0, 0, 612, 613, 5, 41, 0, 0, 613, 164, 1, 0, 0, 0, 614, 615, 5, 91, 0, 0, 615, 166, 1, 0, 0, 0, 616, 617, 5, 93, 0, 0, 617, 168, 1, 0, 0, 0, 618, 619, 5, 44, 0, 0, 619, 170, 1, 0, 0, 0, 620, 621, 5, 61, 0, 0, 621, 172, 1, 0, 0, 0, 622, 623, 5, 58, 0, 0, 623, 174, 1, 0, 0, 0, 624, 625, 5, 63, 0, 0, 625, 176, 1, 0, 0, 0, 626, 627, 5, 35, 0, 0, 627, 178, 1, 0, 0, 0, 628, 629, 5, 46, 0, 0, 629, 180, 1, 0, 0, 0, 9, 0, 187, 199, 202, 207, 218, 281, 284, 603, 1, 0, 1, 0] \ No newline at end of file diff --git a/tests/coverage/antlr_parser/SubstraitLexer.py b/tests/coverage/antlr_parser/SubstraitLexer.py new file mode 100644 index 000000000..a995ac595 --- /dev/null +++ b/tests/coverage/antlr_parser/SubstraitLexer.py @@ -0,0 +1,5619 @@ +# SPDX-License-Identifier: Apache-2.0 +# Generated from SubstraitLexer.g4 by ANTLR 4.13.2 +from antlr4 import ( + ATNDeserializer, + DFA, + Lexer, + LexerATNSimulator, + PredictionContextCache, +) +import sys + +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +def serializedATN(): + return [ + 4, + 0, + 62, + 630, + 6, + -1, + 2, + 0, + 7, + 0, + 2, + 1, + 7, + 1, + 2, + 2, + 7, + 2, + 2, + 3, + 7, + 3, + 2, + 4, + 7, + 4, + 2, + 5, + 7, + 5, + 2, + 6, + 7, + 6, + 2, + 7, + 7, + 7, + 2, + 8, + 7, + 8, + 2, + 9, + 7, + 9, + 2, + 10, + 7, + 10, + 2, + 11, + 7, + 11, + 2, + 12, + 7, + 12, + 2, + 13, + 7, + 13, + 2, + 14, + 7, + 14, + 2, + 15, + 7, + 15, + 2, + 16, + 7, + 16, + 2, + 17, + 7, + 17, + 2, + 18, + 7, + 18, + 2, + 19, + 7, + 19, + 2, + 20, + 7, + 20, + 2, + 21, + 7, + 21, + 2, + 22, + 7, + 22, + 2, + 23, + 7, + 23, + 2, + 24, + 7, + 24, + 2, + 25, + 7, + 25, + 2, + 26, + 7, + 26, + 2, + 27, + 7, + 27, + 2, + 28, + 7, + 28, + 2, + 29, + 7, + 29, + 2, + 30, + 7, + 30, + 2, + 31, + 7, + 31, + 2, + 32, + 7, + 32, + 2, + 33, + 7, + 33, + 2, + 34, + 7, + 34, + 2, + 35, + 7, + 35, + 2, + 36, + 7, + 36, + 2, + 37, + 7, + 37, + 2, + 38, + 7, + 38, + 2, + 39, + 7, + 39, + 2, + 40, + 7, + 40, + 2, + 41, + 7, + 41, + 2, + 42, + 7, + 42, + 2, + 43, + 7, + 43, + 2, + 44, + 7, + 44, + 2, + 45, + 7, + 45, + 2, + 46, + 7, + 46, + 2, + 47, + 7, + 47, + 2, + 48, + 7, + 48, + 2, + 49, + 7, + 49, + 2, + 50, + 7, + 50, + 2, + 51, + 7, + 51, + 2, + 52, + 7, + 52, + 2, + 53, + 7, + 53, + 2, + 54, + 7, + 54, + 2, + 55, + 7, + 55, + 2, + 56, + 7, + 56, + 2, + 57, + 7, + 57, + 2, + 58, + 7, + 58, + 2, + 59, + 7, + 59, + 2, + 60, + 7, + 60, + 2, + 61, + 7, + 61, + 2, + 62, + 7, + 62, + 2, + 63, + 7, + 63, + 2, + 64, + 7, + 64, + 2, + 65, + 7, + 65, + 2, + 66, + 7, + 66, + 2, + 67, + 7, + 67, + 2, + 68, + 7, + 68, + 2, + 69, + 7, + 69, + 2, + 70, + 7, + 70, + 2, + 71, + 7, + 71, + 2, + 72, + 7, + 72, + 2, + 73, + 7, + 73, + 2, + 74, + 7, + 74, + 2, + 75, + 7, + 75, + 2, + 76, + 7, + 76, + 2, + 77, + 7, + 77, + 2, + 78, + 7, + 78, + 2, + 79, + 7, + 79, + 2, + 80, + 7, + 80, + 2, + 81, + 7, + 81, + 2, + 82, + 7, + 82, + 2, + 83, + 7, + 83, + 2, + 84, + 7, + 84, + 2, + 85, + 7, + 85, + 2, + 86, + 7, + 86, + 2, + 87, + 7, + 87, + 2, + 88, + 7, + 88, + 2, + 89, + 7, + 89, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 5, + 0, + 186, + 8, + 0, + 10, + 0, + 12, + 0, + 189, + 9, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 4, + 1, + 198, + 8, + 1, + 11, + 1, + 12, + 1, + 199, + 1, + 1, + 3, + 1, + 203, + 8, + 1, + 1, + 1, + 5, + 1, + 206, + 8, + 1, + 10, + 1, + 12, + 1, + 209, + 9, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 4, + 2, + 217, + 8, + 2, + 11, + 2, + 12, + 2, + 218, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 3, + 1, + 4, + 1, + 4, + 1, + 5, + 1, + 5, + 1, + 6, + 1, + 6, + 1, + 7, + 1, + 7, + 1, + 8, + 1, + 8, + 1, + 9, + 1, + 9, + 1, + 10, + 1, + 10, + 1, + 11, + 1, + 11, + 1, + 12, + 1, + 12, + 1, + 13, + 1, + 13, + 1, + 14, + 1, + 14, + 1, + 15, + 1, + 15, + 1, + 16, + 1, + 16, + 1, + 17, + 1, + 17, + 1, + 18, + 1, + 18, + 1, + 19, + 1, + 19, + 1, + 20, + 1, + 20, + 1, + 21, + 1, + 21, + 1, + 22, + 1, + 22, + 1, + 23, + 1, + 23, + 1, + 24, + 1, + 24, + 1, + 25, + 1, + 25, + 1, + 26, + 1, + 26, + 1, + 27, + 1, + 27, + 1, + 28, + 1, + 28, + 1, + 29, + 1, + 29, + 1, + 30, + 1, + 30, + 1, + 30, + 5, + 30, + 280, + 8, + 30, + 10, + 30, + 12, + 30, + 283, + 9, + 30, + 3, + 30, + 285, + 8, + 30, + 1, + 31, + 1, + 31, + 1, + 31, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 32, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 33, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 34, + 1, + 35, + 1, + 35, + 1, + 35, + 1, + 36, + 1, + 36, + 1, + 36, + 1, + 36, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 37, + 1, + 38, + 1, + 38, + 1, + 38, + 1, + 38, + 1, + 39, + 1, + 39, + 1, + 39, + 1, + 39, + 1, + 39, + 1, + 40, + 1, + 40, + 1, + 40, + 1, + 40, + 1, + 40, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 41, + 1, + 42, + 1, + 42, + 1, + 42, + 1, + 42, + 1, + 42, + 1, + 42, + 1, + 42, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 43, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 44, + 1, + 45, + 1, + 45, + 1, + 45, + 1, + 45, + 1, + 45, + 1, + 46, + 1, + 46, + 1, + 46, + 1, + 46, + 1, + 46, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 47, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 48, + 1, + 49, + 1, + 49, + 1, + 49, + 1, + 49, + 1, + 49, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 50, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 51, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 52, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 53, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 54, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 55, + 1, + 56, + 1, + 56, + 1, + 56, + 1, + 56, + 1, + 56, + 1, + 56, + 1, + 56, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 57, + 1, + 58, + 1, + 58, + 1, + 58, + 1, + 58, + 1, + 58, + 1, + 59, + 1, + 59, + 1, + 59, + 1, + 59, + 1, + 60, + 1, + 60, + 1, + 60, + 1, + 60, + 1, + 61, + 1, + 61, + 1, + 61, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 62, + 1, + 63, + 1, + 63, + 1, + 63, + 1, + 63, + 1, + 63, + 1, + 64, + 1, + 64, + 1, + 64, + 1, + 64, + 1, + 65, + 1, + 65, + 1, + 65, + 1, + 65, + 1, + 65, + 1, + 66, + 1, + 66, + 1, + 66, + 1, + 67, + 1, + 67, + 1, + 67, + 1, + 67, + 1, + 67, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 68, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 69, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 70, + 1, + 71, + 1, + 71, + 1, + 71, + 1, + 71, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 72, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 73, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 74, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 75, + 1, + 76, + 1, + 76, + 1, + 76, + 1, + 77, + 1, + 77, + 5, + 77, + 602, + 8, + 77, + 10, + 77, + 12, + 77, + 605, + 9, + 77, + 1, + 78, + 1, + 78, + 1, + 79, + 1, + 79, + 1, + 80, + 1, + 80, + 1, + 81, + 1, + 81, + 1, + 82, + 1, + 82, + 1, + 83, + 1, + 83, + 1, + 84, + 1, + 84, + 1, + 85, + 1, + 85, + 1, + 86, + 1, + 86, + 1, + 87, + 1, + 87, + 1, + 88, + 1, + 88, + 1, + 89, + 1, + 89, + 0, + 0, + 90, + 1, + 1, + 3, + 2, + 5, + 3, + 7, + 0, + 9, + 0, + 11, + 0, + 13, + 0, + 15, + 0, + 17, + 0, + 19, + 0, + 21, + 0, + 23, + 0, + 25, + 0, + 27, + 0, + 29, + 0, + 31, + 0, + 33, + 0, + 35, + 0, + 37, + 0, + 39, + 0, + 41, + 0, + 43, + 0, + 45, + 0, + 47, + 0, + 49, + 0, + 51, + 0, + 53, + 0, + 55, + 0, + 57, + 0, + 59, + 0, + 61, + 0, + 63, + 4, + 65, + 5, + 67, + 6, + 69, + 7, + 71, + 8, + 73, + 9, + 75, + 10, + 77, + 11, + 79, + 12, + 81, + 13, + 83, + 14, + 85, + 15, + 87, + 16, + 89, + 17, + 91, + 18, + 93, + 19, + 95, + 20, + 97, + 21, + 99, + 22, + 101, + 23, + 103, + 24, + 105, + 25, + 107, + 26, + 109, + 27, + 111, + 28, + 113, + 29, + 115, + 30, + 117, + 31, + 119, + 32, + 121, + 33, + 123, + 34, + 125, + 35, + 127, + 36, + 129, + 37, + 131, + 38, + 133, + 39, + 135, + 40, + 137, + 41, + 139, + 42, + 141, + 43, + 143, + 44, + 145, + 45, + 147, + 46, + 149, + 47, + 151, + 48, + 153, + 49, + 155, + 50, + 157, + 51, + 159, + 52, + 161, + 53, + 163, + 54, + 165, + 55, + 167, + 56, + 169, + 57, + 171, + 58, + 173, + 59, + 175, + 60, + 177, + 61, + 179, + 62, + 1, + 0, + 34, + 2, + 0, + 10, + 10, + 13, + 13, + 1, + 0, + 42, + 42, + 2, + 0, + 42, + 42, + 47, + 47, + 3, + 0, + 9, + 10, + 13, + 13, + 32, + 32, + 2, + 0, + 65, + 65, + 97, + 97, + 2, + 0, + 66, + 66, + 98, + 98, + 2, + 0, + 67, + 67, + 99, + 99, + 2, + 0, + 68, + 68, + 100, + 100, + 2, + 0, + 69, + 69, + 101, + 101, + 2, + 0, + 70, + 70, + 102, + 102, + 2, + 0, + 71, + 71, + 103, + 103, + 2, + 0, + 72, + 72, + 104, + 104, + 2, + 0, + 73, + 73, + 105, + 105, + 2, + 0, + 74, + 74, + 106, + 106, + 2, + 0, + 75, + 75, + 107, + 107, + 2, + 0, + 76, + 76, + 108, + 108, + 2, + 0, + 77, + 77, + 109, + 109, + 2, + 0, + 78, + 78, + 110, + 110, + 2, + 0, + 79, + 79, + 111, + 111, + 2, + 0, + 80, + 80, + 112, + 112, + 2, + 0, + 81, + 81, + 113, + 113, + 2, + 0, + 82, + 82, + 114, + 114, + 2, + 0, + 83, + 83, + 115, + 115, + 2, + 0, + 84, + 84, + 116, + 116, + 2, + 0, + 85, + 85, + 117, + 117, + 2, + 0, + 86, + 86, + 118, + 118, + 2, + 0, + 87, + 87, + 119, + 119, + 2, + 0, + 88, + 88, + 120, + 120, + 2, + 0, + 89, + 89, + 121, + 121, + 2, + 0, + 90, + 90, + 122, + 122, + 1, + 0, + 48, + 57, + 1, + 0, + 49, + 57, + 3, + 0, + 65, + 90, + 95, + 95, + 97, + 122, + 4, + 0, + 48, + 57, + 65, + 90, + 95, + 95, + 97, + 122, + 609, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 3, + 1, + 0, + 0, + 0, + 0, + 5, + 1, + 0, + 0, + 0, + 0, + 63, + 1, + 0, + 0, + 0, + 0, + 65, + 1, + 0, + 0, + 0, + 0, + 67, + 1, + 0, + 0, + 0, + 0, + 69, + 1, + 0, + 0, + 0, + 0, + 71, + 1, + 0, + 0, + 0, + 0, + 73, + 1, + 0, + 0, + 0, + 0, + 75, + 1, + 0, + 0, + 0, + 0, + 77, + 1, + 0, + 0, + 0, + 0, + 79, + 1, + 0, + 0, + 0, + 0, + 81, + 1, + 0, + 0, + 0, + 0, + 83, + 1, + 0, + 0, + 0, + 0, + 85, + 1, + 0, + 0, + 0, + 0, + 87, + 1, + 0, + 0, + 0, + 0, + 89, + 1, + 0, + 0, + 0, + 0, + 91, + 1, + 0, + 0, + 0, + 0, + 93, + 1, + 0, + 0, + 0, + 0, + 95, + 1, + 0, + 0, + 0, + 0, + 97, + 1, + 0, + 0, + 0, + 0, + 99, + 1, + 0, + 0, + 0, + 0, + 101, + 1, + 0, + 0, + 0, + 0, + 103, + 1, + 0, + 0, + 0, + 0, + 105, + 1, + 0, + 0, + 0, + 0, + 107, + 1, + 0, + 0, + 0, + 0, + 109, + 1, + 0, + 0, + 0, + 0, + 111, + 1, + 0, + 0, + 0, + 0, + 113, + 1, + 0, + 0, + 0, + 0, + 115, + 1, + 0, + 0, + 0, + 0, + 117, + 1, + 0, + 0, + 0, + 0, + 119, + 1, + 0, + 0, + 0, + 0, + 121, + 1, + 0, + 0, + 0, + 0, + 123, + 1, + 0, + 0, + 0, + 0, + 125, + 1, + 0, + 0, + 0, + 0, + 127, + 1, + 0, + 0, + 0, + 0, + 129, + 1, + 0, + 0, + 0, + 0, + 131, + 1, + 0, + 0, + 0, + 0, + 133, + 1, + 0, + 0, + 0, + 0, + 135, + 1, + 0, + 0, + 0, + 0, + 137, + 1, + 0, + 0, + 0, + 0, + 139, + 1, + 0, + 0, + 0, + 0, + 141, + 1, + 0, + 0, + 0, + 0, + 143, + 1, + 0, + 0, + 0, + 0, + 145, + 1, + 0, + 0, + 0, + 0, + 147, + 1, + 0, + 0, + 0, + 0, + 149, + 1, + 0, + 0, + 0, + 0, + 151, + 1, + 0, + 0, + 0, + 0, + 153, + 1, + 0, + 0, + 0, + 0, + 155, + 1, + 0, + 0, + 0, + 0, + 157, + 1, + 0, + 0, + 0, + 0, + 159, + 1, + 0, + 0, + 0, + 0, + 161, + 1, + 0, + 0, + 0, + 0, + 163, + 1, + 0, + 0, + 0, + 0, + 165, + 1, + 0, + 0, + 0, + 0, + 167, + 1, + 0, + 0, + 0, + 0, + 169, + 1, + 0, + 0, + 0, + 0, + 171, + 1, + 0, + 0, + 0, + 0, + 173, + 1, + 0, + 0, + 0, + 0, + 175, + 1, + 0, + 0, + 0, + 0, + 177, + 1, + 0, + 0, + 0, + 0, + 179, + 1, + 0, + 0, + 0, + 1, + 181, + 1, + 0, + 0, + 0, + 3, + 192, + 1, + 0, + 0, + 0, + 5, + 216, + 1, + 0, + 0, + 0, + 7, + 222, + 1, + 0, + 0, + 0, + 9, + 224, + 1, + 0, + 0, + 0, + 11, + 226, + 1, + 0, + 0, + 0, + 13, + 228, + 1, + 0, + 0, + 0, + 15, + 230, + 1, + 0, + 0, + 0, + 17, + 232, + 1, + 0, + 0, + 0, + 19, + 234, + 1, + 0, + 0, + 0, + 21, + 236, + 1, + 0, + 0, + 0, + 23, + 238, + 1, + 0, + 0, + 0, + 25, + 240, + 1, + 0, + 0, + 0, + 27, + 242, + 1, + 0, + 0, + 0, + 29, + 244, + 1, + 0, + 0, + 0, + 31, + 246, + 1, + 0, + 0, + 0, + 33, + 248, + 1, + 0, + 0, + 0, + 35, + 250, + 1, + 0, + 0, + 0, + 37, + 252, + 1, + 0, + 0, + 0, + 39, + 254, + 1, + 0, + 0, + 0, + 41, + 256, + 1, + 0, + 0, + 0, + 43, + 258, + 1, + 0, + 0, + 0, + 45, + 260, + 1, + 0, + 0, + 0, + 47, + 262, + 1, + 0, + 0, + 0, + 49, + 264, + 1, + 0, + 0, + 0, + 51, + 266, + 1, + 0, + 0, + 0, + 53, + 268, + 1, + 0, + 0, + 0, + 55, + 270, + 1, + 0, + 0, + 0, + 57, + 272, + 1, + 0, + 0, + 0, + 59, + 274, + 1, + 0, + 0, + 0, + 61, + 284, + 1, + 0, + 0, + 0, + 63, + 286, + 1, + 0, + 0, + 0, + 65, + 289, + 1, + 0, + 0, + 0, + 67, + 294, + 1, + 0, + 0, + 0, + 69, + 299, + 1, + 0, + 0, + 0, + 71, + 307, + 1, + 0, + 0, + 0, + 73, + 310, + 1, + 0, + 0, + 0, + 75, + 314, + 1, + 0, + 0, + 0, + 77, + 318, + 1, + 0, + 0, + 0, + 79, + 322, + 1, + 0, + 0, + 0, + 81, + 327, + 1, + 0, + 0, + 0, + 83, + 332, + 1, + 0, + 0, + 0, + 85, + 339, + 1, + 0, + 0, + 0, + 87, + 346, + 1, + 0, + 0, + 0, + 89, + 356, + 1, + 0, + 0, + 0, + 91, + 369, + 1, + 0, + 0, + 0, + 93, + 374, + 1, + 0, + 0, + 0, + 95, + 379, + 1, + 0, + 0, + 0, + 97, + 393, + 1, + 0, + 0, + 0, + 99, + 406, + 1, + 0, + 0, + 0, + 101, + 411, + 1, + 0, + 0, + 0, + 103, + 419, + 1, + 0, + 0, + 0, + 105, + 439, + 1, + 0, + 0, + 0, + 107, + 462, + 1, + 0, + 0, + 0, + 109, + 472, + 1, + 0, + 0, + 0, + 111, + 480, + 1, + 0, + 0, + 0, + 113, + 492, + 1, + 0, + 0, + 0, + 115, + 499, + 1, + 0, + 0, + 0, + 117, + 507, + 1, + 0, + 0, + 0, + 119, + 512, + 1, + 0, + 0, + 0, + 121, + 516, + 1, + 0, + 0, + 0, + 123, + 520, + 1, + 0, + 0, + 0, + 125, + 523, + 1, + 0, + 0, + 0, + 127, + 532, + 1, + 0, + 0, + 0, + 129, + 537, + 1, + 0, + 0, + 0, + 131, + 541, + 1, + 0, + 0, + 0, + 133, + 546, + 1, + 0, + 0, + 0, + 135, + 549, + 1, + 0, + 0, + 0, + 137, + 554, + 1, + 0, + 0, + 0, + 139, + 560, + 1, + 0, + 0, + 0, + 141, + 565, + 1, + 0, + 0, + 0, + 143, + 569, + 1, + 0, + 0, + 0, + 145, + 573, + 1, + 0, + 0, + 0, + 147, + 579, + 1, + 0, + 0, + 0, + 149, + 585, + 1, + 0, + 0, + 0, + 151, + 591, + 1, + 0, + 0, + 0, + 153, + 596, + 1, + 0, + 0, + 0, + 155, + 599, + 1, + 0, + 0, + 0, + 157, + 606, + 1, + 0, + 0, + 0, + 159, + 608, + 1, + 0, + 0, + 0, + 161, + 610, + 1, + 0, + 0, + 0, + 163, + 612, + 1, + 0, + 0, + 0, + 165, + 614, + 1, + 0, + 0, + 0, + 167, + 616, + 1, + 0, + 0, + 0, + 169, + 618, + 1, + 0, + 0, + 0, + 171, + 620, + 1, + 0, + 0, + 0, + 173, + 622, + 1, + 0, + 0, + 0, + 175, + 624, + 1, + 0, + 0, + 0, + 177, + 626, + 1, + 0, + 0, + 0, + 179, + 628, + 1, + 0, + 0, + 0, + 181, + 182, + 5, + 47, + 0, + 0, + 182, + 183, + 5, + 47, + 0, + 0, + 183, + 187, + 1, + 0, + 0, + 0, + 184, + 186, + 8, + 0, + 0, + 0, + 185, + 184, + 1, + 0, + 0, + 0, + 186, + 189, + 1, + 0, + 0, + 0, + 187, + 185, + 1, + 0, + 0, + 0, + 187, + 188, + 1, + 0, + 0, + 0, + 188, + 190, + 1, + 0, + 0, + 0, + 189, + 187, + 1, + 0, + 0, + 0, + 190, + 191, + 6, + 0, + 0, + 0, + 191, + 2, + 1, + 0, + 0, + 0, + 192, + 193, + 5, + 47, + 0, + 0, + 193, + 194, + 5, + 42, + 0, + 0, + 194, + 202, + 1, + 0, + 0, + 0, + 195, + 203, + 8, + 1, + 0, + 0, + 196, + 198, + 5, + 42, + 0, + 0, + 197, + 196, + 1, + 0, + 0, + 0, + 198, + 199, + 1, + 0, + 0, + 0, + 199, + 197, + 1, + 0, + 0, + 0, + 199, + 200, + 1, + 0, + 0, + 0, + 200, + 201, + 1, + 0, + 0, + 0, + 201, + 203, + 8, + 2, + 0, + 0, + 202, + 195, + 1, + 0, + 0, + 0, + 202, + 197, + 1, + 0, + 0, + 0, + 203, + 207, + 1, + 0, + 0, + 0, + 204, + 206, + 5, + 42, + 0, + 0, + 205, + 204, + 1, + 0, + 0, + 0, + 206, + 209, + 1, + 0, + 0, + 0, + 207, + 205, + 1, + 0, + 0, + 0, + 207, + 208, + 1, + 0, + 0, + 0, + 208, + 210, + 1, + 0, + 0, + 0, + 209, + 207, + 1, + 0, + 0, + 0, + 210, + 211, + 5, + 42, + 0, + 0, + 211, + 212, + 5, + 47, + 0, + 0, + 212, + 213, + 1, + 0, + 0, + 0, + 213, + 214, + 6, + 1, + 0, + 0, + 214, + 4, + 1, + 0, + 0, + 0, + 215, + 217, + 7, + 3, + 0, + 0, + 216, + 215, + 1, + 0, + 0, + 0, + 217, + 218, + 1, + 0, + 0, + 0, + 218, + 216, + 1, + 0, + 0, + 0, + 218, + 219, + 1, + 0, + 0, + 0, + 219, + 220, + 1, + 0, + 0, + 0, + 220, + 221, + 6, + 2, + 0, + 0, + 221, + 6, + 1, + 0, + 0, + 0, + 222, + 223, + 7, + 4, + 0, + 0, + 223, + 8, + 1, + 0, + 0, + 0, + 224, + 225, + 7, + 5, + 0, + 0, + 225, + 10, + 1, + 0, + 0, + 0, + 226, + 227, + 7, + 6, + 0, + 0, + 227, + 12, + 1, + 0, + 0, + 0, + 228, + 229, + 7, + 7, + 0, + 0, + 229, + 14, + 1, + 0, + 0, + 0, + 230, + 231, + 7, + 8, + 0, + 0, + 231, + 16, + 1, + 0, + 0, + 0, + 232, + 233, + 7, + 9, + 0, + 0, + 233, + 18, + 1, + 0, + 0, + 0, + 234, + 235, + 7, + 10, + 0, + 0, + 235, + 20, + 1, + 0, + 0, + 0, + 236, + 237, + 7, + 11, + 0, + 0, + 237, + 22, + 1, + 0, + 0, + 0, + 238, + 239, + 7, + 12, + 0, + 0, + 239, + 24, + 1, + 0, + 0, + 0, + 240, + 241, + 7, + 13, + 0, + 0, + 241, + 26, + 1, + 0, + 0, + 0, + 242, + 243, + 7, + 14, + 0, + 0, + 243, + 28, + 1, + 0, + 0, + 0, + 244, + 245, + 7, + 15, + 0, + 0, + 245, + 30, + 1, + 0, + 0, + 0, + 246, + 247, + 7, + 16, + 0, + 0, + 247, + 32, + 1, + 0, + 0, + 0, + 248, + 249, + 7, + 17, + 0, + 0, + 249, + 34, + 1, + 0, + 0, + 0, + 250, + 251, + 7, + 18, + 0, + 0, + 251, + 36, + 1, + 0, + 0, + 0, + 252, + 253, + 7, + 19, + 0, + 0, + 253, + 38, + 1, + 0, + 0, + 0, + 254, + 255, + 7, + 20, + 0, + 0, + 255, + 40, + 1, + 0, + 0, + 0, + 256, + 257, + 7, + 21, + 0, + 0, + 257, + 42, + 1, + 0, + 0, + 0, + 258, + 259, + 7, + 22, + 0, + 0, + 259, + 44, + 1, + 0, + 0, + 0, + 260, + 261, + 7, + 23, + 0, + 0, + 261, + 46, + 1, + 0, + 0, + 0, + 262, + 263, + 7, + 24, + 0, + 0, + 263, + 48, + 1, + 0, + 0, + 0, + 264, + 265, + 7, + 25, + 0, + 0, + 265, + 50, + 1, + 0, + 0, + 0, + 266, + 267, + 7, + 26, + 0, + 0, + 267, + 52, + 1, + 0, + 0, + 0, + 268, + 269, + 7, + 27, + 0, + 0, + 269, + 54, + 1, + 0, + 0, + 0, + 270, + 271, + 7, + 28, + 0, + 0, + 271, + 56, + 1, + 0, + 0, + 0, + 272, + 273, + 7, + 29, + 0, + 0, + 273, + 58, + 1, + 0, + 0, + 0, + 274, + 275, + 7, + 30, + 0, + 0, + 275, + 60, + 1, + 0, + 0, + 0, + 276, + 285, + 5, + 48, + 0, + 0, + 277, + 281, + 7, + 31, + 0, + 0, + 278, + 280, + 7, + 30, + 0, + 0, + 279, + 278, + 1, + 0, + 0, + 0, + 280, + 283, + 1, + 0, + 0, + 0, + 281, + 279, + 1, + 0, + 0, + 0, + 281, + 282, + 1, + 0, + 0, + 0, + 282, + 285, + 1, + 0, + 0, + 0, + 283, + 281, + 1, + 0, + 0, + 0, + 284, + 276, + 1, + 0, + 0, + 0, + 284, + 277, + 1, + 0, + 0, + 0, + 285, + 62, + 1, + 0, + 0, + 0, + 286, + 287, + 3, + 23, + 11, + 0, + 287, + 288, + 3, + 17, + 8, + 0, + 288, + 64, + 1, + 0, + 0, + 0, + 289, + 290, + 3, + 45, + 22, + 0, + 290, + 291, + 3, + 21, + 10, + 0, + 291, + 292, + 3, + 15, + 7, + 0, + 292, + 293, + 3, + 33, + 16, + 0, + 293, + 66, + 1, + 0, + 0, + 0, + 294, + 295, + 3, + 15, + 7, + 0, + 295, + 296, + 3, + 29, + 14, + 0, + 296, + 297, + 3, + 43, + 21, + 0, + 297, + 298, + 3, + 15, + 7, + 0, + 298, + 68, + 1, + 0, + 0, + 0, + 299, + 300, + 3, + 9, + 4, + 0, + 300, + 301, + 3, + 35, + 17, + 0, + 301, + 302, + 3, + 35, + 17, + 0, + 302, + 303, + 3, + 29, + 14, + 0, + 303, + 304, + 3, + 15, + 7, + 0, + 304, + 305, + 3, + 7, + 3, + 0, + 305, + 306, + 3, + 33, + 16, + 0, + 306, + 70, + 1, + 0, + 0, + 0, + 307, + 308, + 3, + 23, + 11, + 0, + 308, + 309, + 5, + 56, + 0, + 0, + 309, + 72, + 1, + 0, + 0, + 0, + 310, + 311, + 3, + 23, + 11, + 0, + 311, + 312, + 5, + 49, + 0, + 0, + 312, + 313, + 5, + 54, + 0, + 0, + 313, + 74, + 1, + 0, + 0, + 0, + 314, + 315, + 3, + 23, + 11, + 0, + 315, + 316, + 5, + 51, + 0, + 0, + 316, + 317, + 5, + 50, + 0, + 0, + 317, + 76, + 1, + 0, + 0, + 0, + 318, + 319, + 3, + 23, + 11, + 0, + 319, + 320, + 5, + 54, + 0, + 0, + 320, + 321, + 5, + 52, + 0, + 0, + 321, + 78, + 1, + 0, + 0, + 0, + 322, + 323, + 3, + 17, + 8, + 0, + 323, + 324, + 3, + 37, + 18, + 0, + 324, + 325, + 5, + 51, + 0, + 0, + 325, + 326, + 5, + 50, + 0, + 0, + 326, + 80, + 1, + 0, + 0, + 0, + 327, + 328, + 3, + 17, + 8, + 0, + 328, + 329, + 3, + 37, + 18, + 0, + 329, + 330, + 5, + 54, + 0, + 0, + 330, + 331, + 5, + 52, + 0, + 0, + 331, + 82, + 1, + 0, + 0, + 0, + 332, + 333, + 3, + 43, + 21, + 0, + 333, + 334, + 3, + 45, + 22, + 0, + 334, + 335, + 3, + 41, + 20, + 0, + 335, + 336, + 3, + 23, + 11, + 0, + 336, + 337, + 3, + 33, + 16, + 0, + 337, + 338, + 3, + 19, + 9, + 0, + 338, + 84, + 1, + 0, + 0, + 0, + 339, + 340, + 3, + 9, + 4, + 0, + 340, + 341, + 3, + 23, + 11, + 0, + 341, + 342, + 3, + 33, + 16, + 0, + 342, + 343, + 3, + 7, + 3, + 0, + 343, + 344, + 3, + 41, + 20, + 0, + 344, + 345, + 3, + 55, + 27, + 0, + 345, + 86, + 1, + 0, + 0, + 0, + 346, + 347, + 3, + 45, + 22, + 0, + 347, + 348, + 3, + 23, + 11, + 0, + 348, + 349, + 3, + 31, + 15, + 0, + 349, + 350, + 3, + 15, + 7, + 0, + 350, + 351, + 3, + 43, + 21, + 0, + 351, + 352, + 3, + 45, + 22, + 0, + 352, + 353, + 3, + 7, + 3, + 0, + 353, + 354, + 3, + 31, + 15, + 0, + 354, + 355, + 3, + 37, + 18, + 0, + 355, + 88, + 1, + 0, + 0, + 0, + 356, + 357, + 3, + 45, + 22, + 0, + 357, + 358, + 3, + 23, + 11, + 0, + 358, + 359, + 3, + 31, + 15, + 0, + 359, + 360, + 3, + 15, + 7, + 0, + 360, + 361, + 3, + 43, + 21, + 0, + 361, + 362, + 3, + 45, + 22, + 0, + 362, + 363, + 3, + 7, + 3, + 0, + 363, + 364, + 3, + 31, + 15, + 0, + 364, + 365, + 3, + 37, + 18, + 0, + 365, + 366, + 5, + 95, + 0, + 0, + 366, + 367, + 3, + 45, + 22, + 0, + 367, + 368, + 3, + 57, + 28, + 0, + 368, + 90, + 1, + 0, + 0, + 0, + 369, + 370, + 3, + 13, + 6, + 0, + 370, + 371, + 3, + 7, + 3, + 0, + 371, + 372, + 3, + 45, + 22, + 0, + 372, + 373, + 3, + 15, + 7, + 0, + 373, + 92, + 1, + 0, + 0, + 0, + 374, + 375, + 3, + 45, + 22, + 0, + 375, + 376, + 3, + 23, + 11, + 0, + 376, + 377, + 3, + 31, + 15, + 0, + 377, + 378, + 3, + 15, + 7, + 0, + 378, + 94, + 1, + 0, + 0, + 0, + 379, + 380, + 3, + 23, + 11, + 0, + 380, + 381, + 3, + 33, + 16, + 0, + 381, + 382, + 3, + 45, + 22, + 0, + 382, + 383, + 3, + 15, + 7, + 0, + 383, + 384, + 3, + 41, + 20, + 0, + 384, + 385, + 3, + 49, + 24, + 0, + 385, + 386, + 3, + 7, + 3, + 0, + 386, + 387, + 3, + 29, + 14, + 0, + 387, + 388, + 5, + 95, + 0, + 0, + 388, + 389, + 3, + 55, + 27, + 0, + 389, + 390, + 3, + 15, + 7, + 0, + 390, + 391, + 3, + 7, + 3, + 0, + 391, + 392, + 3, + 41, + 20, + 0, + 392, + 96, + 1, + 0, + 0, + 0, + 393, + 394, + 3, + 23, + 11, + 0, + 394, + 395, + 3, + 33, + 16, + 0, + 395, + 396, + 3, + 45, + 22, + 0, + 396, + 397, + 3, + 15, + 7, + 0, + 397, + 398, + 3, + 41, + 20, + 0, + 398, + 399, + 3, + 49, + 24, + 0, + 399, + 400, + 3, + 7, + 3, + 0, + 400, + 401, + 3, + 29, + 14, + 0, + 401, + 402, + 5, + 95, + 0, + 0, + 402, + 403, + 3, + 13, + 6, + 0, + 403, + 404, + 3, + 7, + 3, + 0, + 404, + 405, + 3, + 55, + 27, + 0, + 405, + 98, + 1, + 0, + 0, + 0, + 406, + 407, + 3, + 47, + 23, + 0, + 407, + 408, + 3, + 47, + 23, + 0, + 408, + 409, + 3, + 23, + 11, + 0, + 409, + 410, + 3, + 13, + 6, + 0, + 410, + 100, + 1, + 0, + 0, + 0, + 411, + 412, + 3, + 13, + 6, + 0, + 412, + 413, + 3, + 15, + 7, + 0, + 413, + 414, + 3, + 11, + 5, + 0, + 414, + 415, + 3, + 23, + 11, + 0, + 415, + 416, + 3, + 31, + 15, + 0, + 416, + 417, + 3, + 7, + 3, + 0, + 417, + 418, + 3, + 29, + 14, + 0, + 418, + 102, + 1, + 0, + 0, + 0, + 419, + 420, + 3, + 37, + 18, + 0, + 420, + 421, + 3, + 41, + 20, + 0, + 421, + 422, + 3, + 15, + 7, + 0, + 422, + 423, + 3, + 11, + 5, + 0, + 423, + 424, + 3, + 23, + 11, + 0, + 424, + 425, + 3, + 43, + 21, + 0, + 425, + 426, + 3, + 23, + 11, + 0, + 426, + 427, + 3, + 35, + 17, + 0, + 427, + 428, + 3, + 33, + 16, + 0, + 428, + 429, + 5, + 95, + 0, + 0, + 429, + 430, + 3, + 45, + 22, + 0, + 430, + 431, + 3, + 23, + 11, + 0, + 431, + 432, + 3, + 31, + 15, + 0, + 432, + 433, + 3, + 15, + 7, + 0, + 433, + 434, + 3, + 43, + 21, + 0, + 434, + 435, + 3, + 45, + 22, + 0, + 435, + 436, + 3, + 7, + 3, + 0, + 436, + 437, + 3, + 31, + 15, + 0, + 437, + 438, + 3, + 37, + 18, + 0, + 438, + 104, + 1, + 0, + 0, + 0, + 439, + 440, + 3, + 37, + 18, + 0, + 440, + 441, + 3, + 41, + 20, + 0, + 441, + 442, + 3, + 15, + 7, + 0, + 442, + 443, + 3, + 11, + 5, + 0, + 443, + 444, + 3, + 23, + 11, + 0, + 444, + 445, + 3, + 43, + 21, + 0, + 445, + 446, + 3, + 23, + 11, + 0, + 446, + 447, + 3, + 35, + 17, + 0, + 447, + 448, + 3, + 33, + 16, + 0, + 448, + 449, + 5, + 95, + 0, + 0, + 449, + 450, + 3, + 45, + 22, + 0, + 450, + 451, + 3, + 23, + 11, + 0, + 451, + 452, + 3, + 31, + 15, + 0, + 452, + 453, + 3, + 15, + 7, + 0, + 453, + 454, + 3, + 43, + 21, + 0, + 454, + 455, + 3, + 45, + 22, + 0, + 455, + 456, + 3, + 7, + 3, + 0, + 456, + 457, + 3, + 31, + 15, + 0, + 457, + 458, + 3, + 37, + 18, + 0, + 458, + 459, + 5, + 95, + 0, + 0, + 459, + 460, + 3, + 45, + 22, + 0, + 460, + 461, + 3, + 57, + 28, + 0, + 461, + 106, + 1, + 0, + 0, + 0, + 462, + 463, + 3, + 17, + 8, + 0, + 463, + 464, + 3, + 23, + 11, + 0, + 464, + 465, + 3, + 53, + 26, + 0, + 465, + 466, + 3, + 15, + 7, + 0, + 466, + 467, + 3, + 13, + 6, + 0, + 467, + 468, + 3, + 11, + 5, + 0, + 468, + 469, + 3, + 21, + 10, + 0, + 469, + 470, + 3, + 7, + 3, + 0, + 470, + 471, + 3, + 41, + 20, + 0, + 471, + 108, + 1, + 0, + 0, + 0, + 472, + 473, + 3, + 49, + 24, + 0, + 473, + 474, + 3, + 7, + 3, + 0, + 474, + 475, + 3, + 41, + 20, + 0, + 475, + 476, + 3, + 11, + 5, + 0, + 476, + 477, + 3, + 21, + 10, + 0, + 477, + 478, + 3, + 7, + 3, + 0, + 478, + 479, + 3, + 41, + 20, + 0, + 479, + 110, + 1, + 0, + 0, + 0, + 480, + 481, + 3, + 17, + 8, + 0, + 481, + 482, + 3, + 23, + 11, + 0, + 482, + 483, + 3, + 53, + 26, + 0, + 483, + 484, + 3, + 15, + 7, + 0, + 484, + 485, + 3, + 13, + 6, + 0, + 485, + 486, + 3, + 9, + 4, + 0, + 486, + 487, + 3, + 23, + 11, + 0, + 487, + 488, + 3, + 33, + 16, + 0, + 488, + 489, + 3, + 7, + 3, + 0, + 489, + 490, + 3, + 41, + 20, + 0, + 490, + 491, + 3, + 55, + 27, + 0, + 491, + 112, + 1, + 0, + 0, + 0, + 492, + 493, + 3, + 43, + 21, + 0, + 493, + 494, + 3, + 45, + 22, + 0, + 494, + 495, + 3, + 41, + 20, + 0, + 495, + 496, + 3, + 47, + 23, + 0, + 496, + 497, + 3, + 11, + 5, + 0, + 497, + 498, + 3, + 45, + 22, + 0, + 498, + 114, + 1, + 0, + 0, + 0, + 499, + 500, + 3, + 33, + 16, + 0, + 500, + 501, + 3, + 43, + 21, + 0, + 501, + 502, + 3, + 45, + 22, + 0, + 502, + 503, + 3, + 41, + 20, + 0, + 503, + 504, + 3, + 47, + 23, + 0, + 504, + 505, + 3, + 11, + 5, + 0, + 505, + 506, + 3, + 45, + 22, + 0, + 506, + 116, + 1, + 0, + 0, + 0, + 507, + 508, + 3, + 29, + 14, + 0, + 508, + 509, + 3, + 23, + 11, + 0, + 509, + 510, + 3, + 43, + 21, + 0, + 510, + 511, + 3, + 45, + 22, + 0, + 511, + 118, + 1, + 0, + 0, + 0, + 512, + 513, + 3, + 31, + 15, + 0, + 513, + 514, + 3, + 7, + 3, + 0, + 514, + 515, + 3, + 37, + 18, + 0, + 515, + 120, + 1, + 0, + 0, + 0, + 516, + 517, + 3, + 7, + 3, + 0, + 517, + 518, + 3, + 33, + 16, + 0, + 518, + 519, + 3, + 55, + 27, + 0, + 519, + 122, + 1, + 0, + 0, + 0, + 520, + 521, + 3, + 47, + 23, + 0, + 521, + 522, + 5, + 33, + 0, + 0, + 522, + 124, + 1, + 0, + 0, + 0, + 523, + 524, + 3, + 19, + 9, + 0, + 524, + 525, + 3, + 15, + 7, + 0, + 525, + 526, + 3, + 35, + 17, + 0, + 526, + 527, + 3, + 31, + 15, + 0, + 527, + 528, + 3, + 15, + 7, + 0, + 528, + 529, + 3, + 45, + 22, + 0, + 529, + 530, + 3, + 41, + 20, + 0, + 530, + 531, + 3, + 55, + 27, + 0, + 531, + 126, + 1, + 0, + 0, + 0, + 532, + 533, + 3, + 9, + 4, + 0, + 533, + 534, + 3, + 35, + 17, + 0, + 534, + 535, + 3, + 35, + 17, + 0, + 535, + 536, + 3, + 29, + 14, + 0, + 536, + 128, + 1, + 0, + 0, + 0, + 537, + 538, + 3, + 43, + 21, + 0, + 538, + 539, + 3, + 45, + 22, + 0, + 539, + 540, + 3, + 41, + 20, + 0, + 540, + 130, + 1, + 0, + 0, + 0, + 541, + 542, + 3, + 49, + 24, + 0, + 542, + 543, + 3, + 9, + 4, + 0, + 543, + 544, + 3, + 23, + 11, + 0, + 544, + 545, + 3, + 33, + 16, + 0, + 545, + 132, + 1, + 0, + 0, + 0, + 546, + 547, + 3, + 45, + 22, + 0, + 547, + 548, + 3, + 43, + 21, + 0, + 548, + 134, + 1, + 0, + 0, + 0, + 549, + 550, + 3, + 45, + 22, + 0, + 550, + 551, + 3, + 43, + 21, + 0, + 551, + 552, + 3, + 45, + 22, + 0, + 552, + 553, + 3, + 57, + 28, + 0, + 553, + 136, + 1, + 0, + 0, + 0, + 554, + 555, + 3, + 23, + 11, + 0, + 555, + 556, + 3, + 55, + 27, + 0, + 556, + 557, + 3, + 15, + 7, + 0, + 557, + 558, + 3, + 7, + 3, + 0, + 558, + 559, + 3, + 41, + 20, + 0, + 559, + 138, + 1, + 0, + 0, + 0, + 560, + 561, + 3, + 23, + 11, + 0, + 561, + 562, + 3, + 13, + 6, + 0, + 562, + 563, + 3, + 7, + 3, + 0, + 563, + 564, + 3, + 55, + 27, + 0, + 564, + 140, + 1, + 0, + 0, + 0, + 565, + 566, + 3, + 13, + 6, + 0, + 566, + 567, + 3, + 15, + 7, + 0, + 567, + 568, + 3, + 11, + 5, + 0, + 568, + 142, + 1, + 0, + 0, + 0, + 569, + 570, + 3, + 37, + 18, + 0, + 570, + 571, + 3, + 45, + 22, + 0, + 571, + 572, + 3, + 43, + 21, + 0, + 572, + 144, + 1, + 0, + 0, + 0, + 573, + 574, + 3, + 37, + 18, + 0, + 574, + 575, + 3, + 45, + 22, + 0, + 575, + 576, + 3, + 43, + 21, + 0, + 576, + 577, + 3, + 45, + 22, + 0, + 577, + 578, + 3, + 57, + 28, + 0, + 578, + 146, + 1, + 0, + 0, + 0, + 579, + 580, + 3, + 17, + 8, + 0, + 580, + 581, + 3, + 11, + 5, + 0, + 581, + 582, + 3, + 21, + 10, + 0, + 582, + 583, + 3, + 7, + 3, + 0, + 583, + 584, + 3, + 41, + 20, + 0, + 584, + 148, + 1, + 0, + 0, + 0, + 585, + 586, + 3, + 49, + 24, + 0, + 586, + 587, + 3, + 11, + 5, + 0, + 587, + 588, + 3, + 21, + 10, + 0, + 588, + 589, + 3, + 7, + 3, + 0, + 589, + 590, + 3, + 41, + 20, + 0, + 590, + 150, + 1, + 0, + 0, + 0, + 591, + 592, + 3, + 17, + 8, + 0, + 592, + 593, + 3, + 9, + 4, + 0, + 593, + 594, + 3, + 23, + 11, + 0, + 594, + 595, + 3, + 33, + 16, + 0, + 595, + 152, + 1, + 0, + 0, + 0, + 596, + 597, + 5, + 58, + 0, + 0, + 597, + 598, + 5, + 58, + 0, + 0, + 598, + 154, + 1, + 0, + 0, + 0, + 599, + 603, + 7, + 32, + 0, + 0, + 600, + 602, + 7, + 33, + 0, + 0, + 601, + 600, + 1, + 0, + 0, + 0, + 602, + 605, + 1, + 0, + 0, + 0, + 603, + 601, + 1, + 0, + 0, + 0, + 603, + 604, + 1, + 0, + 0, + 0, + 604, + 156, + 1, + 0, + 0, + 0, + 605, + 603, + 1, + 0, + 0, + 0, + 606, + 607, + 5, + 60, + 0, + 0, + 607, + 158, + 1, + 0, + 0, + 0, + 608, + 609, + 5, + 62, + 0, + 0, + 609, + 160, + 1, + 0, + 0, + 0, + 610, + 611, + 5, + 40, + 0, + 0, + 611, + 162, + 1, + 0, + 0, + 0, + 612, + 613, + 5, + 41, + 0, + 0, + 613, + 164, + 1, + 0, + 0, + 0, + 614, + 615, + 5, + 91, + 0, + 0, + 615, + 166, + 1, + 0, + 0, + 0, + 616, + 617, + 5, + 93, + 0, + 0, + 617, + 168, + 1, + 0, + 0, + 0, + 618, + 619, + 5, + 44, + 0, + 0, + 619, + 170, + 1, + 0, + 0, + 0, + 620, + 621, + 5, + 61, + 0, + 0, + 621, + 172, + 1, + 0, + 0, + 0, + 622, + 623, + 5, + 58, + 0, + 0, + 623, + 174, + 1, + 0, + 0, + 0, + 624, + 625, + 5, + 63, + 0, + 0, + 625, + 176, + 1, + 0, + 0, + 0, + 626, + 627, + 5, + 35, + 0, + 0, + 627, + 178, + 1, + 0, + 0, + 0, + 628, + 629, + 5, + 46, + 0, + 0, + 629, + 180, + 1, + 0, + 0, + 0, + 9, + 0, + 187, + 199, + 202, + 207, + 218, + 281, + 284, + 603, + 1, + 0, + 1, + 0, + ] + + +class SubstraitLexer(Lexer): + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] + + LineComment = 1 + BlockComment = 2 + Whitespace = 3 + If = 4 + Then = 5 + Else = 6 + Boolean = 7 + I8 = 8 + I16 = 9 + I32 = 10 + I64 = 11 + FP32 = 12 + FP64 = 13 + String = 14 + Binary = 15 + Timestamp = 16 + Timestamp_TZ = 17 + Date = 18 + Time = 19 + Interval_Year = 20 + Interval_Day = 21 + UUID = 22 + Decimal = 23 + Precision_Timestamp = 24 + Precision_Timestamp_TZ = 25 + FixedChar = 26 + VarChar = 27 + FixedBinary = 28 + Struct = 29 + NStruct = 30 + List = 31 + Map = 32 + ANY = 33 + UserDefined = 34 + Geometry = 35 + Bool = 36 + Str = 37 + VBin = 38 + Ts = 39 + TsTZ = 40 + IYear = 41 + IDay = 42 + Dec = 43 + PTs = 44 + PTsTZ = 45 + FChar = 46 + VChar = 47 + FBin = 48 + DOUBLE_COLON = 49 + IDENTIFIER = 50 + O_ANGLE_BRACKET = 51 + C_ANGLE_BRACKET = 52 + OPAREN = 53 + CPAREN = 54 + OBRACKET = 55 + CBRACKET = 56 + COMMA = 57 + EQ = 58 + COLON = 59 + QMARK = 60 + HASH = 61 + DOT = 62 + + channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] + + modeNames = ["DEFAULT_MODE"] + + literalNames = [ + "", + "'::'", + "'<'", + "'>'", + "'('", + "')'", + "'['", + "']'", + "','", + "'='", + "':'", + "'?'", + "'#'", + "'.'", + ] + + symbolicNames = [ + "", + "LineComment", + "BlockComment", + "Whitespace", + "If", + "Then", + "Else", + "Boolean", + "I8", + "I16", + "I32", + "I64", + "FP32", + "FP64", + "String", + "Binary", + "Timestamp", + "Timestamp_TZ", + "Date", + "Time", + "Interval_Year", + "Interval_Day", + "UUID", + "Decimal", + "Precision_Timestamp", + "Precision_Timestamp_TZ", + "FixedChar", + "VarChar", + "FixedBinary", + "Struct", + "NStruct", + "List", + "Map", + "ANY", + "UserDefined", + "Geometry", + "Bool", + "Str", + "VBin", + "Ts", + "TsTZ", + "IYear", + "IDay", + "Dec", + "PTs", + "PTsTZ", + "FChar", + "VChar", + "FBin", + "DOUBLE_COLON", + "IDENTIFIER", + "O_ANGLE_BRACKET", + "C_ANGLE_BRACKET", + "OPAREN", + "CPAREN", + "OBRACKET", + "CBRACKET", + "COMMA", + "EQ", + "COLON", + "QMARK", + "HASH", + "DOT", + ] + + ruleNames = [ + "LineComment", + "BlockComment", + "Whitespace", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "DIGIT", + "INTEGER", + "If", + "Then", + "Else", + "Boolean", + "I8", + "I16", + "I32", + "I64", + "FP32", + "FP64", + "String", + "Binary", + "Timestamp", + "Timestamp_TZ", + "Date", + "Time", + "Interval_Year", + "Interval_Day", + "UUID", + "Decimal", + "Precision_Timestamp", + "Precision_Timestamp_TZ", + "FixedChar", + "VarChar", + "FixedBinary", + "Struct", + "NStruct", + "List", + "Map", + "ANY", + "UserDefined", + "Geometry", + "Bool", + "Str", + "VBin", + "Ts", + "TsTZ", + "IYear", + "IDay", + "Dec", + "PTs", + "PTsTZ", + "FChar", + "VChar", + "FBin", + "DOUBLE_COLON", + "IDENTIFIER", + "O_ANGLE_BRACKET", + "C_ANGLE_BRACKET", + "OPAREN", + "CPAREN", + "OBRACKET", + "CBRACKET", + "COMMA", + "EQ", + "COLON", + "QMARK", + "HASH", + "DOT", + ] + + grammarFileName = "SubstraitLexer.g4" + + def __init__(self, input=None, output: TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator( + self, self.atn, self.decisionsToDFA, PredictionContextCache() + ) + self._actions = None + self._predicates = None diff --git a/tests/coverage/antlr_parser/SubstraitLexer.tokens b/tests/coverage/antlr_parser/SubstraitLexer.tokens new file mode 100644 index 000000000..5cb4a606b --- /dev/null +++ b/tests/coverage/antlr_parser/SubstraitLexer.tokens @@ -0,0 +1,75 @@ +LineComment=1 +BlockComment=2 +Whitespace=3 +If=4 +Then=5 +Else=6 +Boolean=7 +I8=8 +I16=9 +I32=10 +I64=11 +FP32=12 +FP64=13 +String=14 +Binary=15 +Timestamp=16 +Timestamp_TZ=17 +Date=18 +Time=19 +Interval_Year=20 +Interval_Day=21 +UUID=22 +Decimal=23 +Precision_Timestamp=24 +Precision_Timestamp_TZ=25 +FixedChar=26 +VarChar=27 +FixedBinary=28 +Struct=29 +NStruct=30 +List=31 +Map=32 +ANY=33 +UserDefined=34 +Geometry=35 +Bool=36 +Str=37 +VBin=38 +Ts=39 +TsTZ=40 +IYear=41 +IDay=42 +Dec=43 +PTs=44 +PTsTZ=45 +FChar=46 +VChar=47 +FBin=48 +DOUBLE_COLON=49 +IDENTIFIER=50 +O_ANGLE_BRACKET=51 +C_ANGLE_BRACKET=52 +OPAREN=53 +CPAREN=54 +OBRACKET=55 +CBRACKET=56 +COMMA=57 +EQ=58 +COLON=59 +QMARK=60 +HASH=61 +DOT=62 +'::'=49 +'<'=51 +'>'=52 +'('=53 +')'=54 +'['=55 +']'=56 +','=57 +'='=58 +':'=59 +'?'=60 +'#'=61 +'.'=62 diff --git a/tests/coverage/coverage.py b/tests/coverage/coverage.py new file mode 100755 index 000000000..4f5c50a3e --- /dev/null +++ b/tests/coverage/coverage.py @@ -0,0 +1,131 @@ +# SPDX-License-Identifier: Apache-2.0 +import json +from collections import defaultdict + +from tests.coverage.case_file_parser import load_all_testcases +from tests.coverage.extensions import Extension, error, FunctionRegistry + + +class FunctionTestCoverage: + function_name: str + test_count: int + function_variant_coverage: defaultdict[str, int] + + def __init__(self, function_name): + self.function_name = function_name + self.test_count = 0 + self.function_variant_coverage = defaultdict(int) + + def update_coverage(self, function_variant, count): + self.function_variant_coverage[function_variant] += count + self.test_count += count + + def to_dict(self): + return { + "function_name": self.function_name, + "test_count": self.test_count, + "variants": [ + {"signature": variant, "test_count": count} + for variant, count in self.function_variant_coverage.items() + ], + } + + +class FileTestCoverage: + file_name: str + test_count: int + function_coverage: dict[str, FunctionTestCoverage] + + def __init__(self, file_name): + self.file_name = file_name + self.test_count = 0 + self.function_coverage = dict() + + def update_coverage(self, func_name, args, count): + key = f"{func_name}({', '.join(args)})" + if func_name not in self.function_coverage: + self.function_coverage[func_name] = FunctionTestCoverage(func_name) + self.function_coverage[func_name].update_coverage(key, count) + self.test_count += count + + def to_dict(self): + return { + "file_name": self.file_name, + "test_count": self.test_count, + "function_coverage": [ + func_coverage.to_dict() + for func_name, func_coverage in self.function_coverage.items() + ], + } + + +class TestCoverage: + file_coverage: dict[str, FileTestCoverage] + test_count: int + num_covered_variants: int + total_variants: int + + def __init__(self, ext_uris): + self.file_coverage = dict() + self.test_count = 0 + self.num_covered_variants = 0 + self.total_variants = 0 + for ext_uri in ext_uris: + self.file_coverage[ext_uri] = FileTestCoverage(ext_uri) + + def update_coverage(self, ext_uri, function, args, count): + if ext_uri not in self.file_coverage: + self.file_coverage[ext_uri] = FileTestCoverage(ext_uri) + self.file_coverage[ext_uri].update_coverage(function, args, count) + self.test_count += count + + def compute_coverage(self): + for file_coverage in self.file_coverage.values(): + for function_coverage in file_coverage.function_coverage.values(): + for test_count in function_coverage.function_variant_coverage.values(): + if test_count > 0: + self.num_covered_variants += 1 + self.total_variants += 1 + + def to_dict(self): + return { + "file_coverage": [ + file_coverage.to_dict() for file_coverage in self.file_coverage.values() + ], + "test_count": self.test_count, + "num_covered_function_variants": self.num_covered_variants, + "total_function_variants": self.total_variants, + } + + def to_json(self): + return json.dumps(self.to_dict(), indent=2) + + +def update_test_count(test_case_files: list, function_registry: FunctionRegistry): + for test_file in test_case_files: + for test_case in test_file.testcases: + function_variant = function_registry.get_function( + test_case.func_name, test_case.get_arg_types() + ) + if function_variant: + if ( + function_variant.return_type != test_case.get_return_type() + and not test_case.is_return_type_error() + ): + error( + f"Return type mismatch in function {test_case.func_name}: {function_variant.return_type} != {test_case.get_return_type()}" + ) + continue + function_variant.increment_test_count() + else: + error(f"Function not found: {test_case.func_name}({test_case.args})") + + +if __name__ == "__main__": + test_files = load_all_testcases("../cases") + function_registry = Extension.read_substrait_extensions("../../extensions") + coverage = TestCoverage(function_registry.get_extension_list()) + update_test_count(test_files, function_registry) + function_registry.fill_coverage(coverage) + coverage.compute_coverage() + print(coverage.to_json()) diff --git a/tests/coverage/extensions.py b/tests/coverage/extensions.py new file mode 100644 index 000000000..1e7aa75d0 --- /dev/null +++ b/tests/coverage/extensions.py @@ -0,0 +1,283 @@ +# SPDX-License-Identifier: Apache-2.0 +import os +import yaml + +from tests.coverage.antlr_parser.SubstraitLexer import SubstraitLexer + +enable_debug = False + + +def error(msg): + print(f"ERROR: {msg}") + + +def debug(msg): + if enable_debug: + print(f"DEBUG: {msg}") + + +def substrait_type_str(rule_num): + return SubstraitLexer.symbolicNames[rule_num].lower() + + +def build_type_to_short_type(): + rule_map = { + SubstraitLexer.I8: SubstraitLexer.I8, + SubstraitLexer.I16: SubstraitLexer.I16, + SubstraitLexer.I32: SubstraitLexer.I32, + SubstraitLexer.I64: SubstraitLexer.I64, + SubstraitLexer.FP32: SubstraitLexer.FP32, + SubstraitLexer.FP64: SubstraitLexer.FP64, + SubstraitLexer.String: SubstraitLexer.Str, + SubstraitLexer.Binary: SubstraitLexer.VBin, + SubstraitLexer.Boolean: SubstraitLexer.Bool, + SubstraitLexer.Timestamp: SubstraitLexer.Ts, + SubstraitLexer.Timestamp_TZ: SubstraitLexer.TsTZ, + SubstraitLexer.Date: SubstraitLexer.Date, + SubstraitLexer.Time: SubstraitLexer.Time, + SubstraitLexer.Interval_Year: SubstraitLexer.IYear, + SubstraitLexer.Interval_Day: SubstraitLexer.IDay, + SubstraitLexer.UUID: SubstraitLexer.UUID, + SubstraitLexer.FixedChar: SubstraitLexer.FChar, + SubstraitLexer.VarChar: SubstraitLexer.VChar, + SubstraitLexer.FixedBinary: SubstraitLexer.FBin, + SubstraitLexer.Decimal: SubstraitLexer.Dec, + SubstraitLexer.Precision_Timestamp: SubstraitLexer.PTs, + SubstraitLexer.Precision_Timestamp_TZ: SubstraitLexer.PTsTZ, + SubstraitLexer.Struct: SubstraitLexer.Struct, + SubstraitLexer.List: SubstraitLexer.List, + SubstraitLexer.Map: SubstraitLexer.Map, + SubstraitLexer.ANY: SubstraitLexer.ANY, + SubstraitLexer.Geometry: SubstraitLexer.Geometry, + } + to_short_type = { + substrait_type_str(k): substrait_type_str(v) for k, v in rule_map.items() + } + any_type = substrait_type_str(SubstraitLexer.ANY) + for i in range(1, 3): + to_short_type[f"{any_type}{i}"] = f"{any_type}{i}" + return to_short_type + + +type_to_short_type = build_type_to_short_type() +short_type_to_type = {st: lt for lt, st in type_to_short_type.items()} + + +class Extension: + @staticmethod + def get_base_uri(): + return "https://github.com/substrait-io/substrait/blob/main/extensions/" + + @staticmethod + def get_short_type(long_type): + long_type = long_type.lower().rstrip("?") + short_type = type_to_short_type.get(long_type, None) + + if short_type is None: + # remove the type parameters and try again + if "<" in long_type: + long_type = long_type[: long_type.find("<")].rstrip("?") + short_type = type_to_short_type.get(long_type, None) + if short_type is None: + if "\n" in long_type: + long_type = long_type.split("\n")[-1] + short_type = type_to_short_type.get(long_type, None) + if short_type is None: + if "!" not in long_type: + error(f"Type not found in the mapping: {long_type}") + return long_type + return short_type + + @staticmethod + def get_long_type(short_type): + if short_type.endswith("?"): + short_type = short_type[:-1] + long_type = short_type_to_type.get(short_type, None) + if long_type is None: + error(f"Type not found in the mapping: {short_type}") + return short_type + return long_type + + @staticmethod + def get_supported_kernels_from_impls(func): + overloads = [] + for impl in func["impls"]: + args = [] + if "args" in impl: + for arg in impl["args"]: + if "value" in arg: + arg_type = arg["value"] + if arg_type.endswith("?"): + arg_type = arg_type[:-1] + args.append(Extension.get_short_type(arg_type)) + else: + debug( + f"arg is not a value type for function: {func['name']} arg must be enum options {arg['options']}" + ) + args.append("str") + overloads.append( + FunctionOverload( + args, Extension.get_short_type(impl["return"]), "variadic" in impl + ) + ) + return overloads + + @staticmethod + def add_functions_to_map(func_list, function_map, suffix, extension): + dup_idx = 0 + for func in func_list: + name = func["name"] + uri = extension[5:] # strip the ../.. + if name in function_map: + debug( + f"Duplicate function name: {name} renaming to {name}_{suffix} extension: {extension}" + ) + dup_idx += 1 + name = f"{name}_dup{dup_idx}_{suffix}" + assert ( + name not in function_map + ), f"Duplicate function name: {name} renaming to {name}_{suffix} extension: {extension}" + func["overloads"] = Extension.get_supported_kernels_from_impls(func) + func["uri"] = uri + func.pop("description", None) + func.pop("impls", None) + function_map[name] = func + + @staticmethod + def read_substrait_extensions(dir_path: str): + # read files from extensions directory + extensions = [] + for root, dirs, files in os.walk(dir_path): + for file in files: + if file.endswith(".yaml") and file.startswith("functions_"): + extensions.append(os.path.join(root, file)) + + extensions.sort() + + scalar_functions = {} + aggregate_functions = {} + window_functions = {} + dependencies = {} + # convert yaml file to a python dictionary + for extension in extensions: + suffix = extension[:-5] # strip .yaml at the end of the extension + suffix = suffix[ + suffix.rfind("/") + 1 : + ] # strip the path and get the name of the extension + suffix = suffix[suffix.find("_") + 1 :] # get the suffix after the last _ + + dependencies[suffix] = Extension.get_base_uri() + extension + with open(extension, "r") as fh: + data = yaml.load(fh, Loader=yaml.FullLoader) + if "scalar_functions" in data: + Extension.add_functions_to_map( + data["scalar_functions"], scalar_functions, suffix, extension + ) + if "aggregate_functions" in data: + Extension.add_functions_to_map( + data["aggregate_functions"], + aggregate_functions, + suffix, + extension, + ) + if "window_functions" in data: + Extension.add_functions_to_map( + data["window_functions"], scalar_functions, suffix, extension + ) + + return FunctionRegistry( + scalar_functions, aggregate_functions, window_functions, dependencies + ) + + +class FunctionType: + SCALAR = 1 + AGGREGATE = 2 + WINDOW = 3 + + +class FunctionVariant: + def __init__(self, name, uri, description, args, return_type, variadic, func_type): + self.name = name + self.uri = uri + self.description = description + self.args = args + self.return_type = return_type + self.variadic = variadic + self.func_type = func_type + self.test_count = 0 + + def __str__(self): + return f"Function(name={self.name}, uri={self.uri}, description={self.description}, overloads={self.overload}, args={self.args}, result={self.result})" + + def increment_test_count(self, count=1): + self.test_count += count + + +class FunctionOverload: + def __init__(self, args, return_type, variadic): + self.args = args + self.return_type = return_type + self.variadic = variadic + + def __str__(self): + return f"FunctionOverload(args={self.args}, result={self.return_type}, variadic={self.variadic})" + + +# define function type enum + + +class FunctionRegistry: + registry = dict() + dependencies = dict() + scalar_functions = dict() + aggregate_functions = dict() + window_functions = dict() + extensions = set() + + def __init__( + self, scalar_functions, aggregate_functions, window_functions, dependencies + ): + self.dependencies = dependencies + self.scalar_functions = scalar_functions + self.aggregate_functions = aggregate_functions + self.window_functions = window_functions + self.add_functions(scalar_functions, FunctionType.SCALAR) + self.add_functions(aggregate_functions, FunctionType.AGGREGATE) + self.add_functions(window_functions, FunctionType.WINDOW) + + def add_functions(self, functions, func_type): + for func in functions.values(): + self.extensions.add(func["uri"]) + f_name = func["name"] + fun_arr = self.registry.get(f_name, []) + for overload in func["overloads"]: + function = FunctionVariant( + func["name"], + func["uri"], + "", + overload.args, + overload.return_type, + overload.variadic, + func_type, + ) + fun_arr.append(function) + self.registry[f_name] = fun_arr + + def get_function(self, name: str, args: object) -> [FunctionVariant]: + functions = self.registry.get(name, None) + if functions is None: + return None + for function in functions: + if function.args == args: + return function + + def get_extension_list(self): + return list(self.extensions) + + def fill_coverage(self, coverage): + for func_name, functions in self.registry.items(): + for function in functions: + coverage.update_coverage( + function.uri, func_name, function.args, function.test_count + ) diff --git a/tests/coverage/nodes.py b/tests/coverage/nodes.py new file mode 100644 index 000000000..cfafe5296 --- /dev/null +++ b/tests/coverage/nodes.py @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: Apache-2.0 +from dataclasses import dataclass +from typing import List + + +@dataclass +class CaseGroup: + name: str + description: str + + +@dataclass +class SubstraitError: + error: str + + +@dataclass +class CaseLiteral: + value: str | int | float | list + type: str + + def get_base_type(self): + type = self.type + if "<" in type: + type = type[: type.find("<")] + if type.endswith("?"): + return type[:-1] + return type + + +@dataclass +class TestCase: + func_name: str + base_uri: str + group: CaseGroup + options: dict + args: List[CaseLiteral] + result: CaseLiteral | str + comment: str + + def get_return_type(self): + if isinstance(self.result, CaseLiteral): + return self.result.type + return self.result + + def is_return_type_error(self): + return isinstance(self.result, SubstraitError) + + def get_arg_types(self): + return [arg.get_base_type() for arg in self.args] + + def get_signature(self): + return f"{self.func_name}({', '.join([arg.type for arg in self.args])})" + + +@dataclass +class TestFile: + path: str + version: str + include: str + testcases: List[TestCase] diff --git a/tests/coverage/test_coverage.py b/tests/coverage/test_coverage.py new file mode 100644 index 000000000..f4d145dc0 --- /dev/null +++ b/tests/coverage/test_coverage.py @@ -0,0 +1,88 @@ +# SPDX-License-Identifier: Apache-2.0 +from antlr4 import InputStream +from tests.coverage.case_file_parser import parse_stream, parse_one_file +from tests.coverage.nodes import CaseLiteral + + +def parse_string(input_string): + return parse_stream(InputStream(input_string), "test_string") + + +def make_header(version, include): + return f"""### SUBSTRAIT_SCALAR_TEST: {version} +### SUBSTRAIT_INCLUDE: '{include}' + +""" + + +def test_parse_basic_example(): + header = make_header("v1.0", "/extensions/functions_arithmetic.yaml") + tests = """# 'Basic examples without any special cases' +add(120::i8, 5::i8) = 125::i8 +add(100::i16, 100::i16) = 200::i16 + +# Overflow examples demonstrating overflow behavior +add(120::i8, 10::i8) [overflow:ERROR] = +""" + + test_file = parse_string(header + tests) + assert len(test_file.testcases) == 3 + + +def test_parse_date_time_example(): + header = make_header("v1.0", "/extensions/functions_datetime.yaml") + tests = """# timestamp examples using the timestamp type +lt('2016-12-31T13:30:15'::ts, '2017-12-31T13:30:15'::ts) = true::bool +""" + + test_file = parse_string(header + tests) + assert len(test_file.testcases) == 1 + assert test_file.testcases[0].func_name == "lt" + assert test_file.testcases[0].base_uri == "/extensions/functions_datetime.yaml" + assert ( + test_file.testcases[0].group.name + == "timestamp examples using the timestamp type" + ) + assert test_file.testcases[0].result == CaseLiteral("true", "bool") + assert test_file.testcases[0].args[0] == CaseLiteral("2016-12-31T13:30:15", "ts") + assert test_file.testcases[0].args[1] == CaseLiteral("2017-12-31T13:30:15", "ts") + + +def test_parse_decimal_example(): + header = make_header("v1.0", "extensions/functions_arithmetic_decimal.yaml") + tests = """# basic +power(8::dec<38,0>, 2::dec<38, 0>) = 64::fp64 +power(1.0::dec<38, 0>, -1.0::dec<38, 0>) = 1.0::fp64 +""" + test_file = parse_string(header + tests) + assert len(test_file.testcases) == 2 + assert test_file.testcases[0].func_name == "power" + assert ( + test_file.testcases[0].base_uri + == "extensions/functions_arithmetic_decimal.yaml" + ) + assert test_file.testcases[0].group.name == "basic" + assert test_file.testcases[0].result == CaseLiteral("64", "fp64") + assert test_file.testcases[0].args[0] == CaseLiteral("8", "dec<38,0>") + assert test_file.testcases[0].args[1] == CaseLiteral("2", "dec<38,0>") + + +def test_parse_file(): + test_file = parse_one_file("../cases/arithmetic/add.test") + assert len(test_file.testcases) == 15 + assert test_file.testcases[0].func_name == "add" + assert test_file.testcases[0].base_uri == "/extensions/functions_arithmetic.yaml" + assert test_file.include == "/extensions/functions_arithmetic.yaml" + + test_file = parse_one_file("../cases/datetime/lt_datetime.test") + assert len(test_file.testcases) == 13 + assert test_file.testcases[0].func_name == "lt" + assert test_file.testcases[0].base_uri == "/extensions/functions_datetime.yaml" + + test_file = parse_one_file("../cases/arithmetic_decimal/power.test") + assert len(test_file.testcases) == 9 + assert test_file.testcases[0].func_name == "power" + assert ( + test_file.testcases[0].base_uri + == "extensions/functions_arithmetic_decimal.yaml" + ) diff --git a/tests/coverage/visitor.py b/tests/coverage/visitor.py new file mode 100644 index 000000000..9a6a3e9ff --- /dev/null +++ b/tests/coverage/visitor.py @@ -0,0 +1,212 @@ +# SPDX-License-Identifier: Apache-2.0 +from tests.coverage.antlr_parser.FuncTestCaseParser import FuncTestCaseParser +from tests.coverage.antlr_parser.FuncTestCaseParserVisitor import ( + FuncTestCaseParserVisitor, +) +from tests.coverage.nodes import ( + CaseGroup, + TestFile, + TestCase, + CaseLiteral, + SubstraitError, +) + + +class TestCaseVisitor(FuncTestCaseParserVisitor): + def __init__(self, file_path): + self.file_path = file_path + + def visitDoc(self, ctx: FuncTestCaseParser.DocContext): + version, include = self.visitHeader(ctx.header()) + testcases = [] + for group in ctx.testGroup(): + _, group_tests = self.visitTestGroup(group) + for test_case in group_tests: + test_case.base_uri = include + testcases.extend(group_tests) + + return TestFile(self.file_path, version, include, testcases) + + def visitHeader(self, ctx: FuncTestCaseParser.HeaderContext): + version = self.visitVersion(ctx.version()) + include = self.visitInclude(ctx.include()) + return version, include + + def visitVersion(self, ctx: FuncTestCaseParser.VersionContext): + return ctx.FORMAT_VERSION().getText() + + def visitInclude(self, ctx: FuncTestCaseParser.IncludeContext): + # TODO handle multiple includes + return ctx.STRING_LITERAL(0).getText().strip("'") + + def visitTestGroupDescription( + self, ctx: FuncTestCaseParser.TestGroupDescriptionContext + ): + group = ctx.DESCRIPTION_LINE().getText().strip("#").strip() + return CaseGroup(group, "") + + def visitTestGroup(self, ctx: FuncTestCaseParser.TestGroupContext): + group = self.visitTestGroupDescription(ctx.testGroupDescription()) + test_cases = [] + for test_case in ctx.testCase(): + testcase = self.visitTestCase(test_case) + testcase.group = group + test_cases.append(testcase) + return group, test_cases + + def visitTestCase(self, ctx: FuncTestCaseParser.TestCaseContext): + # TODO Implement this method + args = self.visitArguments(ctx.arguments()) + result = self.visitResult(ctx.result()) + options = dict() + if ctx.func_options() is not None: + options = self.visitFunc_options(ctx.func_options()) + return TestCase( + func_name=ctx.IDENTIFIER().getText(), + base_uri="", + group=None, + options=options, + args=args, + result=result, + comment="", + ) + + def visitFunc_options(self, ctx: FuncTestCaseParser.Func_optionsContext): + options = {} + for option in ctx.func_option(): + key, value = self.visitFunc_option(option) + options[key] = value + return options + + def visitFunc_option(self, ctx: FuncTestCaseParser.Func_optionContext): + key = ctx.option_name().getText() + value = ctx.option_value().getText() + return key, value + + def visitArguments(self, ctx: FuncTestCaseParser.ArgumentsContext): + arguments = [] + for arg in ctx.argument(): + arguments.append(self.visitArgument(arg)) + return arguments + + def visitArgument(self, ctx: FuncTestCaseParser.ArgumentContext): + if ctx.i8Arg() is not None: + return self.visitI8Arg(ctx.i8Arg()) + if ctx.i16Arg() is not None: + return self.visitI16Arg(ctx.i16Arg()) + if ctx.i32Arg() is not None: + return self.visitI32Arg(ctx.i32Arg()) + if ctx.i64Arg() is not None: + return self.visitI64Arg(ctx.i64Arg()) + if ctx.fp32Arg() is not None: + return self.visitFp32Arg(ctx.fp32Arg()) + if ctx.fp64Arg() is not None: + return self.visitFp64Arg(ctx.fp64Arg()) + if ctx.booleanArg() is not None: + return self.visitBooleanArg(ctx.booleanArg()) + if ctx.stringArg() is not None: + return self.visitStringArg(ctx.stringArg()) + if ctx.decimalArg() is not None: + return self.visitDecimalArg(ctx.decimalArg()) + if ctx.dateArg() is not None: + return self.visitDateArg(ctx.dateArg()) + if ctx.timeArg() is not None: + return self.visitTimeArg(ctx.timeArg()) + if ctx.timestampArg() is not None: + return self.visitTimestampArg(ctx.timestampArg()) + if ctx.timestampTzArg() is not None: + return self.visitTimestampTzArg(ctx.timestampTzArg()) + if ctx.intervalDayArg() is not None: + return self.visitIntervalDayArg(ctx.intervalDayArg()) + if ctx.intervalYearArg() is not None: + return self.visitIntervalYearArg(ctx.intervalYearArg()) + if ctx.nullArg() is not None: + return self.visitNullArg(ctx.nullArg()) + + return CaseLiteral(value="unknown_value", type="unknown_type") + + def visitNumericLiteral(self, ctx: FuncTestCaseParser.NumericLiteralContext): + if ctx.INTEGER_LITERAL() is not None: + return ctx.INTEGER_LITERAL().getText() + if ctx.DECIMAL_LITERAL() is not None: + return ctx.DECIMAL_LITERAL().getText() + return ctx.FLOAT_LITERAL + + def visitNullArg(self, ctx: FuncTestCaseParser.NullArgContext): + datatype = ctx.datatype().getText() + return CaseLiteral(value=None, type=datatype) + + def visitI8Arg(self, ctx: FuncTestCaseParser.I8ArgContext): + return CaseLiteral(value=ctx.INTEGER_LITERAL().getText(), type="i8") + + def visitI16Arg(self, ctx: FuncTestCaseParser.I16ArgContext): + return CaseLiteral(value=ctx.INTEGER_LITERAL().getText(), type="i16") + + def visitI32Arg(self, ctx: FuncTestCaseParser.I32ArgContext): + return CaseLiteral(value=ctx.INTEGER_LITERAL().getText(), type="i32") + + def visitI64Arg(self, ctx: FuncTestCaseParser.I64ArgContext): + return CaseLiteral(value=ctx.INTEGER_LITERAL().getText(), type="i64") + + def visitFp32Arg(self, ctx: FuncTestCaseParser.Fp32ArgContext): + # TODO add checks on number of decimal places + return CaseLiteral( + value=self.visitNumericLiteral(ctx.numericLiteral()), + type=ctx.FP32().getText().lower(), + ) + + def visitFp64Arg(self, ctx: FuncTestCaseParser.Fp64ArgContext): + return CaseLiteral( + value=self.visitNumericLiteral(ctx.numericLiteral()), + type=ctx.FP64().getText().lower(), + ) + + def visitBooleanArg(self, ctx: FuncTestCaseParser.BooleanArgContext): + return CaseLiteral(value=ctx.BOOLEAN_LITERAL().getText(), type="bool") + + def visitStringArg(self, ctx: FuncTestCaseParser.StringArgContext): + return CaseLiteral(value=ctx.STRING_LITERAL().getText(), type="str") + + def visitDecimalArg(self, ctx: FuncTestCaseParser.DecimalArgContext): + return CaseLiteral( + value=self.visitNumericLiteral(ctx.numericLiteral()), + type=ctx.decimalType().getText().lower(), + ) + + def visitDateArg(self, ctx: FuncTestCaseParser.DateArgContext): + return CaseLiteral(value=ctx.DATE_LITERAL().getText().strip("'"), type="date") + + def visitTimeArg(self, ctx: FuncTestCaseParser.TimeArgContext): + return CaseLiteral(value=ctx.TIME_LITERAL().getText().strip("'"), type="time") + + def visitTimestampArg(self, ctx: FuncTestCaseParser.TimestampArgContext): + return CaseLiteral( + value=ctx.TIMESTAMP_LITERAL().getText().strip("'"), type="ts" + ) + + def visitTimestampTzArg(self, ctx: FuncTestCaseParser.TimestampTzArgContext): + return CaseLiteral( + value=ctx.TIMESTAMP_TZ_LITERAL().getText().strip("'"), type="tstz" + ) + + def visitIntervalDayArg(self, ctx: FuncTestCaseParser.IntervalDayArgContext): + return CaseLiteral( + value=ctx.INTERVAL_DAY_LITERAL().getText().strip("'"), type="iday" + ) + + def visitIntervalYearArg(self, ctx: FuncTestCaseParser.IntervalYearArgContext): + return CaseLiteral( + value=ctx.INTERVAL_YEAR_LITERAL().getText().strip("'"), type="iyear" + ) + + def visitResult(self, ctx: FuncTestCaseParser.ResultContext): + if ctx.argument() is not None: + return self.visitArgument(ctx.argument()) + return self.visitSubstraitError(ctx.substraitError()) + + def visitSubstraitError(self, ctx: FuncTestCaseParser.SubstraitErrorContext): + if ctx.ERROR_RESULT() is not None: + return SubstraitError("error") + if ctx.UNDEFINED_RESULT() is not None: + return SubstraitError("undefined") + return SubstraitError("unknown_error") diff --git a/tests/test_extensions.py b/tests/test_extensions.py new file mode 100644 index 000000000..3cb7e5294 --- /dev/null +++ b/tests/test_extensions.py @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: Apache-2.0 +import os + +from tests.coverage.extensions import build_type_to_short_type + + +# NOTE: this test is run as part of pre-commit hook +def test_read_substrait_extensions(): + from tests.coverage.extensions import Extension + + current_dir = os.path.dirname(os.path.abspath(__file__)) + extensions_path = os.path.join(current_dir, "../extensions") + registry = Extension.read_substrait_extensions(extensions_path) + assert len(registry.registry) >= 161 + num_overloads = sum([len(f) for f in registry.registry.values()]) + assert num_overloads >= 510 + assert len(registry.dependencies) >= 13 + assert len(registry.scalar_functions) >= 162 + assert len(registry.aggregate_functions) >= 29 + assert len(registry.window_functions) >= 0 + + +def test_build_type_to_short_type(): + long_to_short = build_type_to_short_type() + assert long_to_short["i64"] == "i64" + assert long_to_short["fp64"] == "fp64" + assert long_to_short["timestamp"] == "ts" + assert long_to_short["timestamp_tz"] == "tstz" + assert long_to_short["precision_timestamp"] == "pts" + assert long_to_short["precision_timestamp_tz"] == "ptstz" + assert long_to_short["interval_year"] == "iyear" + assert long_to_short["interval_day"] == "iday" + assert long_to_short["decimal"] == "dec" + assert long_to_short["boolean"] == "bool" + assert long_to_short["string"] == "str" + assert long_to_short["binary"] == "vbin" + assert long_to_short["fixedbinary"] == "fbin" + assert long_to_short["fixedchar"] == "fchar" + assert long_to_short["varchar"] == "vchar" + assert long_to_short["list"] == "list" + assert long_to_short["map"] == "map" + assert long_to_short["struct"] == "struct"