def show_options(
        self,
        selection: str | None = None,
        category_group: str | list | None = None,
        category: str | list | None = None,
        currency: str | list | None = None,
        exchange: str | list | None = None,
    ) -> dict | np.ndarray:
        """
        Show available options for the selection criteria.

        This method retrieves unique values for different selection fields,
        optionally filtered by other criteria.

        Args:
            selection (str, optional): The specific field to show options for.
                Choose from: "category_group", "category", "currency", and "exchange".
                If None, returns options for all fields.
            category_group (str | list, optional): Filter by category group.
                Default is None, which returns all category groups.
            category (str | list, optional): Filter by category.
                Default is None, which returns all categories.
            currency (str | list, optional): Filter by currency.
                Default is None, which returns all currencies.
            exchange (str | list, optional): Filter by exchange.
                Default is None, which returns all exchanges.

        Raises:
            ValueError: If the specified selection is not valid or if the specified
                category group, category, currency, or exchange is not available in the database.

        Returns:
            dict | np.ndarray: A dictionary or array with all options for the specified selection.
                If selection is None, returns a dictionary with unique values for all fields.
                If selection is specified, returns an array of unique values for that field.
        """
        selection_values = ["category_group", "category", "currency", "exchange"]

        if selection is not None and selection not in selection_values:
            raise ValueError(
                f"The selection variable provided is not valid, "
                f"choose from {', '.join(selection_values)}"
            )

        indices = self.select(
            category_group=category_group,
            category=category,
            currency=currency,
            exchange=exchange,
        )

        return (
            {
                column: indices[column].dropna().sort_values().unique()
                for column in selection_values
            }
            if selection is None
            else indices[selection].dropna().sort_values().unique()
        )

        Show available options for the selection criteria.

        This method retrieves unique values for different selection fields,
        optionally filtered by other criteria.

        Args:
            selection (str, optional): The specific field to show options for.
                Choose from: "category_group", "category", "currency", and "exchange".
                If None, returns options for all fields.
            category_group (str | list, optional): Filter by category group.
                Default is None, which returns all category groups.
            category (str | list, optional): Filter by category.
                Default is None, which returns all categories.
            currency (str | list, optional): Filter by currency.
                Default is None, which returns all currencies.
            exchange (str | list, optional): Filter by exchange.
                Default is None, which returns all exchanges.

        Raises:
            ValueError: If the specified selection is not valid or if the specified
                category group, category, currency, or exchange is not available in the database.

        Returns:
            dict | np.ndarray: A dictionary or array with all options for the specified selection.
                If selection is None, returns a dictionary with unique values for all fields.
                If selection is specified, returns an array of unique values for that field.
        
financedatabase/Indices.py