#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# __coconut_hash__ = 0x881a9da

# Compiled with Coconut version 3.1.0

# Coconut Header: -------------------------------------------------------------

from __future__ import generator_stop
import sys as _coconut_sys
import os as _coconut_os
_coconut_header_info = ('3.1.0', '35', False)
_coconut_cached__coconut__ = _coconut_sys.modules.get('__coconut__')
_coconut_file_dir = _coconut_os.path.dirname(_coconut_os.path.abspath(__file__))
_coconut_pop_path = False
if _coconut_cached__coconut__ is None or getattr(_coconut_cached__coconut__, "_coconut_header_info", None) != _coconut_header_info and _coconut_os.path.dirname(_coconut_cached__coconut__.__file__ or "") != _coconut_file_dir:
    if _coconut_cached__coconut__ is not None:
        _coconut_sys.modules['_coconut_cached__coconut__'] = _coconut_cached__coconut__
        del _coconut_sys.modules['__coconut__']
    _coconut_sys.path.insert(0, _coconut_file_dir)
    _coconut_pop_path = True
    _coconut_module_name = _coconut_os.path.splitext(_coconut_os.path.basename(_coconut_file_dir))[0]
    if _coconut_module_name and _coconut_module_name[0].isalpha() and all(c.isalpha() or c.isdigit() for c in _coconut_module_name) and "__init__.py" in _coconut_os.listdir(_coconut_file_dir):
        _coconut_full_module_name = str(_coconut_module_name + ".__coconut__")
        import __coconut__ as _coconut__coconut__
        _coconut__coconut__.__name__ = _coconut_full_module_name
        for _coconut_v in vars(_coconut__coconut__).values():
            if getattr(_coconut_v, "__module__", None) == '__coconut__':
                try:
                    _coconut_v.__module__ = _coconut_full_module_name
                except AttributeError:
                    _coconut_v_type = type(_coconut_v)
                    if getattr(_coconut_v_type, "__module__", None) == '__coconut__':
                        _coconut_v_type.__module__ = _coconut_full_module_name
        _coconut_sys.modules[_coconut_full_module_name] = _coconut__coconut__
from __coconut__ import *
from __coconut__ import _coconut_call_set_names, _namedtuple_of, _coconut, _coconut_Expected, _coconut_MatchError, _coconut_SupportsAdd, _coconut_SupportsMinus, _coconut_SupportsMul, _coconut_SupportsPow, _coconut_SupportsTruediv, _coconut_SupportsFloordiv, _coconut_SupportsMod, _coconut_SupportsAnd, _coconut_SupportsXor, _coconut_SupportsOr, _coconut_SupportsLshift, _coconut_SupportsRshift, _coconut_SupportsMatmul, _coconut_SupportsInv, _coconut_iter_getitem, _coconut_base_compose, _coconut_forward_compose, _coconut_back_compose, _coconut_forward_star_compose, _coconut_back_star_compose, _coconut_forward_dubstar_compose, _coconut_back_dubstar_compose, _coconut_pipe, _coconut_star_pipe, _coconut_dubstar_pipe, _coconut_back_pipe, _coconut_back_star_pipe, _coconut_back_dubstar_pipe, _coconut_none_pipe, _coconut_none_star_pipe, _coconut_none_dubstar_pipe, _coconut_bool_and, _coconut_bool_or, _coconut_none_coalesce, _coconut_minus, _coconut_map, _coconut_partial, _coconut_complex_partial, _coconut_get_function_match_error, _coconut_base_pattern_func, _coconut_addpattern, _coconut_sentinel, _coconut_assert, _coconut_raise, _coconut_mark_as_match, _coconut_reiterable, _coconut_self_match_types, _coconut_dict_merge, _coconut_exec, _coconut_comma_op, _coconut_arr_concat_op, _coconut_mk_anon_namedtuple, _coconut_matmul, _coconut_py_str, _coconut_flatten, _coconut_multiset, _coconut_back_none_pipe, _coconut_back_none_star_pipe, _coconut_back_none_dubstar_pipe, _coconut_forward_none_compose, _coconut_back_none_compose, _coconut_forward_none_star_compose, _coconut_back_none_star_compose, _coconut_forward_none_dubstar_compose, _coconut_back_none_dubstar_compose, _coconut_call_or_coefficient, _coconut_in, _coconut_not_in, _coconut_attritemgetter, _coconut_if_op
if _coconut_pop_path:
    _coconut_sys.path.pop(0)
try:
    __file__ = _coconut_os.path.abspath(__file__) if __file__ else __file__
except NameError:
    pass
else:
    if __file__ and '__coconut_cache__' in __file__:
        _coconut_file_comps = []
        while __file__:
            __file__, _coconut_file_comp = _coconut_os.path.split(__file__)
            if not _coconut_file_comp:
                _coconut_file_comps.append(__file__)
                break
            if _coconut_file_comp != '__coconut_cache__':
                _coconut_file_comps.append(_coconut_file_comp)
        __file__ = _coconut_os.path.join(*reversed(_coconut_file_comps))

# Compiled Coconut: -----------------------------------------------------------

import io  #1: import io

import PIL  #3: import PIL
from PIL import Image  #4: from PIL import Image


def to_image_bytes(img, format) -> 'bytes':  #7: def to_image_bytes(img,format)->bytes:
    buf = io.BytesIO()  #8:     buf = io.BytesIO()
    opts = dict()  #9:     opts = dict()
    if "jpg" in format.lower():  #10:     if "jpg" in format.lower():
        opts["subsampling"] = 0  #11:         opts["subsampling"] = 0
        opts["quality"] = 100  #12:         opts["quality"] = 100
    img.save(buf, format=format, **opts)  #13:     img.save(buf,format=format,**opts)
    return (buf.getvalue())  #14:     return buf.getvalue()

def from_jpg_bytes(bs: 'bytes') -> 'PIL.Image.Image':  #15: def from_jpg_bytes(bs:bytes)->PIL.Image.Image:
    return (Image.open(io.BytesIO(bs)))  #16:     return Image.open(io.BytesIO(bs))


def rule_image_str_to_jpg_bytes(state):  #18: def rule_image_str_to_jpg_bytes(state):
    _coconut_case_match_to_0 = state  #19:     case state:
    _coconut_case_match_check_0 = False  #19:     case state:
    if _coconut_case_match_to_0 == "image,RGB,RGB":  #19:     case state:
        _coconut_case_match_check_0 = True  #19:     case state:
    if _coconut_case_match_check_0:  #19:     case state:
        return ([(lambda i: to_image_bytes(i, "jpeg"), "jpg_bytes", "image to jpg bytes", 1), (lambda i: to_image_bytes(i, "png"), "png_bytes", "image to png bytes", 1)])  #21:             return [

# not all bytes can be converted back to images.
# you need formats. to make it back
# match "jpg_bytes":
#     return [
#         (from_jpg_bytes,
#         "image,RGB,RGB",
#         "jpg bytes to Image",
#         1)
#     ]
# match "png_bytes":
#     return [
#         (from_jpg_bytes,
#          "image,RGB,RGB",
#          "png bytes to Image")
#     ]
