Write a Python code to implement Double Ended Queue.

Write a Python code to implement Double Ended Queue.

class Deque:
    """
    Implementation of a Double Ended Queue (Deque) using a Python list.
    """
    def __init__(self):
        # Initialize an empty list to store deque elements
        self.items = []

    def is_empty(self):
        """Check if the deque is empty."""
        return len(self.items) == 0

    def add_front(self, item):
        """Add an element to the front of the deque."""
        self.items.insert(0, item)
        print(f"Added '{item}' to the front.")

    def add_rear(self, item):
        """Add an element to the rear of the deque."""
        self.items.append(item)
        print(f"Added '{item}' to the rear.")

    def remove_front(self):
        """Remove and return an element from the front of the deque."""
        if self.is_empty():
            return "Deque is empty. Cannot remove from front."
        item = self.items.pop(0)
        print(f"Removed '{item}' from the front.")
        return item

    def remove_rear(self):
        """Remove and return an element from the rear of the deque."""
        if self.is_empty():
            return "Deque is empty. Cannot remove from rear."
        item = self.items.pop()
        print(f"Removed '{item}' from the rear.")
        return item

    def peek_front(self):
        """Return the element at the front without removing it."""
        if self.is_empty():
            return "Deque is empty."
        return self.items[0]

    def peek_rear(self):
        """Return the element at the rear without removing it."""
        if self.is_empty():
            return "Deque is empty."
        return self.items[-1]

    def size(self):
        """Return the number of elements in the deque."""
        return len(self.items)

    def display(self):
        """Display all elements in the deque."""
        if self.is_empty():
            print("Deque is empty.")
        else:
            print("Deque contents (Front -> Rear):", self.items)

# --- Example Usage (Managing a list of Indian cities) ---
deque = Deque()

print("--- Adding elements ---")
deque.add_rear("Mumbai")
deque.add_rear("Delhi")
deque.add_front("Chennai")
deque.add_front("Kolkata")
deque.display()

print("\n--- Removing elements ---")
deque.remove_front()
deque.remove_rear()
deque.display()

print("\n--- Peeking elements ---")
print(f"Front element: {deque.peek_front()}")
print(f"Rear element: {deque.peek_rear()}")

print(f"\nCurrent size: {deque.size()}")

print("\n--- Removing all elements ---")
deque.remove_front()
deque.remove_front()
deque.display()
print(f"Is deque empty? {deque.is_empty()}")