def parse(self, data):
self.validate_packet(data)<EOL>id_ = self.dump_hex(data[<NUM_LIT:4>:<NUM_LIT:6>])<EOL>uv = data[<NUM_LIT:6>]<EOL>temperature = ((data[<NUM_LIT:7>] & <NUM_LIT>) * <NUM_LIT> + data[<NUM_LIT:8>]) / <NUM_LIT:10><EOL>signbit = data[<NUM_LIT:7>] & <NUM_LIT><EOL>if signbit != <NUM_LIT:0>:<EOL><INDENT>temperature = -temperature<EOL><DEDENT>results = self.parse_header_part(data)<EOL>sub_type = results['<STR_LIT>']<EOL>sensor_specific = {<EOL>'<STR_LIT:id>': id_,<EOL>'<STR_LIT>': uv<EOL>}<EOL>if sub_type == <NUM_LIT>:<EOL><INDENT>sensor_specific['<STR_LIT>'] = temperature<EOL><DEDENT>results.update(RfxPacketUtils.parse_signal_and_battery(data[<NUM_LIT:9>]))<EOL>results.update(sensor_specific)<EOL>return results<EOL>
Parse a 10 bytes packet in the UltraViolet format and return a
        dictionary containing the data extracted. An example of a return value
        would be:

        .. code-block:: python

            {
                'id': "0x2EB2",
                'packet_length': 9,
                'packet_type': 87,
                'packet_type_name': 'UV sensors',
                'sequence_number': 0,
                'packet_subtype': 3,
                'packet_subtype_name': "TFA",
                'temperature': 21.3,
                'uv': 3,
                'signal_level': 9,
                'battery_level': 6,
            }

        :param data: bytearray to be parsed
        :type data: bytearray

        :return: Data dictionary containing the parsed values
        :rtype: dict