{
    "SimpleDataPy" : {
        "version": 1,
        "categories": "tutorials",
        "description": [
            "This is a tutorial node. It creates both an input and output attribute of every simple ",
            "supported data type. The values are modified in a simple way so that the compute modifies values. ",
            "It is the same as node omni.graph.tutorials.SimpleData, except it is implemented in Python instead of C++."
        ],
        "language": "python",
        "$iconOverride": [
            "If for some reason the default name or colors for the icon are inappropriate you can override like this.",
            "This gives an alternative icon path, a shape color of Green, a border color of Red, and a background",
            "color of half-opaque Blue. If you just want to override the icon path then instead of a dictionary you",
            "can just use the string path, as in \"icon\": \"Tutorial10Icon.svg\"."
        ],
        "icon": {
            "path": "Tutorial10Icon.svg",
            "color": "#FF00FF00",
            "borderColor": [255, 0, 0, 255],
            "backgroundColor": "#7FFF0000"
        },
        "metadata":
        {
           "uiName": "Tutorial Python Node: Attributes With Simple Data"
        },
        "inputs": {
            "a_bool": {
                "type": "bool",
                "metadata": {
                    "uiName": "Simple Boolean Input"
                },
                "description": ["This is an attribute of type boolean"],
                "default": true,
                "$optional": "When this is set there is no checking for validity before calling compute()",
                "optional": true
            },
            "a_half": {
                "type": "half",
                "description": ["This is an attribute of type 16 bit float"],
                "$comment": "0 is used as the decimal portion due to reduced precision of this type",
                "default": 0.0
            },
            "a_int": {
                "type": "int",
                "description": ["This is an attribute of type 32 bit integer"],
                "default": 0
            },
            "a_int64": {
                "type": "int64",
                "description": ["This is an attribute of type 64 bit integer"],
                "default": 0
            },
            "a_float": {
                "type": "float",
                "description": ["This is an attribute of type 32 bit floating point"],
                "default": 0
            },
            "a_double": {
                "type": "double",
                "description": ["This is an attribute of type 64 bit floating point"],
                "default": 0
            },
            "a_path": {
                "type": "path",
                "description": ["This is an attribute of type path"],
                "default": ""
            },
            "a_string": {
                "type": "string",
                "description": ["This is an attribute of type string"],
                "default": "helloString"
            },
             "a_token": {
                "type": "token",
                "description": ["This is an attribute of type interned string with fast comparison and hashing"],
                "default": "helloToken"
            },
            "a_objectId": {
                "type": "objectId",
                "description": ["This is an attribute of type objectId"],
                "default": 0
            },
            "a_uchar": {
               "type": "uchar",
               "description": ["This is an attribute of type unsigned 8 bit integer"],
               "default": 0
            },
            "a_uint": {
               "type": "uint",
               "description": ["This is an attribute of type unsigned 32 bit integer"],
               "default": 0
            },
            "a_uint64": {
                "type": "uint64",
                "description": ["This is an attribute of type unsigned 64 bit integer"],
                "default": 0
             },
             "a_constant_input": {
                 "type": "int",
                 "description": ["This is an input attribute whose value can be set but can only be connected as a source."],
                 "metadata": {
                     "outputOnly": "1"
                 }
             }
        },
        "outputs": {
            "a_bool": {
                "type": "bool",
                "description": ["This is a computed attribute of type boolean"]
            },
            "a_half": {
                "type": "half",
                "description": ["This is a computed attribute of type 16 bit float"]
            },
            "a_int": {
                "type": "int",
                "description": ["This is a computed attribute of type 32 bit integer"]
            },
            "a_int64": {
                "type": "int64",
                "description": ["This is a computed attribute of type 64 bit integer"]
            },
            "a_float": {
                "type": "float",
                "description": ["This is a computed attribute of type 32 bit floating point"]
            },
            "a_double": {
                "type": "double",
                "description": ["This is a computed attribute of type 64 bit floating point"]
            },
            "a_path": {
                "type": "path",
                "description": ["This is a computed attribute of type path"],
                "default": "/Child"
            },
            "a_string": {
                "type": "string",
                "description": ["This is a computed attribute of type string"],
                "default": "This string is empty"
            },
            "a_token": {
               "type": "token",
               "description": ["This is a computed attribute of type interned string with fast comparison and hashing"]
            },
            "a_objectId": {
                "type": "objectId",
                "description": ["This is a computed attribute of type objectId"]
            },
            "a_uchar": {
               "type": "uchar",
               "description": ["This is a computed attribute of type unsigned 8 bit integer"]
            },
            "a_uint": {
               "type": "uint",
               "description": ["This is a computed attribute of type unsigned 32 bit integer"]
            },
            "a_uint64": {
                "type": "uint64",
                "description": ["This is a computed attribute of type unsigned 64 bit integer"]
            },
            "a_nodeTypeUiName": {
                "type": "string",
                "description": "Computed attribute containing the UI name of this node type"
            },
            "a_a_boolUiName": {
                "type": "string",
                "description": "Computed attribute containing the UI name of input a_bool"
            }
        },
        "tests": [
            {
                "$comment": ["Each test has a description of the test and a set of input and output values. ",
                             "The test runs by setting all of the specified inputs on the node to their values, ",
                             "running the compute, then comparing the computed outputs against the values ",
                             "specified in the test. Only the inputs in the list are set; others will use their ",
                             "default values. Only the outputs in the list are checked; others are ignored."],
                "description": "Check that false becomes true",
                "inputs:a_bool": false,
                "outputs:a_bool": true
            },
            {
                "$comment": "This is a more verbose format of test data that provides a different grouping of values",
                "description": "Check that true becomes false",
                "inputs": {
                    "a_bool": true
                },
                "outputs": {
                    "a_bool": false,
                    "a_a_boolUiName": "Simple Boolean Input",
                    "a_nodeTypeUiName": "Tutorial Python Node: Attributes With Simple Data"
                }
            },
            {
                "$comment": "Make sure the path append does the right thing",
                "inputs:a_path": "/World/Domination", "outputs:a_path": "/World/Domination/Child"
            },
            {
                "$comment": "Even though these computations are all independent they can be checked in a single test.",
                "description": "Check all attributes against their computed values",
                "inputs:a_bool": false, "outputs:a_bool": true,
                "inputs:a_double": 1.1, "outputs:a_double": 2.1,
                "inputs:a_float": 3.3, "outputs:a_float": 4.3,
                "inputs:a_half": 5.0, "outputs:a_half": 6.0,
                "inputs:a_int": 7, "outputs:a_int": 8,
                "inputs:a_int64": 9, "outputs:a_int64": 10,
                "inputs:a_token": "helloToken", "outputs:a_token": "worldToken",
                "inputs:a_string": "helloString", "outputs:a_string": "worldString",
                "inputs:a_objectId": 10, "outputs:a_objectId": 11,
                "inputs:a_uchar": 11, "outputs:a_uchar": 12,
                "inputs:a_uint": 13, "outputs:a_uint": 14,
                "inputs:a_uint64": 15, "outputs:a_uint64": 16
            }
        ]
    }
}
