Source code for pylas.compression

""" The functions related to the LAZ format (compressed LAS)
"""
import enum
from typing import Tuple


[docs]class LazBackend(enum.Enum): """Supported backends for reading and writing LAS/LAZ""" # type_hint = Union[LazBackend, Iterable[LazBackend]] LazrsParallel = 0 """lazrs in multi-thread mode""" Lazrs = 1 """lazrs in single-thread mode""" Laszip = 2 """laszip backend"""
[docs] def is_available(self) -> bool: """Returns true if the backend is available""" if self == LazBackend.Lazrs or self == LazBackend.LazrsParallel: try: import lazrs except ModuleNotFoundError: return False else: return True elif self == LazBackend.Laszip: try: import laszip except ModuleNotFoundError: return False else: return True else: return False
[docs] @staticmethod def detect_available() -> Tuple["LazBackend", ...]: """Returns a tuple containing the available backends in the current python environment """ available_backends = [] if LazBackend.LazrsParallel.is_available(): available_backends.append(LazBackend.LazrsParallel) available_backends.append(LazBackend.Lazrs) if LazBackend.Laszip.is_available(): available_backends.append(LazBackend.Laszip) return tuple(available_backends)
def is_point_format_compressed(point_format_id: int) -> bool: compression_bit_7 = (point_format_id & 0x80) >> 7 compression_bit_6 = (point_format_id & 0x40) >> 6 if not compression_bit_6 and compression_bit_7: return True return False def compressed_id_to_uncompressed(point_format_id: int) -> int: return point_format_id & 0x3F def uncompressed_id_to_compressed(point_format_id: int) -> int: return (2 ** 7) | point_format_id