Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Backend registry: single name → constructor dispatch

Đang mở
#902 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@petercorke đang làm issue này rồi.

Từ ngày 25/10/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

enhancement

Part of #886. Groundwork for the new backends; each backend issue is blocked by this one.

Problem

Backend selection is spread over several places:

  • backends.load_backend(): an if/elif over "swift", "pyplot", "pyplot2"
  • BaseRobot._get_graphical_backend(): a Literal of the same names, an isinstance chain to pick a default, a Pyodide special case, and Swift-specific fallback logic
  • BaseRobot.plot(): type(env).__name__ == "Swift" and isinstance(env, PyPlot) checks

Adding a backend means editing all of these. Also, default_backend isn't lowercased, so robot.default_backend = "Swift" fails with ValueError at plot time.

Proposal

  1. One registry in roboticstoolbox.backends, mapping name → target, e.g. "swift": "roboticstoolbox.backends.swift:Swift". Built-in backends are entries here.
  2. load_backend(name) looks the name up (case-insensitive). A string target is imported only when chosen. An unknown name gives an error listing the registered names. A missing optional package gives ModuleNotFoundError naming the pip extra.
  3. register_backend(name, target, *, replace=False), public:
    • target is a lazy "module:Class" string, or a callable returning a Connector
    • registering an existing name raises unless replace=True
    • registration is per process (call it before plot()); entry-point discovery may come later
    • lets a backend be developed, tested and used outside the RTB tree, e.g. register_backend("isaacsim", "rtb_isaacsim:IsaacSim"); once accepted into RTB, that call becomes a registry entry
    • backends that can't live in RTB (licence, GPU) can stay as separate packages
  4. Default choice stays in _get_graphical_backend, but works only with names: explicit argument → robot/class default → robot kind → "pyplot". Defaults by robot kind pick only built-ins; a registered backend is used when named or set with set_default_backend(). Normalise case at every entry point.
  5. Capability flags replace type checks. Add flags to Connector, and use getattr(env, flag, default) in plot():
    • embeds_in_notebook replaces __name__ == "Swift"
    • supports_movie replaces isinstance(env, PyPlot)
    • existing: supports_teach, supports_ellipse
  6. Type hints. The backend argument becomes str, validated at runtime against the registry, so the names live in one place and registered names are valid too.

Out of scope

  • Changing the Connector protocol itself (#676)
  • Third-party discovery via entry points

Tests

  • Lookup: case-insensitivity, unknown-name error, missing-package error
  • register_backend with a string target and a callable target, the duplicate-name error, and replace=True, all using a fake backend
  • Default resolution for each robot kind and for Pyodide
  • Capability flags read with the right defaults
  • The mocked Swift tests use register_backend and no longer need a class named Swift

Done when

  • Adding a backend is one registry entry plus the backend module
  • No __name__ or backend isinstance checks remain in BaseRobot
  • Existing tests pass, including the Swift ones
  • The docs list the registered backends and their flags, and show register_backend usage
Ngôn ngữ chính
C++
Star
3.6k
Fork
645
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
145

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của petercorke/robotics-toolbox-python

Tất cả issue của petercorke/robotics-toolbox-python

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.