def _infer_nodeclass_from_args(dtype, val=None):
        """
        We will allow the user to request a 'dtype' that is a python type, blender datatype, or blender
        nodetype.

        All of these must be mapped to some node_info.NODECLASS in order to create a node.
        Optionally, we can try to infer a nodeclass from the type of a provided `val`
        """

        if dtype is None:
            if val is not None:
                datatype = node_info.PYTYPE_TO_DATATYPE[type(val)]
            else:
                # assert attribute is not None
                datatype = "FLOAT_VECTOR"
            return node_info.DATATYPE_TO_NODECLASS[datatype]
        else:
            if dtype in node_info.NODECLASSES:
                return dtype
            else:
                if dtype in node_info.NODETYPE_TO_DATATYPE:
                    datatype = node_info.NODETYPE_TO_DATATYPE[dtype]
                elif dtype in node_info.PYTYPE_TO_DATATYPE:
                    datatype = node_info.PYTYPE_TO_DATATYPE[dtype]
                else:
                    raise ValueError(f"Could not parse {dtype=}")
                return node_info.DATATYPE_TO_NODECLASS[datatype]

        We will allow the user to request a 'dtype' that is a python type, blender datatype, or blender
        nodetype.

        All of these must be mapped to some node_info.NODECLASS in order to create a node.
        Optionally, we can try to infer a nodeclass from the type of a provided `val`
        
infinigen/core/nodes/node_wrangler.py