Generates the model.json given a list of attributes, which are a tuple comprised of:
            - name
            - value
        Type is figured out automatically, but we should consider specifying it explicitly.
        Note: this only supports doubles and tensors that are vectors/lists of doubles.
        :param transformer:
        :param attributes_to_serialize: Tuple of (name, value)
        :return:

def get_mleap_model(self, transformer, attributes_to_serialize=None):
        """
        Generates the model.json given a list of attributes, which are a tuple comprised of:
            - name
            - value
        Type is figured out automatically, but we should consider specifying it explicitly.
        Note: this only supports doubles and tensors that are vectors/lists of doubles.
        :param transformer:
        :param attributes_to_serialize: Tuple of (name, value)
        :return:
        """
        js = {
            'op': transformer.op
        }

        # If the transformer doesn't have any attributes, return just the op name
        if attributes_to_serialize is None:
            return js

        attributes = {}

        for name, value in attributes_to_serialize:
            if isinstance(value, float):
                attributes[name] = {
                    "double": value
                }

            elif isinstance(value, bool) and value in [True, False]:
                attributes[name] = {
                    "boolean": value
                }

            elif isinstance(value, int):
                attributes[name] = {
                    "long": value
                }
            elif isinstance(value, Vector):
                attributes[name] = {
                    "type": "list",
                    "double": value.values
                }
            elif isinstance(value, list) and (isinstance(value[0], np.float64) or isinstance(value[0], np.float32) or isinstance(value[0], float)):
                base = type(value[0])
                attributes[name] = {
                    _type_map[base]: value,
                    "shape": {
                        "dimensions": [{
                            "size": len(value),
                            "name": ""
                        }]
                    },
                    "type": "tensor"
                }
            elif isinstance(value, list) and isinstance(value[0], str):
                attributes[name] = {
                      "type": "list",
                      "string": value
                }

            elif isinstance(value, np.ndarray):
                attributes[name] = {
                    "double":  list(value.flatten()),
                    "shape": {
                        "dimensions": [{
                            "size": list(value.shape),
                            "name": ""
                        }]
                    },
                    "type": "tensor"
                }

            elif isinstance(value, str):
                attributes[name] = {
                    'string': value
                }

            elif isinstance(value, dict):
                shapes = list()
                for shape in value['data_shape']:
                    if shape['shape'] == 'scalar':
                        shapes.append(({"base": "scalar",
                                        "isNullable": False}))
                    elif shape['shape'] == 'tensor':
                        shapes.append(({"base": "tensor",
                                        "isNullable": False,
                                        "tensorShape": {
                                            "dimensions": [{
                                                "size": shape['tensor_shape']['dimensions'][0]['size'],
                                                "name": ""
                                                }]
                                            }
                                        }
                                       ))
                attributes[name] = {
                    'type': 'list',
                    'data_shape': shapes
                }

        js['attributes'] = attributes

        return js