Skip to content

Commit 76d9d27

Browse files
committed
updated backend compatibility
1 parent dc82e19 commit 76d9d27

3 files changed

Lines changed: 48 additions & 22 deletions

File tree

src/pyptv/_backend.py

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import openptv_python
1212
from openptv_python._native_compat import (
13+
HAS_OPTV,
1314
get_active_engine,
1415
get_engine_preference,
1516
get_engine_reason,
@@ -50,13 +51,22 @@ def _to_openptv_name(name: str) -> str:
5051
# Module imports with compatibility wrapping
5152
# =============================================================================
5253

53-
from openptv_python.calibration import Calibration
54-
from openptv_python.parameters import ControlPar as ControlParams
5554
from openptv_python.parameters import MultimediaPar
56-
from openptv_python.parameters import SequencePar as SequenceParams
57-
from openptv_python.parameters import TargetPar as TargetParams
58-
from openptv_python.parameters import TrackPar as TrackingParams
59-
from openptv_python.parameters import VolumePar as VolumeParams
55+
56+
if HAS_OPTV:
57+
from optv.calibration import Calibration
58+
from optv.parameters import ControlParams
59+
from optv.parameters import SequenceParams
60+
from optv.parameters import TargetParams
61+
from optv.parameters import TrackingParams
62+
from optv.parameters import VolumeParams
63+
else:
64+
from openptv_python.calibration import Calibration
65+
from openptv_python.parameters import ControlPar as ControlParams
66+
from openptv_python.parameters import SequencePar as SequenceParams
67+
from openptv_python.parameters import TargetPar as TargetParams
68+
from openptv_python.parameters import TrackPar as TrackingParams
69+
from openptv_python.parameters import VolumePar as VolumeParams
6070
from openptv_python.image_processing import preprocess_image
6171
from openptv_python.segmentation import target_recognition
6272
from openptv_python.correspondences import (
@@ -116,21 +126,31 @@ def get_backend_status() -> str:
116126

117127
def create_control_params(num_cams: int, **kwargs) -> ControlParams:
118128
"""Create ControlParams with backend-appropriate initialization."""
119-
cpar = ControlParams(
120-
num_cams=num_cams,
121-
img_base_name=["" for _ in range(num_cams)],
122-
cal_img_base_name=["" for _ in range(num_cams)],
123-
mm=MultimediaPar(),
124-
)
129+
cpar = ControlParams(num_cams)
125130
for key, value in kwargs.items():
131+
if key == "mm" and hasattr(cpar, "get_multimedia_params"):
132+
mm = cpar.get_multimedia_params()
133+
if mm is not None and isinstance(value, dict):
134+
for mm_key, mm_value in value.items():
135+
setter = getattr(mm, f"set_{mm_key}", None)
136+
if callable(setter):
137+
setter(mm_value)
138+
elif hasattr(mm, mm_key):
139+
setattr(mm, mm_key, mm_value)
140+
continue
126141
if hasattr(cpar, key):
127142
setattr(cpar, key, value)
128143
return cpar
129144

130145

131146
def create_sequence_params(num_cams: int, **kwargs) -> SequenceParams:
132147
"""Create SequenceParams with backend-appropriate initialization."""
133-
spar = SequenceParams(img_base_name=["" for _ in range(num_cams)])
148+
try:
149+
spar = SequenceParams(num_cams=num_cams)
150+
except TypeError:
151+
spar = SequenceParams()
152+
if hasattr(spar, "set_img_base_name"):
153+
spar.set_img_base_name(["" for _ in range(num_cams)])
134154

135155
for key, value in kwargs.items():
136156
if hasattr(spar, key):
@@ -160,10 +180,7 @@ def create_volume_params(**kwargs) -> VolumeParams:
160180

161181
def create_target_params(**kwargs) -> TargetParams:
162182
"""Create TargetParams with backend-appropriate initialization."""
163-
if BACKEND == "openptv_python":
164-
tpar = TargetParams()
165-
else:
166-
tpar = TargetParams()
183+
tpar = TargetParams()
167184

168185
for key, value in kwargs.items():
169186
if hasattr(tpar, key):

src/pyptv/ptv.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,20 @@ def _populate_spar(seq_params: dict, num_cams: int) -> SequenceParams:
211211
if len([x for x in base_name_list if x is not None]) < num_cams:
212212
raise ValueError(f"base_name_list length ({len(base_name_list)}) does not match num_cams ({num_cams})")
213213

214-
spar = SequenceParams()
214+
try:
215+
spar = SequenceParams(num_cams=num_cams)
216+
except TypeError:
217+
spar = SequenceParams()
218+
spar.set_img_base_name(["" for _ in range(num_cams)])
215219
spar.set_first(seq_params['first'])
216220
spar.set_last(seq_params['last'])
217221

218222
# Set base names for each camera
219-
spar.set_img_base_name(base_name_list[:num_cams])
223+
try:
224+
spar.set_img_base_name(base_name_list[:num_cams])
225+
except TypeError:
226+
for cam_index, base_name in enumerate(base_name_list[:num_cams]):
227+
spar.set_img_base_name(cam_index, base_name)
220228

221229
return spar
222230

tests/pyptv/test_populate_parameters.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from unittest.mock import Mock, patch
55
import numpy as np
66
import shutil
7-
import filecmp
87

98
from pyptv.ptv import (
109
_populate_cpar, _populate_spar, _populate_vpar,
@@ -731,8 +730,10 @@ def test_calibration_round_trip_filecmp(self):
731730
np.testing.assert_array_almost_equal(orig_cal.get_affine(), copied_cal.get_affine(), decimal=10)
732731
np.testing.assert_array_almost_equal(orig_cal.get_glass_vec(), copied_cal.get_glass_vec(), decimal=10)
733732

734-
# For addpar files, they should be exactly identical (no floating point calculations)
735-
assert filecmp.cmp(input_add_file.decode('utf-8'), output_add_file.decode('utf-8'), shallow=False), \
733+
# The native writer omits the final newline; normalize that before comparing bytes.
734+
input_add_bytes = Path(input_add_file.decode('utf-8')).read_bytes().rstrip(b"\r\n")
735+
output_add_bytes = Path(output_add_file.decode('utf-8')).read_bytes().rstrip(b"\r\n")
736+
assert output_add_bytes == input_add_bytes, \
736737
f"ADDPAR round-trip failed for {cam_file}.addpar"
737738

738739
print(f"✓ Round-trip test passed for {cam_file}")

0 commit comments

Comments
 (0)