import omni.kit.test
import omni.graph.core as og
import omni.graph.core.tests as ogts
from omni.graph.core.tests.omnigraph_test_utils import _TestGraphAndNode
from omni.graph.core.tests.omnigraph_test_utils import _test_clear_scene
from omni.graph.core.tests.omnigraph_test_utils import _test_setup_scene
from omni.graph.core.tests.omnigraph_test_utils import _test_verify_scene


class TestOgn(ogts.OmniGraphTestCase):

    TEST_DATA = [
        {
            'inputs': [
                ['inputs:doNotCompute', True, False],
            ],
            'outputs': [
                ['outputs:a_bool', True, False],
                ['outputs:a_bool_array', [True, False], False],
                ['outputs:a_colord_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_colord_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_colorf_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_colorf_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_colorh_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_colorh_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_colord_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_colord_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_colorf_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_colorf_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_colorh_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_colorh_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_double', 1.5, False],
                ['outputs:a_double_2', [1.5, 2.5], False],
                ['outputs:a_double_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_double_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_double_array', [1.5, 2.5], False],
                ['outputs:a_double_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_double_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_double_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_execution', 2, False],
                ['outputs:a_float', 1.5, False],
                ['outputs:a_float_2', [1.5, 2.5], False],
                ['outputs:a_float_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_float_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_float_array', [1.5, 2.5], False],
                ['outputs:a_float_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_float_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_float_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_frame_4', [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5], False],
                ['outputs:a_frame_4_array', [[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5], [11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5]], False],
                ['outputs:a_half', 1.5, False],
                ['outputs:a_half_2', [1.5, 2.5], False],
                ['outputs:a_half_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_half_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_half_array', [1.5, 2.5], False],
                ['outputs:a_half_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_half_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_half_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_int', 1, False],
                ['outputs:a_int_2', [1, 2], False],
                ['outputs:a_int_3', [1, 2, 3], False],
                ['outputs:a_int_4', [1, 2, 3, 4], False],
                ['outputs:a_int_array', [1, 2], False],
                ['outputs:a_int_2_array', [[1, 2], [3, 4]], False],
                ['outputs:a_int_3_array', [[1, 2, 3], [4, 5, 6]], False],
                ['outputs:a_int_4_array', [[1, 2, 3, 4], [5, 6, 7, 8]], False],
                ['outputs:a_int64', 12345, False],
                ['outputs:a_int64_array', [12345, 23456], False],
                ['outputs:a_matrixd_2', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_matrixd_3', [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5], False],
                ['outputs:a_matrixd_4', [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5], False],
                ['outputs:a_matrixd_2_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_matrixd_3_array', [[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5], [11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5]], False],
                ['outputs:a_matrixd_4_array', [[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5], [11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5]], False],
                ['outputs:a_normald_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_normalf_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_normalh_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_normald_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_normalf_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_normalh_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_objectId', 2, False],
                ['outputs:a_objectId_array', [2, 3], False],
                ['outputs:a_pointd_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_pointf_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_pointh_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_pointd_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_pointf_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_pointh_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_quatd_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_quatf_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_quath_4', [1.5, 2.5, 3.5, 4.5], False],
                ['outputs:a_quatd_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_quatf_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_quath_4_array', [[1.5, 2.5, 3.5, 4.5], [11.5, 12.5, 13.5, 14.5]], False],
                ['outputs:a_string', "Snoke", False],
                ['outputs:a_texcoordd_2', [1.5, 2.5], False],
                ['outputs:a_texcoordd_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_texcoordf_2', [1.5, 2.5], False],
                ['outputs:a_texcoordf_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_texcoordh_2', [1.5, 2.5], False],
                ['outputs:a_texcoordh_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_texcoordd_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_texcoordd_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_texcoordf_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_texcoordf_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_texcoordh_2_array', [[1.5, 2.5], [11.5, 12.5]], False],
                ['outputs:a_texcoordh_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_timecode', 2.5, False],
                ['outputs:a_timecode_array', [2.5, 3.5], False],
                ['outputs:a_token', "Jedi", False],
                ['outputs:a_token_array', ["Luke", "Skywalker"], False],
                ['outputs:a_uchar', 2, False],
                ['outputs:a_uchar_array', [2, 3], False],
                ['outputs:a_uint', 2, False],
                ['outputs:a_uint_array', [2, 3], False],
                ['outputs:a_uint64', 2, False],
                ['outputs:a_uint64_array', [2, 3], False],
                ['outputs:a_vectord_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_vectorf_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_vectorh_3', [1.5, 2.5, 3.5], False],
                ['outputs:a_vectord_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_vectorf_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
                ['outputs:a_vectorh_3_array', [[1.5, 2.5, 3.5], [11.5, 12.5, 13.5]], False],
            ],
        },
        {
            'inputs': [
                ['inputs:doNotCompute', False, False],
            ],
            'outputs': [
                ['outputs:a_bool', False, False],
                ['outputs:a_bool_array', [False, True], False],
                ['outputs:a_colord_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_colord_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_colorf_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_colorf_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_colorh_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_colorh_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_colord_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_colord_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_colorf_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_colorf_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_colorh_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_colorh_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_double', 1.0, False],
                ['outputs:a_double_2', [1.0, 2.0], False],
                ['outputs:a_double_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_double_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_double_array', [1.0, 2.0], False],
                ['outputs:a_double_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_double_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_double_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_execution', 1, False],
                ['outputs:a_float', 1.0, False],
                ['outputs:a_float_2', [1.0, 2.0], False],
                ['outputs:a_float_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_float_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_float_array', [1.0, 2.0], False],
                ['outputs:a_float_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_float_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_float_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_frame_4', [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0], False],
                ['outputs:a_frame_4_array', [[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0], [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0]], False],
                ['outputs:a_half', 1.0, False],
                ['outputs:a_half_2', [1.0, 2.0], False],
                ['outputs:a_half_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_half_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_half_array', [1.0, 2.0], False],
                ['outputs:a_half_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_half_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_half_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_int', 1, False],
                ['outputs:a_int_2', [1, 2], False],
                ['outputs:a_int_3', [1, 2, 3], False],
                ['outputs:a_int_4', [1, 2, 3, 4], False],
                ['outputs:a_int_array', [1, 2], False],
                ['outputs:a_int_2_array', [[1, 2], [3, 4]], False],
                ['outputs:a_int_3_array', [[1, 2, 3], [4, 5, 6]], False],
                ['outputs:a_int_4_array', [[1, 2, 3, 4], [5, 6, 7, 8]], False],
                ['outputs:a_int64', 12345, False],
                ['outputs:a_int64_array', [12345, 23456], False],
                ['outputs:a_matrixd_2', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_matrixd_3', [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], False],
                ['outputs:a_matrixd_4', [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0], False],
                ['outputs:a_matrixd_2_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_matrixd_3_array', [[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0]], False],
                ['outputs:a_matrixd_4_array', [[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0], [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0]], False],
                ['outputs:a_normald_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_normalf_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_normalh_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_normald_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_normalf_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_normalh_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_objectId', 1, False],
                ['outputs:a_objectId_array', [1, 2], False],
                ['outputs:a_pointd_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_pointf_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_pointh_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_pointd_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_pointf_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_pointh_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_quatd_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_quatf_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_quath_4', [1.0, 2.0, 3.0, 4.0], False],
                ['outputs:a_quatd_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_quatf_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_quath_4_array', [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]], False],
                ['outputs:a_string', "Rey", False],
                ['outputs:a_texcoordd_2', [1.0, 2.0], False],
                ['outputs:a_texcoordd_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_texcoordf_2', [1.0, 2.0], False],
                ['outputs:a_texcoordf_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_texcoordh_2', [1.0, 2.0], False],
                ['outputs:a_texcoordh_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_texcoordd_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_texcoordd_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_texcoordf_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_texcoordf_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_texcoordh_2_array', [[1.0, 2.0], [11.0, 12.0]], False],
                ['outputs:a_texcoordh_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_timecode', 1.0, False],
                ['outputs:a_timecode_array', [1.0, 2.0], False],
                ['outputs:a_token', "Sith", False],
                ['outputs:a_token_array', ["Kylo", "Ren"], False],
                ['outputs:a_uchar', 1, False],
                ['outputs:a_uchar_array', [1, 2], False],
                ['outputs:a_uint', 1, False],
                ['outputs:a_uint_array', [1, 2], False],
                ['outputs:a_uint64', 1, False],
                ['outputs:a_uint64_array', [1, 2], False],
                ['outputs:a_vectord_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_vectorf_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_vectorh_3', [1.0, 2.0, 3.0], False],
                ['outputs:a_vectord_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_vectorf_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
                ['outputs:a_vectorh_3_array', [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]], False],
            ],
        },
        {
            'inputs': [
                ['inputs:doNotCompute', False, False],
                ['inputs:a_bool', True, False],
                ['inputs:a_bool_array', [True, True], False],
                ['inputs:a_colord_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_colord_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_colorf_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_colorf_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_colorh_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_colorh_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_colord_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_colord_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_colorf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_colorf_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_colorh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_colorh_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_double', 1.25, False],
                ['inputs:a_double_2', [1.25, 2.25], False],
                ['inputs:a_double_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_double_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_double_array', [1.25, 2.25], False],
                ['inputs:a_double_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_double_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_double_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_execution', 3, False],
                ['inputs:a_float', 1.25, False],
                ['inputs:a_float_2', [1.25, 2.25], False],
                ['inputs:a_float_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_float_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_float_array', [1.25, 2.25], False],
                ['inputs:a_float_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_float_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_float_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_frame_4', [1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], False],
                ['inputs:a_frame_4_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25, 20.25, 21.25, 22.25, 23.25, 24.25, 25.25, 26.25]], False],
                ['inputs:a_half', 1.25, False],
                ['inputs:a_half_2', [1.25, 2.25], False],
                ['inputs:a_half_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_half_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_half_array', [1.25, 2.25], False],
                ['inputs:a_half_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_half_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_half_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_int', 11, False],
                ['inputs:a_int_2', [11, 12], False],
                ['inputs:a_int_3', [11, 12, 13], False],
                ['inputs:a_int_4', [11, 12, 13, 14], False],
                ['inputs:a_int_array', [11, 12], False],
                ['inputs:a_int_2_array', [[11, 12], [13, 14]], False],
                ['inputs:a_int_3_array', [[11, 12, 13], [14, 15, 16]], False],
                ['inputs:a_int_4_array', [[11, 12, 13, 14], [15, 16, 17, 18]], False],
                ['inputs:a_int64', 34567, False],
                ['inputs:a_int64_array', [45678, 56789], False],
                ['inputs:a_matrixd_2', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_matrixd_3', [1.25, 2.25, 3.25, 11.25, 12.25, 13.25, 21.25, 22.25, 23.25], False],
                ['inputs:a_matrixd_4', [1.25, 2.25, 3.25, 4.25, 11.25, 12.25, 13.25, 14.25, 21.25, 22.25, 23.25, 24.25, 31.25, 32.25, 33.25, 34.25], False],
                ['inputs:a_matrixd_2_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_matrixd_3_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25]], False],
                ['inputs:a_matrixd_4_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25, 20.25, 21.25, 22.25, 23.25, 24.25, 25.25, 26.25]], False],
                ['inputs:a_normald_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_normalf_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_normalh_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_normald_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_normalf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_normalh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_objectId', 3, False],
                ['inputs:a_objectId_array', [3, 4], False],
                ['inputs:a_pointd_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_pointf_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_pointh_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_pointd_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_pointf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_pointh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_quatd_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_quatf_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_quath_4', [1.25, 2.25, 3.25, 4.25], False],
                ['inputs:a_quatd_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_quatf_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_quath_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['inputs:a_string', "Palpatine", False],
                ['inputs:a_texcoordd_2', [1.25, 2.25], False],
                ['inputs:a_texcoordd_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_texcoordf_2', [1.25, 2.25], False],
                ['inputs:a_texcoordf_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_texcoordh_2', [1.25, 2.25], False],
                ['inputs:a_texcoordh_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_texcoordd_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_texcoordd_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_texcoordf_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_texcoordf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_texcoordh_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['inputs:a_texcoordh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_timecode', 1.25, False],
                ['inputs:a_timecode_array', [1.25, 2.25], False],
                ['inputs:a_token', "Rebels", False],
                ['inputs:a_token_array', ["Han", "Solo"], False],
                ['inputs:a_uchar', 3, False],
                ['inputs:a_uchar_array', [3, 4], False],
                ['inputs:a_uint', 3, False],
                ['inputs:a_uint_array', [3, 4], False],
                ['inputs:a_uint64', 3, False],
                ['inputs:a_uint64_array', [3, 4], False],
                ['inputs:a_vectord_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_vectorf_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_vectorh_3', [1.25, 2.25, 3.25], False],
                ['inputs:a_vectord_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_vectorf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['inputs:a_vectorh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
            ],
            'outputs': [
                ['outputs:a_bool', True, False],
                ['outputs:a_bool_array', [True, True], False],
                ['outputs:a_colord_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_colord_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_colorf_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_colorf_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_colorh_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_colorh_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_colord_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_colord_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_colorf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_colorf_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_colorh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_colorh_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_double', 1.25, False],
                ['outputs:a_double_2', [1.25, 2.25], False],
                ['outputs:a_double_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_double_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_double_array', [1.25, 2.25], False],
                ['outputs:a_double_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_double_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_double_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_execution', 3, False],
                ['outputs:a_float', 1.25, False],
                ['outputs:a_float_2', [1.25, 2.25], False],
                ['outputs:a_float_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_float_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_float_array', [1.25, 2.25], False],
                ['outputs:a_float_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_float_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_float_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_frame_4', [1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], False],
                ['outputs:a_frame_4_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25, 20.25, 21.25, 22.25, 23.25, 24.25, 25.25, 26.25]], False],
                ['outputs:a_half', 1.25, False],
                ['outputs:a_half_2', [1.25, 2.25], False],
                ['outputs:a_half_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_half_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_half_array', [1.25, 2.25], False],
                ['outputs:a_half_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_half_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_half_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_int', 11, False],
                ['outputs:a_int_2', [11, 12], False],
                ['outputs:a_int_3', [11, 12, 13], False],
                ['outputs:a_int_4', [11, 12, 13, 14], False],
                ['outputs:a_int_array', [11, 12], False],
                ['outputs:a_int_2_array', [[11, 12], [13, 14]], False],
                ['outputs:a_int_3_array', [[11, 12, 13], [14, 15, 16]], False],
                ['outputs:a_int_4_array', [[11, 12, 13, 14], [15, 16, 17, 18]], False],
                ['outputs:a_int64', 34567, False],
                ['outputs:a_int64_array', [45678, 56789], False],
                ['outputs:a_matrixd_2', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_matrixd_3', [1.25, 2.25, 3.25, 11.25, 12.25, 13.25, 21.25, 22.25, 23.25], False],
                ['outputs:a_matrixd_4', [1.25, 2.25, 3.25, 4.25, 11.25, 12.25, 13.25, 14.25, 21.25, 22.25, 23.25, 24.25, 31.25, 32.25, 33.25, 34.25], False],
                ['outputs:a_matrixd_2_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_matrixd_3_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25]], False],
                ['outputs:a_matrixd_4_array', [[1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25, 11.25, 12.25, 13.25, 14.25, 15.25, 16.25], [11.25, 12.25, 13.25, 14.25, 15.25, 16.25, 17.25, 18.25, 19.25, 20.25, 21.25, 22.25, 23.25, 24.25, 25.25, 26.25]], False],
                ['outputs:a_normald_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_normalf_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_normalh_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_normald_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_normalf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_normalh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_objectId', 3, False],
                ['outputs:a_objectId_array', [3, 4], False],
                ['outputs:a_pointd_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_pointf_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_pointh_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_pointd_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_pointf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_pointh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_quatd_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_quatf_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_quath_4', [1.25, 2.25, 3.25, 4.25], False],
                ['outputs:a_quatd_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_quatf_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_quath_4_array', [[1.25, 2.25, 3.25, 4.25], [11.25, 12.25, 13.25, 14.25]], False],
                ['outputs:a_string', "Palpatine", False],
                ['outputs:a_texcoordd_2', [1.25, 2.25], False],
                ['outputs:a_texcoordd_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_texcoordf_2', [1.25, 2.25], False],
                ['outputs:a_texcoordf_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_texcoordh_2', [1.25, 2.25], False],
                ['outputs:a_texcoordh_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_texcoordd_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_texcoordd_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_texcoordf_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_texcoordf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_texcoordh_2_array', [[1.25, 2.25], [11.25, 12.25]], False],
                ['outputs:a_texcoordh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_timecode', 1.25, False],
                ['outputs:a_timecode_array', [1.25, 2.25], False],
                ['outputs:a_token', "Rebels", False],
                ['outputs:a_token_array', ["Han", "Solo"], False],
                ['outputs:a_uchar', 3, False],
                ['outputs:a_uchar_array', [3, 4], False],
                ['outputs:a_uint', 3, False],
                ['outputs:a_uint_array', [3, 4], False],
                ['outputs:a_uint64', 3, False],
                ['outputs:a_uint64_array', [3, 4], False],
                ['outputs:a_vectord_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_vectorf_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_vectorh_3', [1.25, 2.25, 3.25], False],
                ['outputs:a_vectord_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_vectorf_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
                ['outputs:a_vectorh_3_array', [[1.25, 2.25, 3.25], [11.25, 12.25, 13.25]], False],
            ],
        },
    ]

    async def test_generated(self):
        test_info = _TestGraphAndNode()
        controller = og.Controller()
        for i, test_run in enumerate(self.TEST_DATA):
            await _test_clear_scene(self, test_run)
            test_info = await _test_setup_scene(self, controller, "/TestGraph", "TestNode_omni_graph_test_TestAllDataTypesCarb", "omni.graph.test.TestAllDataTypesCarb", test_run, test_info)
            await controller.evaluate(test_info.graph)
            _test_verify_scene(self, controller, test_run, test_info, f"omni.graph.test.TestAllDataTypesCarb User test case #{i+1}")

    async def test_vectorized_generated(self):
        test_info = _TestGraphAndNode()
        controller = og.Controller()
        for i, test_run in enumerate(self.TEST_DATA):
            await _test_clear_scene(self, test_run)
            test_info = await _test_setup_scene(self, controller, "/TestGraph", "TestNode_omni_graph_test_TestAllDataTypesCarb","omni.graph.test.TestAllDataTypesCarb", test_run, test_info, 16)
            await controller.evaluate(test_info.graph)
            _test_verify_scene(self, controller, test_run, test_info, f"omni.graph.test.TestAllDataTypesCarb User test case #{i+1}", 16)

    async def test_thread_safety(self):
        import omni.kit
        # Generate multiple instances of the test setup to run them concurrently
        instance_setup = dict()
        for n in range(24):
            instance_setup[f"/TestGraph_{n}"] = _TestGraphAndNode()

        for i, test_run in enumerate(self.TEST_DATA):
            await _test_clear_scene(self, test_run)
            for (key, test_info) in instance_setup.items():
                test_info = await _test_setup_scene(self, og.Controller(allow_exists_prim=True), key, "TestNode_omni_graph_test_TestAllDataTypesCarb", "omni.graph.test.TestAllDataTypesCarb", test_run, test_info)
            self.assertEqual(len(og.get_all_graphs()), 24)

            # We want to evaluate all graphs concurrently. Kick them all.
            # Evaluate multiple times to skip 2 serial frames and increase chances for a race condition.
            for _ in range(10):
                await omni.kit.app.get_app().next_update_async()

            for (key, test_instance) in instance_setup.items():
                _test_verify_scene(self, og.Controller(), test_run, test_info, f"omni.graph.test.TestAllDataTypesCarb User test case #{i+1}, instance{key}")

async def test_data_access(self):
    from omni.graph.test.ogn.OgnTestAllDataTypesCarbDatabase import OgnTestAllDataTypesCarbDatabase
    (_, (test_node,), _, _) = og.Controller.edit("/TestGraph", {
        og.Controller.Keys.CREATE_NODES: ("Template_omni_graph_test_TestAllDataTypesCarb", "omni.graph.test.TestAllDataTypesCarb")
    })
    database = OgnTestAllDataTypesCarbDatabase(test_node)
    self.assertTrue(test_node.is_valid())
    node_type_name = test_node.get_type_name()
    self.assertEqual(og.GraphRegistry().get_node_type_version(node_type_name), 1)

    def _attr_error(attribute: og.Attribute, usd_test: bool) -> str:
        test_type = "USD Load" if usd_test else "Database Access"
        return f"{node_type_name} {test_type} Test - {attribute.get_name()} value error"


    self.assertTrue(test_node.get_attribute_exists("inputs:a_bool"))
    attribute = test_node.get_attribute("inputs:a_bool")
    db_value = database.inputs.a_bool
    expected_value = False
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_bool_array"))
    attribute = test_node.get_attribute("inputs:a_bool_array")
    db_value = database.inputs.a_bool_array
    expected_value = [False, True]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colord_3"))
    attribute = test_node.get_attribute("inputs:a_colord_3")
    db_value = database.inputs.a_colord_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colord_3_array"))
    attribute = test_node.get_attribute("inputs:a_colord_3_array")
    db_value = database.inputs.a_colord_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colord_4"))
    attribute = test_node.get_attribute("inputs:a_colord_4")
    db_value = database.inputs.a_colord_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colord_4_array"))
    attribute = test_node.get_attribute("inputs:a_colord_4_array")
    db_value = database.inputs.a_colord_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorf_3"))
    attribute = test_node.get_attribute("inputs:a_colorf_3")
    db_value = database.inputs.a_colorf_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorf_3_array"))
    attribute = test_node.get_attribute("inputs:a_colorf_3_array")
    db_value = database.inputs.a_colorf_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorf_4"))
    attribute = test_node.get_attribute("inputs:a_colorf_4")
    db_value = database.inputs.a_colorf_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorf_4_array"))
    attribute = test_node.get_attribute("inputs:a_colorf_4_array")
    db_value = database.inputs.a_colorf_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorh_3"))
    attribute = test_node.get_attribute("inputs:a_colorh_3")
    db_value = database.inputs.a_colorh_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorh_3_array"))
    attribute = test_node.get_attribute("inputs:a_colorh_3_array")
    db_value = database.inputs.a_colorh_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorh_4"))
    attribute = test_node.get_attribute("inputs:a_colorh_4")
    db_value = database.inputs.a_colorh_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_colorh_4_array"))
    attribute = test_node.get_attribute("inputs:a_colorh_4_array")
    db_value = database.inputs.a_colorh_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double"))
    attribute = test_node.get_attribute("inputs:a_double")
    db_value = database.inputs.a_double
    expected_value = 1.0
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_2"))
    attribute = test_node.get_attribute("inputs:a_double_2")
    db_value = database.inputs.a_double_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_2_array"))
    attribute = test_node.get_attribute("inputs:a_double_2_array")
    db_value = database.inputs.a_double_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_3"))
    attribute = test_node.get_attribute("inputs:a_double_3")
    db_value = database.inputs.a_double_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_3_array"))
    attribute = test_node.get_attribute("inputs:a_double_3_array")
    db_value = database.inputs.a_double_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_4"))
    attribute = test_node.get_attribute("inputs:a_double_4")
    db_value = database.inputs.a_double_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_4_array"))
    attribute = test_node.get_attribute("inputs:a_double_4_array")
    db_value = database.inputs.a_double_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_double_array"))
    attribute = test_node.get_attribute("inputs:a_double_array")
    db_value = database.inputs.a_double_array
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_execution"))
    attribute = test_node.get_attribute("inputs:a_execution")
    db_value = database.inputs.a_execution
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float"))
    attribute = test_node.get_attribute("inputs:a_float")
    db_value = database.inputs.a_float
    expected_value = 1.0
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_2"))
    attribute = test_node.get_attribute("inputs:a_float_2")
    db_value = database.inputs.a_float_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_2_array"))
    attribute = test_node.get_attribute("inputs:a_float_2_array")
    db_value = database.inputs.a_float_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_3"))
    attribute = test_node.get_attribute("inputs:a_float_3")
    db_value = database.inputs.a_float_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_3_array"))
    attribute = test_node.get_attribute("inputs:a_float_3_array")
    db_value = database.inputs.a_float_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_4"))
    attribute = test_node.get_attribute("inputs:a_float_4")
    db_value = database.inputs.a_float_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_4_array"))
    attribute = test_node.get_attribute("inputs:a_float_4_array")
    db_value = database.inputs.a_float_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_float_array"))
    attribute = test_node.get_attribute("inputs:a_float_array")
    db_value = database.inputs.a_float_array
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_frame_4"))
    attribute = test_node.get_attribute("inputs:a_frame_4")
    db_value = database.inputs.a_frame_4
    expected_value = [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_frame_4_array"))
    attribute = test_node.get_attribute("inputs:a_frame_4_array")
    db_value = database.inputs.a_frame_4_array
    expected_value = [[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]], [[11.0, 12.0, 13.0, 14.0], [15.0, 16.0, 17.0, 18.0], [19.0, 20.0, 21.0, 22.0], [23.0, 24.0, 25.0, 26.0]]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half"))
    attribute = test_node.get_attribute("inputs:a_half")
    db_value = database.inputs.a_half
    expected_value = 1.0
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_2"))
    attribute = test_node.get_attribute("inputs:a_half_2")
    db_value = database.inputs.a_half_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_2_array"))
    attribute = test_node.get_attribute("inputs:a_half_2_array")
    db_value = database.inputs.a_half_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_3"))
    attribute = test_node.get_attribute("inputs:a_half_3")
    db_value = database.inputs.a_half_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_3_array"))
    attribute = test_node.get_attribute("inputs:a_half_3_array")
    db_value = database.inputs.a_half_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_4"))
    attribute = test_node.get_attribute("inputs:a_half_4")
    db_value = database.inputs.a_half_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_4_array"))
    attribute = test_node.get_attribute("inputs:a_half_4_array")
    db_value = database.inputs.a_half_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_half_array"))
    attribute = test_node.get_attribute("inputs:a_half_array")
    db_value = database.inputs.a_half_array
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int"))
    attribute = test_node.get_attribute("inputs:a_int")
    db_value = database.inputs.a_int
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int64"))
    attribute = test_node.get_attribute("inputs:a_int64")
    db_value = database.inputs.a_int64
    expected_value = 12345
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int64_array"))
    attribute = test_node.get_attribute("inputs:a_int64_array")
    db_value = database.inputs.a_int64_array
    expected_value = [12345, 23456]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_2"))
    attribute = test_node.get_attribute("inputs:a_int_2")
    db_value = database.inputs.a_int_2
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_2_array"))
    attribute = test_node.get_attribute("inputs:a_int_2_array")
    db_value = database.inputs.a_int_2_array
    expected_value = [[1, 2], [3, 4]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_3"))
    attribute = test_node.get_attribute("inputs:a_int_3")
    db_value = database.inputs.a_int_3
    expected_value = [1, 2, 3]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_3_array"))
    attribute = test_node.get_attribute("inputs:a_int_3_array")
    db_value = database.inputs.a_int_3_array
    expected_value = [[1, 2, 3], [4, 5, 6]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_4"))
    attribute = test_node.get_attribute("inputs:a_int_4")
    db_value = database.inputs.a_int_4
    expected_value = [1, 2, 3, 4]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_4_array"))
    attribute = test_node.get_attribute("inputs:a_int_4_array")
    db_value = database.inputs.a_int_4_array
    expected_value = [[1, 2, 3, 4], [5, 6, 7, 8]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_int_array"))
    attribute = test_node.get_attribute("inputs:a_int_array")
    db_value = database.inputs.a_int_array
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_2"))
    attribute = test_node.get_attribute("inputs:a_matrixd_2")
    db_value = database.inputs.a_matrixd_2
    expected_value = [[1.0, 2.0], [3.0, 4.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_2_array"))
    attribute = test_node.get_attribute("inputs:a_matrixd_2_array")
    db_value = database.inputs.a_matrixd_2_array
    expected_value = [[[1.0, 2.0], [3.0, 4.0]], [[11.0, 12.0], [13.0, 14.0]]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_3"))
    attribute = test_node.get_attribute("inputs:a_matrixd_3")
    db_value = database.inputs.a_matrixd_3
    expected_value = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_3_array"))
    attribute = test_node.get_attribute("inputs:a_matrixd_3_array")
    db_value = database.inputs.a_matrixd_3_array
    expected_value = [[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]], [[11.0, 12.0, 13.0], [14.0, 15.0, 16.0], [17.0, 18.0, 19.0]]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_4"))
    attribute = test_node.get_attribute("inputs:a_matrixd_4")
    db_value = database.inputs.a_matrixd_4
    expected_value = [[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_matrixd_4_array"))
    attribute = test_node.get_attribute("inputs:a_matrixd_4_array")
    db_value = database.inputs.a_matrixd_4_array
    expected_value = [[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]], [[11.0, 12.0, 13.0, 14.0], [15.0, 16.0, 17.0, 18.0], [19.0, 20.0, 21.0, 22.0], [23.0, 24.0, 25.0, 26.0]]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normald_3"))
    attribute = test_node.get_attribute("inputs:a_normald_3")
    db_value = database.inputs.a_normald_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normald_3_array"))
    attribute = test_node.get_attribute("inputs:a_normald_3_array")
    db_value = database.inputs.a_normald_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normalf_3"))
    attribute = test_node.get_attribute("inputs:a_normalf_3")
    db_value = database.inputs.a_normalf_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normalf_3_array"))
    attribute = test_node.get_attribute("inputs:a_normalf_3_array")
    db_value = database.inputs.a_normalf_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normalh_3"))
    attribute = test_node.get_attribute("inputs:a_normalh_3")
    db_value = database.inputs.a_normalh_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_normalh_3_array"))
    attribute = test_node.get_attribute("inputs:a_normalh_3_array")
    db_value = database.inputs.a_normalh_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_objectId"))
    attribute = test_node.get_attribute("inputs:a_objectId")
    db_value = database.inputs.a_objectId
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_objectId_array"))
    attribute = test_node.get_attribute("inputs:a_objectId_array")
    db_value = database.inputs.a_objectId_array
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointd_3"))
    attribute = test_node.get_attribute("inputs:a_pointd_3")
    db_value = database.inputs.a_pointd_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointd_3_array"))
    attribute = test_node.get_attribute("inputs:a_pointd_3_array")
    db_value = database.inputs.a_pointd_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointf_3"))
    attribute = test_node.get_attribute("inputs:a_pointf_3")
    db_value = database.inputs.a_pointf_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointf_3_array"))
    attribute = test_node.get_attribute("inputs:a_pointf_3_array")
    db_value = database.inputs.a_pointf_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointh_3"))
    attribute = test_node.get_attribute("inputs:a_pointh_3")
    db_value = database.inputs.a_pointh_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_pointh_3_array"))
    attribute = test_node.get_attribute("inputs:a_pointh_3_array")
    db_value = database.inputs.a_pointh_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quatd_4"))
    attribute = test_node.get_attribute("inputs:a_quatd_4")
    db_value = database.inputs.a_quatd_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quatd_4_array"))
    attribute = test_node.get_attribute("inputs:a_quatd_4_array")
    db_value = database.inputs.a_quatd_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quatf_4"))
    attribute = test_node.get_attribute("inputs:a_quatf_4")
    db_value = database.inputs.a_quatf_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quatf_4_array"))
    attribute = test_node.get_attribute("inputs:a_quatf_4_array")
    db_value = database.inputs.a_quatf_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quath_4"))
    attribute = test_node.get_attribute("inputs:a_quath_4")
    db_value = database.inputs.a_quath_4
    expected_value = [1.0, 2.0, 3.0, 4.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_quath_4_array"))
    attribute = test_node.get_attribute("inputs:a_quath_4_array")
    db_value = database.inputs.a_quath_4_array
    expected_value = [[1.0, 2.0, 3.0, 4.0], [11.0, 12.0, 13.0, 14.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_string"))
    attribute = test_node.get_attribute("inputs:a_string")
    db_value = database.inputs.a_string
    expected_value = "Rey"
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordd_2"))
    attribute = test_node.get_attribute("inputs:a_texcoordd_2")
    db_value = database.inputs.a_texcoordd_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordd_2_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordd_2_array")
    db_value = database.inputs.a_texcoordd_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordd_3"))
    attribute = test_node.get_attribute("inputs:a_texcoordd_3")
    db_value = database.inputs.a_texcoordd_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordd_3_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordd_3_array")
    db_value = database.inputs.a_texcoordd_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordf_2"))
    attribute = test_node.get_attribute("inputs:a_texcoordf_2")
    db_value = database.inputs.a_texcoordf_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordf_2_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordf_2_array")
    db_value = database.inputs.a_texcoordf_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordf_3"))
    attribute = test_node.get_attribute("inputs:a_texcoordf_3")
    db_value = database.inputs.a_texcoordf_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordf_3_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordf_3_array")
    db_value = database.inputs.a_texcoordf_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordh_2"))
    attribute = test_node.get_attribute("inputs:a_texcoordh_2")
    db_value = database.inputs.a_texcoordh_2
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordh_2_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordh_2_array")
    db_value = database.inputs.a_texcoordh_2_array
    expected_value = [[1.0, 2.0], [11.0, 12.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordh_3"))
    attribute = test_node.get_attribute("inputs:a_texcoordh_3")
    db_value = database.inputs.a_texcoordh_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_texcoordh_3_array"))
    attribute = test_node.get_attribute("inputs:a_texcoordh_3_array")
    db_value = database.inputs.a_texcoordh_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_timecode"))
    attribute = test_node.get_attribute("inputs:a_timecode")
    db_value = database.inputs.a_timecode
    expected_value = 1.0
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_timecode_array"))
    attribute = test_node.get_attribute("inputs:a_timecode_array")
    db_value = database.inputs.a_timecode_array
    expected_value = [1.0, 2.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_token"))
    attribute = test_node.get_attribute("inputs:a_token")
    db_value = database.inputs.a_token
    expected_value = "Sith"
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_token_array"))
    attribute = test_node.get_attribute("inputs:a_token_array")
    db_value = database.inputs.a_token_array
    expected_value = ['Kylo', 'Ren']
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uchar"))
    attribute = test_node.get_attribute("inputs:a_uchar")
    db_value = database.inputs.a_uchar
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uchar_array"))
    attribute = test_node.get_attribute("inputs:a_uchar_array")
    db_value = database.inputs.a_uchar_array
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uint"))
    attribute = test_node.get_attribute("inputs:a_uint")
    db_value = database.inputs.a_uint
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uint64"))
    attribute = test_node.get_attribute("inputs:a_uint64")
    db_value = database.inputs.a_uint64
    expected_value = 1
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uint64_array"))
    attribute = test_node.get_attribute("inputs:a_uint64_array")
    db_value = database.inputs.a_uint64_array
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_uint_array"))
    attribute = test_node.get_attribute("inputs:a_uint_array")
    db_value = database.inputs.a_uint_array
    expected_value = [1, 2]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectord_3"))
    attribute = test_node.get_attribute("inputs:a_vectord_3")
    db_value = database.inputs.a_vectord_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectord_3_array"))
    attribute = test_node.get_attribute("inputs:a_vectord_3_array")
    db_value = database.inputs.a_vectord_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectorf_3"))
    attribute = test_node.get_attribute("inputs:a_vectorf_3")
    db_value = database.inputs.a_vectorf_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectorf_3_array"))
    attribute = test_node.get_attribute("inputs:a_vectorf_3_array")
    db_value = database.inputs.a_vectorf_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectorh_3"))
    attribute = test_node.get_attribute("inputs:a_vectorh_3")
    db_value = database.inputs.a_vectorh_3
    expected_value = [1.0, 2.0, 3.0]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:a_vectorh_3_array"))
    attribute = test_node.get_attribute("inputs:a_vectorh_3_array")
    db_value = database.inputs.a_vectorh_3_array
    expected_value = [[1.0, 2.0, 3.0], [11.0, 12.0, 13.0]]
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("inputs:doNotCompute"))
    attribute = test_node.get_attribute("inputs:doNotCompute")
    db_value = database.inputs.doNotCompute
    expected_value = True
    ogts.verify_values(expected_value, db_value, _attr_error(attribute, False))

    self.assertTrue(test_node.get_attribute_exists("outputs:a_bool"))
    attribute = test_node.get_attribute("outputs:a_bool")
    db_value = database.outputs.a_bool

    self.assertTrue(test_node.get_attribute_exists("outputs:a_bool_array"))
    attribute = test_node.get_attribute("outputs:a_bool_array")
    db_value = database.outputs.a_bool_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colord_3"))
    attribute = test_node.get_attribute("outputs:a_colord_3")
    db_value = database.outputs.a_colord_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colord_3_array"))
    attribute = test_node.get_attribute("outputs:a_colord_3_array")
    db_value = database.outputs.a_colord_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colord_4"))
    attribute = test_node.get_attribute("outputs:a_colord_4")
    db_value = database.outputs.a_colord_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colord_4_array"))
    attribute = test_node.get_attribute("outputs:a_colord_4_array")
    db_value = database.outputs.a_colord_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorf_3"))
    attribute = test_node.get_attribute("outputs:a_colorf_3")
    db_value = database.outputs.a_colorf_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorf_3_array"))
    attribute = test_node.get_attribute("outputs:a_colorf_3_array")
    db_value = database.outputs.a_colorf_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorf_4"))
    attribute = test_node.get_attribute("outputs:a_colorf_4")
    db_value = database.outputs.a_colorf_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorf_4_array"))
    attribute = test_node.get_attribute("outputs:a_colorf_4_array")
    db_value = database.outputs.a_colorf_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorh_3"))
    attribute = test_node.get_attribute("outputs:a_colorh_3")
    db_value = database.outputs.a_colorh_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorh_3_array"))
    attribute = test_node.get_attribute("outputs:a_colorh_3_array")
    db_value = database.outputs.a_colorh_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorh_4"))
    attribute = test_node.get_attribute("outputs:a_colorh_4")
    db_value = database.outputs.a_colorh_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_colorh_4_array"))
    attribute = test_node.get_attribute("outputs:a_colorh_4_array")
    db_value = database.outputs.a_colorh_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double"))
    attribute = test_node.get_attribute("outputs:a_double")
    db_value = database.outputs.a_double

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_2"))
    attribute = test_node.get_attribute("outputs:a_double_2")
    db_value = database.outputs.a_double_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_2_array"))
    attribute = test_node.get_attribute("outputs:a_double_2_array")
    db_value = database.outputs.a_double_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_3"))
    attribute = test_node.get_attribute("outputs:a_double_3")
    db_value = database.outputs.a_double_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_3_array"))
    attribute = test_node.get_attribute("outputs:a_double_3_array")
    db_value = database.outputs.a_double_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_4"))
    attribute = test_node.get_attribute("outputs:a_double_4")
    db_value = database.outputs.a_double_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_4_array"))
    attribute = test_node.get_attribute("outputs:a_double_4_array")
    db_value = database.outputs.a_double_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_double_array"))
    attribute = test_node.get_attribute("outputs:a_double_array")
    db_value = database.outputs.a_double_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_execution"))
    attribute = test_node.get_attribute("outputs:a_execution")
    db_value = database.outputs.a_execution

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float"))
    attribute = test_node.get_attribute("outputs:a_float")
    db_value = database.outputs.a_float

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_2"))
    attribute = test_node.get_attribute("outputs:a_float_2")
    db_value = database.outputs.a_float_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_2_array"))
    attribute = test_node.get_attribute("outputs:a_float_2_array")
    db_value = database.outputs.a_float_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_3"))
    attribute = test_node.get_attribute("outputs:a_float_3")
    db_value = database.outputs.a_float_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_3_array"))
    attribute = test_node.get_attribute("outputs:a_float_3_array")
    db_value = database.outputs.a_float_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_4"))
    attribute = test_node.get_attribute("outputs:a_float_4")
    db_value = database.outputs.a_float_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_4_array"))
    attribute = test_node.get_attribute("outputs:a_float_4_array")
    db_value = database.outputs.a_float_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_float_array"))
    attribute = test_node.get_attribute("outputs:a_float_array")
    db_value = database.outputs.a_float_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_frame_4"))
    attribute = test_node.get_attribute("outputs:a_frame_4")
    db_value = database.outputs.a_frame_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_frame_4_array"))
    attribute = test_node.get_attribute("outputs:a_frame_4_array")
    db_value = database.outputs.a_frame_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half"))
    attribute = test_node.get_attribute("outputs:a_half")
    db_value = database.outputs.a_half

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_2"))
    attribute = test_node.get_attribute("outputs:a_half_2")
    db_value = database.outputs.a_half_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_2_array"))
    attribute = test_node.get_attribute("outputs:a_half_2_array")
    db_value = database.outputs.a_half_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_3"))
    attribute = test_node.get_attribute("outputs:a_half_3")
    db_value = database.outputs.a_half_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_3_array"))
    attribute = test_node.get_attribute("outputs:a_half_3_array")
    db_value = database.outputs.a_half_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_4"))
    attribute = test_node.get_attribute("outputs:a_half_4")
    db_value = database.outputs.a_half_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_4_array"))
    attribute = test_node.get_attribute("outputs:a_half_4_array")
    db_value = database.outputs.a_half_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_half_array"))
    attribute = test_node.get_attribute("outputs:a_half_array")
    db_value = database.outputs.a_half_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int"))
    attribute = test_node.get_attribute("outputs:a_int")
    db_value = database.outputs.a_int

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int64"))
    attribute = test_node.get_attribute("outputs:a_int64")
    db_value = database.outputs.a_int64

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int64_array"))
    attribute = test_node.get_attribute("outputs:a_int64_array")
    db_value = database.outputs.a_int64_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_2"))
    attribute = test_node.get_attribute("outputs:a_int_2")
    db_value = database.outputs.a_int_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_2_array"))
    attribute = test_node.get_attribute("outputs:a_int_2_array")
    db_value = database.outputs.a_int_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_3"))
    attribute = test_node.get_attribute("outputs:a_int_3")
    db_value = database.outputs.a_int_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_3_array"))
    attribute = test_node.get_attribute("outputs:a_int_3_array")
    db_value = database.outputs.a_int_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_4"))
    attribute = test_node.get_attribute("outputs:a_int_4")
    db_value = database.outputs.a_int_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_4_array"))
    attribute = test_node.get_attribute("outputs:a_int_4_array")
    db_value = database.outputs.a_int_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_int_array"))
    attribute = test_node.get_attribute("outputs:a_int_array")
    db_value = database.outputs.a_int_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_2"))
    attribute = test_node.get_attribute("outputs:a_matrixd_2")
    db_value = database.outputs.a_matrixd_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_2_array"))
    attribute = test_node.get_attribute("outputs:a_matrixd_2_array")
    db_value = database.outputs.a_matrixd_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_3"))
    attribute = test_node.get_attribute("outputs:a_matrixd_3")
    db_value = database.outputs.a_matrixd_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_3_array"))
    attribute = test_node.get_attribute("outputs:a_matrixd_3_array")
    db_value = database.outputs.a_matrixd_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_4"))
    attribute = test_node.get_attribute("outputs:a_matrixd_4")
    db_value = database.outputs.a_matrixd_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_matrixd_4_array"))
    attribute = test_node.get_attribute("outputs:a_matrixd_4_array")
    db_value = database.outputs.a_matrixd_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normald_3"))
    attribute = test_node.get_attribute("outputs:a_normald_3")
    db_value = database.outputs.a_normald_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normald_3_array"))
    attribute = test_node.get_attribute("outputs:a_normald_3_array")
    db_value = database.outputs.a_normald_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normalf_3"))
    attribute = test_node.get_attribute("outputs:a_normalf_3")
    db_value = database.outputs.a_normalf_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normalf_3_array"))
    attribute = test_node.get_attribute("outputs:a_normalf_3_array")
    db_value = database.outputs.a_normalf_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normalh_3"))
    attribute = test_node.get_attribute("outputs:a_normalh_3")
    db_value = database.outputs.a_normalh_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_normalh_3_array"))
    attribute = test_node.get_attribute("outputs:a_normalh_3_array")
    db_value = database.outputs.a_normalh_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_objectId"))
    attribute = test_node.get_attribute("outputs:a_objectId")
    db_value = database.outputs.a_objectId

    self.assertTrue(test_node.get_attribute_exists("outputs:a_objectId_array"))
    attribute = test_node.get_attribute("outputs:a_objectId_array")
    db_value = database.outputs.a_objectId_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointd_3"))
    attribute = test_node.get_attribute("outputs:a_pointd_3")
    db_value = database.outputs.a_pointd_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointd_3_array"))
    attribute = test_node.get_attribute("outputs:a_pointd_3_array")
    db_value = database.outputs.a_pointd_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointf_3"))
    attribute = test_node.get_attribute("outputs:a_pointf_3")
    db_value = database.outputs.a_pointf_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointf_3_array"))
    attribute = test_node.get_attribute("outputs:a_pointf_3_array")
    db_value = database.outputs.a_pointf_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointh_3"))
    attribute = test_node.get_attribute("outputs:a_pointh_3")
    db_value = database.outputs.a_pointh_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_pointh_3_array"))
    attribute = test_node.get_attribute("outputs:a_pointh_3_array")
    db_value = database.outputs.a_pointh_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quatd_4"))
    attribute = test_node.get_attribute("outputs:a_quatd_4")
    db_value = database.outputs.a_quatd_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quatd_4_array"))
    attribute = test_node.get_attribute("outputs:a_quatd_4_array")
    db_value = database.outputs.a_quatd_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quatf_4"))
    attribute = test_node.get_attribute("outputs:a_quatf_4")
    db_value = database.outputs.a_quatf_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quatf_4_array"))
    attribute = test_node.get_attribute("outputs:a_quatf_4_array")
    db_value = database.outputs.a_quatf_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quath_4"))
    attribute = test_node.get_attribute("outputs:a_quath_4")
    db_value = database.outputs.a_quath_4

    self.assertTrue(test_node.get_attribute_exists("outputs:a_quath_4_array"))
    attribute = test_node.get_attribute("outputs:a_quath_4_array")
    db_value = database.outputs.a_quath_4_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_string"))
    attribute = test_node.get_attribute("outputs:a_string")
    db_value = database.outputs.a_string

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordd_2"))
    attribute = test_node.get_attribute("outputs:a_texcoordd_2")
    db_value = database.outputs.a_texcoordd_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordd_2_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordd_2_array")
    db_value = database.outputs.a_texcoordd_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordd_3"))
    attribute = test_node.get_attribute("outputs:a_texcoordd_3")
    db_value = database.outputs.a_texcoordd_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordd_3_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordd_3_array")
    db_value = database.outputs.a_texcoordd_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordf_2"))
    attribute = test_node.get_attribute("outputs:a_texcoordf_2")
    db_value = database.outputs.a_texcoordf_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordf_2_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordf_2_array")
    db_value = database.outputs.a_texcoordf_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordf_3"))
    attribute = test_node.get_attribute("outputs:a_texcoordf_3")
    db_value = database.outputs.a_texcoordf_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordf_3_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordf_3_array")
    db_value = database.outputs.a_texcoordf_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordh_2"))
    attribute = test_node.get_attribute("outputs:a_texcoordh_2")
    db_value = database.outputs.a_texcoordh_2

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordh_2_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordh_2_array")
    db_value = database.outputs.a_texcoordh_2_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordh_3"))
    attribute = test_node.get_attribute("outputs:a_texcoordh_3")
    db_value = database.outputs.a_texcoordh_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_texcoordh_3_array"))
    attribute = test_node.get_attribute("outputs:a_texcoordh_3_array")
    db_value = database.outputs.a_texcoordh_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_timecode"))
    attribute = test_node.get_attribute("outputs:a_timecode")
    db_value = database.outputs.a_timecode

    self.assertTrue(test_node.get_attribute_exists("outputs:a_timecode_array"))
    attribute = test_node.get_attribute("outputs:a_timecode_array")
    db_value = database.outputs.a_timecode_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_token"))
    attribute = test_node.get_attribute("outputs:a_token")
    db_value = database.outputs.a_token

    self.assertTrue(test_node.get_attribute_exists("outputs:a_token_array"))
    attribute = test_node.get_attribute("outputs:a_token_array")
    db_value = database.outputs.a_token_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uchar"))
    attribute = test_node.get_attribute("outputs:a_uchar")
    db_value = database.outputs.a_uchar

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uchar_array"))
    attribute = test_node.get_attribute("outputs:a_uchar_array")
    db_value = database.outputs.a_uchar_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uint"))
    attribute = test_node.get_attribute("outputs:a_uint")
    db_value = database.outputs.a_uint

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uint64"))
    attribute = test_node.get_attribute("outputs:a_uint64")
    db_value = database.outputs.a_uint64

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uint64_array"))
    attribute = test_node.get_attribute("outputs:a_uint64_array")
    db_value = database.outputs.a_uint64_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_uint_array"))
    attribute = test_node.get_attribute("outputs:a_uint_array")
    db_value = database.outputs.a_uint_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectord_3"))
    attribute = test_node.get_attribute("outputs:a_vectord_3")
    db_value = database.outputs.a_vectord_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectord_3_array"))
    attribute = test_node.get_attribute("outputs:a_vectord_3_array")
    db_value = database.outputs.a_vectord_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectorf_3"))
    attribute = test_node.get_attribute("outputs:a_vectorf_3")
    db_value = database.outputs.a_vectorf_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectorf_3_array"))
    attribute = test_node.get_attribute("outputs:a_vectorf_3_array")
    db_value = database.outputs.a_vectorf_3_array

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectorh_3"))
    attribute = test_node.get_attribute("outputs:a_vectorh_3")
    db_value = database.outputs.a_vectorh_3

    self.assertTrue(test_node.get_attribute_exists("outputs:a_vectorh_3_array"))
    attribute = test_node.get_attribute("outputs:a_vectorh_3_array")
    db_value = database.outputs.a_vectorh_3_array
