hyperstellar 0.1.24__tar.gz
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.
- hyperstellar-0.1.24/LICENSE +27 -0
- hyperstellar-0.1.24/PKG-INFO +49 -0
- hyperstellar-0.1.24/README.md +4 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/__init__.py +88 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/__init__.pyi +267 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/_native/windows-x64/shaders/math.comp +1029 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/_native/windows-x64/shaders/quad.frag +26 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/_native/windows-x64/shaders/quad.geom +157 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/_native/windows-x64/shaders/quad.vert +39 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/_native/windows-x64/stellar.pyd +0 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar/py.typed +0 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar.egg-info/PKG-INFO +49 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar.egg-info/SOURCES.txt +19 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar.egg-info/dependency_links.txt +1 -0
- hyperstellar-0.1.24/hyperstellar/src/hyperstellar.egg-info/top_level.txt +1 -0
- hyperstellar-0.1.24/pyproject.toml +54 -0
- hyperstellar-0.1.24/setup.cfg +4 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<<<<<<< HEAD
|
|
2
|
+
MIT License
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2024 desktop-hnrtra0\user
|
|
5
|
+
=======
|
|
6
|
+
MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2025 Void_unleashed
|
|
9
|
+
>>>>>>> 3fd83288e1496a5a3d4c3e29bdef651eba07de35
|
|
10
|
+
|
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
in the Software without restriction, including without limitation the rights
|
|
14
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
furnished to do so, subject to the following conditions:
|
|
17
|
+
|
|
18
|
+
The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
copies or substantial portions of the Software.
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
SOFTWARE.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hyperstellar
|
|
3
|
+
Version: 0.1.24
|
|
4
|
+
Summary: GPU-accelerated physics simulation engine
|
|
5
|
+
Author-email: Aiden Jabari <Jabariaiden15@email.com>
|
|
6
|
+
License: <<<<<<< HEAD
|
|
7
|
+
MIT License
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2024 desktop-hnrtra0\user
|
|
10
|
+
=======
|
|
11
|
+
MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2025 Void_unleashed
|
|
14
|
+
>>>>>>> 3fd83288e1496a5a3d4c3e29bdef651eba07de35
|
|
15
|
+
|
|
16
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
17
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
18
|
+
in the Software without restriction, including without limitation the rights
|
|
19
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
20
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
21
|
+
furnished to do so, subject to the following conditions:
|
|
22
|
+
|
|
23
|
+
The above copyright notice and this permission notice shall be included in all
|
|
24
|
+
copies or substantial portions of the Software.
|
|
25
|
+
|
|
26
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
27
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
28
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
29
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
30
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
31
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
32
|
+
SOFTWARE.
|
|
33
|
+
|
|
34
|
+
Keywords: physics,simulation,gpu,opengl
|
|
35
|
+
Classifier: Development Status :: 3 - Alpha
|
|
36
|
+
Classifier: Intended Audience :: Science/Research
|
|
37
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
38
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
40
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
41
|
+
Requires-Python: >=3.13
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
License-File: LICENSE
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# Hyperstellar
|
|
47
|
+
### Write math Equations in python
|
|
48
|
+
|
|
49
|
+
Buckle up, coz this isn't just another preset physics engine. Hyperstellar gives you the mathematical language to define *any* dynamical system, then GPU-accelerates it to thousands of frames per second. From orbital mechanics to fluid dynamics, if you can write the equation, you can simulate it.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# Hyperstellar
|
|
2
|
+
### Write math Equations in python
|
|
3
|
+
|
|
4
|
+
Buckle up, coz this isn't just another preset physics engine. Hyperstellar gives you the mathematical language to define *any* dynamical system, then GPU-accelerates it to thousands of frames per second. From orbital mechanics to fluid dynamics, if you can write the equation, you can simulate it.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# hyperstellar/src/hyperstellar/__init__.py
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
import platform
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
__version__ = "0.1.0"
|
|
8
|
+
|
|
9
|
+
# Platform detection
|
|
10
|
+
system = platform.system().lower()
|
|
11
|
+
arch = platform.machine().lower()
|
|
12
|
+
|
|
13
|
+
if system == "windows" and ("amd64" in arch or "x86_64" in arch):
|
|
14
|
+
platform_dir = "windows-x64"
|
|
15
|
+
extension = ".pyd"
|
|
16
|
+
lib_name = "stellar.pyd"
|
|
17
|
+
else:
|
|
18
|
+
raise ImportError(f"Unsupported platform: {system} {arch}")
|
|
19
|
+
|
|
20
|
+
# Get the native module path
|
|
21
|
+
module_dir = Path(__file__).parent / "_native" / platform_dir
|
|
22
|
+
module_path = module_dir / lib_name
|
|
23
|
+
|
|
24
|
+
if not module_path.exists():
|
|
25
|
+
raise ImportError(f"Native module not found: {module_path}")
|
|
26
|
+
|
|
27
|
+
# On Windows, add DLL directory to PATH
|
|
28
|
+
if system == "windows":
|
|
29
|
+
dll_dir = str(module_dir)
|
|
30
|
+
|
|
31
|
+
# DEBUG: Print what we're doing
|
|
32
|
+
print(f"[DEBUG] Adding DLL directory: {dll_dir}")
|
|
33
|
+
|
|
34
|
+
# CRITICAL FIX: Save the original PATH
|
|
35
|
+
original_path = os.environ.get('PATH', '')
|
|
36
|
+
|
|
37
|
+
# Method 1: Add to PATH at the BEGINNING (highest priority)
|
|
38
|
+
# This must be done BEFORE any attempt to import
|
|
39
|
+
path_sep = ';'
|
|
40
|
+
os.environ['PATH'] = dll_dir + path_sep + original_path
|
|
41
|
+
print(f"[DEBUG] Added to PATH: {dll_dir}")
|
|
42
|
+
|
|
43
|
+
# Method 2: Use AddDllDirectory for explicit loading
|
|
44
|
+
try:
|
|
45
|
+
import ctypes
|
|
46
|
+
# Clear any previous DLL directory cache
|
|
47
|
+
os.add_dll_directory(dll_dir)
|
|
48
|
+
print(f"[DEBUG] Used os.add_dll_directory")
|
|
49
|
+
except Exception as add_dll_error:
|
|
50
|
+
print(f"[DEBUG] os.add_dll_directory failed: {add_dll_error}")
|
|
51
|
+
|
|
52
|
+
# Try to import the module
|
|
53
|
+
try:
|
|
54
|
+
# First, clear stellar from sys.modules if it exists
|
|
55
|
+
sys.modules.pop('stellar', None)
|
|
56
|
+
|
|
57
|
+
# CRITICAL: Add the module directory to sys.path temporarily
|
|
58
|
+
sys.path.insert(0, str(module_dir))
|
|
59
|
+
|
|
60
|
+
# Import the module
|
|
61
|
+
import stellar as _stellar_module
|
|
62
|
+
|
|
63
|
+
# Remove from sys.path
|
|
64
|
+
sys.path.pop(0)
|
|
65
|
+
|
|
66
|
+
# Copy ALL public attributes to our module
|
|
67
|
+
for attr_name in dir(_stellar_module):
|
|
68
|
+
if not attr_name.startswith('__'):
|
|
69
|
+
globals()[attr_name] = getattr(_stellar_module, attr_name)
|
|
70
|
+
|
|
71
|
+
# Also copy __all__ if it exists
|
|
72
|
+
if hasattr(_stellar_module, '__all__'):
|
|
73
|
+
__all__ = _stellar_module.__all__
|
|
74
|
+
|
|
75
|
+
print(f"✓ hyperstellar loaded: {system} {arch}")
|
|
76
|
+
|
|
77
|
+
except ImportError as e:
|
|
78
|
+
# Provide detailed debug info
|
|
79
|
+
dll_files = list(module_dir.glob('*.dll'))
|
|
80
|
+
raise ImportError(
|
|
81
|
+
f"Failed to load native module: {e}\n"
|
|
82
|
+
f"Module path: {module_path}\n"
|
|
83
|
+
f"DLL directory: {module_dir}\n"
|
|
84
|
+
f"DLLs available: {[dll.name for dll in dll_files]}\n"
|
|
85
|
+
f"Current PATH: {os.environ.get('PATH', '')[:200]}..."
|
|
86
|
+
)
|
|
87
|
+
except Exception as e:
|
|
88
|
+
raise ImportError(f"Unexpected error loading module: {e}")
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# Type stubs for hyperstellar package
|
|
2
|
+
import typing
|
|
3
|
+
from typing import Any, List, Dict, Optional, Union, Callable
|
|
4
|
+
|
|
5
|
+
class SkinType:
|
|
6
|
+
"""Visual representation type for objects."""
|
|
7
|
+
CIRCLE: int
|
|
8
|
+
RECTANGLE: int
|
|
9
|
+
POLYGON: int
|
|
10
|
+
|
|
11
|
+
class ConstraintType:
|
|
12
|
+
"""Type of physics constraint."""
|
|
13
|
+
DISTANCE: int
|
|
14
|
+
BOUNDARY: int
|
|
15
|
+
|
|
16
|
+
class ObjectState:
|
|
17
|
+
"""Complete state of a physics object."""
|
|
18
|
+
x: float
|
|
19
|
+
y: float
|
|
20
|
+
vx: float
|
|
21
|
+
vy: float
|
|
22
|
+
mass: float
|
|
23
|
+
charge: float
|
|
24
|
+
rotation: float
|
|
25
|
+
angular_velocity: float
|
|
26
|
+
width: float
|
|
27
|
+
height: float
|
|
28
|
+
radius: float
|
|
29
|
+
polygon_sides: int
|
|
30
|
+
skin_type: SkinType
|
|
31
|
+
r: float
|
|
32
|
+
g: float
|
|
33
|
+
b: float
|
|
34
|
+
a: float
|
|
35
|
+
|
|
36
|
+
def __init__(self) -> None: ...
|
|
37
|
+
def __repr__(self) -> str: ...
|
|
38
|
+
|
|
39
|
+
class ObjectConfig:
|
|
40
|
+
"""Configuration for creating objects in batch mode."""
|
|
41
|
+
x: float
|
|
42
|
+
y: float
|
|
43
|
+
vx: float
|
|
44
|
+
vy: float
|
|
45
|
+
mass: float
|
|
46
|
+
charge: float
|
|
47
|
+
rotation: float
|
|
48
|
+
angular_velocity: float
|
|
49
|
+
skin: SkinType
|
|
50
|
+
size: float
|
|
51
|
+
width: float
|
|
52
|
+
height: float
|
|
53
|
+
r: float
|
|
54
|
+
g: float
|
|
55
|
+
b: float
|
|
56
|
+
a: float
|
|
57
|
+
polygon_sides: int
|
|
58
|
+
equation: str
|
|
59
|
+
|
|
60
|
+
def __init__(self) -> None: ...
|
|
61
|
+
def __repr__(self) -> str: ...
|
|
62
|
+
|
|
63
|
+
class ConstraintConfig:
|
|
64
|
+
"""Constraint configuration for batch mode."""
|
|
65
|
+
type: ConstraintType
|
|
66
|
+
target: int
|
|
67
|
+
param1: float
|
|
68
|
+
param2: float
|
|
69
|
+
param3: float
|
|
70
|
+
param4: float
|
|
71
|
+
|
|
72
|
+
def __init__(self) -> None: ...
|
|
73
|
+
|
|
74
|
+
class BatchConfig:
|
|
75
|
+
"""Configuration for batch simulations."""
|
|
76
|
+
objects: List[ObjectConfig]
|
|
77
|
+
duration: float
|
|
78
|
+
dt: float
|
|
79
|
+
output_file: str
|
|
80
|
+
|
|
81
|
+
def __init__(self) -> None: ...
|
|
82
|
+
|
|
83
|
+
# NEW: Batch data structures
|
|
84
|
+
class BatchGetData:
|
|
85
|
+
"""Batch get data structure for fetching multiple objects at once."""
|
|
86
|
+
x: float
|
|
87
|
+
y: float
|
|
88
|
+
vx: float
|
|
89
|
+
vy: float
|
|
90
|
+
mass: float
|
|
91
|
+
charge: float
|
|
92
|
+
rotation: float
|
|
93
|
+
angular_velocity: float
|
|
94
|
+
width: float
|
|
95
|
+
height: float
|
|
96
|
+
radius: float
|
|
97
|
+
polygon_sides: int
|
|
98
|
+
skin_type: int
|
|
99
|
+
r: float
|
|
100
|
+
g: float
|
|
101
|
+
b: float
|
|
102
|
+
a: float
|
|
103
|
+
|
|
104
|
+
def __init__(self) -> None: ...
|
|
105
|
+
|
|
106
|
+
class BatchUpdateData:
|
|
107
|
+
"""Batch update data structure for updating multiple objects at once."""
|
|
108
|
+
index: int
|
|
109
|
+
x: float
|
|
110
|
+
y: float
|
|
111
|
+
vx: float
|
|
112
|
+
vy: float
|
|
113
|
+
mass: float
|
|
114
|
+
charge: float
|
|
115
|
+
rotation: float
|
|
116
|
+
angular_velocity: float
|
|
117
|
+
width: float
|
|
118
|
+
height: float
|
|
119
|
+
r: float
|
|
120
|
+
g: float
|
|
121
|
+
b: float
|
|
122
|
+
a: float
|
|
123
|
+
|
|
124
|
+
def __init__(self) -> None: ...
|
|
125
|
+
|
|
126
|
+
class DistanceConstraint:
|
|
127
|
+
"""Maintain distance between two objects."""
|
|
128
|
+
target_object: int
|
|
129
|
+
rest_length: float
|
|
130
|
+
stiffness: float
|
|
131
|
+
|
|
132
|
+
def __init__(self, target_object: int = 0, rest_length: float = 5.0, stiffness: float = 100.0) -> None: ...
|
|
133
|
+
def __repr__(self) -> str: ...
|
|
134
|
+
|
|
135
|
+
class BoundaryConstraint:
|
|
136
|
+
"""Keep object within a rectangular boundary."""
|
|
137
|
+
min_x: float
|
|
138
|
+
max_x: float
|
|
139
|
+
min_y: float
|
|
140
|
+
max_y: float
|
|
141
|
+
|
|
142
|
+
def __init__(self, min_x: float = -10.0, max_x: float = 10.0, min_y: float = -10.0, max_y: float = 10.0) -> None: ...
|
|
143
|
+
def __repr__(self) -> str: ...
|
|
144
|
+
|
|
145
|
+
class Simulation:
|
|
146
|
+
"""Main physics simulation class."""
|
|
147
|
+
|
|
148
|
+
def __init__(self,
|
|
149
|
+
headless: bool = True,
|
|
150
|
+
width: int = 1280,
|
|
151
|
+
height: int = 720,
|
|
152
|
+
title: str = "Physics Simulation",
|
|
153
|
+
enable_grid: bool = True) -> None: ...
|
|
154
|
+
|
|
155
|
+
# Window management
|
|
156
|
+
def render(self) -> None: ...
|
|
157
|
+
def process_input(self) -> None: ...
|
|
158
|
+
def should_close(self) -> bool: ...
|
|
159
|
+
|
|
160
|
+
# NEW: Grid control
|
|
161
|
+
def set_grid_enabled(self, enabled: bool) -> None: ...
|
|
162
|
+
def get_grid_enabled(self) -> bool: ...
|
|
163
|
+
|
|
164
|
+
# Core simulation
|
|
165
|
+
def update(self, dt: float = 0.016) -> None: ...
|
|
166
|
+
|
|
167
|
+
# Object management
|
|
168
|
+
def add_object(
|
|
169
|
+
self,
|
|
170
|
+
x: float = 0.0,
|
|
171
|
+
y: float = 0.0,
|
|
172
|
+
vx: float = 0.0,
|
|
173
|
+
vy: float = 0.0,
|
|
174
|
+
mass: float = 1.0,
|
|
175
|
+
charge: float = 0.0,
|
|
176
|
+
rotation: float = 0.0,
|
|
177
|
+
angular_velocity: float = 0.0,
|
|
178
|
+
skin: SkinType = SkinType.CIRCLE,
|
|
179
|
+
size: float = 0.3,
|
|
180
|
+
width: float = 0.5,
|
|
181
|
+
height: float = 0.3,
|
|
182
|
+
r: float = 1.0,
|
|
183
|
+
g: float = 1.0,
|
|
184
|
+
b: float = 1.0,
|
|
185
|
+
a: float = 1.0,
|
|
186
|
+
polygon_sides: int = 6
|
|
187
|
+
) -> int: ...
|
|
188
|
+
|
|
189
|
+
def update_object(
|
|
190
|
+
self,
|
|
191
|
+
index: int,
|
|
192
|
+
x: float, y: float,
|
|
193
|
+
vx: float, vy: float,
|
|
194
|
+
mass: float, charge: float,
|
|
195
|
+
rotation: float, angular_velocity: float,
|
|
196
|
+
width: float, height: float,
|
|
197
|
+
r: float, g: float, b: float, a: float
|
|
198
|
+
) -> None: ...
|
|
199
|
+
|
|
200
|
+
# NEW: Batch operations
|
|
201
|
+
def batch_get(self, indices: List[int]) -> List[BatchGetData]: ...
|
|
202
|
+
def batch_update(self, updates: List[BatchUpdateData]) -> None: ...
|
|
203
|
+
|
|
204
|
+
def remove_object(self, index: int) -> None: ...
|
|
205
|
+
def object_count(self) -> int: ...
|
|
206
|
+
def get_object(self, index: int) -> ObjectState: ...
|
|
207
|
+
|
|
208
|
+
# Convenience methods
|
|
209
|
+
def set_rotation(self, index: int, rotation: float) -> None: ...
|
|
210
|
+
def set_angular_velocity(self, index: int, angular_velocity: float) -> None: ...
|
|
211
|
+
def set_dimensions(self, index: int, width: float, height: float) -> None: ...
|
|
212
|
+
def set_radius(self, index: int, radius: float) -> None: ...
|
|
213
|
+
def get_rotation(self, index: int) -> float: ...
|
|
214
|
+
def get_angular_velocity(self, index: int) -> float: ...
|
|
215
|
+
|
|
216
|
+
# Equations
|
|
217
|
+
def set_equation(self, object_index: int, equation_string: str) -> None: ...
|
|
218
|
+
|
|
219
|
+
# Constraints
|
|
220
|
+
def add_distance_constraint(self, object_index: int, constraint: DistanceConstraint) -> None: ...
|
|
221
|
+
def add_boundary_constraint(self, object_index: int, constraint: BoundaryConstraint) -> None: ...
|
|
222
|
+
def clear_constraints(self, object_index: int) -> None: ...
|
|
223
|
+
def clear_all_constraints(self) -> None: ...
|
|
224
|
+
|
|
225
|
+
# Batch processing
|
|
226
|
+
def run_batch(
|
|
227
|
+
self,
|
|
228
|
+
configs: List[BatchConfig],
|
|
229
|
+
callback: Optional[Callable[[int, List[ObjectState]], None]] = None
|
|
230
|
+
) -> None: ...
|
|
231
|
+
|
|
232
|
+
# Parameters
|
|
233
|
+
def set_parameter(self, name: str, value: float) -> None: ...
|
|
234
|
+
def get_parameter(self, name: str) -> float: ...
|
|
235
|
+
|
|
236
|
+
# Simulation control
|
|
237
|
+
def set_paused(self, paused: bool) -> None: ...
|
|
238
|
+
def is_paused(self) -> bool: ...
|
|
239
|
+
|
|
240
|
+
def update_shader_loading(self) -> None: ...
|
|
241
|
+
def are_all_shaders_ready(self) -> bool: ...
|
|
242
|
+
def get_shader_load_progress(self) -> float: ...
|
|
243
|
+
def get_shader_load_status(self) -> str: ...
|
|
244
|
+
|
|
245
|
+
def reset(self) -> None: ...
|
|
246
|
+
def cleanup(self) -> None: ...
|
|
247
|
+
|
|
248
|
+
# File I/O
|
|
249
|
+
def save_to_file(
|
|
250
|
+
self,
|
|
251
|
+
filename: str,
|
|
252
|
+
title: str = "",
|
|
253
|
+
author: str = "",
|
|
254
|
+
description: str = ""
|
|
255
|
+
) -> None: ...
|
|
256
|
+
|
|
257
|
+
def load_from_file(self, filename: str) -> None: ...
|
|
258
|
+
|
|
259
|
+
# Properties
|
|
260
|
+
@property
|
|
261
|
+
def is_headless(self) -> bool: ...
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def is_initialized(self) -> bool: ...
|
|
265
|
+
|
|
266
|
+
# Module-level exports
|
|
267
|
+
__version__: str
|