-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
83 lines (68 loc) · 2.63 KB
/
utils.py
File metadata and controls
83 lines (68 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Copyright (C) 2023 Cullen St-Clair
# Licensed Under the GNU GPL v3.0 License
# See LICENSE for more information
from argparse import ArgumentTypeError
from pathlib import Path
import numpy as np
def get_kernel_from_terminal(kernel_size: int) -> np.ndarray:
"""Read a square kernel from the terminal row by row."""
kernel = np.zeros((kernel_size, kernel_size), dtype=np.float64)
for i in range(kernel_size):
row = input(f"Enter row {i + 1} of the kernel: ").replace(',', '')
row = row.split()
if len(row) != kernel_size:
raise ValueError(f"Row length must be {kernel_size}")
try:
kernel[i] = [float(x) for x in row]
except ValueError:
raise ValueError("Invalid kernel input format or values provided")
return kernel
def get_file_size(file: Path) -> str:
"""Returns the size of a file in relevant units."""
if not file.is_file():
raise ValueError(f"File not found: {file}")
size = file.stat().st_size
if size < 1024:
return f'{size} B'
elif size < 1024 ** 2:
return f'{round(size / 1024)} KB'
elif size < 1024 ** 3:
return f'{round(size / 1024 ** 2, 1)} MB'
else:
return f'{round(size / 1024 ** 3, 2)} GB'
def non_negative_int(value):
"""Check that the value is a non-negative integer"""
try:
ivalue = int(value)
except ValueError:
raise ArgumentTypeError(f"'{value}' is an invalid non-negative int value")
if ivalue < 0:
raise ArgumentTypeError(f"'{value}' is an invalid non-negative int value")
return ivalue
def positive_int(value):
"""Check that the value is a positive integer"""
try:
ivalue = int(value)
except ValueError:
raise ArgumentTypeError(f"'{value}' is an invalid positive int value")
if ivalue <= 0:
raise ArgumentTypeError(f"'{value}' is an invalid positive int value")
return ivalue
def positive_float(value):
"""Check that the value is a positive float"""
try:
fvalue = float(value)
except ValueError:
raise ArgumentTypeError(f"'{value}' is an invalid positive float value")
if fvalue <= 0:
raise ArgumentTypeError(f"'{value}' is an invalid positive float value")
return fvalue
def valid_alpha(value):
"""Check that the value is a float in the range [0-1]"""
try:
fvalue = float(value)
except ValueError:
raise ArgumentTypeError(f"'{value}' is an invalid value (must be in range [0-1])")
if fvalue < 0 or fvalue > 1:
raise ArgumentTypeError(f"'{value}' is an invalid value (must be in range [0-1])")
return fvalue