{
    "GenericMathNode": {
        "description": [
            "This is a tutorial node. It is functionally equivalent to the built-in Multiply node,",
            "but written in python as a practical demonstration of using extended attributes to ",
            "write math nodes that work with any numeric types, including arrays and tuples."
        ],
        "version": 1,
        "language": "python",
        "uiName": "Tutorial Python Node: Generic Math Node",
        "categories": "tutorials",
        "inputs": {
            "a": {
                "type": ["numerics"],
                "description": "First number to multiply",
                "uiName": "A"
            },
            "b": {
                "type": ["numerics"],
                "description": "Second number to multiply",
                "uiName": "B"
            }
        },
        "outputs": {
            "product": {
                "type": ["numerics"],
                "description": "Product of the two numbers",
                "uiName": "Product"
            }
        },
        "tests" : [
            {  "inputs:a": {"type": "int", "value": 2}, "inputs:b": {"type": "int", "value": 3}, "outputs:product": {"type": "int", "value": 6} },
            {  "inputs:a": {"type": "int", "value": 2}, "inputs:b": {"type": "int64", "value": 3}, "outputs:product": {"type": "int64", "value": 6} },
            {  "inputs:a": {"type": "int", "value": 2}, "inputs:b": {"type": "half", "value": 3}, "outputs:product": {"type": "float", "value": 6} },
            {  "inputs:a": {"type": "int", "value": 2}, "inputs:b": {"type": "float", "value": 3}, "outputs:product": {"type": "float", "value": 6} },
            {  "inputs:a": {"type": "int", "value": 2}, "inputs:b": {"type": "double", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "int64", "value": 2}, "inputs:b": {"type": "int64", "value": 3}, "outputs:product": {"type": "int64", "value": 6} },
            {  "inputs:a": {"type": "int64", "value": 2}, "inputs:b": {"type": "half", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "int64", "value": 2}, "inputs:b": {"type": "float", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "int64", "value": 2}, "inputs:b": {"type": "double", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "half", "value": 2}, "inputs:b": {"type": "half", "value": 3}, "outputs:product": {"type": "half", "value": 6} },
            {  "inputs:a": {"type": "half", "value": 2}, "inputs:b": {"type": "float", "value": 3}, "outputs:product": {"type": "float", "value": 6} },
            {  "inputs:a": {"type": "half", "value": 2}, "inputs:b": {"type": "double", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "float", "value": 2}, "inputs:b": {"type": "float", "value": 3}, "outputs:product": {"type": "float", "value": 6} },
            {  "inputs:a": {"type": "float", "value": 2}, "inputs:b": {"type": "double", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {  "inputs:a": {"type": "double", "value": 2}, "inputs:b": {"type": "double", "value": 3}, "outputs:product": {"type": "double", "value": 6} },
            {
                "inputs:a": {"type": "double[2]", "value": [1.0, 42.0]}, "inputs:b": {"type": "double[2]", "value": [2.0, 1.0]},
                "outputs:product": {"type": "double[2]", "value": [2.0, 42.0]}
            },
            {
                "inputs:a": {"type": "double[]", "value": [1.0, 42.0]}, "inputs:b": {"type": "double", "value": 2.0},
                "outputs:product": {"type": "double[]", "value": [2.0, 84.0]}
            },
            {
                "inputs:a": {"type": "double[2][]", "value": [[10, 5], [1, 1]]}, 
                "inputs:b": {"type": "double[2]", "value": [5, 5]},
                "outputs:product": {"type": "double[2][]", "value": [[50, 25], [5, 5]]}
            }
        ]
    }
}