Skip to content

Commit 3930cf3

Browse files
authored
Merge pull request #1441 from thewtex/python-composite-transform
python composite transform
2 parents e98abe8 + 2b3b399 commit 3930cf3

File tree

14 files changed

+429
-20
lines changed

14 files changed

+429
-20
lines changed

packages/core/python/itkwasm/itkwasm/pipeline.py

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -316,19 +316,29 @@ def run(
316316
elif input_.type == InterfaceTypes.TransformList:
317317
transform_list = input_.data
318318
transform_list_json = []
319-
for idx, transform in enumerate(transform_list):
320-
if transform.numberOfFixedParameters:
321-
fpv = array_like_to_bytes(transform.fixedParameters)
322-
else:
323-
fpv = bytes([])
324-
fixed_parameters_ptr = ri.set_input_array(fpv, index, idx * 2)
325-
fixed_parameters = f"data:application/vnd.itk.address,0:{fixed_parameters_ptr}"
326-
if transform.numberOfParameters:
327-
pv = array_like_to_bytes(transform.parameters)
328-
else:
329-
pv = bytes([])
330-
parameters_ptr = ri.set_input_array(pv, index, idx * 2 + 1)
331-
parameters = f"data:application/vnd.itk.address,0:{parameters_ptr}"
319+
input_array_index = 0
320+
for transform in transform_list:
321+
fixed_parameters = ""
322+
parameters = ""
323+
324+
# Skip setting input arrays for Composite transforms as they don't have array data
325+
if transform.transformType.transformParameterization != "Composite":
326+
if transform.numberOfFixedParameters:
327+
fpv = array_like_to_bytes(transform.fixedParameters)
328+
else:
329+
fpv = bytes([])
330+
fixed_parameters_ptr = ri.set_input_array(fpv, index, input_array_index)
331+
fixed_parameters = f"data:application/vnd.itk.address,0:{fixed_parameters_ptr}"
332+
input_array_index += 1
333+
334+
if transform.numberOfParameters:
335+
pv = array_like_to_bytes(transform.parameters)
336+
else:
337+
pv = bytes([])
338+
parameters_ptr = ri.set_input_array(pv, index, input_array_index)
339+
parameters = f"data:application/vnd.itk.address,0:{parameters_ptr}"
340+
input_array_index += 1
341+
332342
transform_json = {
333343
"transformType": asdict(transform.transformType),
334344
"numberOfFixedParameters": transform.numberOfFixedParameters,
@@ -540,22 +550,33 @@ def run(
540550
elif output.type == InterfaceTypes.TransformList:
541551
transform_list_json = ri.get_output_json(index)
542552
transform_list = []
543-
for idx, transform_json in enumerate(transform_list_json):
553+
output_array_index = 0
554+
for transform_json in transform_list_json:
544555
transform = Transform(**transform_json)
556+
557+
# Skip array reading for Composite transforms as they don't have array data
558+
if transform.transformType.transformParameterization == "Composite":
559+
transform_list.append(transform)
560+
continue
561+
545562
if transform.numberOfFixedParameters > 0:
546-
data_ptr = ri.get_output_array_address(0, index, idx * 2)
547-
data_size = ri.get_output_array_size(0, index, idx * 2)
563+
data_ptr = ri.get_output_array_address(0, index, output_array_index)
564+
data_size = ri.get_output_array_size(0, index, output_array_index)
548565
transform.fixedParameters = buffer_to_numpy_array(
549566
FloatTypes.Float64,
550567
ri.wasmtime_lift(data_ptr, data_size),
551568
)
569+
output_array_index += 1
570+
552571
if transform.numberOfParameters > 0:
553-
data_ptr = ri.get_output_array_address(0, index, idx * 2 + 1)
554-
data_size = ri.get_output_array_size(0, index, idx * 2 + 1)
572+
data_ptr = ri.get_output_array_address(0, index, output_array_index)
573+
data_size = ri.get_output_array_size(0, index, output_array_index)
555574
transform.parameters = buffer_to_numpy_array(
556575
transform.transformType.parametersValueType,
557576
ri.wasmtime_lift(data_ptr, data_size),
558577
)
578+
output_array_index += 1
579+
559580
transform_list.append(transform)
560581
output_data = PipelineOutput(InterfaceTypes.TransformList, transform_list)
561582
elif output.type == InterfaceTypes.PolyData:

packages/core/python/itkwasm/itkwasm/pyodide.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from .point_set import PointSet, PointSetType
66
from .mesh import Mesh, MeshType
77
from .polydata import PolyData, PolyDataType
8-
from .transform import Transform, TransformType
8+
from .transform import Transform, TransformType, TransformList
99
from .binary_file import BinaryFile
1010
from .binary_stream import BinaryStream
1111
from .text_file import TextFile
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
[
2+
{
3+
"transformType": {
4+
"transformParameterization": "Composite",
5+
"parametersValueType": "float32",
6+
"inputDimension": 2,
7+
"outputDimension": 2
8+
},
9+
"numberOfFixedParameters": 4,
10+
"numberOfParameters": 9,
11+
"name": "",
12+
"inputSpaceName": "",
13+
"outputSpaceName": "",
14+
"fixedParameters": "data:application/vnd.itk.path,data/0/fixed-parameters.raw",
15+
"parameters": "data:application/vnd.itk.path,data/0/parameters.raw",
16+
"metadata": []
17+
},
18+
{
19+
"transformType": {
20+
"transformParameterization": "Rigid2D",
21+
"parametersValueType": "float32",
22+
"inputDimension": 2,
23+
"outputDimension": 2
24+
},
25+
"numberOfFixedParameters": 2,
26+
"numberOfParameters": 3,
27+
"name": "",
28+
"inputSpaceName": "",
29+
"outputSpaceName": "",
30+
"fixedParameters": "data:application/vnd.itk.path,data/1/fixed-parameters.raw",
31+
"parameters": "data:application/vnd.itk.path,data/1/parameters.raw",
32+
"metadata": []
33+
},
34+
{
35+
"transformType": {
36+
"transformParameterization": "Affine",
37+
"parametersValueType": "float32",
38+
"inputDimension": 2,
39+
"outputDimension": 2
40+
},
41+
"numberOfFixedParameters": 2,
42+
"numberOfParameters": 6,
43+
"name": "",
44+
"inputSpaceName": "",
45+
"outputSpaceName": "",
46+
"fixedParameters": "data:application/vnd.itk.path,data/2/fixed-parameters.raw",
47+
"parameters": "data:application/vnd.itk.path,data/2/parameters.raw",
48+
"metadata": []
49+
}
50+
]
Binary file not shown.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[
2+
{
3+
"transformType": {
4+
"transformParameterization": "Affine",
5+
"parametersValueType": "float64",
6+
"inputDimension": 3,
7+
"outputDimension": 3
8+
},
9+
"numberOfFixedParameters": 3,
10+
"numberOfParameters": 12,
11+
"name": "",
12+
"inputSpaceName": "",
13+
"outputSpaceName": "",
14+
"fixedParameters": "data:application/vnd.itk.path,data/0/fixed-parameters.raw",
15+
"parameters": "data:application/vnd.itk.path,data/0/parameters.raw",
16+
"metadata": []
17+
}
18+
]

0 commit comments

Comments
 (0)