|  | import unicodedata
class CommonModule:
    @staticmethod
    def is_wide (
            c:  str) \
    -> bool:
        return unicodedata.east_asian_width (c) in ['F', 'W', 'A']
    @classmethod
    def len_by_full (
            cls,
            string: str) \
    -> float:
        return sum (1 if cls.is_wide (c) else .5 for c in string)
    @classmethod
    def index_by_f2c (
            cls,
            string: str,
            index:  float) \
    -> int:
        i: int = 0
        work: str = ''
        for c in string:
            work += c
            if cls.len_by_full (work) > index:
                break
            else:
                i += 1
        return i
    @classmethod
    def mid_by_full (
            cls,
            string: str,
            start:  float,
            length: float) \
    -> str:
        trimmed_left: str = string[cls.index_by_f2c (string, start):]
        return trimmed_left[:cls.index_by_f2c (trimmed_left, length)]
 |