Skip to content

Commit 14ca6a4

Browse files
committed
Turn none and all/e to regular procedures
1 parent 28903b5 commit 14ca6a4

File tree

4 files changed

+54
-31
lines changed

4 files changed

+54
-31
lines changed

Diff for: auto_editor/analyze.py

+8-12
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,14 @@ def obj_tag(tag: str, tb: Fraction, obj: dict[str, Any]) -> str:
149149
return key
150150

151151

152+
@dataclass
152153
class Levels:
153-
def __init__(
154-
self, ensure: Ensure, src: FileInfo, tb: Fraction, bar: Bar, temp: str, log: Log
155-
):
156-
self.ensure = ensure
157-
self.src = src
158-
self.tb = tb
159-
self.bar = bar
160-
self.temp = temp
161-
self.log = log
154+
ensure: Ensure
155+
src: FileInfo
156+
tb: Fraction
157+
bar: Bar
158+
temp: str
159+
log: Log
162160

163161
@property
164162
def media_length(self) -> int:
@@ -167,9 +165,7 @@ def media_length(self) -> int:
167165
return len(arr)
168166

169167
sr, samples = read(
170-
self.ensure.audio(
171-
f"{self.src.path.resolve()}", self.src.label, stream=0
172-
)
168+
self.ensure.audio(f"{self.src.path.resolve()}", self.src.label, 0)
173169
)
174170
samp_count = len(samples)
175171
del samples

Diff for: auto_editor/lang/palet.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ClosingError(MyError):
4949
LPAREN, RPAREN, LBRAC, RBRAC, LCUR, RCUR, EOF = "(", ")", "[", "]", "{", "}", "EOF"
5050
VAL, QUOTE, SEC, DB, DOT, VLIT = "VAL", "QUOTE", "SEC", "DB", "DOT", "VLIT"
5151
SEC_UNITS = ("s", "sec", "secs", "second", "seconds")
52-
METHODS = ("audio:", "motion:", "pixeldiff:", "subtitle:", "none:", "all/e:")
52+
METHODS = ("audio:", "motion:", "pixeldiff:", "subtitle:")
5353
brac_pairs = {LPAREN: RPAREN, LBRAC: RBRAC, LCUR: RCUR}
5454

5555
str_escape = {
@@ -1334,6 +1334,20 @@ def attr(env: Env, node: list) -> Any:
13341334
return my_eval(env, [node[2], node[1]])
13351335

13361336

1337+
def edit_none() -> np.ndarray:
1338+
if "@levels" not in env:
1339+
raise MyError("Can't use `none` if there's no input media")
1340+
1341+
return env["@levels"].none()
1342+
1343+
1344+
def edit_all() -> np.ndarray:
1345+
if "@levels" not in env:
1346+
raise MyError("Can't use `all/e` if there's no input media")
1347+
1348+
return env["@levels"].all()
1349+
1350+
13371351
def my_eval(env: Env, node: object) -> Any:
13381352
if type(node) is Sym:
13391353
val = env.get(node.val)
@@ -1392,6 +1406,9 @@ def my_eval(env: Env, node: object) -> Any:
13921406
"true": True,
13931407
"false": False,
13941408
"all": Sym("all"),
1409+
# edit procedures
1410+
"none": Proc("none", edit_none, (0, 0)),
1411+
"all/e": Proc("all/e", edit_all, (0, 0)),
13951412
# syntax
13961413
"lambda": Syntax(syn_lambda),
13971414
"λ": Syntax(syn_lambda),

Diff for: auto_editor/make_layers.py

+24-15
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import numpy as np
88

9-
from auto_editor.analyze import FileSetup
9+
from auto_editor.analyze import FileSetup, Levels
1010
from auto_editor.ffwrapper import FFmpeg, FileInfo
1111
from auto_editor.lang.palet import Lexer, Parser, env, interpret, is_boolarr
1212
from auto_editor.lib.data_structs import print_str
@@ -90,31 +90,40 @@ def make_av(
9090
return vtl, atl
9191

9292

93-
def run_interpreter(
94-
text: str,
95-
filesetup: FileSetup,
96-
log: Log,
93+
def run_interpreter_for_edit_option(
94+
text: str, filesetup: FileSetup
9795
) -> NDArray[np.bool_]:
96+
ensure = filesetup.ensure
97+
src = filesetup.src
98+
tb = filesetup.tb
99+
bar = filesetup.bar
100+
temp = filesetup.temp
101+
log = filesetup.log
102+
98103
try:
99104
parser = Parser(Lexer("`--edit`", text))
100105
if log.is_debug:
101106
log.debug(f"edit: {parser}")
102107

103108
env["timebase"] = filesetup.tb
109+
env["@levels"] = Levels(ensure, src, tb, bar, temp, log)
104110
env["@filesetup"] = filesetup
105111

106112
results = interpret(env, parser)
107-
except (MyError, ZeroDivisionError) as e:
108-
log.error(e)
109113

110-
if len(results) == 0:
111-
log.error("Expression in --edit must return a bool-array, got nothing")
114+
if len(results) == 0:
115+
raise MyError("Expression in --edit must return a bool-array, got nothing")
112116

113-
result = results[-1]
114-
if not is_boolarr(result):
115-
log.error(
116-
f"Expression in --edit must return a bool-array, got {print_str(result)}"
117-
)
117+
result = results[-1]
118+
if callable(result):
119+
result = result()
120+
121+
if not is_boolarr(result):
122+
raise MyError(
123+
f"Expression in --edit must return a bool-array, got {print_str(result)}"
124+
)
125+
except MyError as e:
126+
log.error(e)
118127

119128
assert isinstance(result, np.ndarray)
120129
return result
@@ -276,7 +285,7 @@ def mut_set_range(arr: NDArray, _ranges: list[list[str]], index: Any) -> None:
276285

277286
for i in map(str, inputs):
278287
filesetup = FileSetup(sources[i], ensure, len(inputs) < 2, tb, bar, temp, log)
279-
has_loud = run_interpreter(method, filesetup, log)
288+
has_loud = run_interpreter_for_edit_option(method, filesetup)
280289

281290
if len(mark_loud) > 0:
282291
mut_set_range(has_loud, mark_loud, loud_speed)

Diff for: auto_editor/subcommands/repl.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from fractions import Fraction
66

77
import auto_editor
8-
from auto_editor.analyze import FileSetup
8+
from auto_editor.analyze import FileSetup, Levels
99
from auto_editor.ffwrapper import FFmpeg, FileInfo
1010
from auto_editor.lang.palet import ClosingError, Lexer, Parser, env, interpret
1111
from auto_editor.lib.data_structs import print_str
@@ -77,9 +77,10 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
7777
src = sources["0"]
7878
tb = src.get_fps() if args.timebase is None else args.timebase
7979
ensure = Ensure(ffmpeg, src.get_sr(), temp, log)
80-
filesetup = FileSetup(src, ensure, strict, tb, Bar("none"), temp, log)
80+
bar = Bar("none")
8181
env["timebase"] = tb
82-
env["@filesetup"] = filesetup
82+
env["@levels"] = Levels(ensure, src, tb, bar, temp, log)
83+
env["@filesetup"] = FileSetup(src, ensure, strict, tb, bar, temp, log)
8384

8485
print(f"Auto-Editor {auto_editor.version} ({auto_editor.__version__})")
8586
text = None

0 commit comments

Comments
 (0)