# -*- coding: utf-8 -*-
import typing

# Import specific members from typing used in hints
from typing import (
    Any,
    Callable,
    Dict,
    FrozenSet,
    Generic,
    Iterable,
    Iterator,
    List,
    Mapping,
    Optional,
    Sequence,
    Set,
    Tuple,
    TypeVar,
    Union,
    overload,
)

import datetime
from enum import Enum

from mh_operator.SDK import Agilent, System

# Stubs for namespace: System.util.zlib

class Deflate:  # Class
    ...

class JZlib:  # Class
    def __init__(self) -> None: ...

    Z_BEST_COMPRESSION: int = ...  # static # readonly
    Z_BEST_SPEED: int = ...  # static # readonly
    Z_BUF_ERROR: int = ...  # static # readonly
    Z_DATA_ERROR: int = ...  # static # readonly
    Z_DEFAULT_COMPRESSION: int = ...  # static # readonly
    Z_DEFAULT_STRATEGY: int = ...  # static # readonly
    Z_ERRNO: int = ...  # static # readonly
    Z_FILTERED: int = ...  # static # readonly
    Z_FINISH: int = ...  # static # readonly
    Z_FULL_FLUSH: int = ...  # static # readonly
    Z_HUFFMAN_ONLY: int = ...  # static # readonly
    Z_MEM_ERROR: int = ...  # static # readonly
    Z_NEED_DICT: int = ...  # static # readonly
    Z_NO_COMPRESSION: int = ...  # static # readonly
    Z_NO_FLUSH: int = ...  # static # readonly
    Z_OK: int = ...  # static # readonly
    Z_PARTIAL_FLUSH: int = ...  # static # readonly
    Z_STREAM_END: int = ...  # static # readonly
    Z_STREAM_ERROR: int = ...  # static # readonly
    Z_SYNC_FLUSH: int = ...  # static # readonly
    Z_VERSION_ERROR: int = ...  # static # readonly

    @staticmethod
    def version() -> str: ...

class ZDeflaterOutputStream(System.IDisposable, System.IO.Stream):  # Class
    @overload
    def __init__(self, outp: System.IO.Stream) -> None: ...
    @overload
    def __init__(self, outp: System.IO.Stream, level: int) -> None: ...
    @overload
    def __init__(self, outp: System.IO.Stream, level: int, nowrap: bool) -> None: ...

    CanRead: bool  # readonly
    CanSeek: bool  # readonly
    CanWrite: bool  # readonly
    Length: int  # readonly
    Position: int

    def Read(self, buffer: List[int], offset: int, count: int) -> int: ...
    def Write(self, b: List[int], off: int, len: int) -> None: ...
    def Flush(self) -> None: ...
    def WriteByte(self, b: int) -> None: ...
    def Finish(self) -> None: ...
    def SetLength(self, value_: int) -> None: ...
    def End(self) -> None: ...
    def Close(self) -> None: ...
    def Seek(self, offset: int, origin: System.IO.SeekOrigin) -> int: ...

class ZInflaterInputStream(System.IDisposable, System.IO.Stream):  # Class
    @overload
    def __init__(self, inp: System.IO.Stream) -> None: ...
    @overload
    def __init__(self, inp: System.IO.Stream, nowrap: bool) -> None: ...

    CanRead: bool  # readonly
    CanSeek: bool  # readonly
    CanWrite: bool  # readonly
    Length: int  # readonly
    Position: int

    def Read(self, b: List[int], off: int, len: int) -> int: ...
    def Write(self, b: List[int], off: int, len: int) -> None: ...
    def Flush(self) -> None: ...
    def WriteByte(self, b: int) -> None: ...
    def ReadByte(self) -> int: ...
    def SetLength(self, value_: int) -> None: ...
    def Close(self) -> None: ...
    def Seek(self, offset: int, origin: System.IO.SeekOrigin) -> int: ...

class ZInputStream(System.IDisposable, System.IO.Stream):  # Class
    @overload
    def __init__(self, input: System.IO.Stream) -> None: ...
    @overload
    def __init__(self, input: System.IO.Stream, nowrap: bool) -> None: ...
    @overload
    def __init__(self, input: System.IO.Stream, level: int) -> None: ...

    CanRead: bool  # readonly
    CanSeek: bool  # readonly
    CanWrite: bool  # readonly
    FlushMode: int
    Length: int  # readonly
    Position: int
    TotalIn: int  # readonly
    TotalOut: int  # readonly

    def Read(self, b: List[int], off: int, len: int) -> int: ...
    def Write(self, buffer: List[int], offset: int, count: int) -> None: ...
    def Flush(self) -> None: ...
    def ReadByte(self) -> int: ...
    def SetLength(self, value_: int) -> None: ...
    def Close(self) -> None: ...
    def Seek(self, offset: int, origin: System.IO.SeekOrigin) -> int: ...

class ZOutputStream(System.IDisposable, System.IO.Stream):  # Class
    @overload
    def __init__(self, output: System.IO.Stream) -> None: ...
    @overload
    def __init__(self, output: System.IO.Stream, level: int) -> None: ...
    @overload
    def __init__(self, output: System.IO.Stream, level: int, nowrap: bool) -> None: ...

    CanRead: bool  # readonly
    CanSeek: bool  # readonly
    CanWrite: bool  # readonly
    FlushMode: int
    Length: int  # readonly
    Position: int
    TotalIn: int  # readonly
    TotalOut: int  # readonly

    def Read(self, buffer: List[int], offset: int, count: int) -> int: ...
    def Write(self, b: List[int], off: int, len: int) -> None: ...
    def Flush(self) -> None: ...
    def WriteByte(self, b: int) -> None: ...
    def Finish(self) -> None: ...
    def SetLength(self, value_: int) -> None: ...
    def End(self) -> None: ...
    def Close(self) -> None: ...
    def Seek(self, offset: int, origin: System.IO.SeekOrigin) -> int: ...

class ZStream:  # Class
    def __init__(self) -> None: ...

    adler: int
    avail_in: int
    avail_out: int
    msg: str
    next_in: List[int]
    next_in_index: int
    next_out: List[int]
    next_out_index: int
    total_in: int
    total_out: int

    @overload
    def deflateInit(self, level: int) -> int: ...
    @overload
    def deflateInit(self, level: int, nowrap: bool) -> int: ...
    @overload
    def deflateInit(self, level: int, bits: int) -> int: ...
    @overload
    def deflateInit(self, level: int, bits: int, nowrap: bool) -> int: ...
    def deflateSetDictionary(self, dictionary: List[int], dictLength: int) -> int: ...
    def deflate(self, flush: int) -> int: ...
    @overload
    def inflateInit(self) -> int: ...
    @overload
    def inflateInit(self, nowrap: bool) -> int: ...
    @overload
    def inflateInit(self, w: int) -> int: ...
    @overload
    def inflateInit(self, w: int, nowrap: bool) -> int: ...
    def inflateEnd(self) -> int: ...
    def inflateSync(self) -> int: ...
    def deflateParams(self, level: int, strategy: int) -> int: ...
    def free(self) -> None: ...
    def inflate(self, f: int) -> int: ...
    def inflateSetDictionary(self, dictionary: List[int], dictLength: int) -> int: ...
    def deflateEnd(self) -> int: ...
