<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_scope(self, tup_tree):
 """ Parse a SCOPE element and return a dictionary with an item for each specified scope attribute. The keys of the dictionary items are the scope names in upper case; the values are the Python boolean values True or False. Unspecified scope attributes are not represented in the returned dictionary; the user is expected to assume their default value of False. The returned dictionary does not preserve order of the scope attributes. :: <!ELEMENT SCOPE EMPTY> <!ATTLIST SCOPE CLASS (true | false) "false" ASSOCIATION (true | false) "false" REFERENCE (true | false) "false" PROPERTY (true | false) "false" METHOD (true | false) "false" PARAMETER (true | false) "false" INDICATION (true | false) "false" """


        self.check_node(tup_tree, 'SCOPE', (),
                        ('CLASS', 'ASSOCIATION', 'REFERENCE', 'PROPERTY',
                         'METHOD', 'PARAMETER', 'INDICATION'), ())

        # Even though XML attributes do not preserve order, we store the
        # scopes in an ordered dict to avoid a warning further down the
        # road.
        scopes = NocaseDict()
        for k, v in attrs(tup_tree).items():
            v_ = self.unpack_boolean(v)
            if v_ is None:
                raise CIMXMLParseError(
                    _format("Element {0!A} has an invalid value {1!A} for its "
                            "boolean attribute {2!A}", name(tup_tree), v, k),
                    conn_id=self.conn_id)
            scopes[k] = v_
        return scopes