ixc / python-edtf

MIT License
53 stars 19 forks source link

Improve EDTF error handling #46

Open ColeDCrawford opened 6 months ago

ColeDCrawford commented 6 months ago

EDTF should catch pyparsing.ParseExceptions and raise more useful errors rather than full grammar combination.

>>> from edtf import parse_edtf
>>> e = parse_edtf("notadatestring")
Traceback (most recent call last):
  File "/Users/colecrawford/GitHub/python-edtf/edtf/parser/grammar.py", line 285, in parse_edtf
    p = edtfParser.parseString(str.strip(), parseAll)
  File "/Users/colecrawford/GitHub/python-edtf/venv/lib/python3.10/site-packages/pyparsing/util.py", line 256, in _inner
    return fn(self, *args, **kwargs)
  File "/Users/colecrawford/GitHub/python-edtf/venv/lib/python3.10/site-packages/pyparsing/core.py", line 1200, in parse_string
    raise exc.with_traceback(None)
pyparsing.exceptions.ParseException: Expected {{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ...
Full error is longer than the Github issue allows (>65k characters ...) ``` >>> from edtf import parse_edtf >>> e = parse_edtf("notadatestring") Traceback (most recent call last): File "/Users/colecrawford/GitHub/python-edtf/edtf/parser/grammar.py", line 285, in parse_edtf p = edtfParser.parseString(str.strip(), parseAll) File "/Users/colecrawford/GitHub/python-edtf/venv/lib/python3.10/site-packages/pyparsing/util.py", line 256, in _inner return fn(self, *args, **kwargs) File "/Users/colecrawford/GitHub/python-edtf/venv/lib/python3.10/site-packages/pyparsing/core.py", line 1200, in parse_string raise exc.with_traceback(None) pyparsing.exceptions.ParseException: Expected {{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) 'T' Combine:({Combine:({{00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 ':' 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 ':' 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59} ^ '24:00:00'}) ['Z' ^ {Re:('[+-]') {{01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 [':' 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59]} ^ '14:00' ^ {'00:' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59}}}]})} ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) '/' Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}})}} ^ {{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) Combine:(? | ~ | %)} ^ {Combine:({(0-9) (0-9) {(0-9) ^ 'X'} 'X'}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX' '-' 'XX'}} ^ {{['..' ^ {{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 21 | 22 | 23 | 24}} [Combine:(? | ~ | %)]}] '/' {{{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 21 | 22 | 23 | 24}} [Combine:(? | ~ | %)]} ^ '..'}} ^ {{'..' ^ {{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 21 | 22 | 23 | 24}} [Combine:(? | ~ | %)]}} '/' [{{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 21 | 22 | 23 | 24}} [Combine:(? | ~ | %)]} ^ '..']}} ^ {'Y' Combine:({['-'] (1-9) (0-9) (0-9) (0-9) {(0-9)}...})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 21 | 22 | 23 | 24}} ^ {{{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31]} ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}})}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}})} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ Combine:({0X | 1X ^ {'X' (0-9X)}})}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})}} ^ {'[' {{{'..' Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}})} [{',' {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31]} ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}})}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}})} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ Combine:({0X | 1X ^ {'X' (0-9X)}})}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})}} ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) Combine:(? | ~ | %)} ^ {Combine:({(0-9) (0-9) {(0-9) ^ 'X'} 'X'}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX' '-' 'XX'}} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}} '..' {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} '..' {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '..' Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})}}}}]...} ^ {[{'..' Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}})} ','] [{{Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31]} ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ['-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}}]} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:(? | ~ | %) Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) Combine:(? | ~ | %)}} '-' {01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ {Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12}} '-' Combine:(? | ~ | %) 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31}} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}})}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}})} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({{'X' (0-9X) (0-9X) (0-9X)} ^ {(0-9X) 'X' (0-9X) (0-9X)} ^ {(0-9X) (0-9X) 'X' (0-9X)} ^ {(0-9X) (0-9X) (0-9X) 'X'}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 ^ Combine:({0X | 1X ^ {'X' (0-9X)}})}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' Combine:({0X | 1X ^ {'X' (0-9X)}}) '-' Combine:({01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 ^ Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})})} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' Combine:({{'X' (0-9X)} ^ {(0-9X) 'X'}})}} ^ {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}}}) Combine:(? | ~ | %)} ^ {Combine:({(0-9) (0-9) {(0-9) ^ 'X'} 'X'}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 '-' 'XX'} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 'XX' '-' 'XX'}} ^ {{Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}} '..' {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' {{01 | 03 | 05 | 07 | 08 | 10 | 12 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31} ^ {04 | 06 | 09 | 11 '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30} ^ {'02' '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29}}} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} '..' {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '..' Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}})}}} ','}]... {Combine:({Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) ^ {Combine:({W:(0-9){4} ^ {~{'-0000'} '-' W:(0-9){4}}}) '-' 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12} ^ ```
rettinghaus commented 1 month ago

In the meantime the exception has improved much:

raise EDTFParseException(input_string, err) from None
edtf.parser.edtf_exceptions.EDTFParseException: Error at position 0: Invalid input or format near 'notadatest'. Please provide a valid EDTF string.

It could be improved even further eventually, though I think this very issue can be closed.