auto-editor 24.7.1__py3-none-any.whl → 24.13.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import sys
5
5
  from dataclasses import dataclass, field
6
6
  from typing import Any, Literal, TypedDict
7
7
 
8
- from auto_editor.ffwrapper import FFmpeg, initFileInfo
8
+ from auto_editor.ffwrapper import initFileInfo
9
9
  from auto_editor.lang.json import dump
10
10
  from auto_editor.timeline import v3
11
11
  from auto_editor.utils.func import aspect_ratio
@@ -16,8 +16,6 @@ from auto_editor.vanparse import ArgumentParser
16
16
  @dataclass(slots=True)
17
17
  class InfoArgs:
18
18
  json: bool = False
19
- ffmpeg_location: str | None = None
20
- my_ffmpeg: bool = False
21
19
  help: bool = False
22
20
  input: list[str] = field(default_factory=list)
23
21
 
@@ -25,12 +23,6 @@ class InfoArgs:
25
23
  def info_options(parser: ArgumentParser) -> ArgumentParser:
26
24
  parser.add_required("input", nargs="*")
27
25
  parser.add_argument("--json", flag=True, help="Export info in JSON format")
28
- parser.add_argument("--ffmpeg-location", help="Point to your custom ffmpeg file")
29
- parser.add_argument(
30
- "--my-ffmpeg",
31
- flag=True,
32
- help="Use the ffmpeg on your PATH instead of the one packaged",
33
- )
34
26
  return parser
35
27
 
36
28
 
@@ -42,10 +34,10 @@ class VideoJson(TypedDict):
42
34
  pixel_aspect_ratio: str
43
35
  duration: float
44
36
  pix_fmt: str | None
45
- color_range: str | None
46
- color_space: str | None
47
- color_primaries: str | None
48
- color_transfer: str | None
37
+ color_range: int
38
+ color_space: int
39
+ color_primaries: int
40
+ color_transfer: int
49
41
  timebase: str
50
42
  bitrate: int
51
43
  lang: str | None
@@ -83,7 +75,6 @@ class MediaJson(TypedDict, total=False):
83
75
  def main(sys_args: list[str] = sys.argv[1:]) -> None:
84
76
  args = info_options(ArgumentParser("info")).parse_args(InfoArgs, sys_args)
85
77
 
86
- ffmpeg = FFmpeg(args.ffmpeg_location, args.my_ffmpeg)
87
78
  log = Log(quiet=not args.json)
88
79
 
89
80
  file_info: dict[str, MediaJson] = {}
@@ -96,7 +87,7 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
96
87
  if ext == ".json":
97
88
  from auto_editor.formats.json import read_json
98
89
 
99
- tl = read_json(file, ffmpeg, log)
90
+ tl = read_json(file, log)
100
91
  file_info[file] = {"type": "timeline"}
101
92
  file_info[file]["version"] = "v3" if isinstance(tl, v3) else "v1"
102
93
 
@@ -109,7 +100,7 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
109
100
  file_info[file] = {"type": "timeline"}
110
101
  continue
111
102
 
112
- src = initFileInfo(file, ffmpeg, log)
103
+ src = initFileInfo(file, log)
113
104
 
114
105
  if len(src.videos) + len(src.audios) + len(src.subtitles) == 0:
115
106
  file_info[file] = {"type": "unknown"}
@@ -177,13 +168,27 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
177
168
  text += f" - track {s}:\n"
178
169
  for key, value in stream.items():
179
170
  if not is_null(key, value):
180
- key = key.replace("_", " ")
181
171
  if isinstance(value, list):
182
172
  sep = "x" if key == "resolution" else ":"
183
-
184
173
  value = sep.join(f"{x}" for x in value)
185
174
 
186
- text += f" - {key}: {value}\n"
175
+ if key in (
176
+ "color_range",
177
+ "color_space",
178
+ "color_transfer",
179
+ "color_primaries",
180
+ ):
181
+ if key == "color_range":
182
+ if value == 1:
183
+ text += " - color range: 1 (tv)\n"
184
+ elif value == 2:
185
+ text += " - color range: 2 (pc)\n"
186
+ elif value == 1:
187
+ text += f" - {key.replace('_', ' ')}: 1 (bt709)\n"
188
+ elif value != 2:
189
+ text += f" - {key.replace('_', ' ')}: {value}\n"
190
+ else:
191
+ text += f" - {key.replace('_', ' ')}: {value}\n"
187
192
  return text
188
193
 
189
194
  text = ""
@@ -78,7 +78,7 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
78
78
  temp = setup_tempdir(None, Log())
79
79
  log = Log(quiet=True, temp=temp)
80
80
 
81
- sources = [initFileInfo(path, ffmpeg, log) for path in args.input]
81
+ sources = [initFileInfo(path, log) for path in args.input]
82
82
  if len(sources) < 1:
83
83
  log.error("levels needs at least one input file")
84
84
 
@@ -70,7 +70,7 @@ def main(sys_args: list[str] = sys.argv[1:]) -> None:
70
70
  log = Log(quiet=True, temp=temp)
71
71
  ffmpeg = FFmpeg(args.ffmpeg_location, args.my_ffmpeg, False)
72
72
  strict = len(args.input) < 2
73
- sources = [initFileInfo(path, ffmpeg, log) for path in args.input]
73
+ sources = [initFileInfo(path, log) for path in args.input]
74
74
  src = sources[0]
75
75
  tb = src.get_fps() if args.timebase is None else args.timebase
76
76
  ensure = Ensure(ffmpeg, src.get_sr(), temp, log)
@@ -1,57 +1,22 @@
1
- from __future__ import annotations
2
-
3
- import os
4
1
  import sys
5
- import tempfile
6
- from dataclasses import dataclass, field
7
-
8
- from auto_editor.ffwrapper import FFmpeg, initFileInfo
9
- from auto_editor.utils.log import Log
10
- from auto_editor.vanparse import ArgumentParser
11
-
12
2
 
13
- @dataclass(slots=True)
14
- class SubArgs:
15
- ffmpeg_location: str | None = None
16
- my_ffmpeg: bool = False
17
- help: bool = False
18
- input: list[str] = field(default_factory=list)
19
-
20
-
21
- def subdump_options(parser: ArgumentParser) -> ArgumentParser:
22
- parser.add_required("input", nargs="*")
23
- parser.add_argument("--ffmpeg-location", help="Point to your custom ffmpeg file")
24
- parser.add_argument(
25
- "--my-ffmpeg",
26
- flag=True,
27
- help="Use the ffmpeg on your PATH instead of the one packaged",
28
- )
29
- return parser
3
+ import av
4
+ from av.subtitles.subtitle import SubtitleSet
30
5
 
31
6
 
32
7
  def main(sys_args: list[str] = sys.argv[1:]) -> None:
33
- args = subdump_options(ArgumentParser("subdump")).parse_args(SubArgs, sys_args)
34
-
35
- ffmpeg = FFmpeg(args.ffmpeg_location, args.my_ffmpeg, debug=False)
36
-
37
- temp = tempfile.mkdtemp()
38
- log = Log(temp=temp)
39
-
40
- for i, input_file in enumerate(args.input):
41
- src = initFileInfo(input_file, ffmpeg, log)
42
-
43
- cmd = ["-i", input_file]
44
- for s, sub in enumerate(src.subtitles):
45
- cmd.extend(["-map", f"0:s:{s}", os.path.join(temp, f"{i}s{s}.{sub.ext}")])
46
- ffmpeg.run(cmd)
47
-
48
- for s, sub in enumerate(src.subtitles):
49
- print(f"file: {input_file} ({s}:{sub.lang}:{sub.ext})")
50
- with open(os.path.join(temp, f"{i}s{s}.{sub.ext}")) as file:
51
- print(file.read())
52
- print("------")
53
-
54
- log.cleanup()
8
+ for i, input_file in enumerate(sys_args):
9
+ with av.open(input_file) as container:
10
+ for s in range(len(container.streams.subtitles)):
11
+ print(f"file: {input_file} ({s}:{container.streams.subtitles[s].name})")
12
+ for packet in container.demux(subtitles=s):
13
+ for item in packet.decode():
14
+ if type(item) is SubtitleSet and item:
15
+ if item[0].type == b"ass":
16
+ print(item[0].ass.decode("utf-8"))
17
+ elif item[0].type == b"text":
18
+ print(item[0].text)
19
+ print("------")
55
20
 
56
21
 
57
22
  if __name__ == "__main__":
@@ -13,7 +13,7 @@ from typing import Any
13
13
 
14
14
  import numpy as np
15
15
 
16
- from auto_editor.ffwrapper import FFmpeg, FileInfo, initFileInfo
16
+ from auto_editor.ffwrapper import FileInfo, initFileInfo
17
17
  from auto_editor.lang.palet import Lexer, Parser, env, interpret
18
18
  from auto_editor.lib.data_structs import Char
19
19
  from auto_editor.lib.err import MyError
@@ -48,12 +48,11 @@ def pipe_to_console(cmd: list[str]) -> tuple[int, str, str]:
48
48
 
49
49
 
50
50
  class Checker:
51
- def __init__(self, ffmpeg: FFmpeg, log: Log):
52
- self.ffmpeg = ffmpeg
51
+ def __init__(self, log: Log):
53
52
  self.log = log
54
53
 
55
54
  def check(self, path: str) -> FileInfo:
56
- return initFileInfo(path, self.ffmpeg, self.log)
55
+ return initFileInfo(path, self.log)
57
56
 
58
57
 
59
58
  class Runner:
@@ -132,6 +131,7 @@ def run_tests(tests: list[Callable], args: TestArgs) -> None:
132
131
  for index, test in enumerate(tests, start=1):
133
132
  name = test.__name__
134
133
  start = perf_counter()
134
+ outputs = None
135
135
 
136
136
  try:
137
137
  outputs = test()
@@ -142,6 +142,8 @@ def run_tests(tests: list[Callable], args: TestArgs) -> None:
142
142
  clean_all()
143
143
  sys.exit(1)
144
144
  except Exception as e:
145
+ dur = perf_counter() - start
146
+ total_time += dur
145
147
  print(f"{name:<24} ({index}/{total}) {round(dur, 2):<4} secs [FAILED]")
146
148
  if args.no_fail_fast:
147
149
  print(f"\n{e}")
@@ -174,7 +176,7 @@ def main(sys_args: list[str] | None = None):
174
176
  args = test_options(ArgumentParser("test")).parse_args(TestArgs, sys_args)
175
177
 
176
178
  run = Runner()
177
- checker = Checker(FFmpeg(), Log())
179
+ checker = Checker(Log())
178
180
 
179
181
  ### Tests ###
180
182
 
@@ -522,7 +524,9 @@ def main(sys_args: list[str] | None = None):
522
524
  # Issue 280
523
525
  def SAR():
524
526
  out = run.main(["resources/SAR-2by3.mp4"], [])
525
- assert checker.check(out).videos[0].sar == Fraction(2, 3)
527
+
528
+ # It's working, PyAV just can't detect the changes.
529
+ # assert checker.check(out).videos[0].sar == Fraction(2, 3)
526
530
 
527
531
  return out
528
532
 
@@ -684,8 +688,8 @@ def main(sys_args: list[str] | None = None):
684
688
  )
685
689
 
686
690
  def palet_scripts():
687
- run.raw(["palet", "resources/scripts/maxcut.pal"])
688
691
  run.raw(["palet", "resources/scripts/scope.pal"])
692
+ run.raw(["palet", "resources/scripts/maxcut.pal"])
689
693
  run.raw(["palet", "resources/scripts/case.pal"])
690
694
  run.raw(["palet", "resources/scripts/testmath.pal"])
691
695
 
@@ -172,3 +172,44 @@ def parse_with_palet(
172
172
  raise ParserError(f"'{k}' must be specified.")
173
173
 
174
174
  return kwargs
175
+
176
+
177
+ def parse_method(
178
+ name: str, text: str, env: Env
179
+ ) -> tuple[str, list[Any], dict[str, Any]]:
180
+ from auto_editor.lang.palet import Lexer, Parser, interpret
181
+ from auto_editor.lib.err import MyError
182
+
183
+ # Positional Arguments
184
+ # audio:0.04,0,6,3
185
+ # Keyword Arguments
186
+ # audio:threshold=0.04,stream=0,mincut=6,minclip=3
187
+
188
+ args: list[Any] = []
189
+ kwargs: dict[str, Any] = {}
190
+
191
+ allow_positional_args = True
192
+ lexer = PLexer(text)
193
+ while (arg := lexer.get_next_token()) is not None:
194
+ if not arg:
195
+ continue
196
+
197
+ if "=" in arg:
198
+ key, val = arg.split("=", 1)
199
+
200
+ results = interpret(env, Parser(Lexer(name, val)))
201
+ if not results:
202
+ raise MyError("Results must be of length > 0")
203
+
204
+ kwargs[key] = results[-1]
205
+ allow_positional_args = False
206
+
207
+ elif allow_positional_args:
208
+ results = interpret(env, Parser(Lexer(name, arg)))
209
+ if not results:
210
+ raise MyError("Results must be of length > 0")
211
+ args.append(results[-1])
212
+ else:
213
+ raise ParserError(f"{name} positional argument follows keyword argument.")
214
+
215
+ return name, args, kwargs
auto_editor/wavfile.py CHANGED
@@ -45,9 +45,9 @@ def _read_fmt_chunk(
45
45
  raw_guid = extensible_chunk_data[6:22]
46
46
 
47
47
  if bytes_order == "big":
48
- tail = b"\x00\x00\x00\x10\x80\x00\x00\xAA\x00\x38\x9B\x71"
48
+ tail = b"\x00\x00\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71"
49
49
  else:
50
- tail = b"\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71"
50
+ tail = b"\x00\x00\x10\x00\x80\x00\x00\xaa\x00\x38\x9b\x71"
51
51
  if raw_guid.endswith(tail):
52
52
  format_tag = int.from_bytes(raw_guid[:4], bytes_order)
53
53
  else:
@@ -249,7 +249,7 @@ def write(fid: io.BufferedWriter, sr: int, arr: np.ndarray) -> None:
249
249
  total_size = 44 + data_size # Basic WAV header size + data size
250
250
 
251
251
  if is_rf64 := total_size > 0xFFFFFFFF:
252
- fid.write(b"RF64\xFF\xFF\xFF\xFFWAVE")
252
+ fid.write(b"RF64\xff\xff\xff\xffWAVE")
253
253
  ds64_size = 28
254
254
  ds64_chunk_data = (0).to_bytes(ds64_size, "little") # placeholder values
255
255
  fid.write(b"ds64" + struct.pack("<I", ds64_size) + ds64_chunk_data)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-editor
3
- Version: 24.7.1
3
+ Version: 24.13.1
4
4
  Summary: Auto-Editor: Effort free video editing!
5
5
  Author-email: WyattBlue <wyattblue@auto-editor.com>
6
6
  License: Unlicense
@@ -12,8 +12,8 @@ Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: numpy >=1.22.0
15
- Requires-Dist: pyav ==12.0.2
16
- Requires-Dist: ae-ffmpeg ==1.1.*
15
+ Requires-Dist: pyav ==12.0.5
16
+ Requires-Dist: ae-ffmpeg ==1.2.*
17
17
 
18
18
  <p align="center"><img src="https://auto-editor.com/img/auto-editor-banner.webp" title="Auto-Editor" width="700"></p>
19
19
 
@@ -1,57 +1,57 @@
1
1
  ae-ffmpeg/setup.py,sha256=HeORyrs8OyJ32lSnMaIhI2B7U1lkk3QP6wOjxpoiF3Y,1891
2
- ae-ffmpeg/ae_ffmpeg/__init__.py,sha256=Y_dn5Uoh1fOrhhJ9B3agOsPF2VXnCbIaXuN3ZRft-pk,453
2
+ ae-ffmpeg/ae_ffmpeg/__init__.py,sha256=Fd2YsCINa0dB3tf9VVKDTPT9P6MDH-ve3RT2pqArImI,453
3
3
  ae-ffmpeg/ae_ffmpeg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- auto_editor/__init__.py,sha256=Kdyio-Bzf_iENaYEJklkQz98d9-98J_j2hzqLHDU9Yc,42
4
+ auto_editor/__init__.py,sha256=oSC_QYd59SbGta8dUWWTRxcFAzDKetEOu5kGPq6yXFE,43
5
5
  auto_editor/__main__.py,sha256=Lb_0h7Zop0SHK-nLWgwp7MWFrznuir8Ilo17Vx_0aKs,9827
6
- auto_editor/analyze.py,sha256=DP4L-JF0W3BFt50TlKiyNWufAQZN9ytvJ3SsNKk3AVk,14489
7
- auto_editor/edit.py,sha256=oL8-oCHMbTARb89IY4tsnSs_vWeqk6lwVvNhdw4Xp5M,12013
8
- auto_editor/ffwrapper.py,sha256=nBu1lE5-HlqvpiczG0kHI__JAEW6hE3PlGc-X2QUtWM,8570
9
- auto_editor/help.py,sha256=RGCUb_5_lPFwbrXOlgnwlB0G_L88LN8yx-aycTeu8Hs,8150
6
+ auto_editor/analyze.py,sha256=zvN4hXyEGXdUUVkfnYlyrCXPgBRl3DoQtBwIfHo7q68,11938
7
+ auto_editor/edit.py,sha256=ZH0AgGBCTv_0KTqKbybZWbMCDx_OV_i15PklTGpEBC4,11997
8
+ auto_editor/ffwrapper.py,sha256=af6j5257npuwJAyHMVKM7BbHGpjZ0bYkN1SGvIGLLu4,7662
9
+ auto_editor/help.py,sha256=BFiP7vBz42TUzum4-zaQIrV1OY7kHeN0pe0MPE0T5xw,7997
10
10
  auto_editor/make_layers.py,sha256=_YyuV7JvF9sneu3FJQPDkvRqzja8Fzscr4624bXN4iI,8214
11
- auto_editor/output.py,sha256=QA7Xk05RfahZCDUmi25D_nvw-iGVM2kqz0RWFSqD7Os,6310
11
+ auto_editor/output.py,sha256=ySTt0WiU4-VszsATLxpsz5HIIL-7FzoOm-yJrJRqi3E,6714
12
12
  auto_editor/preview.py,sha256=K10TyP0_LWD4yEIUHzqSHs_97hKl0VIaIuA1xGHI8ZI,3023
13
13
  auto_editor/timeline.py,sha256=JwcS-8AS5vsoTL_m03aosYijScQef4AGa2lyutQ8wbI,7069
14
14
  auto_editor/validate_input.py,sha256=G4LzUdt0fSrIPRd-wvP7x9cOzXmHTd7-BPrFk2ZNEWk,2671
15
15
  auto_editor/vanparse.py,sha256=kHvGK7itqt37q0MPTSriPljB7ilFpjG5LuEVdulUbyg,9902
16
- auto_editor/wavfile.py,sha256=UatK5yRJGe2vIpHC1U0ccxyixaLyzLoNvApzWcrxLy8,9168
16
+ auto_editor/wavfile.py,sha256=7N2LX_WfFVRnoXrKveLvuyTYpIz2htpGqfCD8tR4kJ8,9168
17
17
  auto_editor/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- auto_editor/formats/fcp11.py,sha256=3Z7-AYkGmlnk2WyzNG11483krZqj3XRAnvw491RTxHE,5860
19
- auto_editor/formats/fcp7.py,sha256=bEEUUgEg9rGQi3bxSjnJgoJppbM5zMiqXw5PLLlilvs,17692
20
- auto_editor/formats/json.py,sha256=AFrQwjzmMMoEJFgYNEipnz2X75ftRfHmPHJKWW_KPwo,6741
18
+ auto_editor/formats/fcp11.py,sha256=H_zDaKFLUCEgRZGQjDZxqY4kmx0aIvoxWB3PMQXDsiE,5876
19
+ auto_editor/formats/fcp7.py,sha256=ASmg9m94jaF_bq4uMawShyDi1ztptJHda6uf6SsX1zM,17713
20
+ auto_editor/formats/json.py,sha256=RG5991SWaBSdbTCg49wJHvKMQM3UG2fM36xzc9aZrX0,6653
21
21
  auto_editor/formats/shotcut.py,sha256=9XM-NGDVSrHyG05Tsq6RR6WacyatQxGa6wPuRu-QtXU,5023
22
22
  auto_editor/formats/utils.py,sha256=GIZw28WHuCIaZ_zMI0v6Kxbq0QaIpbLsdSegdYwQxQ8,1990
23
23
  auto_editor/lang/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  auto_editor/lang/json.py,sha256=OsNcYlfEj8ZLlzLK-gkLcrCCKI7mJz9rpe-6XLr4f9U,9231
25
25
  auto_editor/lang/libmath.py,sha256=z33A161Oe6vYYK7R6pgYjdZZe63dQkN38Qf36TL3prg,847
26
- auto_editor/lang/palet.py,sha256=qxd3TwejLZLaiJZ_5cleD2hp0Nn8Gjq8koOILVChbFs,56368
26
+ auto_editor/lang/palet.py,sha256=9eQwirwwejf0qrXxXqwETEFv4MQ98jUs-0X_wHMaxRg,59027
27
27
  auto_editor/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- auto_editor/lib/contracts.py,sha256=olP7QkjP91Tp8zXJmv5-ktwIPmbvh_jKDdZMkFM5j0E,5462
29
- auto_editor/lib/data_structs.py,sha256=y1PXdrMz9im7IAWqNQbNuFG3hXHMaL6MsY4eLVPiUcU,6851
28
+ auto_editor/lib/contracts.py,sha256=CTay7wMWnMSbTD1QAwE-b6yvIcSPvkpxkFQRXoJiqZE,7258
29
+ auto_editor/lib/data_structs.py,sha256=EXNcdMsdmZxMRlpbXmIbRoC-YfGzvPZi7EdBQGwvpP4,6887
30
30
  auto_editor/lib/err.py,sha256=UlszQJdzMZwkbT8x3sY4GkCV_5x9yrd6uVVUzvA8iiI,35
31
31
  auto_editor/render/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  auto_editor/render/audio.py,sha256=lEmPuRKW5QipJV6ncCx8CHjg7wyK1knwqRM5p7zKvBY,8816
33
33
  auto_editor/render/subtitle.py,sha256=D4WDiY4iM9HsNfJvZay7zv_gvZPvyd12nd9Fi9vbPjQ,4646
34
- auto_editor/render/video.py,sha256=C9QBuXC1itqd1q1AHZ-f_63UgdCTV3w5vEhLUfrWTrs,13127
34
+ auto_editor/render/video.py,sha256=ov_AgFbF_6HWuOf1j-7g6sJBNuKyOyPMTAbcftxotaQ,13225
35
35
  auto_editor/subcommands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- auto_editor/subcommands/desc.py,sha256=CWnRk3LCTV_sMVJVA45ZMBfPy_ESfwqkySMVuW8Fbrg,1032
37
- auto_editor/subcommands/info.py,sha256=etsjaKBEy0AxDtZ7XZNiizSmBnx8Wf2HeRfUyPyBCqA,6237
38
- auto_editor/subcommands/levels.py,sha256=utCuRmpa2mirnQ_t1ogPexqjZAUBTC9KrCSS_BbSyBg,4009
36
+ auto_editor/subcommands/desc.py,sha256=GDrKJYiHMaeTrplZAceXl1JwoqD78XsV2_5lc0Xd7po,869
37
+ auto_editor/subcommands/info.py,sha256=N6dXeJf8WXAJjVtfY99fQNu2d-kiX86X6SH0QblWkOg,6571
38
+ auto_editor/subcommands/levels.py,sha256=XHMG3jsdoXBvG0TlP1bBbtjD0m5EgWnOMBTIYx8VAnA,4001
39
39
  auto_editor/subcommands/palet.py,sha256=tbQoRWoT4jR3yu0etGApfprM-oQgXIjC-rIY-QG3nM0,655
40
- auto_editor/subcommands/repl.py,sha256=j5jxWgscaaRULa6ZsrV4tDJQB4vOzxiEQR0jI90v5s0,3725
41
- auto_editor/subcommands/subdump.py,sha256=GGekYMnqLkcqfihKjlHcuWkMazvgsYTF0q4ulEDOrRc,1669
42
- auto_editor/subcommands/test.py,sha256=I08qk9mPBwCVMVVhR66C0we_R5a9khXhFuqBrqwW10s,24729
40
+ auto_editor/subcommands/repl.py,sha256=xoNq88PtbvX3r1-FLStOb5jNoJ_rFzrl7R3Tk8a7zyI,3717
41
+ auto_editor/subcommands/subdump.py,sha256=Bm1PI1Gd2kQR2FFdgG9kXSXSZsAEOsSToSE5_BGF8UA,836
42
+ auto_editor/subcommands/test.py,sha256=2N1Hk03Oofs9WssvrUfDMaDFEp9ngcu9IwIgXkYfcGk,24810
43
43
  auto_editor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  auto_editor/utils/bar.py,sha256=eWpiXZpRc2v2LW-EaoAgG_cTtMh5275or8Ttda3Ei-I,3974
45
45
  auto_editor/utils/chunks.py,sha256=J-eGKtEz68gFtRrj1kOSgH4Tj_Yz6prNQ7Xr-d9NQJw,52
46
- auto_editor/utils/cmdkw.py,sha256=qysqLvOHKXlRDcChGnRvP1Ar_Tud_FOhonDQt90Hjog,4785
46
+ auto_editor/utils/cmdkw.py,sha256=XApxw7FZBOEJV9N4LHhdw1GVfHbFfCjr-zCZ1gJsSvY,6002
47
47
  auto_editor/utils/container.py,sha256=WOMlUJ5pxVmeYsy79uCWMU5fCzM4tBRupAx-_Q5-PLg,7939
48
48
  auto_editor/utils/encoder.py,sha256=auNYo7HXbcU4iTUCc0LE5lpwFmSvdWvBm6-5KIaRK8w,2983
49
49
  auto_editor/utils/func.py,sha256=H38xO6Wxg1TZILVrx-nCowCzj_mqBUtJuOFp4DV3Hsc,4843
50
50
  auto_editor/utils/log.py,sha256=6j2EWE97_urQijBvxhk2Gr2-VO_KNR1XbEobcAtTG-w,2668
51
51
  auto_editor/utils/types.py,sha256=aWyJpVBjmctxlxiL5o8r6lplKnaFSjVNQlcoXFgfmSk,11533
52
- auto_editor-24.7.1.dist-info/LICENSE,sha256=yiq99pWITHfqS0pbZMp7cy2dnbreTuvBwudsU-njvIM,1210
53
- auto_editor-24.7.1.dist-info/METADATA,sha256=o8bjNQQc99f4kJtauiZegijPiE45ikxTuiJOa9Z2ATE,7092
54
- auto_editor-24.7.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
55
- auto_editor-24.7.1.dist-info/entry_points.txt,sha256=-H7zdTw4MqnAcwrN5xTNkGIhzZtJMxS9r6lTMeR9-aA,240
56
- auto_editor-24.7.1.dist-info/top_level.txt,sha256=xwV1JV1ZeRmlH9VeBRZXgXtWHpWSD4w1mY5II56D3ns,22
57
- auto_editor-24.7.1.dist-info/RECORD,,
52
+ auto_editor-24.13.1.dist-info/LICENSE,sha256=yiq99pWITHfqS0pbZMp7cy2dnbreTuvBwudsU-njvIM,1210
53
+ auto_editor-24.13.1.dist-info/METADATA,sha256=JTShKvxQqosFX0sXVjMyPrYx_OVJJ5zkXnc8Na8wAX0,7093
54
+ auto_editor-24.13.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
55
+ auto_editor-24.13.1.dist-info/entry_points.txt,sha256=-H7zdTw4MqnAcwrN5xTNkGIhzZtJMxS9r6lTMeR9-aA,240
56
+ auto_editor-24.13.1.dist-info/top_level.txt,sha256=xwV1JV1ZeRmlH9VeBRZXgXtWHpWSD4w1mY5II56D3ns,22
57
+ auto_editor-24.13.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5