<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_proto_attribute_value( pb_attributes, attribute_key, attribute_value):
 """Sets string, int, boolean or float value on protobuf span, link or annotation attributes. :type pb_attributes: :class: `~opencensus.proto.trace.Span.Attributes` :param pb_attributes: protobuf Span's attributes property :type attribute_key: str :param attribute_key: attribute key to set :type attribute_value: str or int or bool or float :param attribute_value: attribute value """


    if isinstance(attribute_value, bool):
        pb_attributes.attribute_map[attribute_key].\
            bool_value = attribute_value
    elif isinstance(attribute_value, int):
        pb_attributes.attribute_map[attribute_key].\
            int_value = attribute_value
    elif isinstance(attribute_value, str):
        pb_attributes.attribute_map[attribute_key].\
            string_value.value = attribute_value
    elif isinstance(attribute_value, float):
        pb_attributes.attribute_map[attribute_key].\
            double_value = attribute_value
    else:
        pb_attributes.attribute_map[attribute_key].\
            string_value.value = str(attribute_value)