From b911f917ff609262f809bf6cbc2f8ccfcec6e0cd Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 13:24:24 -0400 Subject: [PATCH 1/7] Updated motors to reflect desired ophyd objects and new PV strings --- .gitignore | 4 + src/cditools/motors.py | 577 ++++++++++++++++++++++------------------- tests/test_motors.py | 114 +++----- 3 files changed, 353 insertions(+), 342 deletions(-) diff --git a/.gitignore b/.gitignore index 75e5e330..bfb34fe0 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,7 @@ Thumbs.db # pixi environments .pixi *.egg-info + +# IDEs +.vscode/ +.cursor/ diff --git a/src/cditools/motors.py b/src/cditools/motors.py index 634c4571..77d0d674 100644 --- a/src/cditools/motors.py +++ b/src/cditools/motors.py @@ -2,264 +2,319 @@ from ophyd import Component as Cpt # type: ignore[import-not-found] from ophyd import Device, EpicsMotor - -# Auto-generated Ophyd device classes - - -class SltWB1(Device): - """Ophyd Device for Slt WB1""" - - i = Cpt(EpicsMotor, "-Ax:I}Mtr") - o = Cpt(EpicsMotor, "-Ax:O}Mtr") - b = Cpt(EpicsMotor, "-Ax:B}Mtr") - t = Cpt(EpicsMotor, "-Ax:T}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class FltrDM1(Device): - """Ophyd Device for Fltr DM1""" - - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - - -class FSVPM(Device): - """Ophyd Device for FS VPM""" - - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - - -class FSHPM(Device): - """Ophyd Device for FS HPM""" - - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - - -class FSDM2(Device): - """Ophyd Device for FS DM2""" - - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - - -class MonoDMM(Device): - """Ophyd Device for Mono DMM""" - - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - bragg = Cpt(EpicsMotor, "-Ax:Bragg}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - tz = Cpt(EpicsMotor, "-Ax:TZ}Mtr") - fp = Cpt(EpicsMotor, "-Ax:FP}Mtr") - fr = Cpt(EpicsMotor, "-Ax:FR}Mtr") - - -class MonoHDCM(Device): - """Ophyd Device for Mono HDCM""" - - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - bragg = Cpt(EpicsMotor, "-Ax:Bragg}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - fp = Cpt(EpicsMotor, "-Ax:FP}Mtr") - - -class SltVPM(Device): - """Ophyd Device for Slt VPM""" - - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class SltHPM(Device): - """Ophyd Device for Slt HPM""" - - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class MirVPM(Device): - """Ophyd Device for Mir VPM""" - - yuc = Cpt(EpicsMotor, "-Ax:YUC}Mtr") - ydi = Cpt(EpicsMotor, "-Ax:YDI}Mtr") - ydo = Cpt(EpicsMotor, "-Ax:YDO}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ub = Cpt(EpicsMotor, "-Ax:UB}Mtr") - db = Cpt(EpicsMotor, "-Ax:DB}Mtr") - bnd = Cpt(EpicsMotor, "-Ax:Bnd}Mtr") - bndoff = Cpt(EpicsMotor, "-Ax:BndOff}Mtr") - - -class IMDM2(Device): - """Ophyd Device for IM DM2""" - - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - - -class MirHPM(Device): - """Ophyd Device for Mir HPM""" - - yuc = Cpt(EpicsMotor, "-Ax:YUC}Mtr") - ydi = Cpt(EpicsMotor, "-Ax:YDI}Mtr") - ydo = Cpt(EpicsMotor, "-Ax:YDO}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - ub = Cpt(EpicsMotor, "-Ax:UB}Mtr") - db = Cpt(EpicsMotor, "-Ax:DB}Mtr") - bnd = Cpt(EpicsMotor, "-Ax:Bnd}Mtr") - bndoff = Cpt(EpicsMotor, "-Ax:BndOff}Mtr") - xu = Cpt(EpicsMotor, "-Ax:XU}Mtr") - xd = Cpt(EpicsMotor, "-Ax:XD}Mtr") - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - yaw = Cpt(EpicsMotor, "-Ax:Yaw}Mtr") - - -class SltDM3(Device): - """Ophyd Device for Slt DM3""" - - i = Cpt(EpicsMotor, "-Ax:I}Mtr") - o = Cpt(EpicsMotor, "-Ax:O}Mtr") - b = Cpt(EpicsMotor, "-Ax:B}Mtr") - t = Cpt(EpicsMotor, "-Ax:T}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class BPMDM3(Device): - """Ophyd Device for BPM DM3""" - - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - foil = Cpt(EpicsMotor, "-Ax:Foil}Mtr") - - -class FSDM3(Device): - """Ophyd Device for FS DM3""" - - fs = Cpt(EpicsMotor, "-Ax:FS}Mtr") - - -class MirKBv(Device): - """Ophyd Device for Mir KBv""" - - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - yuc = Cpt(EpicsMotor, "-Ax:YUC}Mtr") - ydi = Cpt(EpicsMotor, "-Ax:YDI}Mtr") - ydo = Cpt(EpicsMotor, "-Ax:YDO}Mtr") - yaw = Cpt(EpicsMotor, "-Ax:Yaw}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - tz = Cpt(EpicsMotor, "-Ax:TZ}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - fs = Cpt(EpicsMotor, "-Ax:FS}Mtr") - - -class MirKBh(Device): - """Ophyd Device for Mir KBh""" - - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - yuc = Cpt(EpicsMotor, "-Ax:YUC}Mtr") - ydi = Cpt(EpicsMotor, "-Ax:YDI}Mtr") - ydo = Cpt(EpicsMotor, "-Ax:YDO}Mtr") - yaw = Cpt(EpicsMotor, "-Ax:Yaw}Mtr") - roll = Cpt(EpicsMotor, "-Ax:Roll}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - tz = Cpt(EpicsMotor, "-Ax:TZ}Mtr") - pitch = Cpt(EpicsMotor, "-Ax:Pitch}Mtr") - fs = Cpt(EpicsMotor, "-Ax:FS}Mtr") - - -class BPMDM4(Device): - """Ophyd Device for BPM DM4""" - - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - - -class WndExit(Device): - """Ophyd Device for Wnd Exit""" - - tx = Cpt(EpicsMotor, "-Ax:TX}Mtr") - ty = Cpt(EpicsMotor, "-Ax:TY}Mtr") - - -class Gon1(Device): - """Ophyd Device for Gon 1""" - - rx1 = Cpt(EpicsMotor, "-Ax:Rx1}Mtr") - rz1 = Cpt(EpicsMotor, "-Ax:Rz1}Mtr") - rx2 = Cpt(EpicsMotor, "-Ax:Rx2}Mtr") - rz2 = Cpt(EpicsMotor, "-Ax:Rz2}Mtr") - y = Cpt(EpicsMotor, "-Ax:Y}Mtr") - ry = Cpt(EpicsMotor, "-Ax:Ry}Mtr") - x1 = Cpt(EpicsMotor, "-Ax:X1}Mtr") - z1 = Cpt(EpicsMotor, "-Ax:Z1}Mtr") - x2 = Cpt(EpicsMotor, "-Ax:X2}Mtr") - z2 = Cpt(EpicsMotor, "-Ax:Z2}Mtr") - rx3 = Cpt(EpicsMotor, "-Ax:Rx3}Mtr") - rz3 = Cpt(EpicsMotor, "-Ax:Rz3}Mtr") - x3 = Cpt(EpicsMotor, "-Ax:X3}Mtr") - y3 = Cpt(EpicsMotor, "-Ax:Y3}Mtr") - z3 = Cpt(EpicsMotor, "-Ax:Z3}Mtr") - visual = Cpt(EpicsMotor, "-Ax:Visual}Mtr") - xp = Cpt(EpicsMotor, "-Ax:XP}Mtr") - yp = Cpt(EpicsMotor, "-Ax:YP}Mtr") - zp = Cpt(EpicsMotor, "-Ax:ZP}Mtr") - - -class SltBCUU(Device): - """Ophyd Device for Slt BCUU""" - - i = Cpt(EpicsMotor, "-Ax:I}Mtr") - o = Cpt(EpicsMotor, "-Ax:O}Mtr") - b = Cpt(EpicsMotor, "-Ax:B}Mtr") - t = Cpt(EpicsMotor, "-Ax:T}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class SltBCUD(Device): - """Ophyd Device for Slt BCUD""" - - i = Cpt(EpicsMotor, "-Ax:I}Mtr") - o = Cpt(EpicsMotor, "-Ax:O}Mtr") - b = Cpt(EpicsMotor, "-Ax:B}Mtr") - t = Cpt(EpicsMotor, "-Ax:T}Mtr") - hg = Cpt(EpicsMotor, "-Ax:HG}Mtr") - hc = Cpt(EpicsMotor, "-Ax:HC}Mtr") - vg = Cpt(EpicsMotor, "-Ax:VG}Mtr") - vc = Cpt(EpicsMotor, "-Ax:VC}Mtr") - - -class Qstar1(Device): - """Ophyd Device for Qstar 1""" - - ax1 = Cpt(EpicsMotor, "-Ax:1}Mtr") - ax2 = Cpt(EpicsMotor, "-Ax:2}Mtr") - ax3 = Cpt(EpicsMotor, "-Ax:3}Mtr") +from ophyd import DynamicDeviceComponent as DDC + + +class DM1(Device): + """Ophyd Device for DM1""" + + slit = DDC( + { + "ib": (EpicsMotor, "Slt:WB1-Ax:I}Mtr", {}), + "ob": (EpicsMotor, "Slt:WB1-Ax:O}Mtr", {}), + "bb": (EpicsMotor, "Slt:WB1-Ax:B}Mtr", {}), + "tb": (EpicsMotor, "Slt:WB1-Ax:T}Mtr", {}), + "hg": (EpicsMotor, "Slt:WB1-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:WB1-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:WB1-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:WB1-Ax:VC}Mtr", {}), + } + ) + filt = Cpt(EpicsMotor, "Fltr:DM1-Ax:Y}Mtr") + + +class VPM(Device): + fs = DDC( + { + "y": (EpicsMotor, "FS:VPM-Ax:Y}Mtr", {}), + } + ) + slit = DDC( + { + "hg": (EpicsMotor, "Slt:VPM-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:VPM-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:VPM-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:VPM-Ax:VC}Mtr", {}), + } + ) + mir = DDC( + { + "us_j": (EpicsMotor, "Mir:VPM-Ax:YUC}Mtr", {}), + "ib_j": (EpicsMotor, "Mir:VPM-Ax:YDI}Mtr", {}), + "ob_j": (EpicsMotor, "Mir:VPM-Ax:YDO}Mtr", {}), + "p": (EpicsMotor, "Mir:VPM-Ax:Pitch}Mtr", {}), + "r": (EpicsMotor, "Mir:VPM-Ax:Roll}Mtr", {}), + "y": (EpicsMotor, "Mir:VPM-Ax:TY}Mtr", {}), + "x": (EpicsMotor, "Mir:VPM-Ax:TX}Mtr", {}), + "us_b": (EpicsMotor, "Mir:VPM-Ax:UB}Mtr", {}), + "ds_b": (EpicsMotor, "Mir:VPM-Ax:DB}Mtr", {}), + "bend": (EpicsMotor, "Mir:VPM-Ax:Bnd}Mtr", {}), + "bend_off": (EpicsMotor, "Mir:VPM-Ax:BndOff}Mtr", {}), + } + ) + + +class HPM(Device): + fs = DDC( + { + "y": (EpicsMotor, "FS:HPM-Ax:Y}Mtr", {}), + } + ) + slit = DDC( + { + "hg": (EpicsMotor, "Slt:HPM-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:HPM-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:HPM-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:HPM-Ax:VC}Mtr", {}), + } + ) + mir = DDC( + { + "us_j": (EpicsMotor, "Mir:HPM-Ax:YUC}Mtr", {}), + "ib_j": (EpicsMotor, "Mir:HPM-Ax:YDI}Mtr", {}), + "ob_j": (EpicsMotor, "Mir:HPM-Ax:YDO}Mtr", {}), + "p": (EpicsMotor, "Mir:HPM-Ax:Pitch}Mtr", {}), + "r": (EpicsMotor, "Mir:HPM-Ax:Roll}Mtr", {}), + "y": (EpicsMotor, "Mir:HPM-Ax:TY}Mtr", {}), + "us_b": (EpicsMotor, "Mir:HPM-Ax:UB}Mtr", {}), + "ds_b": (EpicsMotor, "Mir:HPM-Ax:DB}Mtr", {}), + "bend": (EpicsMotor, "Mir:HPM-Ax:Bnd}Mtr", {}), + "bend_off": (EpicsMotor, "Mir:HPM-Ax:BndOff}Mtr", {}), + "us_x": (EpicsMotor, "Mir:HPM-Ax:XU}Mtr", {}), + "ds_x": (EpicsMotor, "Mir:HPM-Ax:XD}Mtr", {}), + "x": (EpicsMotor, "Mir:HPM-Ax:TX}Mtr", {}), + "yaw": (EpicsMotor, "Mir:HPM-Ax:Yaw}Mtr", {}), + } + ) + + +class DM2(Device): + fs = DDC( + { + "y": (EpicsMotor, "FS:DM2-Ax:Y}Mtr", {}), + } + ) + foil = Cpt(EpicsMotor, "IM:DM2-Ax:Y}Mtr") + + +class DMM(Device): + h = Cpt(EpicsMotor, "Mono:DMM-Ax:TX}Mtr") + v = Cpt(EpicsMotor, "Mono:DMM-Ax:TY}Mtr") + bragg = Cpt(EpicsMotor, "Mono:DMM-Ax:Bragg}Mtr") + mlm1 = DDC( + { + "r": (EpicsMotor, "Mono:DMM-Ax:Roll}Mtr", {}), + "fr": (EpicsMotor, "Mono:DMM-Ax:FR}Mtr", {}), + } + ) + mgap = Cpt(EpicsMotor, "Mono:DMM-Ax:HG}Mtr") + mlm2 = DDC( + { + "p": (EpicsMotor, "Mono:DMM-Ax:Pitch}Mtr", {}), + "fp": (EpicsMotor, "Mono:DMM-Ax:FP}Mtr", {}), + } + ) + zoff = Cpt(EpicsMotor, "Mono:DMM-Ax:TZ}Mtr") + + +class DCM(Device): + h = Cpt(EpicsMotor, "Mono:HDCM-Ax:TX}Mtr") + v = Cpt(EpicsMotor, "Mono:HDCM-Ax:TY}Mtr") + bragg = Cpt(EpicsMotor, "Mono:HDCM-Ax:Bragg}Mtr") + cgap = Cpt(EpicsMotor, "Mono:HDCM-Ax:HG}Mtr") + c2 = DDC( + { + "p": (EpicsMotor, "Mono:HDCM-Ax:Pitch}Mtr", {}), + "r": (EpicsMotor, "Mono:HDCM-Ax:Roll}Mtr", {}), + "fp": (EpicsMotor, "Mono:HDCM-Ax:FP}Mtr", {}), + } + ) + + +class DM3(Device): + slit = DDC( + { + "ib": (EpicsMotor, "Slt:DM3-Ax:I}Mtr", {}), + "ob": (EpicsMotor, "Slt:DM3-Ax:O}Mtr", {}), + "bb": (EpicsMotor, "Slt:DM3-Ax:B}Mtr", {}), + "tb": (EpicsMotor, "Slt:DM3-Ax:T}Mtr", {}), + "hg": (EpicsMotor, "Slt:DM3-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:DM3-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:DM3-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:DM3-Ax:VC}Mtr", {}), + } + ) + bpm = DDC( + { + "x": (EpicsMotor, "BPM:DM3-Ax:TX}Mtr", {}), + "y": (EpicsMotor, "BPM:DM3-Ax:TY}Mtr", {}), + "foil": (EpicsMotor, "BPM:DM3-Ax:Foil}Mtr", {}), + } + ) + fs = DDC( + { + "y": (EpicsMotor, "FS:DM3-Ax:FS}Mtr", {}), + } + ) + + +class VKB(Device): + slit = DDC( + { + "hg": (EpicsMotor, "Slt:KBv-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:KBv-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:KBv-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:KBv-Ax:VC}Mtr", {}), + } + ) + mir = DDC( + { + "us_j": (EpicsMotor, "Mir:KBv-Ax:YUC}Mtr", {}), + "ib_j": (EpicsMotor, "Mir:KBv-Ax:YDI}Mtr", {}), + "ob_j": (EpicsMotor, "Mir:KBv-Ax:YDO}Mtr", {}), + "yaw": (EpicsMotor, "Mir:KBv-Ax:Yaw}Mtr", {}), + "r": (EpicsMotor, "Mir:KBv-Ax:Roll}Mtr", {}), + "y": (EpicsMotor, "Mir:KBv-Ax:TY}Mtr", {}), + "x": (EpicsMotor, "Mir:KBv-Ax:TX}Mtr", {}), + "z": (EpicsMotor, "Mir:KBv-Ax:TZ}Mtr", {}), + "p": (EpicsMotor, "Mir:KBv-Ax:Pitch}Mtr", {}), + } + ) + fs = DDC( + { + "y": (EpicsMotor, "FS:KBv-Ax:FS}Mtr", {}), + } + ) + + +class HKB(Device): + slit = DDC( + { + "hg": (EpicsMotor, "Slt:KBh-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:KBh-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:KBh-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:KBh-Ax:VC}Mtr", {}), + } + ) + mir = DDC( + { + "us_j": (EpicsMotor, "Mir:KBh-Ax:YUC}Mtr", {}), + "ib_j": (EpicsMotor, "Mir:KBh-Ax:YDI}Mtr", {}), + "ob_j": (EpicsMotor, "Mir:KBh-Ax:YDO}Mtr", {}), + "yaw": (EpicsMotor, "Mir:KBh-Ax:Yaw}Mtr", {}), + "r": (EpicsMotor, "Mir:KBh-Ax:Roll}Mtr", {}), + "y": (EpicsMotor, "Mir:KBh-Ax:TY}Mtr", {}), + "x": (EpicsMotor, "Mir:KBh-Ax:TX}Mtr", {}), + "z": (EpicsMotor, "Mir:KBh-Ax:TZ}Mtr", {}), + "p": (EpicsMotor, "Mir:KBh-Ax:Pitch}Mtr", {}), + } + ) + fs = DDC( + { + "y": (EpicsMotor, "Mir:KBh-Ax:FS}Mtr", {}), + } + ) + + +class KB(Device): + vkb = Cpt(VKB) + hkb = Cpt(HKB) + win = DDC( + { + "x": (EpicsMotor, "Wnd:Exit-Ax:TX}Mtr", {}), + "y": (EpicsMotor, "Wnd:Exit-Ax:TY}Mtr", {}), + } + ) + + +class DM4(Device): + bpm = DDC( + { + "x": (EpicsMotor, "BPM:DM4-Ax:TX}Mtr", {}), + "y": (EpicsMotor, "BPM:DM4-Ax:TY}Mtr", {}), + } + ) + + +class SAM(Device): + _2c_sm = DDC( + { + "lrx": (EpicsMotor, "Gon:1-Ax:Rx1}Mtr", {}), + "lrz": (EpicsMotor, "Gon:1-Ax:Rz1}Mtr", {}), + } + ) + _2c_lg = DDC( + { + "lrx": (EpicsMotor, "Gon:1-Ax:Rx2}Mtr", {}), + "lrz": (EpicsMotor, "Gon:1-Ax:Rz2}Mtr", {}), + } + ) + ly = Cpt(EpicsMotor, "Gon:1-Ax:Y}Mtr") + ry = Cpt(EpicsMotor, "Gon:1-Ax:Ry}Mtr") + t_sm = DDC( + { + "lx": (EpicsMotor, "Gon:1-Ax:X1}Mtr", {}), + "lz": (EpicsMotor, "Gon:1-Ax:Z1}Mtr", {}), + } + ) + t_lg = DDC( + { + "lx": (EpicsMotor, "Gon:1-Ax:X2}Mtr", {}), + "lz": (EpicsMotor, "Gon:1-Ax:Z2}Mtr", {}), + } + ) + lfx = Cpt(EpicsMotor, "Gon:1-Ax:XP}Mtr") + lfy = Cpt(EpicsMotor, "Gon:1-Ax:YP}Mtr") + lfz = Cpt(EpicsMotor, "Gon:1-Ax:ZP}Mtr") + + +class GON(Device): + sam = Cpt(SAM) + align = DDC( + { + "rx": (EpicsMotor, "Gon:1-Ax:Rx3}Mtr", {}), + "rz": (EpicsMotor, "Gon:1-Ax:Rz3}Mtr", {}), + "x": (EpicsMotor, "Gon:1-Ax:X3}Mtr", {}), + "y": (EpicsMotor, "Gon:1-Ax:Y3}Mtr", {}), + "z": (EpicsMotor, "Gon:1-Ax:Z3}Mtr", {}), + } + ) + fs = DDC( + { + "y": (EpicsMotor, "Gon:1-Ax:Visual}Mtr", {}), + } + ) + + +class BCU(Device): + slit_us = DDC( + { + "ib": (EpicsMotor, "Slt:BCUU-Ax:I}Mtr", {}), + "ob": (EpicsMotor, "Slt:BCUU-Ax:O}Mtr", {}), + "bb": (EpicsMotor, "Slt:BCUU-Ax:B}Mtr", {}), + "tb": (EpicsMotor, "Slt:BCUU-Ax:T}Mtr", {}), + "hg": (EpicsMotor, "Slt:BCUU-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:BCUU-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:BCUU-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:BCUU-Ax:VC}Mtr", {}), + } + ) + slit_ds = DDC( + { + "ib": (EpicsMotor, "Slt:BCUD-Ax:I}Mtr", {}), + "ob": (EpicsMotor, "Slt:BCUD-Ax:O}Mtr", {}), + "bb": (EpicsMotor, "Slt:BCUD-Ax:B}Mtr", {}), + "tb": (EpicsMotor, "Slt:BCUD-Ax:T}Mtr", {}), + "hg": (EpicsMotor, "Slt:BCUD-Ax:HG}Mtr", {}), + "hc": (EpicsMotor, "Slt:BCUD-Ax:HC}Mtr", {}), + "vg": (EpicsMotor, "Slt:BCUD-Ax:VG}Mtr", {}), + "vc": (EpicsMotor, "Slt:BCUD-Ax:VC}Mtr", {}), + } + ) + ilcam = DDC( + { + "x": (EpicsMotor, "Qstar:1-Ax:1}Mtr", {}), + "y": (EpicsMotor, "Qstar:1-Ax:2}Mtr", {}), + "z": (EpicsMotor, "Qstar:1-Ax:3}Mtr", {}), + } + ) diff --git a/tests/test_motors.py b/tests/test_motors.py index dff6a44b..b227e527 100644 --- a/tests/test_motors.py +++ b/tests/test_motors.py @@ -8,29 +8,17 @@ import pytest from cditools.motors import ( - BPMDM3, - BPMDM4, - FSDM2, - FSDM3, - FSHPM, - FSVPM, - IMDM2, - FltrDM1, - Gon1, - MirHPM, - MirKBh, - MirKBv, - MirVPM, - MonoDMM, - MonoHDCM, - Qstar1, - SltBCUD, - SltBCUU, - SltDM3, - SltHPM, - SltVPM, - SltWB1, - WndExit, + BCU, + DCM, + DM1, + DM2, + DM3, + DM4, + DMM, + GON, + HPM, + KB, + VPM, ) @@ -62,71 +50,35 @@ def black_hole_ioc() -> Generator[None, None, None]: def test_motors_can_connect(black_hole_ioc: None) -> None: - slt_wb1 = SltWB1(prefix="XF:09IDA-OP:1{Slt:WB1", name="slt_wb1") - slt_wb1.wait_for_connection(timeout=10.0) + dm1 = DM1(prefix="XF:09IDA-OP:1{", name="dm1") + dm1.wait_for_connection(timeout=10.0) - fltr_dm1 = FltrDM1(prefix="XF:09IDA-OP:1{Fltr:DM1", name="fltr_dm1") - fltr_dm1.wait_for_connection(timeout=10.0) + vpm = VPM(prefix="XF:09IDA-OP:1{", name="vpm") + vpm.wait_for_connection(timeout=10.0) - fsvpm = FSVPM(prefix="XF:09IDA-OP:1{FS:VPM", name="fsvpm") - fsvpm.wait_for_connection(timeout=10.0) + hpm = HPM(prefix="XF:09IDA-OP:1{", name="hpm") + hpm.wait_for_connection(timeout=10.0) - fshpm = FSHPM(prefix="XF:09IDA-OP:1{FS:HPM", name="fshpm") - fshpm.wait_for_connection(timeout=10.0) + dm2 = DM2(prefix="XF:09IDA-OP:1{", name="dm2") + dm2.wait_for_connection(timeout=10.0) - fsdm2 = FSDM2(prefix="XF:09IDA-OP:1{FS:DM2", name="fsdm2") - fsdm2.wait_for_connection(timeout=10.0) + dmm = DMM(prefix="XF:09IDA-OP:1{", name="dmm") + dmm.wait_for_connection(timeout=10.0) - mono_dmm = MonoDMM(prefix="XF:09IDA-OP:1{Mono:DMM", name="mono_dmm") - mono_dmm.wait_for_connection(timeout=10.0) + dcm = DCM(prefix="XF:09IDA-OP:1{", name="dcm") + dcm.wait_for_connection(timeout=10.0) - mono_hdcm = MonoHDCM(prefix="XF:09IDA-OP:1{Mono:HDCM", name="mono_hdcm") - mono_hdcm.wait_for_connection(timeout=10.0) + dm3 = DM3(prefix="XF:09IDB-OP:1{", name="dm3") + dm3.wait_for_connection(timeout=10.0) - slt_vpm = SltVPM(prefix="XF:09IDA-OP:1{Slt:VPM", name="slt_vpm") - slt_vpm.wait_for_connection(timeout=10.0) + kb = KB(prefix="XF:09IDC-OP:1{", name="kb") + kb.wait_for_connection(timeout=10.0) - slt_hpm = SltHPM(prefix="XF:09IDA-OP:1{Slt:HPM", name="slt_hpm") - slt_hpm.wait_for_connection(timeout=10.0) + dm4 = DM4(prefix="XF:09IDC-OP:1{", name="dm4") + dm4.wait_for_connection(timeout=10.0) - mir_vpm = MirVPM(prefix="XF:09IDA-OP:1{Mir:VPM", name="mir_vpm") - mir_vpm.wait_for_connection(timeout=10.0) + gon = GON(prefix="XF:09IDC-OP:1{", name="gon") + gon.wait_for_connection(timeout=10.0) - imdm2 = IMDM2(prefix="XF:09IDA-OP:1{IM:DM2", name="imdm2") - imdm2.wait_for_connection(timeout=10.0) - - mir_hpm = MirHPM(prefix="XF:09IDA-OP:1{Mir:HPM", name="mir_hpm") - mir_hpm.wait_for_connection(timeout=10.0) - - slt_dm3 = SltDM3(prefix="XF:09IDB-OP:1{Slt:DM3", name="slt_dm3") - slt_dm3.wait_for_connection(timeout=10.0) - - bpm_dm3 = BPMDM3(prefix="XF:09IDB-OP:1{BPM:DM3", name="bpm_dm3") - bpm_dm3.wait_for_connection(timeout=10.0) - - fsdm3 = FSDM3(prefix="XF:09IDB-OP:1{FS:DM3", name="fsdm3") - fsdm3.wait_for_connection(timeout=10.0) - - mir_kbv = MirKBv(prefix="XF:09IDC-OP:1{Mir:KBv", name="mir_kbv") - mir_kbv.wait_for_connection(timeout=10.0) - - mir_kbh = MirKBh(prefix="XF:09IDC-OP:1{Mir:KBh", name="mir_kbh") - mir_kbh.wait_for_connection(timeout=10.0) - - bpm_dm4 = BPMDM4(prefix="XF:09IDC-OP:1{BPM:DM4", name="bpm_dm4") - bpm_dm4.wait_for_connection(timeout=10.0) - - wnd_exit = WndExit(prefix="XF:09IDC-OP:1{Wnd:Exit", name="wnd_exit") - wnd_exit.wait_for_connection(timeout=10.0) - - gon1 = Gon1(prefix="XF:09IDC-OP:1{Gon:1", name="gon1") - gon1.wait_for_connection(timeout=10.0) - - slt_bcuu = SltBCUU(prefix="XF:09IDC-OP:1{Slt:BCUU", name="slt_bcuu") - slt_bcuu.wait_for_connection(timeout=10.0) - - slt_bcud = SltBCUD(prefix="XF:09IDC-OP:1{Slt:BCUD", name="slt_bcud") - slt_bcud.wait_for_connection(timeout=10.0) - - qstar1 = Qstar1(prefix="XF:09IDC-OP:1{Qstar:1", name="qstar1") - qstar1.wait_for_connection(timeout=10.0) + bcu = BCU(prefix="XF:09IDC-OP:1{", name="bcu") + bcu.wait_for_connection(timeout=10.0) From e93e14166277817ed640584c3c19051e4328c68b Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 13:26:26 -0400 Subject: [PATCH 2/7] Remove ophyd generators --- .../ophyd-generators/example_components.xlsx | Bin 5672 -> 0 bytes .../ophyd-generators/generate_from_excel.py | 181 ------------------ 2 files changed, 181 deletions(-) delete mode 100644 scripts/ophyd-generators/example_components.xlsx delete mode 100644 scripts/ophyd-generators/generate_from_excel.py diff --git a/scripts/ophyd-generators/example_components.xlsx b/scripts/ophyd-generators/example_components.xlsx deleted file mode 100644 index 6df2dd943b06b181d5a6c32fd26e883435fa8537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5672 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 x^WWecjID_Q|BtG_8s};${f-kx0Ra4$!qQg9! Date: Wed, 30 Jul 2025 13:33:12 -0400 Subject: [PATCH 3/7] Remove leading '2' in attribute name --- src/cditools/motors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cditools/motors.py b/src/cditools/motors.py index 77d0d674..5d7848a6 100644 --- a/src/cditools/motors.py +++ b/src/cditools/motors.py @@ -237,13 +237,13 @@ class DM4(Device): class SAM(Device): - _2c_sm = DDC( + c_sm = DDC( { "lrx": (EpicsMotor, "Gon:1-Ax:Rx1}Mtr", {}), "lrz": (EpicsMotor, "Gon:1-Ax:Rz1}Mtr", {}), } ) - _2c_lg = DDC( + c_lg = DDC( { "lrx": (EpicsMotor, "Gon:1-Ax:Rx2}Mtr", {}), "lrz": (EpicsMotor, "Gon:1-Ax:Rz2}Mtr", {}), From e2ad2d613b4624d412ed96521f78eea107161625 Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 14:08:39 -0400 Subject: [PATCH 4/7] Use empty string for PV suffix so it passes down properly --- src/cditools/motors.py | 6 +++--- tests/test_motors.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cditools/motors.py b/src/cditools/motors.py index 5d7848a6..50bd6d06 100644 --- a/src/cditools/motors.py +++ b/src/cditools/motors.py @@ -217,8 +217,8 @@ class HKB(Device): class KB(Device): - vkb = Cpt(VKB) - hkb = Cpt(HKB) + vkb = Cpt(VKB, "") + hkb = Cpt(HKB, "") win = DDC( { "x": (EpicsMotor, "Wnd:Exit-Ax:TX}Mtr", {}), @@ -269,7 +269,7 @@ class SAM(Device): class GON(Device): - sam = Cpt(SAM) + sam = Cpt(SAM, "") align = DDC( { "rx": (EpicsMotor, "Gon:1-Ax:Rx3}Mtr", {}), diff --git a/tests/test_motors.py b/tests/test_motors.py index b227e527..fd55659b 100644 --- a/tests/test_motors.py +++ b/tests/test_motors.py @@ -73,6 +73,7 @@ def test_motors_can_connect(black_hole_ioc: None) -> None: kb = KB(prefix="XF:09IDC-OP:1{", name="kb") kb.wait_for_connection(timeout=10.0) + print(kb.hkb.mir.yaw.high_limit_switch.pvname) dm4 = DM4(prefix="XF:09IDC-OP:1{", name="dm4") dm4.wait_for_connection(timeout=10.0) From 156513b1a7de8bfb86aa1015476ae84bfc58613d Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 14:14:54 -0400 Subject: [PATCH 5/7] Remove print (tests pass locally but GHA is too slow...) --- tests/test_motors.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_motors.py b/tests/test_motors.py index fd55659b..b227e527 100644 --- a/tests/test_motors.py +++ b/tests/test_motors.py @@ -73,7 +73,6 @@ def test_motors_can_connect(black_hole_ioc: None) -> None: kb = KB(prefix="XF:09IDC-OP:1{", name="kb") kb.wait_for_connection(timeout=10.0) - print(kb.hkb.mir.yaw.high_limit_switch.pvname) dm4 = DM4(prefix="XF:09IDC-OP:1{", name="dm4") dm4.wait_for_connection(timeout=10.0) From e27ecd6d5d803f381d542b64e37c1c7ec3aaf427 Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 14:20:50 -0400 Subject: [PATCH 6/7] Force higher version of ophyd for testing due to new features used --- pixi.lock | 22 ++++++++++++---------- pyproject.toml | 2 ++ tests/test_motors.py | 5 +++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pixi.lock b/pixi.lock index ece738fd..97d3da87 100644 --- a/pixi.lock +++ b/pixi.lock @@ -37,7 +37,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/f5ded172af40b7e7ae60697a2b2096cec53e45344edce41e91a74425473c/ophyd-1.10.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b3/1e63820f1a4df7854e33f0c3c5fa6be758c7fb7ea007ae9c8b9b35f48690/ophyd-1.10.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl @@ -99,7 +99,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/f5ded172af40b7e7ae60697a2b2096cec53e45344edce41e91a74425473c/ophyd-1.10.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b3/1e63820f1a4df7854e33f0c3c5fa6be758c7fb7ea007ae9c8b9b35f48690/ophyd-1.10.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl @@ -181,7 +181,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/f5ded172af40b7e7ae60697a2b2096cec53e45344edce41e91a74425473c/ophyd-1.10.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b3/1e63820f1a4df7854e33f0c3c5fa6be758c7fb7ea007ae9c8b9b35f48690/ophyd-1.10.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl @@ -248,7 +248,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/12/f2/89ea3361a305466bc6460a532188830351220b5f0851a5fa133155c16eca/opentelemetry_api-1.32.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f2/5e/f5ded172af40b7e7ae60697a2b2096cec53e45344edce41e91a74425473c/ophyd-1.10.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b3/1e63820f1a4df7854e33f0c3c5fa6be758c7fb7ea007ae9c8b9b35f48690/ophyd-1.10.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl @@ -380,14 +380,15 @@ packages: requires_python: '>=3.8' - pypi: . name: cditools - version: 0.1.dev34+ga046dfc.d20250710 - sha256: dad64b187309de0f2f9b697f8c3db9aed41ac45331ac2cfc86122a070bb83645 + version: 0.1.dev42+g156513b.d20250730 + sha256: 9cd6f3f1c81072d40049cafcdbc62317a84242bf1cb69c494bcb4d0c2869b283 requires_dist: - ophyd - h5py - pytest>=6 ; extra == 'test' - pytest-cov>=3 ; extra == 'test' - caproto[standard]>=0.4.2rc1,!=1.2.0 ; extra == 'test' + - ophyd>=1.10.6 ; extra == 'test' - caproto[standard]>=0.4.2rc1,!=1.2.0 ; extra == 'dev' - pytest>=6 ; extra == 'dev' - pytest-cov>=3 ; extra == 'dev' @@ -396,6 +397,7 @@ packages: - ipython ; extra == 'dev' - ruff ; extra == 'dev' - pyright ; extra == 'dev' + - ophyd>=1.10.6 ; extra == 'dev' - sphinx>=7.0 ; extra == 'docs' - myst-parser>=0.13 ; extra == 'docs' - sphinx-copybutton ; extra == 'docs' @@ -983,10 +985,10 @@ packages: - deprecated>=1.2.6 - importlib-metadata>=6.0,<8.7.0 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f2/5e/f5ded172af40b7e7ae60697a2b2096cec53e45344edce41e91a74425473c/ophyd-1.10.5-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/fa/b3/1e63820f1a4df7854e33f0c3c5fa6be758c7fb7ea007ae9c8b9b35f48690/ophyd-1.10.7-py3-none-any.whl name: ophyd - version: 1.10.5 - sha256: 9acdc0b69b9f51bc8ee50cfaff11c18a5e089dd66f13ce8fe2ea57e291bf959a + version: 1.10.7 + sha256: d34a385a603d6ee255507dd2992ccb72a4316b824bf226bd2c8d2f0ce825bfbe requires_dist: - networkx>=2.0 - numpy @@ -996,7 +998,7 @@ packages: - attrs>=19.3.0 ; extra == 'dev' - black==22.3.0 ; extra == 'dev' - bluesky>=1.11.0 ; extra == 'dev' - - caproto[standard]>=0.4.2rc1 ; extra == 'dev' + - caproto[standard]>=0.4.2rc1,!=1.2.0 ; extra == 'dev' - pytest-codecov ; extra == 'dev' - databroker>=1.0.0b1 ; extra == 'dev' - doctr ; extra == 'dev' diff --git a/pyproject.toml b/pyproject.toml index 0cfb33ee..9486a072 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ test = [ "pytest >=6", "pytest-cov >=3", "caproto[standard] >=0.4.2rc1,!=1.2.0", + "ophyd >=v1.10.6", ] dev = [ "caproto[standard] >=0.4.2rc1,!=1.2.0", @@ -49,6 +50,7 @@ dev = [ "ipython", "ruff", "pyright", + "ophyd >=v1.10.6", ] docs = [ "sphinx>=7.0", diff --git a/tests/test_motors.py b/tests/test_motors.py index b227e527..ce6ab01b 100644 --- a/tests/test_motors.py +++ b/tests/test_motors.py @@ -6,6 +6,7 @@ from subprocess import PIPE, Popen import pytest +from ophyd import Device, EpicsSignal from cditools.motors import ( BCU, @@ -22,6 +23,10 @@ ) +EpicsSignal.set_defaults(timeout=20.0, connection_timeout=20.0, write_timeout=20.0) +Device.set_defaults(connection_timeout=20.0) + + @pytest.fixture(scope="session") def black_hole_ioc() -> Generator[None, None, None]: os.environ["EPICS_CA_ADDR_LIST"] = "127.0.0.1" From 254383f3df5cc8304f412c8e07add74df4d1da57 Mon Sep 17 00:00:00 2001 From: thomashopkins32 Date: Wed, 30 Jul 2025 14:29:49 -0400 Subject: [PATCH 7/7] ruff fixes --- tests/test_motors.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_motors.py b/tests/test_motors.py index ce6ab01b..2afa3ca8 100644 --- a/tests/test_motors.py +++ b/tests/test_motors.py @@ -22,7 +22,6 @@ VPM, ) - EpicsSignal.set_defaults(timeout=20.0, connection_timeout=20.0, write_timeout=20.0) Device.set_defaults(connection_timeout=20.0)