amulet-core 2.0a5__cp312-cp312-win_amd64.whl → 2.0a7__cp312-cp312-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.
Potentially problematic release.
This version of amulet-core might be problematic. Click here for more details.
- amulet/__init__.cp312-win_amd64.pyd +0 -0
- amulet/__init__.py.cpp +43 -0
- amulet/__init__.pyi +0 -2
- amulet/_init.py +0 -2
- amulet/_version.py +3 -3
- amulet/biome.py.cpp +122 -0
- amulet/biome.pyi +0 -2
- amulet/block.py.cpp +377 -0
- amulet/block.pyi +0 -2
- amulet/block_entity.py.cpp +115 -0
- amulet/block_entity.pyi +0 -2
- amulet/chunk.py.cpp +80 -0
- amulet/chunk.pyi +0 -2
- amulet/chunk_components/biome_3d_component.cpp +5 -0
- amulet/chunk_components/biome_3d_component.hpp +79 -0
- amulet/chunk_components/block_component.cpp +41 -0
- amulet/chunk_components/block_component.hpp +88 -0
- amulet/chunk_components/block_entity_component.cpp +5 -0
- amulet/chunk_components/block_entity_component.hpp +147 -0
- amulet/chunk_components/section_array_map.cpp +129 -0
- amulet/chunk_components/section_array_map.hpp +147 -0
- amulet/chunk_components.pyi +20 -18
- amulet/collections/eq.py.hpp +37 -0
- amulet/collections/hash.py.hpp +27 -0
- amulet/collections/holder.py.hpp +37 -0
- amulet/collections/iterator.py.hpp +80 -0
- amulet/collections/mapping.py.hpp +199 -0
- amulet/collections/mutable_mapping.py.hpp +226 -0
- amulet/collections/sequence.py.hpp +163 -0
- amulet/collections.pyi +8 -5
- amulet/entity.py +22 -20
- amulet/game/translate/_functions/_code_functions/_text.py +2 -2
- amulet/game/translate/_functions/abc.py +10 -3
- amulet/img/__init__.py +10 -0
- amulet/img/missing_no.png +0 -0
- amulet/img/missing_pack.png +0 -0
- amulet/img/missing_world.png +0 -0
- amulet/io/binary_reader.hpp +45 -0
- amulet/io/binary_writer.hpp +30 -0
- amulet/level/__init__.pyi +2 -6
- amulet/level/abc/_level/_creatable_level.py +1 -2
- amulet/level/abc/_level/_level.py +1 -5
- amulet/level/java/__init__.pyi +0 -5
- amulet/level/java/_raw/__init__.pyi +0 -4
- amulet/level/java/_raw/java_chunk_decode.cpp +531 -0
- amulet/level/java/_raw/java_chunk_decode.hpp +23 -0
- amulet/level/java/_raw/java_chunk_encode.cpp +25 -0
- amulet/level/java/_raw/java_chunk_encode.hpp +23 -0
- amulet/level/java/chunk_components/data_version_component.cpp +32 -0
- amulet/level/java/chunk_components/data_version_component.hpp +31 -0
- amulet/level/java/chunk_components/java_raw_chunk_component.cpp +56 -0
- amulet/level/java/chunk_components/java_raw_chunk_component.hpp +45 -0
- amulet/level/java/java_chunk.cpp +170 -0
- amulet/level/java/java_chunk.hpp +141 -0
- amulet/level/java/long_array.hpp +175 -0
- amulet/level/java/long_array.pyi +2 -1
- amulet/mesh/block/__init__.py +1 -0
- amulet/mesh/block/block_mesh.py +369 -0
- amulet/mesh/block/cube.py +149 -0
- amulet/mesh/block/missing_block.py +20 -0
- amulet/mesh/util.py +17 -0
- amulet/palette/biome_palette.hpp +85 -0
- amulet/palette/block_palette.cpp +32 -0
- amulet/palette/block_palette.hpp +93 -0
- amulet/player.py +4 -6
- amulet/pybind11/collections.hpp +118 -0
- amulet/pybind11/numpy.hpp +26 -0
- amulet/pybind11/py_module.hpp +34 -0
- amulet/pybind11/type_hints.hpp +51 -0
- amulet/pybind11/types.hpp +25 -0
- amulet/pybind11/typing.hpp +7 -0
- amulet/resource_pack/__init__.py +62 -0
- amulet/resource_pack/abc/__init__.py +2 -0
- amulet/resource_pack/abc/resource_pack.py +38 -0
- amulet/resource_pack/abc/resource_pack_manager.py +87 -0
- amulet/resource_pack/bedrock/__init__.py +2 -0
- amulet/resource_pack/bedrock/bedrock_vanilla_fix/pack_icon.png +0 -0
- amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_carried.png +0 -0
- amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_side_carried.png +0 -0
- amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/water.png +0 -0
- amulet/resource_pack/bedrock/blockshapes/__init__.py +31 -0
- amulet/resource_pack/bedrock/blockshapes/air.py +35 -0
- amulet/resource_pack/bedrock/blockshapes/base_blockshape.py +29 -0
- amulet/resource_pack/bedrock/blockshapes/bubble_column.py +29 -0
- amulet/resource_pack/bedrock/blockshapes/cake.py +46 -0
- amulet/resource_pack/bedrock/blockshapes/chest.py +54 -0
- amulet/resource_pack/bedrock/blockshapes/comparator.py +51 -0
- amulet/resource_pack/bedrock/blockshapes/cross_texture.py +186 -0
- amulet/resource_pack/bedrock/blockshapes/cross_texture0.py +17 -0
- amulet/resource_pack/bedrock/blockshapes/cross_texture_green.py +16 -0
- amulet/resource_pack/bedrock/blockshapes/cube.py +38 -0
- amulet/resource_pack/bedrock/blockshapes/default.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door.py +38 -0
- amulet/resource_pack/bedrock/blockshapes/door1.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door2.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door3.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door4.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door5.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/door6.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/double_plant.py +40 -0
- amulet/resource_pack/bedrock/blockshapes/enchanting_table.py +22 -0
- amulet/resource_pack/bedrock/blockshapes/farmland.py +22 -0
- amulet/resource_pack/bedrock/blockshapes/fence.py +22 -0
- amulet/resource_pack/bedrock/blockshapes/flat.py +55 -0
- amulet/resource_pack/bedrock/blockshapes/flat_wall.py +55 -0
- amulet/resource_pack/bedrock/blockshapes/furnace.py +44 -0
- amulet/resource_pack/bedrock/blockshapes/furnace_lit.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/green_cube.py +39 -0
- amulet/resource_pack/bedrock/blockshapes/ladder.py +36 -0
- amulet/resource_pack/bedrock/blockshapes/lilypad.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/partial_block.py +57 -0
- amulet/resource_pack/bedrock/blockshapes/piston.py +44 -0
- amulet/resource_pack/bedrock/blockshapes/piston_arm.py +72 -0
- amulet/resource_pack/bedrock/blockshapes/portal_frame.py +22 -0
- amulet/resource_pack/bedrock/blockshapes/pressure_plate.py +29 -0
- amulet/resource_pack/bedrock/blockshapes/pumpkin.py +36 -0
- amulet/resource_pack/bedrock/blockshapes/pumpkin_carved.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/pumpkin_lit.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/red_dust.py +14 -0
- amulet/resource_pack/bedrock/blockshapes/repeater.py +53 -0
- amulet/resource_pack/bedrock/blockshapes/slab.py +33 -0
- amulet/resource_pack/bedrock/blockshapes/slab_double.py +15 -0
- amulet/resource_pack/bedrock/blockshapes/tree.py +41 -0
- amulet/resource_pack/bedrock/blockshapes/turtle_egg.py +15 -0
- amulet/resource_pack/bedrock/blockshapes/vine.py +52 -0
- amulet/resource_pack/bedrock/blockshapes/wall.py +22 -0
- amulet/resource_pack/bedrock/blockshapes/water.py +38 -0
- amulet/resource_pack/bedrock/download_resources.py +147 -0
- amulet/resource_pack/bedrock/resource_pack.py +40 -0
- amulet/resource_pack/bedrock/resource_pack_manager.py +361 -0
- amulet/resource_pack/bedrock/sort_blockshapes.py +15 -0
- amulet/resource_pack/java/__init__.py +2 -0
- amulet/resource_pack/java/download_resources.py +212 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_black.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_blue.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_brown.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_cyan.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_gray.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_green.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_blue.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_gray.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_lime.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_magenta.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_orange.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_pink.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_purple.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_red.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_white.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_yellow.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/barrier.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/end_portal.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/grass.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/lava.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/structure_void.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/water.png +0 -0
- amulet/resource_pack/java/java_vanilla_fix/pack.png +0 -0
- amulet/resource_pack/java/resource_pack.py +44 -0
- amulet/resource_pack/java/resource_pack_manager.py +551 -0
- amulet/resource_pack/unknown_resource_pack.py +10 -0
- amulet/utils/__init__.pyi +0 -5
- amulet/utils/call_spec/_call_spec.py +2 -7
- amulet/utils/comment_json.py +188 -0
- amulet/utils/matrix.py +3 -3
- amulet/utils/numpy.hpp +36 -0
- amulet/utils/numpy_helpers.py +2 -2
- amulet/utils/world_utils.py +2 -2
- amulet/version.py.cpp +281 -0
- amulet/version.pyi +0 -8
- {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/METADATA +3 -3
- amulet_core-2.0a7.dist-info/RECORD +295 -0
- amulet/chunk_/components/biome.py +0 -155
- amulet/chunk_/components/block_entity.py +0 -117
- amulet/chunk_/components/entity.py +0 -64
- amulet/chunk_/components/height_2d.py +0 -16
- amulet/level/bedrock/__init__.py +0 -2
- amulet/level/bedrock/_chunk_handle.py +0 -19
- amulet/level/bedrock/_dimension.py +0 -22
- amulet/level/bedrock/_level.py +0 -187
- amulet/level/bedrock/_raw/__init__.py +0 -5
- amulet/level/bedrock/_raw/_actor_counter.py +0 -53
- amulet/level/bedrock/_raw/_chunk.py +0 -54
- amulet/level/bedrock/_raw/_chunk_decode.py +0 -668
- amulet/level/bedrock/_raw/_chunk_encode.py +0 -602
- amulet/level/bedrock/_raw/_constant.py +0 -9
- amulet/level/bedrock/_raw/_dimension.py +0 -343
- amulet/level/bedrock/_raw/_level.py +0 -463
- amulet/level/bedrock/_raw/_level_dat.py +0 -90
- amulet/level/bedrock/_raw/_typing.py +0 -6
- amulet/level/bedrock/_raw/leveldb_chunk_versions.py +0 -83
- amulet/level/bedrock/chunk/__init__.py +0 -1
- amulet/level/bedrock/chunk/_chunk.py +0 -126
- amulet/level/bedrock/chunk/components/chunk_version.py +0 -12
- amulet/level/bedrock/chunk/components/finalised_state.py +0 -13
- amulet/level/bedrock/chunk/components/raw_chunk.py +0 -15
- amulet/level/construction/__init__.py +0 -0
- amulet/level/java/_chunk_handle.pyi +0 -15
- amulet/level/java/_dimension.pyi +0 -13
- amulet/level/java/_level.pyi +0 -120
- amulet/level/java/_raw/_chunk_decode.py +0 -561
- amulet/level/java/_raw/_chunk_encode.py +0 -463
- amulet/level/java/_raw/_constant.pyi +0 -20
- amulet/level/java/_raw/_data_pack/__init__.pyi +0 -8
- amulet/level/java/_raw/_data_pack/data_pack.pyi +0 -197
- amulet/level/java/_raw/_data_pack/data_pack_manager.pyi +0 -75
- amulet/level/java/_raw/_dimension.pyi +0 -72
- amulet/level/java/_raw/_level.pyi +0 -238
- amulet/level/java/_raw/_typing.pyi +0 -5
- amulet/level/java/anvil/__init__.pyi +0 -11
- amulet/level/java/anvil/_dimension.pyi +0 -109
- amulet/level/java/anvil/_region.pyi +0 -197
- amulet/level/java/anvil/_sector_manager.pyi +0 -142
- amulet/level/java_forge/__init__.py +0 -0
- amulet/level/mcstructure/__init__.py +0 -0
- amulet/level/nbt/__init__.py +0 -0
- amulet/level/schematic/__init__.py +0 -0
- amulet/level/sponge_schematic/__init__.py +0 -0
- amulet/utils/call_spec/__init__.pyi +0 -53
- amulet/utils/call_spec/_call_spec.pyi +0 -272
- amulet/utils/matrix.pyi +0 -177
- amulet/utils/shareable_lock.pyi +0 -190
- amulet/utils/signal/__init__.pyi +0 -25
- amulet/utils/signal/_signal.pyi +0 -84
- amulet/utils/task_manager.pyi +0 -168
- amulet/utils/typing.py +0 -4
- amulet/utils/typing.pyi +0 -6
- amulet/utils/weakref.pyi +0 -50
- amulet/utils/world_utils.pyi +0 -109
- amulet_core-2.0a5.dist-info/RECORD +0 -210
- /amulet/{level/bedrock/chunk/components → mesh}/__init__.py +0 -0
- {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/WHEEL +0 -0
- {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/entry_points.txt +0 -0
- {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
|
|
5
|
+
#include <pybind11/pybind11.h>
|
|
6
|
+
#include <pybind11/typing.h>
|
|
7
|
+
|
|
8
|
+
#include <amulet/pybind11/types.hpp>
|
|
9
|
+
#include <amulet/pybind11/type_hints.hpp>
|
|
10
|
+
#include <amulet/pybind11/collections.hpp>
|
|
11
|
+
#include "iterator.py.hpp"
|
|
12
|
+
|
|
13
|
+
namespace py = pybind11;
|
|
14
|
+
|
|
15
|
+
namespace Amulet {
|
|
16
|
+
namespace collections {
|
|
17
|
+
template <typename clsT>
|
|
18
|
+
void PyMapping_repr(clsT cls) {
|
|
19
|
+
cls.def(
|
|
20
|
+
"__repr__",
|
|
21
|
+
[](py::object self) {
|
|
22
|
+
std::string repr = "{";
|
|
23
|
+
bool is_first = true;
|
|
24
|
+
for (auto it = self.begin(); it != self.end(); it++) {
|
|
25
|
+
if (is_first) {
|
|
26
|
+
is_first = false;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
repr += ", ";
|
|
30
|
+
}
|
|
31
|
+
repr += py::repr(*it);
|
|
32
|
+
repr += ": ";
|
|
33
|
+
repr += py::repr(self.attr("__getitem__")(*it));
|
|
34
|
+
}
|
|
35
|
+
repr += "}";
|
|
36
|
+
return repr;
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
template <typename KT = py::object, typename clsT>
|
|
42
|
+
void PyMapping_contains(clsT cls) {
|
|
43
|
+
cls.def(
|
|
44
|
+
"__contains__",
|
|
45
|
+
[](py::object self, Amulet::pybind11::type_hints::PyObjectCpp<KT> key) {
|
|
46
|
+
try {
|
|
47
|
+
self.attr("__getitem__")(key);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch (const py::error_already_set& e) {
|
|
51
|
+
if (e.matches(PyExc_KeyError)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
template <typename KT = py::object, typename clsT>
|
|
63
|
+
void PyMapping_keys(clsT cls) {
|
|
64
|
+
py::object KeysView = py::module::import("collections.abc").attr("KeysView");
|
|
65
|
+
cls.def(
|
|
66
|
+
"keys",
|
|
67
|
+
[KeysView](py::object self) -> Amulet::pybind11::collections::KeysView<KT> { return KeysView(self); }
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
template <typename VT = py::object, typename clsT>
|
|
72
|
+
void PyMapping_values(clsT cls) {
|
|
73
|
+
py::object ValuesView = py::module::import("collections.abc").attr("ValuesView");
|
|
74
|
+
cls.def(
|
|
75
|
+
"values",
|
|
76
|
+
[ValuesView](py::object self) -> Amulet::pybind11::collections::ValuesView<VT> { return ValuesView(self); }
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
template <typename KT = py::object, typename VT = py::object, typename clsT>
|
|
81
|
+
void PyMapping_items(clsT cls) {
|
|
82
|
+
py::object ItemsView = py::module::import("collections.abc").attr("ItemsView");
|
|
83
|
+
cls.def(
|
|
84
|
+
"items",
|
|
85
|
+
[ItemsView](py::object self) -> Amulet::pybind11::collections::ItemsView<KT, VT> { return ItemsView(self); }
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
template <typename KT = py::object, typename VT = py::object, typename clsT>
|
|
90
|
+
void PyMapping_get(clsT cls) {
|
|
91
|
+
cls.def(
|
|
92
|
+
"get",
|
|
93
|
+
[](
|
|
94
|
+
py::object self,
|
|
95
|
+
Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
|
|
96
|
+
py::typing::Optional<VT> default_ = py::none()
|
|
97
|
+
) -> py::typing::Optional<VT> {
|
|
98
|
+
try {
|
|
99
|
+
return self.attr("__getitem__")(key);
|
|
100
|
+
}
|
|
101
|
+
catch (const py::error_already_set& e) {
|
|
102
|
+
if (e.matches(PyExc_KeyError)) {
|
|
103
|
+
return default_;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
template <typename clsT>
|
|
114
|
+
void PyMapping_eq(clsT cls) {
|
|
115
|
+
py::object dict = py::module::import("builtins").attr("dict");
|
|
116
|
+
py::object isinstance = py::module::import("builtins").attr("isinstance");
|
|
117
|
+
py::object NotImplemented = py::module::import("builtins").attr("NotImplemented");
|
|
118
|
+
py::object PyMapping = py::module::import("collections.abc").attr("Mapping");
|
|
119
|
+
cls.def(
|
|
120
|
+
"__eq__",
|
|
121
|
+
[
|
|
122
|
+
dict,
|
|
123
|
+
isinstance,
|
|
124
|
+
NotImplemented,
|
|
125
|
+
PyMapping
|
|
126
|
+
](
|
|
127
|
+
py::object self,
|
|
128
|
+
py::object other
|
|
129
|
+
) -> std::variant<bool, Amulet::pybind11::types::NotImplementedType> {
|
|
130
|
+
if (!isinstance(other, PyMapping)) {
|
|
131
|
+
return NotImplemented;
|
|
132
|
+
}
|
|
133
|
+
return dict(self.attr("items")()).equal(dict(other.attr("items")()).cast<py::dict>());
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
template <typename clsT>
|
|
139
|
+
void PyMapping_hash(clsT cls) {
|
|
140
|
+
cls.def(
|
|
141
|
+
"__hash__",
|
|
142
|
+
[](
|
|
143
|
+
py::object self
|
|
144
|
+
) -> size_t {
|
|
145
|
+
throw py::type_error("Mapping is not hashable");
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
template <typename clsT>
|
|
151
|
+
void PyMapping_register(clsT cls) {
|
|
152
|
+
py::module::import("collections.abc").attr("Mapping").attr("register")(cls);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
class Mapping {
|
|
156
|
+
public:
|
|
157
|
+
virtual ~Mapping() {};
|
|
158
|
+
virtual py::object getitem(py::object py_key) const = 0;
|
|
159
|
+
virtual std::shared_ptr<Iterator> iter() const = 0;
|
|
160
|
+
virtual size_t size() const = 0;
|
|
161
|
+
virtual bool contains(py::object py_key) const = 0;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
template <typename mapT>
|
|
165
|
+
class ConstMap : public Mapping {
|
|
166
|
+
private:
|
|
167
|
+
py::object _owner;
|
|
168
|
+
const mapT& _map;
|
|
169
|
+
public:
|
|
170
|
+
ConstMap(
|
|
171
|
+
const mapT& map,
|
|
172
|
+
py::object owner = py::none()
|
|
173
|
+
) : _owner(owner), _map(map) {}
|
|
174
|
+
|
|
175
|
+
py::object getitem(py::object py_key) const override {
|
|
176
|
+
return py::cast(_map.at(py_key.cast<typename mapT::key_type>()));
|
|
177
|
+
}
|
|
178
|
+
std::shared_ptr<Iterator> iter() const override {
|
|
179
|
+
return std::make_shared<MapIterator<mapT>>(_map, _owner);
|
|
180
|
+
}
|
|
181
|
+
size_t size() const override {
|
|
182
|
+
return _map.size();
|
|
183
|
+
}
|
|
184
|
+
bool contains(py::object py_key) const override {
|
|
185
|
+
return _map.contains(py_key.cast<typename mapT::key_type>());
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
template <typename mapT>
|
|
190
|
+
static py::object make_const_map(const mapT& value, py::object owner = py::none()) {
|
|
191
|
+
return py::cast(
|
|
192
|
+
static_cast<std::shared_ptr<Mapping>>(
|
|
193
|
+
std::make_shared<ConstMap<mapT>>(value, owner)
|
|
194
|
+
)
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
|
|
5
|
+
#include <pybind11/pybind11.h>
|
|
6
|
+
|
|
7
|
+
#include "mapping.py.hpp"
|
|
8
|
+
|
|
9
|
+
namespace py = pybind11;
|
|
10
|
+
|
|
11
|
+
namespace Amulet {
|
|
12
|
+
namespace collections {
|
|
13
|
+
template <typename KT = py::object, typename VT = py::object, typename clsT>
|
|
14
|
+
void PyMutableMapping_pop(clsT cls) {
|
|
15
|
+
py::object marker = py::module::import("builtins").attr("Ellipsis");
|
|
16
|
+
cls.def(
|
|
17
|
+
"pop",
|
|
18
|
+
[marker](
|
|
19
|
+
py::object self,
|
|
20
|
+
Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
|
|
21
|
+
Amulet::pybind11::type_hints::PyObjectCpp<VT> default_
|
|
22
|
+
) -> Amulet::pybind11::type_hints::PyObjectCpp<VT> {
|
|
23
|
+
py::object value;
|
|
24
|
+
try {
|
|
25
|
+
value = self.attr("__getitem__")(key);
|
|
26
|
+
}
|
|
27
|
+
catch (const py::error_already_set& e) {
|
|
28
|
+
if (e.matches(PyExc_KeyError)) {
|
|
29
|
+
if (default_.is(marker)) {
|
|
30
|
+
throw;
|
|
31
|
+
}
|
|
32
|
+
return default_;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
self.attr("__delitem__")(key);
|
|
39
|
+
return value;
|
|
40
|
+
},
|
|
41
|
+
py::arg("key"),
|
|
42
|
+
py::arg("default") = marker
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
template <typename KT = py::object, typename VT = py::object, typename clsT>
|
|
47
|
+
void PyMutableMapping_popitem(clsT cls) {
|
|
48
|
+
py::object iter = py::module::import("builtins").attr("iter");
|
|
49
|
+
py::object next = py::module::import("builtins").attr("next");
|
|
50
|
+
cls.def(
|
|
51
|
+
"popitem",
|
|
52
|
+
[iter, next](py::object self) -> std::pair<
|
|
53
|
+
Amulet::pybind11::type_hints::PyObjectCpp<KT>,
|
|
54
|
+
Amulet::pybind11::type_hints::PyObjectCpp<VT>
|
|
55
|
+
> {
|
|
56
|
+
py::object key;
|
|
57
|
+
try {
|
|
58
|
+
key = next(iter(self));
|
|
59
|
+
}
|
|
60
|
+
catch (const py::error_already_set& e) {
|
|
61
|
+
if (e.matches(PyExc_StopIteration)) {
|
|
62
|
+
throw py::key_error();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
throw;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
py::object value = self.attr("__getitem__")(key);
|
|
69
|
+
self.attr("__delitem__")(key);
|
|
70
|
+
return std::make_pair(key, value);
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
template <typename clsT>
|
|
76
|
+
void PyMutableMapping_clear(clsT cls) {
|
|
77
|
+
cls.def(
|
|
78
|
+
"clear",
|
|
79
|
+
[](py::object self) {
|
|
80
|
+
try {
|
|
81
|
+
while (true) {
|
|
82
|
+
self.attr("popitem")();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (const py::error_already_set& e) {
|
|
86
|
+
if (!e.matches(PyExc_KeyError)) {
|
|
87
|
+
throw;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
template <typename clsT>
|
|
95
|
+
void PyMutableMapping_update(clsT cls) {
|
|
96
|
+
py::object isinstance = py::module::import("builtins").attr("isinstance");
|
|
97
|
+
py::object hasattr = py::module::import("builtins").attr("hasattr");
|
|
98
|
+
py::object PyMapping = py::module::import("collections.abc").attr("Mapping");
|
|
99
|
+
cls.def(
|
|
100
|
+
"update",
|
|
101
|
+
[
|
|
102
|
+
isinstance,
|
|
103
|
+
hasattr,
|
|
104
|
+
PyMapping
|
|
105
|
+
](
|
|
106
|
+
py::object self,
|
|
107
|
+
py::object other,
|
|
108
|
+
py::kwargs kwargs
|
|
109
|
+
) {
|
|
110
|
+
if (isinstance(other, PyMapping)) {
|
|
111
|
+
for (auto it = other.begin(); it != other.end(); it++) {
|
|
112
|
+
self.attr("__setitem__")(*it, other.attr("__getitem__")(*it));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (hasattr(other, "keys")) {
|
|
116
|
+
py::object keys = other.attr("keys")();
|
|
117
|
+
for (auto it = keys.begin(); it != keys.end(); it++) {
|
|
118
|
+
self.attr("__setitem__")(*it, other.attr("__getitem__")(*it));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
for (auto it = other.begin(); it != other.end(); it++) {
|
|
123
|
+
self.attr("__setitem__")(
|
|
124
|
+
*it->attr("__getitem__")(0),
|
|
125
|
+
*it->attr("__getitem__")(1)
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
py::object items = kwargs.attr("items")();
|
|
130
|
+
for (auto it = items.begin(); it != items.end(); it++) {
|
|
131
|
+
self.attr("__setitem__")(
|
|
132
|
+
*it->attr("__getitem__")(0),
|
|
133
|
+
*it->attr("__getitem__")(1)
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
},
|
|
138
|
+
py::arg("other") = py::tuple()
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
template <typename KT = py::object, typename VT = py::object, typename clsT>
|
|
143
|
+
void PyMutableMapping_setdefault(clsT cls) {
|
|
144
|
+
cls.def(
|
|
145
|
+
"setdefault",
|
|
146
|
+
[](
|
|
147
|
+
py::object self,
|
|
148
|
+
Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
|
|
149
|
+
py::typing::Optional<VT> default_ = py::none()
|
|
150
|
+
) -> py::typing::Optional<VT> {
|
|
151
|
+
try {
|
|
152
|
+
return self.attr("__getitem__")(key);
|
|
153
|
+
}
|
|
154
|
+
catch (const py::error_already_set& e) {
|
|
155
|
+
if (e.matches(PyExc_KeyError)) {
|
|
156
|
+
self.attr("__setitem__")(key, default_);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
throw;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return default_;
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
template <typename clsT>
|
|
168
|
+
void PyMutableMapping_register(clsT cls) {
|
|
169
|
+
py::module::import("collections.abc").attr("MutableMapping").attr("register")(cls);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
class MutableMapping : public Mapping {
|
|
173
|
+
public:
|
|
174
|
+
virtual ~MutableMapping() {};
|
|
175
|
+
virtual void setitem(py::object py_key, py::object py_value) = 0;
|
|
176
|
+
virtual void delitem(py::object py_key) = 0;
|
|
177
|
+
virtual void clear() = 0;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
template <typename mapT>
|
|
181
|
+
class Map : public MutableMapping {
|
|
182
|
+
private:
|
|
183
|
+
py::object _owner;
|
|
184
|
+
mapT& _map;
|
|
185
|
+
public:
|
|
186
|
+
Map(
|
|
187
|
+
mapT& map,
|
|
188
|
+
py::object owner = py::none()
|
|
189
|
+
) : _owner(owner), _map(map) {}
|
|
190
|
+
|
|
191
|
+
py::object getitem(py::object py_key) const override {
|
|
192
|
+
return py::cast(_map.at(py_key.cast<typename mapT::key_type>()));
|
|
193
|
+
}
|
|
194
|
+
std::shared_ptr<Iterator> iter() const override {
|
|
195
|
+
return std::make_shared<MapIterator<mapT>>(_map, _owner);
|
|
196
|
+
}
|
|
197
|
+
size_t size() const override {
|
|
198
|
+
return _map.size();
|
|
199
|
+
}
|
|
200
|
+
bool contains(py::object py_key) const override {
|
|
201
|
+
return _map.contains(py_key.cast<typename mapT::key_type>());
|
|
202
|
+
}
|
|
203
|
+
void setitem(py::object py_key, py::object py_value) override {
|
|
204
|
+
_map.insert_or_assign(
|
|
205
|
+
py_key.cast<typename mapT::key_type>(),
|
|
206
|
+
py_value.cast<typename mapT::mapped_type>()
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
void delitem(py::object py_key) override {
|
|
210
|
+
_map.erase(py_key.cast<typename mapT::key_type>());
|
|
211
|
+
}
|
|
212
|
+
void clear() override {
|
|
213
|
+
_map.clear();
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
template <typename mapT>
|
|
218
|
+
static py::object make_map(mapT& value, py::object owner = py::none()) {
|
|
219
|
+
return py::cast(
|
|
220
|
+
static_cast<std::shared_ptr<MutableMapping>>(
|
|
221
|
+
std::make_shared<Map<mapT>>(value, owner)
|
|
222
|
+
)
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <cstddef>
|
|
5
|
+
#include <memory>
|
|
6
|
+
|
|
7
|
+
#include <pybind11/pybind11.h>
|
|
8
|
+
#include "iterator.py.hpp"
|
|
9
|
+
#include <amulet/pybind11/collections.hpp>
|
|
10
|
+
|
|
11
|
+
namespace py = pybind11;
|
|
12
|
+
|
|
13
|
+
namespace Amulet {
|
|
14
|
+
namespace collections {
|
|
15
|
+
|
|
16
|
+
template <typename clsT>
|
|
17
|
+
void Sequence_getitem_slice(clsT cls) {
|
|
18
|
+
cls.def(
|
|
19
|
+
"__getitem__",
|
|
20
|
+
[](py::object self, const py::slice& slice) {
|
|
21
|
+
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
|
22
|
+
if (!slice.compute(py::len(self), &start, &stop, &step, &slicelength)) {
|
|
23
|
+
throw py::error_already_set();
|
|
24
|
+
}
|
|
25
|
+
py::list out(slicelength);
|
|
26
|
+
py::object getitem = self.attr("__getitem__");
|
|
27
|
+
for (size_t i = 0; i < slicelength; ++i) {
|
|
28
|
+
out[i] = getitem(start);
|
|
29
|
+
start += step;
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
template <typename clsT>
|
|
37
|
+
void Sequence_contains(clsT cls) {
|
|
38
|
+
cls.def(
|
|
39
|
+
"__contains__",
|
|
40
|
+
[](py::object self, py::object value) {
|
|
41
|
+
py::iterator it = py::iter(self);
|
|
42
|
+
while (it != py::iterator::sentinel()) {
|
|
43
|
+
if (it->equal(value)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
++it;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
template <typename elemT = py::object, typename clsT>
|
|
54
|
+
void Sequence_iter(clsT cls) {
|
|
55
|
+
cls.def(
|
|
56
|
+
"__iter__",
|
|
57
|
+
[](py::object self) -> Amulet::pybind11::collections::Iterator<elemT> {
|
|
58
|
+
return py::cast(
|
|
59
|
+
static_cast<std::shared_ptr<Amulet::collections::Iterator>>(
|
|
60
|
+
std::make_shared<PySequenceIterator>(self, 0, 1)
|
|
61
|
+
)
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
template <typename elemT = py::object, typename clsT>
|
|
68
|
+
void Sequence_reversed(clsT cls) {
|
|
69
|
+
cls.def(
|
|
70
|
+
"__reversed__",
|
|
71
|
+
[](py::object self) -> Amulet::pybind11::collections::Iterator<elemT> {
|
|
72
|
+
return py::cast(
|
|
73
|
+
static_cast<std::shared_ptr<Amulet::collections::Iterator>>(
|
|
74
|
+
std::make_shared<PySequenceIterator>(self, py::len(self) - 1, -1)
|
|
75
|
+
)
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
template <typename clsT>
|
|
82
|
+
void Sequence_index(clsT cls) {
|
|
83
|
+
cls.def(
|
|
84
|
+
"index",
|
|
85
|
+
[](py::object self, py::object value, Py_ssize_t s_start, Py_ssize_t s_stop) {
|
|
86
|
+
size_t size = py::len(self);
|
|
87
|
+
size_t start;
|
|
88
|
+
size_t stop;
|
|
89
|
+
if (s_start < 0) {
|
|
90
|
+
start = std::max<Py_ssize_t>(0, size + s_start);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
start = s_start;
|
|
94
|
+
}
|
|
95
|
+
if (s_stop < 0) {
|
|
96
|
+
stop = size + s_stop;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
stop = s_stop;
|
|
100
|
+
}
|
|
101
|
+
py::object getitem = self.attr("__getitem__");
|
|
102
|
+
while (start < stop) {
|
|
103
|
+
py::object obj;
|
|
104
|
+
try {
|
|
105
|
+
obj = getitem(start);
|
|
106
|
+
}
|
|
107
|
+
catch (py::error_already_set& e) {
|
|
108
|
+
if (e.matches(PyExc_IndexError)) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (value.equal(obj)) {
|
|
117
|
+
return start;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
start++;
|
|
121
|
+
}
|
|
122
|
+
throw py::value_error("");
|
|
123
|
+
},
|
|
124
|
+
py::arg("value"), py::arg("start") = 0, py::arg("stop") = std::numeric_limits<Py_ssize_t>::max()
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
template <typename clsT>
|
|
129
|
+
void Sequence_count(clsT cls) {
|
|
130
|
+
cls.def(
|
|
131
|
+
"count",
|
|
132
|
+
[](py::object self, py::object value) {
|
|
133
|
+
size_t count = 0;
|
|
134
|
+
size_t size = py::len(self);
|
|
135
|
+
py::object getitem = self.attr("__getitem__");
|
|
136
|
+
for (size_t i = 0; i < size; ++i) {
|
|
137
|
+
if (value.equal(getitem(i))) {
|
|
138
|
+
count++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return count;
|
|
142
|
+
},
|
|
143
|
+
py::arg("value")
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
template <typename clsT>
|
|
148
|
+
void Sequence_register(clsT cls) {
|
|
149
|
+
py::module::import("collections.abc").attr("Sequence").attr("register")(cls);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
template <typename elemT = py::object, typename clsT>
|
|
153
|
+
void Sequence(clsT cls) {
|
|
154
|
+
Sequence_getitem_slice(cls);
|
|
155
|
+
Sequence_contains(cls);
|
|
156
|
+
Sequence_iter<elemT>(cls);
|
|
157
|
+
Sequence_reversed<elemT>(cls);
|
|
158
|
+
Sequence_index(cls);
|
|
159
|
+
Sequence_count(cls);
|
|
160
|
+
Sequence_register(cls);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
amulet/collections.pyi
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import collections.abc
|
|
3
4
|
import types
|
|
4
5
|
import typing
|
|
5
6
|
|
|
@@ -22,10 +23,10 @@ class Mapping:
|
|
|
22
23
|
def __iter__(self) -> typing.Iterator: ...
|
|
23
24
|
def __len__(self) -> int: ...
|
|
24
25
|
def __repr__(self) -> str: ...
|
|
25
|
-
def get(self, arg0: typing.Any, arg1: typing.Any) -> typing.Any: ...
|
|
26
|
-
def items(self) -> typing.Any: ...
|
|
27
|
-
def keys(self) -> typing.Any: ...
|
|
28
|
-
def values(self) -> typing.Any: ...
|
|
26
|
+
def get(self, arg0: typing.Any, arg1: typing.Any | None) -> typing.Any | None: ...
|
|
27
|
+
def items(self) -> collections.abc.ItemsView[typing.Any, typing.Any]: ...
|
|
28
|
+
def keys(self) -> collections.abc.KeysView[typing.Any]: ...
|
|
29
|
+
def values(self) -> collections.abc.ValuesView[typing.Any]: ...
|
|
29
30
|
|
|
30
31
|
class MutableMapping(Mapping):
|
|
31
32
|
def __delitem__(self, arg0: typing.Any) -> None: ...
|
|
@@ -33,5 +34,7 @@ class MutableMapping(Mapping):
|
|
|
33
34
|
def clear(self) -> None: ...
|
|
34
35
|
def pop(self, key: typing.Any, default: typing.Any = ...) -> typing.Any: ...
|
|
35
36
|
def popitem(self) -> tuple[typing.Any, typing.Any]: ...
|
|
36
|
-
def setdefault(
|
|
37
|
+
def setdefault(
|
|
38
|
+
self, arg0: typing.Any, arg1: typing.Any | None
|
|
39
|
+
) -> typing.Any | None: ...
|
|
37
40
|
def update(self, other: typing.Any = (), **kwargs) -> None: ...
|
amulet/entity.py
CHANGED
|
@@ -54,28 +54,30 @@ class Entity(PlatformVersionContainer):
|
|
|
54
54
|
self._nbt = nbt
|
|
55
55
|
|
|
56
56
|
def __getstate__(self) -> tuple[tuple[str, VersionNumber], tuple[str, str, float, float, float, NamedTag]]: # type: ignore[override]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
)
|
|
57
|
+
raise NotImplementedError
|
|
58
|
+
# return (
|
|
59
|
+
# super().__getstate__(),
|
|
60
|
+
# (
|
|
61
|
+
# self._namespace,
|
|
62
|
+
# self._base_name,
|
|
63
|
+
# self._x,
|
|
64
|
+
# self._y,
|
|
65
|
+
# self._z,
|
|
66
|
+
# self._nbt,
|
|
67
|
+
# ),
|
|
68
|
+
# )
|
|
68
69
|
|
|
69
70
|
def __setstate__(self, state: tuple[tuple[str, VersionNumber], tuple[str, str, float, float, float, NamedTag]]) -> None: # type: ignore[override]
|
|
70
|
-
|
|
71
|
-
(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
71
|
+
raise NotImplementedError
|
|
72
|
+
# super().__setstate__(state[0])
|
|
73
|
+
# (
|
|
74
|
+
# self._namespace,
|
|
75
|
+
# self._base_name,
|
|
76
|
+
# self._x,
|
|
77
|
+
# self._y,
|
|
78
|
+
# self._z,
|
|
79
|
+
# self._nbt,
|
|
80
|
+
# ) = state[1]
|
|
79
81
|
|
|
80
82
|
def __eq__(self, other: Any) -> bool:
|
|
81
83
|
if not isinstance(other, Entity):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import overload, Literal, TypeVar
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from copy import deepcopy
|
|
5
5
|
from enum import Enum
|
|
@@ -336,7 +336,7 @@ class RawTextComponent:
|
|
|
336
336
|
section_text: str,
|
|
337
337
|
section_parser: type[AbstractSectionParser],
|
|
338
338
|
split_newline: Literal[True],
|
|
339
|
-
) ->
|
|
339
|
+
) -> list[RawTextComponent]: ...
|
|
340
340
|
|
|
341
341
|
@classmethod
|
|
342
342
|
def from_section_text(
|