# Path: nimoy/compare/types.py
# class Types(Enum):
#     EQUAL = 1
#     NOT_EQUAL = 2
#     LESS_THAN = 3
#     LESS_THAN_EQUAL = 4
#     GREATER_THAN = 5
#     GREATER_THAN_EQUAL = 6
#     IS = 7
#     IS_NOT = 8
#     IN = 9
#     NOT_IN = 10
#     MATCHES_REGEXP = 11


import ast
import _ast
import astor
from _ast import Dict, Constant
from nimoy.compare.types import Types
                while isinstance(target, _ast.Subscript):
                    target = target.value

                PowerAssertionTransformer._append_subscript_as_expression_values(root_expression_offset, ast_object,
                                                                                 target, d)
                if dict_to_return is not None:
                    d.keys.append(Constant(value='next', kind=None))
                    d.values.append(dict_to_return)
                dict_to_return = d
                if isinstance(target, _ast.Attribute):
                    ast_object = target.value
                else:
                    ast_object = None
            elif type(ast_object) in [_ast.List, _ast.Dict]:
                PowerAssertionTransformer._append_expression_keys(d)
                PowerAssertionTransformer._append_struct_literal_as_expression_values(root_expression_offset,
                                                                                      ast_object, d)
                if dict_to_return is not None:
                    d.keys.append(Constant(value='next', kind=None))
                    d.values.append(dict_to_return)
                dict_to_return = d
                ast_object = None
            else:
                raise Exception(
                    f"AST object of type {type(ast_object)} ({astor.to_source(ast_object).strip()}) is unsupported")

        return dict_to_return

    # Fetches the last link from the linked dictionaries
    @staticmethod

# Path: nimoy/compare/types.py
# class Types(Enum):
#     EQUAL = 1
#     NOT_EQUAL = 2
#     LESS_THAN = 3
#     LESS_THAN_EQUAL = 4
#     GREATER_THAN = 5
#     GREATER_THAN_EQUAL = 6
#     IS = 7
#     IS_NOT = 8
#     IN = 9
#     NOT_IN = 10
#     MATCHES_REGEXP = 11


# Path: nimoy/ast_tools/expression_transformer.py
import ast
import _ast
import astor
from _ast import Dict, Constant
from nimoy.compare.types import Types

                while isinstance(target, _ast.Subscript):
                    target = target.value

                PowerAssertionTransformer._append_subscript_as_expression_values(root_expression_offset, ast_object,
                                                                                 target, d)
                if dict_to_return is not None:
                    d.keys.append(Constant(value='next', kind=None))
                    d.values.append(dict_to_return)
                dict_to_return = d
                if isinstance(target, _ast.Attribute):
                    ast_object = target.value
                else:
                    ast_object = None
            elif type(ast_object) in [_ast.List, _ast.Dict]:
                PowerAssertionTransformer._append_expression_keys(d)
                PowerAssertionTransformer._append_struct_literal_as_expression_values(root_expression_offset,
                                                                                      ast_object, d)
                if dict_to_return is not None:
                    d.keys.append(Constant(value='next', kind=None))
                    d.values.append(dict_to_return)
                dict_to_return = d
                ast_object = None
            else:
                raise Exception(
                    f"AST object of type {type(ast_object)} ({astor.to_source(ast_object).strip()}) is unsupported")

        return dict_to_return

    # Fetches the last link from the linked dictionaries
    @staticmethod

    def get_last_dictionary(d: Dict) -> Dict: