faery 0.2.0__cp313-none-win_amd64.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.
faery/__init__.py ADDED
@@ -0,0 +1,61 @@
1
+ import importlib.metadata
2
+ import typing
3
+
4
+ __version__ = importlib.metadata.version("faery")
5
+
6
+ from .file_decoder import CsvProperties as CsvProperties
7
+ from .events_filter import EVENTS_DTYPE as EVENTS_DTYPE
8
+ from .events_input import events_stream_from_array as events_stream_from_array
9
+ from .events_input import events_stream_from_file as events_stream_from_file
10
+ from .events_input import events_stream_from_stdin as events_stream_from_stdin
11
+ from .events_input import events_stream_from_udp as events_stream_from_udp
12
+ from .events_stream import EventsStream as EventsStream
13
+ from .events_stream import FiniteEventsStream as FiniteEventsStream
14
+ from .events_stream import RegularEventsStream as RegularEventsStream
15
+ from .events_stream import FiniteRegularEventsStream as FiniteRegularEventsStream
16
+ from .file_type import FileType as FileType
17
+ from .stream import TransposeAction as TransposeAction
18
+ from .timestamp import Time as Time
19
+ from .timestamp import parse_timestamp as parse_timestamp
20
+ from .timestamp import timestamp_to_timecode as timestamp_to_timecode
21
+ from .timestamp import timestamp_to_seconds as timestamp_to_seconds
22
+ from . import cli as cli
23
+
24
+ if typing.TYPE_CHECKING:
25
+ from .types import aedat # type: ignore
26
+ from .types import csv # type: ignore
27
+ from .types import dat # type: ignore
28
+ from .types import event_stream # type: ignore
29
+ from .types import evt # type: ignore
30
+ else:
31
+ from .extension import aedat
32
+ from .extension import csv
33
+ from .extension import dat
34
+ from .extension import event_stream
35
+ from .extension import evt
36
+
37
+ __all__ = [
38
+ "__version__",
39
+ "CsvProperties",
40
+ "EVENTS_DTYPE",
41
+ "events_stream_from_array",
42
+ "events_stream_from_file",
43
+ "events_stream_from_stdin",
44
+ "events_stream_from_udp",
45
+ "EventsStream",
46
+ "FiniteEventsStream",
47
+ "RegularEventsStream",
48
+ "FiniteRegularEventsStream",
49
+ "FileType",
50
+ "TransposeAction",
51
+ "Time",
52
+ "parse_timestamp",
53
+ "timestamp_to_timecode",
54
+ "timestamp_to_seconds",
55
+ "aedat",
56
+ "csv",
57
+ "dat",
58
+ "event_stream",
59
+ "evt",
60
+ "cli",
61
+ ]
faery/__main__.py ADDED
@@ -0,0 +1,43 @@
1
+ def main():
2
+
3
+ import argparse
4
+ import textwrap
5
+
6
+ import faery
7
+
8
+ parser = argparse.ArgumentParser(
9
+ prog="faery",
10
+ formatter_class=argparse.RawTextHelpFormatter,
11
+ description=textwrap.dedent(
12
+ rf"""
13
+ __ __ _____
14
+ / \ / \ | ___|_ _ ___ _ __ _ _
15
+ | ( \___/ ) | | |_ / _` |/ _ \ '__| | | |
16
+ \__/ \__/ | _| (_| | __/ | | |_| |
17
+ _\___/_ |_| \__,_|\___|_| \__, |
18
+ (_/ \_) |___/
19
+
20
+ Faery converts Neuromorphic camera data (events) between formats.
21
+ It can also generate videos, spectrograms, and event rate curves.
22
+ """
23
+ ),
24
+ )
25
+ parser.add_argument(
26
+ "-v", "--version", action="version", version=f"Faery {faery.__version__}"
27
+ )
28
+ subparsers = parser.add_subparsers(dest="command")
29
+ faery.cli.convert.add_to_subparsers(subparsers)
30
+ faery.cli.render.add_to_subparsers(subparsers)
31
+ faery.cli.init.add_to_subparsers(subparsers)
32
+ faery.cli.run.add_to_subparsers(subparsers)
33
+ faery.cli.inline.add_to_subparsers(subparsers)
34
+ args = parser.parse_args()
35
+
36
+ if args.command is None:
37
+ parser.print_help()
38
+ else:
39
+ getattr(faery.cli, args.command).run(args)
40
+
41
+
42
+ if __name__ == "__main__":
43
+ main()
faery/cli/__init__.py ADDED
@@ -0,0 +1,13 @@
1
+ from . import convert as convert
2
+ from . import init as init
3
+ from . import inline as inline
4
+ from . import render as render
5
+ from . import run as run
6
+
7
+ __all__ = [
8
+ "convert",
9
+ "init",
10
+ "inline",
11
+ "render",
12
+ "run",
13
+ ]
faery/cli/convert.py ADDED
@@ -0,0 +1,150 @@
1
+ import argparse
2
+ import sys
3
+
4
+ import faery
5
+
6
+
7
+ def add_to_subparsers(subparsers: argparse._SubParsersAction):
8
+ parser: argparse.ArgumentParser = subparsers.add_parser(
9
+ "convert", help="convert between event formats"
10
+ )
11
+ parser.add_argument(
12
+ "input", help='Path of the input file (use "stdin" for standard input)'
13
+ )
14
+ parser.add_argument(
15
+ "-f",
16
+ "--input-format",
17
+ choices=[
18
+ "aedat",
19
+ "csv",
20
+ "dat",
21
+ "es",
22
+ "evt",
23
+ ],
24
+ help="input format, required if the input is standard input",
25
+ )
26
+ parser.add_argument(
27
+ "-i",
28
+ "--track-id",
29
+ type=int,
30
+ help="set the track id for edat files (defaults to the first event stream)",
31
+ )
32
+ parser.add_argument(
33
+ "-j",
34
+ "--input-version",
35
+ choices=["dat1", "dat2", "evt2", "evt2.1", "evt3"],
36
+ help="set the version for evt (.raw) or dat files",
37
+ )
38
+ parser.add_argument(
39
+ "-x",
40
+ "--width",
41
+ type=int,
42
+ help="input width, required if the input format is csv",
43
+ )
44
+ parser.add_argument(
45
+ "-y",
46
+ "--height",
47
+ type=int,
48
+ help="input height, required if the input format is csv",
49
+ )
50
+ parser.add_argument(
51
+ "-t",
52
+ "--t0",
53
+ default=0,
54
+ help="set t0 for Event Stream files (defaults to 0)",
55
+ )
56
+ parser.add_argument(
57
+ "output", help='Path of the input file (use "stdout" for standard input)'
58
+ )
59
+ parser.add_argument(
60
+ "-g",
61
+ "--output-format",
62
+ choices=[
63
+ "aedat",
64
+ "csv",
65
+ "dat",
66
+ "es",
67
+ "evt",
68
+ ],
69
+ help="output format, required if the output is standard output",
70
+ )
71
+ parser.add_argument(
72
+ "-k",
73
+ "--output-version",
74
+ choices=["dat1", "dat2", "evt2", "evt2.1", "evt3"],
75
+ help="set the version for evt (.raw) or dat files",
76
+ )
77
+ parser.add_argument(
78
+ "-z",
79
+ "--zero-t0",
80
+ action="store_true",
81
+ help="offset the output's timestamps so that the first one is zero",
82
+ )
83
+ parser.add_argument(
84
+ "-p",
85
+ "--print-t0",
86
+ action="store_true",
87
+ help="print the output's original t0 (before offset if -z/--zero-t0 is set)",
88
+ )
89
+ parser.add_argument(
90
+ "-c",
91
+ "--compression-type",
92
+ choices=["lz4", "zstd"],
93
+ default="lz4",
94
+ help='set the compression algorithm for aedat files (defaults to "lz4")',
95
+ )
96
+ parser.add_argument(
97
+ "-d",
98
+ "--compression-level",
99
+ type=int,
100
+ default=1,
101
+ help="set the compression level for aedat files (defaults to 1)",
102
+ )
103
+
104
+
105
+ def run(args: argparse.Namespace):
106
+ if (args.width is None) != (args.height is None):
107
+ sys.stderr.write(
108
+ "only one of width (-x/--width) and height (-y/--height) was provided (either both or neither should be provided)\n"
109
+ )
110
+ sys.exit(1)
111
+
112
+ # @TODO add support for udp
113
+ if args.input == "stdin":
114
+ assert args.input_format is not None
115
+ assert args.input_format == "csv" # only supported stdin format at the moment
116
+ assert args.width is not None
117
+ assert args.height is not None
118
+ stream = faery.events_stream_from_stdin(dimensions=(args.width, args.height))
119
+ else:
120
+ if args.width is not None and args.height is not None:
121
+ stream = faery.events_stream_from_file(
122
+ path=args.input,
123
+ track_id=args.track_id,
124
+ dimensions_fallback=(args.width, args.height),
125
+ version_fallback=args.input_version,
126
+ t0=args.t0,
127
+ file_type=args.input_format,
128
+ )
129
+ else:
130
+ stream = faery.events_stream_from_file(
131
+ path=args.input,
132
+ track_id=args.track_id,
133
+ version_fallback=args.input_version,
134
+ t0=args.t0,
135
+ file_type=args.input_format,
136
+ )
137
+
138
+ if args.output == "stdout":
139
+ assert args.output_format == "csv" # only supported stdout format at the moment
140
+ stream.to_stdout()
141
+ else:
142
+ t0 = stream.to_file(
143
+ path=args.output,
144
+ version=args.output_version,
145
+ zero_t0=args.zero_t0,
146
+ compression=(args.compression_type, args.compression_level),
147
+ file_type=args.output_format,
148
+ )
149
+ if args.print_t0:
150
+ print(t0)
faery/cli/init.py ADDED
@@ -0,0 +1,67 @@
1
+ import argparse
2
+ import os
3
+ import pathlib
4
+
5
+
6
+ def add_to_subparsers(subparsers: argparse._SubParsersAction):
7
+ parser: argparse.ArgumentParser = subparsers.add_parser(
8
+ "init", help="initialize a script to render multiple files"
9
+ )
10
+ parser.add_argument(
11
+ "-c",
12
+ "--configuration",
13
+ default=str(pathlib.Path(os.getcwd()) / "faery_configuration.py"),
14
+ help="path of the configuration file",
15
+ )
16
+ parser.add_argument(
17
+ "-s",
18
+ "--scan",
19
+ default=str(pathlib.Path(os.getcwd()) / "recordings"),
20
+ help="**/*.",
21
+ )
22
+ parser.add_argument(
23
+ "-f",
24
+ "--input-format",
25
+ choices=[
26
+ "aedat",
27
+ "csv",
28
+ "dat",
29
+ "es",
30
+ "evt",
31
+ ],
32
+ help="input format, required if the input is standard input",
33
+ )
34
+ parser.add_argument(
35
+ "-i",
36
+ "--track-id",
37
+ type=int,
38
+ help="set the track id for edat files (defaults to the first event stream)",
39
+ )
40
+ parser.add_argument(
41
+ "-j",
42
+ "--input-version",
43
+ choices=["dat1", "dat2", "evt2", "evt2.1", "evt3"],
44
+ help="set the version for evt (.raw) or dat files",
45
+ )
46
+ parser.add_argument(
47
+ "-x",
48
+ "--width",
49
+ type=int,
50
+ help="input width, required if the input format is csv",
51
+ )
52
+ parser.add_argument(
53
+ "-y",
54
+ "--height",
55
+ type=int,
56
+ help="input height, required if the input format is csv",
57
+ )
58
+ parser.add_argument(
59
+ "-t",
60
+ "--t0",
61
+ default=0,
62
+ help="set t0 for Event Stream files (defaults to 0)",
63
+ )
64
+
65
+
66
+ def run(args: argparse.Namespace):
67
+ pass