{
  "environment": {
    "python": "3.12.15",
    "system": "Linux"
  },
  "files": [
    {
      "case": "<model name=\"x1\">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.1.1.model_name_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_plain"
    },
    {
      "case": "<model name=\"\">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.1.1.model_name_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Model '' does not have a valid name attribute. CellML identifiers must contain one or more basic Latin alphabetic characters."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_empty"
    },
    {
      "case": "<model name=\"x-y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.1.1.model_name_hyphen.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Model 'x-y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_hyphen"
    },
    {
      "case": "<model name=\"1x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.1.1.model_name_leading_digit.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Model '1x' does not have a valid name attribute. CellML identifiers must not begin with a European numeric character [0-9]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_leading_digit"
    },
    {
      "case": "<model name=\"_x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.1.1.model_name_leading_underscore.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_leading_underscore"
    },
    {
      "case": "<model name=\"xé\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.1.1.model_name_non_latin_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Model 'xé' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_non_latin_letter"
    },
    {
      "case": "<model name=\"x\">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.1.1.model_name_single_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_single_letter"
    },
    {
      "case": "<model name=\"x y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.1.1.model_name_space.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Model 'x y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 5. Model name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_space"
    },
    {
      "case": "<model name=\"x_1\">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.1.1.model_name_underscore_inside.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_underscore_inside"
    },
    {
      "case": "<model name=\"X1\">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.1.1.model_name_upper_case.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.1.1",
      "stem": "2.1.1.model_name_upper_case"
    },
    {
      "case": "<units name=\"x1\">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.5.1.units_name_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: Unable to parse definition for units \"x1\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_plain"
    },
    {
      "case": "<units name=\"\">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.5.1.units_name_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Units '' does not have a valid name attribute. CellML identifiers must contain one or more basic Latin alphabetic characters."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_empty"
    },
    {
      "case": "<units name=\"x-y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.5.1.units_name_hyphen.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Units 'x-y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"x-y\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_hyphen"
    },
    {
      "case": "<units name=\"1x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.5.1.units_name_leading_digit.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Units '1x' does not have a valid name attribute. CellML identifiers must not begin with a European numeric character [0-9]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"1x\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_leading_digit"
    },
    {
      "case": "<units name=\"_x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.5.1.units_name_leading_underscore.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"_x\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_leading_underscore"
    },
    {
      "case": "<units name=\"xé\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.5.1.units_name_non_latin_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Units 'xé' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"xé\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_non_latin_letter"
    },
    {
      "case": "<units name=\"x\">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.5.1.units_name_single_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: Unable to parse definition for units \"x\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_single_letter"
    },
    {
      "case": "<units name=\"x y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.5.1.units_name_space.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Units 'x y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Units name must be a valid CellML identifier.",
            "warning: Unable to parse definition for units \"x y\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_space"
    },
    {
      "case": "<units name=\"x_1\">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.5.1.units_name_underscore_inside.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: Unable to parse definition for units \"x_1\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_underscore_inside"
    },
    {
      "case": "<units name=\"X1\">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.5.1.units_name_upper_case.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: Unable to parse definition for units \"X1\", using `dimensionless instead. (Defining new base units is not supported.)"
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.5.1",
      "stem": "2.5.1.units_name_upper_case"
    },
    {
      "case": "prefix=\"3\". Valid: an integer string (rule 1.3.2), so the prefix term is 3 (rule 3.3.1.1.2). This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_plain"
    },
    {
      "case": "prefix=\"3.0\". Invalid: it has a decimal point, so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_decimal.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Prefix '3.0' of a unit referencing 'volt' in units 'prefixed_volt' is not a valid integer or an SI prefix."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"3.0\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_decimal"
    },
    {
      "case": "prefix=\"1e3\". Invalid: it has an exponent, so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_e_notation.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Prefix '1e3' of a unit referencing 'volt' in units 'prefixed_volt' is not a valid integer or an SI prefix."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"1e3\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_e_notation"
    },
    {
      "case": "prefix=\"\". Invalid: an empty value has no digits (rule 1.3.2.3), so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_empty"
    },
    {
      "case": "prefix=\"400\". Valid: an integer string, and the specification sets no range for the prefix term (rule 3.3.1.1.2).",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_large.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": false,
          "messages": [
            "CellMLParsingError: Unit prefix too large: 10^400"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_large"
    },
    {
      "case": "prefix=\"+3\". Valid: rule 1.3.2.2 lets an integer string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_leading_plus"
    },
    {
      "case": "prefix=\"Kilo\". Invalid: Table 3.2 lists kilo in lower case, and a value that is not an integer string must be taken from its Name column as written (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_name_capitalized.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Prefix 'Kilo' of a unit referencing 'volt' in units 'prefixed_volt' is not a valid integer or an SI prefix."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"Kilo\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_name_capitalized"
    },
    {
      "case": "prefix=\"deca\". Valid: deca is in the Name column of Table 3.2, with the value 1 (rule 3.3.1.1.3).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_name_deca.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_name_deca"
    },
    {
      "case": "prefix=\"deka\". Invalid: Table 3.2 spells this prefix deca, and a value that is not an integer string must be taken from its Name column (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_name_deka.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Prefix 'deka' of a unit referencing 'volt' in units 'prefixed_volt' is not a valid integer or an SI prefix."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"deka\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_name_deka"
    },
    {
      "case": "prefix=\"milli\". Valid: milli is in the Name column of Table 3.2, with the value -3 (rule 3.3.1.1.3).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_name_milli.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_name_milli"
    },
    {
      "case": "prefix=\"-3\". Valid: rule 1.3.2.2 lets an integer string begin with a single hyphen-minus sign, so the prefix term is -3, the same as milli.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.1.unit_prefix_negative.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_negative"
    },
    {
      "case": "prefix=\"-\". Invalid: it has a sign and no digits (rule 1.3.2.3), so it is not an integer string (rule 1.3.2), and it is not a name in Table 3.2 either (rule 3.3.1.1.3).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.1.unit_prefix_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Prefix '-' of a unit referencing 'volt' in units 'prefixed_volt' is not a valid integer or an SI prefix."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Units prefix must be a string from the list of known prefixes or an integer string, got \"-\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.1",
      "stem": "2.6.2.1.unit_prefix_sign_only"
    },
    {
      "case": "multiplier=\"2\". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.2.unit_multiplier_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_plain"
    },
    {
      "case": "multiplier=\"1e999\". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.6.2.2.unit_multiplier_beyond_double_range.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'scaled_volt' has a multiplier with the value '1e999' that is a representation of a CellML real valued number, but out of range of the 'double' type."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": false,
          "messages": [
            "exit code 1: OverflowError: cannot convert float infinity to integer"
          ],
          "outcome": "stopped"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_beyond_double_range"
    },
    {
      "case": "multiplier=\"\". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.2.unit_multiplier_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'scaled_volt' has a multiplier with the value '' that is not a representation of a CellML real valued number."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit multiplier must be a real number string, got \"\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_empty"
    },
    {
      "case": "multiplier=\"+2\". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.6.2.2.unit_multiplier_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'scaled_volt' has a multiplier with the value '+2' that is not a representation of a CellML real valued number."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_leading_plus"
    },
    {
      "case": "multiplier=\".\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.2.unit_multiplier_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit multiplier must be a real number string, got \".\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_point_only"
    },
    {
      "case": "multiplier=\"-.\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.2.unit_multiplier_sign_and_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit multiplier must be a real number string, got \"-.\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_sign_and_point_only"
    },
    {
      "case": "multiplier=\"-\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.2.unit_multiplier_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit multiplier must be a real number string, got \"-\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.2",
      "stem": "2.6.2.2.unit_multiplier_sign_only"
    },
    {
      "case": "exponent=\"2\". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.6.2.3.unit_exponent_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_plain"
    },
    {
      "case": "exponent=\"1e999\". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.6.2.3.unit_exponent_beyond_double_range.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'millivolt_power' has an exponent with the value '1e999' that is a representation of a CellML real valued number, but out of range of the 'double' type."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": false,
          "messages": [
            "exit code 1: OverflowError: cannot convert float infinity to integer"
          ],
          "outcome": "stopped"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_beyond_double_range"
    },
    {
      "case": "exponent=\"\". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.6.2.3.unit_exponent_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'millivolt_power' has an exponent with the value '' that is not a representation of a CellML real valued number."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit exponent must be a real number string, got \"1\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_empty"
    },
    {
      "case": "exponent=\"+2\". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.6.2.3.unit_exponent_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "parser error: Unit referencing 'volt' in units 'millivolt_power' has an exponent with the value '+2' that is not a representation of a CellML real valued number."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_leading_plus"
    },
    {
      "case": "exponent=\".\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.3.unit_exponent_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit exponent must be a real number string, got \"1\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_point_only"
    },
    {
      "case": "exponent=\"-.\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.3.unit_exponent_sign_and_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit exponent must be a real number string, got \"1\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_sign_and_point_only"
    },
    {
      "case": "exponent=\"-\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.6.2.3.unit_exponent_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Unit exponent must be a real number string, got \"1\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.6.2.3",
      "stem": "2.6.2.3.unit_exponent_sign_only"
    },
    {
      "case": "<component name=\"x1\">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.7.1.component_name_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_plain"
    },
    {
      "case": "<component name=\"\">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.7.1.component_name_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Component '' does not have a valid name attribute. CellML identifiers must contain one or more basic Latin alphabetic characters."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_empty"
    },
    {
      "case": "<component name=\"x-y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.7.1.component_name_hyphen.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Component 'x-y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_hyphen"
    },
    {
      "case": "<component name=\"1x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.7.1.component_name_leading_digit.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Component '1x' does not have a valid name attribute. CellML identifiers must not begin with a European numeric character [0-9]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_leading_digit"
    },
    {
      "case": "<component name=\"_x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.7.1.component_name_leading_underscore.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_leading_underscore"
    },
    {
      "case": "<component name=\"xé\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.7.1.component_name_non_latin_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Component 'xé' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_non_latin_letter"
    },
    {
      "case": "<component name=\"x\">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.7.1.component_name_single_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_single_letter"
    },
    {
      "case": "<component name=\"x y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.7.1.component_name_space.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Component 'x y' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 6. Component name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_space"
    },
    {
      "case": "<component name=\"x_1\">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.7.1.component_name_underscore_inside.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_underscore_inside"
    },
    {
      "case": "<component name=\"X1\">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.7.1.component_name_upper_case.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.7.1",
      "stem": "2.7.1.component_name_upper_case"
    },
    {
      "case": "<variable name=\"x1\">. Valid: a Basic Latin letter followed by a digit (rule 1.3.1.1). This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.1.1.variable_name_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: No value set for Variable[@name=\"x1\"] in Component[@name=\"c\"]."
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_plain"
    },
    {
      "case": "<variable name=\"\">. Invalid: an identifier has at least one character, a Basic Latin letter (rule 1.3.1.1), and an empty name has none.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Variable '' in component 'c' does not have a valid name attribute. CellML identifiers must contain one or more basic Latin alphabetic characters."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_empty"
    },
    {
      "case": "<variable name=\"x-y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a hyphen-minus.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_hyphen.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Variable 'x-y' in component 'c' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_hyphen"
    },
    {
      "case": "<variable name=\"1x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with a digit.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_leading_digit.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Variable '1x' in component 'c' does not have a valid name attribute. CellML identifiers must not begin with a European numeric character [0-9]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_leading_digit"
    },
    {
      "case": "<variable name=\"_x\">. Invalid: an identifier must begin with a Basic Latin letter (rule 1.3.1.1), and this name begins with an underscore.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_leading_underscore.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_leading_underscore"
    },
    {
      "case": "<variable name=\"xé\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has the letter é (e with an acute accent), which is not Basic Latin.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_non_latin_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Variable 'xé' in component 'c' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_non_latin_letter"
    },
    {
      "case": "<variable name=\"x\">. Valid: one Basic Latin letter is a whole identifier (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.1.1.variable_name_single_letter.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: No value set for Variable[@name=\"x\"] in Component[@name=\"c\"]."
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_single_letter"
    },
    {
      "case": "<variable name=\"x y\">. Invalid: after the first letter, rule 1.3.1.1 allows only Basic Latin letters, digits and underscores, and this name has a space.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.8.1.1.variable_name_space.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Variable 'x y' in component 'c' does not have a valid name attribute. CellML identifiers must not contain any characters other than [a-zA-Z0-9_]."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. Variable name must be a valid CellML identifier."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_space"
    },
    {
      "case": "<variable name=\"x_1\">. Valid: after the first letter, underscores are allowed (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.1.1.variable_name_underscore_inside.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: No value set for Variable[@name=\"x_1\"] in Component[@name=\"c\"]."
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_underscore_inside"
    },
    {
      "case": "<variable name=\"X1\">. Valid: a Basic Latin letter may be upper or lower case (rule 1.3.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.1.1.variable_name_upper_case.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "warning: No value set for Variable[@name=\"X1\"] in Component[@name=\"c\"]."
          ],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.1.1",
      "stem": "2.8.1.1.variable_name_upper_case"
    },
    {
      "case": "initial_value=\"2\". Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.2.2.initial_value_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_plain"
    },
    {
      "case": "initial_value=\"1e999\". Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.8.2.2.initial_value_beyond_double_range.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_beyond_double_range"
    },
    {
      "case": "initial_value=\"\". Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4). It is not a variable reference either (rule 3.6.2).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.8.2.2.initial_value_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. If given, a variable initial_value must be a real number or the name of a local variable, found \"\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_empty"
    },
    {
      "case": "initial_value=\"+2\". Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.8.2.2.initial_value_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "validator error: Variable 'x' in component 'c' has an invalid initial value '+2'. Initial values must be a real number string or a variable reference."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_leading_plus"
    },
    {
      "case": "initial_value=\".\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point. It is not a variable reference either (rule 3.6.2).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.8.2.2.initial_value_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. If given, a variable initial_value must be a real number or the name of a local variable, found \".\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_point_only"
    },
    {
      "case": "initial_value=\"-.\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point. It is not a variable reference either (rule 3.6.2).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.8.2.2.initial_value_sign_and_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. If given, a variable initial_value must be a real number or the name of a local variable, found \"-.\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_sign_and_point_only"
    },
    {
      "case": "initial_value=\"-\". Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign. It is not a variable reference either (rule 3.6.2).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.8.2.2.initial_value_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 7. If given, a variable initial_value must be a real number or the name of a local variable, found \"-\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.8.2.2",
      "stem": "2.8.2.2.initial_value_sign_only"
    },
    {
      "case": "<cn>2</cn>. Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.cn_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_plain"
    },
    {
      "case": "<cn>1e999</cn>. Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.12.5.cn_beyond_double_range.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "validator error: Math has a 'cn' element of 'real' type with no valid text node (representing a basic number) as a child."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_beyond_double_range"
    },
    {
      "case": "<cn></cn>. Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.cn_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'real' type with no valid text node (representing a basic number) as a child."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Empty <cn> element"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_empty"
    },
    {
      "case": "<cn>+2</cn>. Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.12.5.cn_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "validator error: Math has a 'cn' element of 'real' type with no valid text node (representing a basic number) as a child."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_leading_plus"
    },
    {
      "case": "<cn>.</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to convert contents of <cn> to a real number: \".\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_point_only"
    },
    {
      "case": "<cn>-.</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_sign_and_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to convert contents of <cn> to a real number: \"-.\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_sign_and_point_only"
    },
    {
      "case": "<cn>-</cn>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "ended by signal 6 (SIGABRT): terminate called after throwing an instance of 'std::invalid_argument' what():  stod"
          ],
          "outcome": "stopped"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to convert contents of <cn> to a real number: \"-\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_sign_only"
    },
    {
      "case": "<cn base=\"10\">2</cn>. Valid: base 10, written out. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.cn_base_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_base_plain"
    },
    {
      "case": "<cn base=\"16\">2</cn>. Invalid: rule 2.12.5 requires base 10, and this cn is base 16, even though 2 is a digit in both.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.cn_base_16.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element which is not in base 10."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Real numbers in bases other than 10 are not supported."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_base_16"
    },
    {
      "case": "<cn base=\"8\">2</cn>. Invalid: rule 2.12.5 requires base 10, and this cn is base 8, even though 2 is a digit in both.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.cn_base_8.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element which is not in base 10."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Real numbers in bases other than 10 are not supported."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_base_8"
    },
    {
      "case": "<degree><cn>2</cn></degree>. Valid: a plain real number string. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.cn_in_degree_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_plain"
    },
    {
      "case": "<degree><cn>1e999</cn></degree>. Valid: rules 1.3.3 and 1.3.4 allow this syntax and the specification sets no range. 10 to the power 999 has no IEEE 754 double value, and the specification's maintainers confirmed in spec issue 366 that a number a computer cannot represent is still valid CellML: https://github.com/cellml/cellml-specification/issues/366",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.cn_in_degree_beyond_double_range.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_beyond_double_range"
    },
    {
      "case": "<degree><cn></cn></degree>. Invalid: an empty value has no digits at all, so it is not a real number string (rule 1.3.3.4).",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_in_degree_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 15. Empty <cn> element"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_empty"
    },
    {
      "case": "<degree><cn>+2</cn></degree>. Valid: rule 1.3.3.2 lets a basic real number string begin with a single + sign.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.cn_in_degree_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_leading_plus"
    },
    {
      "case": "<degree><cn>.</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_in_degree_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 15. Unable to convert contents of <cn> to a real number: \".\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_point_only"
    },
    {
      "case": "<degree><cn>-.</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign and a decimal point.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_in_degree_sign_and_point_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 15. Unable to convert contents of <cn> to a real number: \"-.\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_sign_and_point_only"
    },
    {
      "case": "<degree><cn>-</cn></degree>. Invalid: rule 1.3.3.4 requires one or more digits besides the sign and the decimal point, and this value has only a sign.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.cn_in_degree_sign_only.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 15. Unable to convert contents of <cn> to a real number: \"-\"."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5",
      "stem": "2.12.5.cn_in_degree_sign_only"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/>3</cn>. Valid: 2 times 10 to the power 3. This is the control file for the exponent: every other file for it differs in the exponent only.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_exponent_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_exponent_plain"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/>3.5</cn>. Invalid: the exponent of e-notation is an integer (MathML 2.0, 4.4.1.1), and 3.5 has a decimal point.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_e_notation_exponent_decimal.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to parse number in e-notation: part after the separator should be an integer."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_exponent_decimal"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/></cn>. Invalid: the exponent of e-notation is an integer (MathML 2.0, 4.4.1.1), and an empty exponent has no digits.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_e_notation_exponent_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to parse number in e-notation: missing part after the separator."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_exponent_empty"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/>+3</cn>. Valid: the exponent is an integer, which may begin with a single + sign (MathML 2.0; rule 1.3.2.2). The informative specification allows this sign too.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_exponent_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_exponent_leading_plus"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/>-3</cn>. Valid: the exponent is an integer, which may begin with a single hyphen-minus sign (MathML 2.0; rule 1.3.2.2).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_exponent_negative.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_exponent_negative"
    },
    {
      "case": "<cn type=\"e-notation\">2<sep/>3</cn>. Valid: 2 times 10 to the power 3. This is the control file for the significand: every other file for it differs in the significand only.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_significand_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_plain"
    },
    {
      "case": "<cn type=\"e-notation\">2.5<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may have a decimal point (MathML 2.0, 4.4.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_significand_decimal.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_decimal"
    },
    {
      "case": "<cn type=\"e-notation\"><sep/>3</cn>. Invalid: the significand is a real in decimal notation (MathML 2.0, 4.4.1.1), and an empty significand has no digits.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_e_notation_significand_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to parse number in e-notation: missing part before the separator."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_empty"
    },
    {
      "case": "<cn type=\"e-notation\">+2<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may begin with a + sign (MathML 2.0, 4.4.1.1).",
      "folder": "valid",
      "implementations_agree": false,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_significand_leading_plus.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_leading_plus"
    },
    {
      "case": "<cn type=\"e-notation\">-2<sep/>3</cn>. Valid: the significand is a real in decimal notation, which may begin with a hyphen-minus sign (MathML 2.0, 4.4.1.1).",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_e_notation_significand_negative.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_negative"
    },
    {
      "case": "<cn type=\"e-notation\">2e1<sep/>3</cn>. Invalid: the significand is a real in decimal notation (MathML 2.0, 4.4.1.1), so it cannot carry an exponent of its own; the exponent goes after the sep.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_e_notation_significand_with_exponent.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unable to parse number in e-notation: part before the separator should be a basic real number."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_e_notation_significand_with_exponent"
    },
    {
      "case": "<cn type=\"real\">2</cn>. Valid: real is one of the two allowed types, written out. This is the control file for this place: every other file for it differs in this one value.",
      "folder": "valid",
      "implementations_agree": true,
      "path": "models_2_0/valid/2.12.5.1.cn_type_plain.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_plain"
    },
    {
      "case": "<cn type=\"Real\">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and the type is written real, in lower case.",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_type_capitalized.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element which is not of 'real' or 'e-notation' type."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unsupported <cn> type: Real"
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_capitalized"
    },
    {
      "case": "<cn type=\"double\">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and double is a MathML 3 type, not one of them.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.1.cn_type_double.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element which is not of 'real' or 'e-notation' type."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_double"
    },
    {
      "case": "<cn type=\"e-notation\">2</cn>. Invalid: e-notation is an allowed type, but MathML 2.0 (section 4.4.1.1) writes it as a significand and an exponent on either side of a sep element, and this cn has no sep (rule 2.12.1).",
      "folder": "invalid",
      "implementations_agree": true,
      "path": "models_2_0/invalid/2.12.5.1.cn_type_e_notation_without_sep.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element of 'e-notation' type with no valid text node (representing a basic number), no 'sep' element, and/or no valid text node (representing an integer) as children."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Number in e-notation should have the format number<sep />number."
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_e_notation_without_sep"
    },
    {
      "case": "<cn type=\"\">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and an empty type is neither.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.1.cn_type_empty.cellml",
      "results": {
        "libcellml": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        },
        "myokit": {
          "matches_spec": true,
          "messages": [
            "CellMLParsingError: Error on line 12. Unsupported <cn> type: "
          ],
          "outcome": "issue"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_empty"
    },
    {
      "case": "<cn type=\"integer\">2</cn>. Invalid: rule 2.12.5.1 allows only the types real and e-notation, and integer is a MathML type CellML 2.0 leaves out.",
      "folder": "invalid",
      "implementations_agree": false,
      "path": "models_2_0/invalid/2.12.5.1.cn_type_integer.cellml",
      "results": {
        "libcellml": {
          "matches_spec": true,
          "messages": [
            "validator error: Math has a 'cn' element which is not of 'real' or 'e-notation' type."
          ],
          "outcome": "issue"
        },
        "myokit": {
          "matches_spec": false,
          "messages": [],
          "outcome": "accepted"
        }
      },
      "rule": "2.12.5.1",
      "stem": "2.12.5.1.cn_type_integer"
    }
  ],
  "implementations": [
    {
      "issue_means": "Its Parser (strict mode) or its Validator reported at least one error. Warnings and messages are shown, not counted.",
      "key": "libcellml",
      "name": "libCellML",
      "version": "0.7.2"
    },
    {
      "issue_means": "Its CellML 2.0 reader (myokit.formats.cellml.v2.parse_file), which checks the rules as it reads, raised CellMLParsingError. Python warnings are shown, not counted.",
      "key": "myokit",
      "name": "Myokit",
      "version": "1.39.2"
    }
  ],
  "specification": "CellML 2.0 Normative Specification, release 2.0.1"
}
