def add_copy(self, name, input_name, output_name):
        """
        Add a copy layer to the model that copies its input tensor to the output
        tensor. Input tensor and output tensor must have distinct names.
        Refer to the ``CopyLayerParams`` message in the specification (NeuralNetwork.proto) for more details.

        Parameters
        ----------
        name: str
            The name of this layer.
        input_name: str
            The input blob name of this layer.
        output_name: str
            The output blob name of this layer.
        """

        spec_layer = self._add_generic_layer(name, [input_name], [output_name])
        spec_layer.copy.MergeFromString(b"")
        # If output name rank is different than earlier,
        # mark it as unknown
        if output_name in self.rank_dict and self._get_rank(
            output_name
        ) != self._get_rank(input_name):
            self.rank_dict[output_name] = -1
        else:
            self.rank_dict[output_name] = self._get_rank(input_name)
        return spec_layer

        Add a copy layer to the model that copies its input tensor to the output
        tensor. Input tensor and output tensor must have distinct names.
        Refer to the ``CopyLayerParams`` message in the specification (NeuralNetwork.proto) for more details.

        Parameters
        ----------
        name: str
            The name of this layer.
        input_name: str
            The input blob name of this layer.
        output_name: str
            The output blob name of this layer.
        
coremltools/models/neural_network/builder.py