From 4e73b76a12f867dc7a831e811c33a8458e705f4c Mon Sep 17 00:00:00 2001
From: Andrei Radulescu
Date: Tue, 30 Jul 2024 20:34:46 +0300
Subject: [PATCH 01/20] fix multiprocessing issue with can_replay.py on macOS
(#33139)
fix multiprocessing issue with can_replay.py on mac
---
tools/replay/can_replay.py | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/tools/replay/can_replay.py b/tools/replay/can_replay.py
index 3ab33a1dfdbe43..9b76edde10cbd3 100755
--- a/tools/replay/can_replay.py
+++ b/tools/replay/can_replay.py
@@ -80,6 +80,17 @@ def connect():
time.sleep(1)
+def process(lr):
+ return [can_capnp_to_can_list(m.can) for m in lr if m.which() == 'can']
+
+def load_route(route_or_segment_name):
+ print("Loading log...")
+ sr = LogReader(route_or_segment_name)
+ CP = sr.first("carParams")
+ print(f"carFingerprint (for hardcoding fingerprint): '{CP.carFingerprint}'")
+ CAN_MSGS = sr.run_across_segments(24, process)
+ print("Finished loading...")
+ return CAN_MSGS
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Replay CAN messages from a route to all connected pandas and jungles in a loop.",
@@ -87,22 +98,10 @@ def connect():
parser.add_argument("route_or_segment_name", nargs='?', help="The route or segment name to replay. If not specified, a default public route will be used.")
args = parser.parse_args()
- def process(lr):
- return [can_capnp_to_can_list(m.can) for m in lr if m.which() == 'can']
-
- print("Loading log...")
if args.route_or_segment_name is None:
args.route_or_segment_name = "77611a1fac303767/2020-03-24--09-50-38/1:3"
- sr = LogReader(args.route_or_segment_name)
-
- CP = sr.first("carParams")
-
- print(f"carFingerprint (for hardcoding fingerprint): '{CP.carFingerprint}'")
-
- CAN_MSGS = sr.run_across_segments(24, process)
-
- print("Finished loading...")
+ CAN_MSGS = load_route(args.route_or_segment_name)
if ENABLE_PWR:
print(f"Cycling power: on for {PWR_ON}s, off for {PWR_OFF}s")
From 0b29db5c3eed58eaaea746beb0079e3542075407 Mon Sep 17 00:00:00 2001
From: Adeeb Shihadeh
Date: Tue, 30 Jul 2024 13:03:34 -0700
Subject: [PATCH 02/20] add roadmap to readme
---
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8ebc733e63e728..9772ad646f3ae6 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,9 @@
- Read the docs
+ Docs
+ ·
+ Roadmap
·
Contribute
·
From 9536dd07c6b0f972db70b344ae2f676e031ea038 Mon Sep 17 00:00:00 2001
From: Maxime Desroches
Date: Tue, 30 Jul 2024 13:11:05 -0700
Subject: [PATCH 03/20] unpin numpy (#33132)
* unlock numpy
* remove old cache
* sheel
* lock
* remove temp
* depends
* export
* put this back
* use __version__
* move this
---------
Co-authored-by: quebec
---
SConstruct | 5 +++--
pyproject.toml | 2 +-
selfdrive/controls/lib/lateral_mpc_lib/SConscript | 3 ++-
selfdrive/controls/lib/longitudinal_mpc_lib/SConscript | 3 ++-
site_scons/site_tools/cython.py | 3 +++
uv.lock | 6 +++---
6 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/SConstruct b/SConstruct
index fb5c43c9ad8f4d..47f2db9661ba8c 100644
--- a/SConstruct
+++ b/SConstruct
@@ -229,7 +229,7 @@ env = Environment(
COMPILATIONDB_USE_ABSPATH=True,
REDNOSE_ROOT="#",
tools=["default", "cython", "compilation_db", "rednose_filter"],
- toolpath=["#rednose_repo/site_scons/site_tools"],
+ toolpath=["#site_scons/site_tools", "#rednose_repo/site_scons/site_tools"],
)
if arch == "Darwin":
@@ -268,7 +268,8 @@ if arch == "Darwin":
else:
envCython["LINKFLAGS"] = ["-pthread", "-shared"]
-Export('envCython')
+np_version = SCons.Script.Value(np.__version__)
+Export('envCython', 'np_version')
# Qt build environment
qt_env = env.Clone()
diff --git a/pyproject.toml b/pyproject.toml
index 4c1e1344310a4a..1473cf57070ea4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,7 +26,7 @@ dependencies = [
"pycapnp",
"Cython",
"setuptools",
- "numpy < 2.0.0", # control does not support numpy 2
+ "numpy",
# body / webrtcd
"aiohttp",
diff --git a/selfdrive/controls/lib/lateral_mpc_lib/SConscript b/selfdrive/controls/lib/lateral_mpc_lib/SConscript
index 73242cb8f9cf36..2c03da06a626df 100644
--- a/selfdrive/controls/lib/lateral_mpc_lib/SConscript
+++ b/selfdrive/controls/lib/lateral_mpc_lib/SConscript
@@ -1,4 +1,4 @@
-Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python')
+Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version')
gen = "c_generated_code"
@@ -88,3 +88,4 @@ lenv2.Command(libacados_ocp_solver_c,
f' {acados_ocp_solver_pyx.get_labspath()}')
lib_cython = lenv2.Program(f'{gen}/acados_ocp_solver_pyx.so', [libacados_ocp_solver_c])
lenv2.Depends(lib_cython, lib_solver)
+lenv2.Depends(libacados_ocp_solver_c, np_version)
diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
index 592c1c2c2da8ec..fc1e844d504a69 100644
--- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
+++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
@@ -1,4 +1,4 @@
-Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python')
+Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version')
gen = "c_generated_code"
@@ -94,3 +94,4 @@ lenv2.Command(libacados_ocp_solver_c,
f' {acados_ocp_solver_pyx.get_labspath()}')
lib_cython = lenv2.Program(f'{gen}/acados_ocp_solver_pyx.so', [libacados_ocp_solver_c])
lenv2.Depends(lib_cython, lib_solver)
+lenv2.Depends(libacados_ocp_solver_c, np_version)
diff --git a/site_scons/site_tools/cython.py b/site_scons/site_tools/cython.py
index c2914755336b40..f11db1d71bebca 100644
--- a/site_scons/site_tools/cython.py
+++ b/site_scons/site_tools/cython.py
@@ -2,14 +2,17 @@
import SCons
from SCons.Action import Action
from SCons.Scanner import Scanner
+import numpy as np
pyx_from_import_re = re.compile(r'^from\s+(\S+)\s+cimport', re.M)
pyx_import_re = re.compile(r'^cimport\s+(\S+)', re.M)
cdef_import_re = re.compile(r'^cdef extern from\s+.(\S+).:', re.M)
+np_version = SCons.Script.Value(np.__version__)
def pyx_scan(node, env, path, arg=None):
contents = node.get_text_contents()
+ env.Depends(str(node).split('.')[0] + env['CYTHONCFILESUFFIX'], np_version)
# from cimport ...
matches = pyx_from_import_re.findall(contents)
diff --git a/uv.lock b/uv.lock
index 2913075f5b25c2..ded3ddec7c360a 100644
--- a/uv.lock
+++ b/uv.lock
@@ -4977,11 +4977,11 @@ wheels = [
[[distribution]]
name = "setuptools"
-version = "71.1.0"
+version = "72.1.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/32/c0/5b8013b5a812701c72e3b1e2b378edaa6514d06bee6704a5ab0d7fa52931/setuptools-71.1.0.tar.gz", hash = "sha256:032d42ee9fb536e33087fb66cac5f840eb9391ed05637b3f2a76a7c8fb477936", size = 2422233 }
+sdist = { url = "https://files.pythonhosted.org/packages/5e/11/487b18cc768e2ae25a919f230417983c8d5afa1b6ee0abd8b6db0b89fa1d/setuptools-72.1.0.tar.gz", hash = "sha256:8d243eff56d095e5817f796ede6ae32941278f542e0f941867cc05ae52b162ec", size = 2419487 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/51/a0/ee460cc54e68afcf33190d198299c9579a5eafeadef0016ae8563237ccb6/setuptools-71.1.0-py3-none-any.whl", hash = "sha256:33874fdc59b3188304b2e7c80d9029097ea31627180896fb549c578ceb8a0855", size = 2341722 },
+ { url = "https://files.pythonhosted.org/packages/e1/58/e0ef3b9974a04ce9cde2a7a33881ddcb2d68450803745804545cdd8d258f/setuptools-72.1.0-py3-none-any.whl", hash = "sha256:5a03e1860cf56bb6ef48ce186b0e557fdba433237481a9a625176c2831be15d1", size = 2337965 },
]
[[distribution]]
From 086dcfe715985447fa33f120d16a496309718ba2 Mon Sep 17 00:00:00 2001
From: Maxime Desroches
Date: Tue, 30 Jul 2024 13:57:42 -0700
Subject: [PATCH 04/20] docs: fix README.md (#33142)
* md
* Update README.md
* rename
* exclude
* Update README.md
---
docs/{README => README.md} | 20 ++++++++++++--------
mkdocs.yml | 2 ++
2 files changed, 14 insertions(+), 8 deletions(-)
rename docs/{README => README.md} (59%)
diff --git a/docs/README b/docs/README.md
similarity index 59%
rename from docs/README
rename to docs/README.md
index a16c7725305852..08dd4fa8bcca9b 100644
--- a/docs/README
+++ b/docs/README.md
@@ -3,18 +3,22 @@
This is the source for [docs.comma.ai](https://docs.comma.ai).
The site is updated on pushes to master by this [workflow](../.github/workflows/docs.yaml).
-## development
-```
-# install the docs dependencies
+## Development
+NOTE: Those commands must be run in the root directory of openpilot, **not /docs**
+
+**1. Install the docs dependencies**
+``` bash
pip install .[docs]
+```
-cd docs/
+**2. Build the new site**
+``` bash
+mkdocs build
+```
-# for a development server
+**3. Run the new site locally**
+``` bash
mkdocs serve
-
-# build the site
-mkdocs build
```
References:
diff --git a/mkdocs.yml b/mkdocs.yml
index 8778e28863b4ba..743b8fa1b789c6 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -2,6 +2,8 @@ site_name: openpilot docs
repo_url: https://github.com/commaai/openpilot/
site_url: https://docs.comma.ai
+exclude_docs: README.md
+
strict: true
docs_dir: docs
site_dir: docs_site/
From 0fe143e4a75e7657f4d815a5616fc29f70de5ad5 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 14:07:47 -0700
Subject: [PATCH 05/20] test_onroad: lower lower log size bound
---
selfdrive/test/test_onroad.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/selfdrive/test/test_onroad.py b/selfdrive/test/test_onroad.py
index e29e241da9f0e1..27feb344f26f88 100644
--- a/selfdrive/test/test_onroad.py
+++ b/selfdrive/test/test_onroad.py
@@ -207,7 +207,7 @@ def test_log_sizes(self):
if f.name == "qcamera.ts":
assert 2.15 < sz < 2.35
elif f.name == "qlog":
- assert 0.45 < sz < 0.55
+ assert 0.4 < sz < 0.55
elif f.name == "rlog":
assert 5 < sz < 50
elif f.name.endswith('.hevc'):
From 0739d79a512965abbe22f0b15c7fddcdd71478d0 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 14:27:27 -0700
Subject: [PATCH 06/20] cars: remove some external imports (#33133)
* ford and gm
* clean that up
* also this
* honda
* temp fix
* move into selfdrive.car
* clean up
* more
---
.importlinter | 3 ---
selfdrive/car/__init__.py | 21 +++++++++++++++++++++
selfdrive/car/ford/carcontroller.py | 2 +-
selfdrive/car/gm/interface.py | 3 +--
selfdrive/car/honda/carcontroller.py | 3 +--
selfdrive/car/interfaces.py | 4 ++--
selfdrive/controls/lib/drive_helpers.py | 23 +----------------------
7 files changed, 27 insertions(+), 32 deletions(-)
diff --git a/.importlinter b/.importlinter
index 594d75ee4aa417..f77ea24b39751e 100644
--- a/.importlinter
+++ b/.importlinter
@@ -33,9 +33,6 @@ ignore_imports =
openpilot.selfdrive.car.ecu_addrs -> openpilot.common.swaglog
openpilot.selfdrive.car.car_helpers -> openpilot.common.swaglog
openpilot.selfdrive.car.car_helpers -> openpilot.system.version
- openpilot.selfdrive.car.ford.carcontroller -> openpilot.selfdrive.controls.lib.drive_helpers
- openpilot.selfdrive.car.gm.interface -> openpilot.selfdrive.controls.lib.drive_helpers
- openpilot.selfdrive.car.honda.carcontroller -> openpilot.selfdrive.controls.lib.drive_helpers
openpilot.selfdrive.car.interfaces -> openpilot.selfdrive.controls.lib.drive_helpers
openpilot.selfdrive.car.tests.test_car_interfaces -> openpilot.selfdrive.controls.lib.latcontrol_angle
openpilot.selfdrive.car.tests.test_car_interfaces -> openpilot.selfdrive.controls.lib.longcontrol
diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py
index 6f3bde7f0c26c3..b685c6a4354b5d 100644
--- a/selfdrive/car/__init__.py
+++ b/selfdrive/car/__init__.py
@@ -166,6 +166,27 @@ def common_fault_avoidance(fault_condition: bool, request: bool, above_limit_fra
return above_limit_frames, request
+def apply_center_deadzone(error, deadzone):
+ if (error > - deadzone) and (error < deadzone):
+ error = 0.
+ return error
+
+
+def rate_limit(new_value, last_value, dw_step, up_step):
+ return clip(new_value, last_value + dw_step, last_value + up_step)
+
+
+def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, friction_threshold: float,
+ torque_params: car.CarParams.LateralTorqueTuning, friction_compensation: bool) -> float:
+ friction_interp = interp(
+ apply_center_deadzone(lateral_accel_error, lateral_accel_deadzone),
+ [-friction_threshold, friction_threshold],
+ [-torque_params.friction, torque_params.friction]
+ )
+ friction = float(friction_interp) if friction_compensation else 0.0
+ return friction
+
+
def make_can_msg(addr, dat, bus):
return [addr, 0, dat, bus]
diff --git a/selfdrive/car/ford/carcontroller.py b/selfdrive/car/ford/carcontroller.py
index 7be3b2ebe9d0d1..36589f34e56c92 100644
--- a/selfdrive/car/ford/carcontroller.py
+++ b/selfdrive/car/ford/carcontroller.py
@@ -5,10 +5,10 @@
from openpilot.selfdrive.car.ford import fordcan
from openpilot.selfdrive.car.ford.values import CarControllerParams, FordFlags
from openpilot.selfdrive.car.interfaces import CarControllerBase
-from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
LongCtrlState = car.CarControl.Actuators.LongControlState
VisualAlert = car.CarControl.HUDControl.VisualAlert
+V_CRUISE_MAX = 145
def apply_ford_curvature_limits(apply_curvature, apply_curvature_last, current_curvature, v_ego_raw):
diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py
index d088050482a351..1d4a6066ccc3f9 100755
--- a/selfdrive/car/gm/interface.py
+++ b/selfdrive/car/gm/interface.py
@@ -6,11 +6,10 @@
from openpilot.common.basedir import BASEDIR
from openpilot.common.conversions import Conversions as CV
-from openpilot.selfdrive.car import create_button_events, get_safety_config
+from openpilot.selfdrive.car import create_button_events, get_safety_config, get_friction
from openpilot.selfdrive.car.gm.radar_interface import RADAR_HEADER_MSG
from openpilot.selfdrive.car.gm.values import CAR, CruiseButtons, CarControllerParams, EV_CAR, CAMERA_ACC_CAR, CanBus
from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, FRICTION_THRESHOLD, LatControlInputs, NanoFFModel
-from openpilot.selfdrive.controls.lib.drive_helpers import get_friction
ButtonType = car.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName
diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py
index 66bd50048581c5..dc42c41e63d09f 100644
--- a/selfdrive/car/honda/carcontroller.py
+++ b/selfdrive/car/honda/carcontroller.py
@@ -3,11 +3,10 @@
from cereal import car
from openpilot.common.numpy_fast import clip, interp
from opendbc.can.packer import CANPacker
-from openpilot.selfdrive.car import DT_CTRL
+from openpilot.selfdrive.car import DT_CTRL, rate_limit
from openpilot.selfdrive.car.honda import hondacan
from openpilot.selfdrive.car.honda.values import CruiseButtons, VISUAL_HUD, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_NIDEC_ALT_PCM_ACCEL, CarControllerParams
from openpilot.selfdrive.car.interfaces import CarControllerBase
-from openpilot.selfdrive.controls.lib.drive_helpers import rate_limit
VisualAlert = car.CarControl.HUDControl.VisualAlert
LongCtrlState = car.CarControl.Actuators.LongControlState
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index 9f1b650158e1b7..d37e171da7a8d9 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -13,9 +13,9 @@
from openpilot.common.conversions import Conversions as CV
from openpilot.common.simple_kalman import KF1D, get_kalman_gain
from openpilot.common.numpy_fast import clip
-from openpilot.selfdrive.car import DT_CTRL, apply_hysteresis, gen_empty_fingerprint, scale_rot_inertia, scale_tire_stiffness, STD_CARGO_KG
+from openpilot.selfdrive.car import DT_CTRL, apply_hysteresis, gen_empty_fingerprint, scale_rot_inertia, scale_tire_stiffness, get_friction, STD_CARGO_KG
from openpilot.selfdrive.car.values import PLATFORMS
-from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX, get_friction
+from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
from openpilot.selfdrive.controls.lib.events import Events
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
diff --git a/selfdrive/controls/lib/drive_helpers.py b/selfdrive/controls/lib/drive_helpers.py
index bd74051374a384..4c111a4fd1b45a 100644
--- a/selfdrive/controls/lib/drive_helpers.py
+++ b/selfdrive/controls/lib/drive_helpers.py
@@ -2,7 +2,7 @@
from cereal import car, log
from openpilot.common.conversions import Conversions as CV
-from openpilot.common.numpy_fast import clip, interp
+from openpilot.common.numpy_fast import clip
from openpilot.common.realtime import DT_CTRL
# WARNING: this value was determined based on the model's training distribution,
@@ -141,16 +141,6 @@ def initialize_v_cruise(self, CS, experimental_mode: bool) -> None:
self.v_cruise_cluster_kph = self.v_cruise_kph
-def apply_center_deadzone(error, deadzone):
- if (error > - deadzone) and (error < deadzone):
- error = 0.
- return error
-
-
-def rate_limit(new_value, last_value, dw_step, up_step):
- return clip(new_value, last_value + dw_step, last_value + up_step)
-
-
def clip_curvature(v_ego, prev_curvature, new_curvature):
v_ego = max(MIN_SPEED, v_ego)
max_curvature_rate = MAX_LATERAL_JERK / (v_ego**2) # inexact calculation, check https://github.com/commaai/openpilot/pull/24755
@@ -161,17 +151,6 @@ def clip_curvature(v_ego, prev_curvature, new_curvature):
return safe_desired_curvature
-def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, friction_threshold: float,
- torque_params: car.CarParams.LateralTorqueTuning, friction_compensation: bool) -> float:
- friction_interp = interp(
- apply_center_deadzone(lateral_accel_error, lateral_accel_deadzone),
- [-friction_threshold, friction_threshold],
- [-torque_params.friction, torque_params.friction]
- )
- friction = float(friction_interp) if friction_compensation else 0.0
- return friction
-
-
def get_speed_error(modelV2: log.ModelDataV2, v_ego: float) -> float:
# ToDo: Try relative error, and absolute speed
if len(modelV2.temporalPose.trans):
From 76fd5b00f1f169013334e06031e6b063c16cf5a5 Mon Sep 17 00:00:00 2001
From: Adeeb Shihadeh
Date: Tue, 30 Jul 2024 14:29:48 -0700
Subject: [PATCH 07/20] CI: increase shm size to 2G
---
.github/workflows/badges.yaml | 2 +-
.github/workflows/selfdrive_tests.yaml | 2 +-
.github/workflows/tools_tests.yaml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/badges.yaml b/.github/workflows/badges.yaml
index cf8bdc71097165..f8d2fc3cf10bd4 100644
--- a/.github/workflows/badges.yaml
+++ b/.github/workflows/badges.yaml
@@ -7,7 +7,7 @@ on:
env:
BASE_IMAGE: openpilot-base
DOCKER_REGISTRY: ghcr.io/commaai
- RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/bash -c
+ RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/bash -c
jobs:
badges:
diff --git a/.github/workflows/selfdrive_tests.yaml b/.github/workflows/selfdrive_tests.yaml
index a1786343215fee..bfad6e1e7dda22 100644
--- a/.github/workflows/selfdrive_tests.yaml
+++ b/.github/workflows/selfdrive_tests.yaml
@@ -25,7 +25,7 @@ env:
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
BUILD: selfdrive/test/docker_build.sh base
- RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PRE_COMMIT_HOME=/tmp/pre-commit -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/pre-commit:/tmp/pre-commit -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
+ RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PRE_COMMIT_HOME=/tmp/pre-commit -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/pre-commit:/tmp/pre-commit -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
PYTEST: pytest --continue-on-collection-errors --cov --cov-report=xml --cov-append --durations=0 --durations-min=5 --hypothesis-seed 0 -n logical
diff --git a/.github/workflows/tools_tests.yaml b/.github/workflows/tools_tests.yaml
index 9085556392efc6..271e4bda17f162 100644
--- a/.github/workflows/tools_tests.yaml
+++ b/.github/workflows/tools_tests.yaml
@@ -21,7 +21,7 @@ env:
BUILD: selfdrive/test/docker_build.sh base
- RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
+ RUN: docker run --shm-size 2G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
jobs:
From 661ef03a24171addba79b69bb14867425f5a9474 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 15:18:26 -0700
Subject: [PATCH 08/20] Ford: add long controls todo
---
selfdrive/car/ford/carcontroller.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/selfdrive/car/ford/carcontroller.py b/selfdrive/car/ford/carcontroller.py
index 36589f34e56c92..09bba465658beb 100644
--- a/selfdrive/car/ford/carcontroller.py
+++ b/selfdrive/car/ford/carcontroller.py
@@ -92,6 +92,7 @@ def update(self, CC, CS, now_nanos):
if not CC.longActive or gas < CarControllerParams.MIN_GAS:
gas = CarControllerParams.INACTIVE_GAS
stopping = CC.actuators.longControlState == LongCtrlState.stopping
+ # TODO: look into using the actuators packet to send the desired speed
can_sends.append(fordcan.create_acc_msg(self.packer, self.CAN, CC.longActive, gas, accel, stopping, v_ego_kph=V_CRUISE_MAX))
### ui ###
From b6d124d268ec705585e49d4ba84a316810e3b2b8 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 18:09:22 -0700
Subject: [PATCH 09/20] tester present msgs: use helper (#33147)
use helper
---
selfdrive/car/__init__.py | 11 +++++++++++
selfdrive/car/ecu_addrs.py | 13 ++-----------
selfdrive/car/honda/carcontroller.py | 4 ++--
selfdrive/car/hyundai/carcontroller.py | 6 +++---
selfdrive/car/subaru/carcontroller.py | 4 ++--
selfdrive/car/toyota/carcontroller.py | 4 ++--
6 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py
index b685c6a4354b5d..87d43831e64361 100644
--- a/selfdrive/car/__init__.py
+++ b/selfdrive/car/__init__.py
@@ -7,6 +7,7 @@
import capnp
from cereal import car
+from panda.python.uds import SERVICE_TYPE
from openpilot.common.numpy_fast import clip, interp
from openpilot.common.utils import Freezable
from openpilot.selfdrive.car.docs_definitions import CarDocs
@@ -191,6 +192,16 @@ def make_can_msg(addr, dat, bus):
return [addr, 0, dat, bus]
+def make_tester_present_msg(addr, bus, subaddr=None, suppress_response=False):
+ dat = [0x02, SERVICE_TYPE.TESTER_PRESENT]
+ if subaddr is not None:
+ dat.insert(0, subaddr)
+ dat.append(0x80 if suppress_response else 0x0) # sub-function
+
+ dat.extend([0x0] * (8 - len(dat)))
+ return make_can_msg(addr, bytes(dat), bus)
+
+
def get_safety_config(safety_model, safety_param = None):
ret = car.CarParams.SafetyConfig.new_message()
ret.safetyModel = safety_model
diff --git a/selfdrive/car/ecu_addrs.py b/selfdrive/car/ecu_addrs.py
index 0fd4bbd0beffac..0ff827593ec9ad 100755
--- a/selfdrive/car/ecu_addrs.py
+++ b/selfdrive/car/ecu_addrs.py
@@ -4,21 +4,12 @@
import cereal.messaging as messaging
from panda.python.uds import SERVICE_TYPE
-from openpilot.selfdrive.car import make_can_msg
+from openpilot.selfdrive.car import make_tester_present_msg
from openpilot.selfdrive.car.fw_query_definitions import EcuAddrBusType
from openpilot.selfdrive.pandad import can_list_to_can_capnp
from openpilot.common.swaglog import cloudlog
-def _make_tester_present_msg(addr, bus, subaddr=None):
- dat = [0x02, SERVICE_TYPE.TESTER_PRESENT, 0x0]
- if subaddr is not None:
- dat.insert(0, subaddr)
-
- dat.extend([0x0] * (8 - len(dat)))
- return make_can_msg(addr, bytes(dat), bus)
-
-
def _is_tester_present_response(msg: capnp.lib.capnp._DynamicStructReader, subaddr: int = None) -> bool:
# ISO-TP messages are always padded to 8 bytes
# tester present response is always a single frame
@@ -44,7 +35,7 @@ def get_ecu_addrs(logcan: messaging.SubSocket, sendcan: messaging.PubSocket, que
responses: set[EcuAddrBusType], timeout: float = 1, debug: bool = False) -> set[EcuAddrBusType]:
ecu_responses: set[EcuAddrBusType] = set() # set((addr, subaddr, bus),)
try:
- msgs = [_make_tester_present_msg(addr, bus, subaddr) for addr, subaddr, bus in queries]
+ msgs = [make_tester_present_msg(addr, bus, subaddr) for addr, subaddr, bus in queries]
messaging.drain_sock_raw(logcan)
sendcan.send(can_list_to_can_capnp(msgs, msgtype='sendcan'))
diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py
index dc42c41e63d09f..84ccf29d18dd91 100644
--- a/selfdrive/car/honda/carcontroller.py
+++ b/selfdrive/car/honda/carcontroller.py
@@ -3,7 +3,7 @@
from cereal import car
from openpilot.common.numpy_fast import clip, interp
from opendbc.can.packer import CANPacker
-from openpilot.selfdrive.car import DT_CTRL, rate_limit
+from openpilot.selfdrive.car import DT_CTRL, rate_limit, make_tester_present_msg
from openpilot.selfdrive.car.honda import hondacan
from openpilot.selfdrive.car.honda.values import CruiseButtons, VISUAL_HUD, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_NIDEC_ALT_PCM_ACCEL, CarControllerParams
from openpilot.selfdrive.car.interfaces import CarControllerBase
@@ -164,7 +164,7 @@ def update(self, CC, CS, now_nanos):
# tester present - w/ no response (keeps radar disabled)
if self.CP.carFingerprint in (HONDA_BOSCH - HONDA_BOSCH_RADARLESS) and self.CP.openpilotLongitudinalControl:
if self.frame % 10 == 0:
- can_sends.append((0x18DAB0F1, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", 1))
+ can_sends.append(make_tester_present_msg(0x18DAB0F1, 1, suppress_response=True))
# Send steering command.
can_sends.append(hondacan.create_steering_control(self.packer, self.CAN, apply_steer, CC.latActive, self.CP.carFingerprint,
diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py
index 3d7768a83b6037..75aeb0efd6ba31 100644
--- a/selfdrive/car/hyundai/carcontroller.py
+++ b/selfdrive/car/hyundai/carcontroller.py
@@ -2,7 +2,7 @@
from openpilot.common.conversions import Conversions as CV
from openpilot.common.numpy_fast import clip
from opendbc.can.packer import CANPacker
-from openpilot.selfdrive.car import DT_CTRL, apply_driver_steer_torque_limits, common_fault_avoidance
+from openpilot.selfdrive.car import DT_CTRL, apply_driver_steer_torque_limits, common_fault_avoidance, make_tester_present_msg
from openpilot.selfdrive.car.hyundai import hyundaicanfd, hyundaican
from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus
from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CANFD_CAR, CAR
@@ -96,11 +96,11 @@ def update(self, CC, CS, now_nanos):
addr, bus = 0x7d0, 0
if self.CP.flags & HyundaiFlags.CANFD_HDA2.value:
addr, bus = 0x730, self.CAN.ECAN
- can_sends.append([addr, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", bus])
+ can_sends.append(make_tester_present_msg(addr, bus, suppress_response=True))
# for blinkers
if self.CP.flags & HyundaiFlags.ENABLE_BLINKERS:
- can_sends.append([0x7b1, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", self.CAN.ECAN])
+ can_sends.append(make_tester_present_msg(0x7b1, self.CAN.ECAN, suppress_response=True))
# CAN-FD platforms
if self.CP.carFingerprint in CANFD_CAR:
diff --git a/selfdrive/car/subaru/carcontroller.py b/selfdrive/car/subaru/carcontroller.py
index d89ae8c6397157..3e1b62c9744f1d 100644
--- a/selfdrive/car/subaru/carcontroller.py
+++ b/selfdrive/car/subaru/carcontroller.py
@@ -1,6 +1,6 @@
from openpilot.common.numpy_fast import clip, interp
from opendbc.can.packer import CANPacker
-from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance
+from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance, make_tester_present_msg
from openpilot.selfdrive.car.interfaces import CarControllerBase
from openpilot.selfdrive.car.subaru import subarucan
from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_ES_ADDR, CanBus, CarControllerParams, SubaruFlags
@@ -124,7 +124,7 @@ def update(self, CC, CS, now_nanos):
if self.CP.flags & SubaruFlags.DISABLE_EYESIGHT:
# Tester present (keeps eyesight disabled)
if self.frame % 100 == 0:
- can_sends.append([GLOBAL_ES_ADDR, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", CanBus.camera])
+ can_sends.append(make_tester_present_msg(GLOBAL_ES_ADDR, CanBus.camera, suppress_response=True))
# Create all of the other eyesight messages to keep the rest of the car happy when eyesight is disabled
if self.frame % 5 == 0:
diff --git a/selfdrive/car/toyota/carcontroller.py b/selfdrive/car/toyota/carcontroller.py
index f9b7a478e0baec..ea71dd536b06ae 100644
--- a/selfdrive/car/toyota/carcontroller.py
+++ b/selfdrive/car/toyota/carcontroller.py
@@ -1,6 +1,6 @@
from cereal import car
from openpilot.common.numpy_fast import clip
-from openpilot.selfdrive.car import apply_meas_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance, make_can_msg
+from openpilot.selfdrive.car import apply_meas_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance, make_can_msg, make_tester_present_msg
from openpilot.selfdrive.car.interfaces import CarControllerBase
from openpilot.selfdrive.car.toyota import toyotacan
from openpilot.selfdrive.car.toyota.values import CAR, STATIC_DSU_MSGS, NO_STOP_TIMER_CAR, TSS2_CAR, \
@@ -166,7 +166,7 @@ def update(self, CC, CS, now_nanos):
# keep radar disabled
if self.frame % 20 == 0 and self.CP.flags & ToyotaFlags.DISABLE_RADAR.value:
- can_sends.append([0x750, 0, b"\x0F\x02\x3E\x00\x00\x00\x00\x00", 0])
+ can_sends.append(make_tester_present_msg(0x750, 0, 0xF))
new_actuators = actuators.as_builder()
new_actuators.steer = apply_steer / self.params.STEER_MAX
From 42f2601416bcb53c25e24b899131e66ee00177b8 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 21:26:58 -0700
Subject: [PATCH 10/20] deprecate busTime (#33146)
* deprecate busTime
* bump
* do car can + more
* forgot some
* bump opendbc
* fix that too
* bump
---
cereal/log.capnp | 2 +-
opendbc | 2 +-
panda | 2 +-
selfdrive/car/__init__.py | 2 +-
selfdrive/car/ford/fordcan.py | 2 +-
selfdrive/car/gm/gmcan.py | 2 +-
selfdrive/car/hyundai/hyundaican.py | 6 +++---
selfdrive/car/isotp_parallel_query.py | 8 ++++----
selfdrive/car/nissan/nissancan.py | 2 +-
selfdrive/car/subaru/subarucan.py | 2 +-
selfdrive/car/tesla/teslacan.py | 6 +++---
selfdrive/car/tests/test_models.py | 2 +-
selfdrive/controls/tests/test_startup.py | 4 ++--
selfdrive/pandad/__init__.py | 2 +-
selfdrive/pandad/can_list_to_can_capnp.cc | 1 -
selfdrive/pandad/panda.cc | 1 -
selfdrive/pandad/panda.h | 1 -
selfdrive/pandad/pandad.cc | 1 -
selfdrive/pandad/pandad_api_impl.pyx | 6 ++----
system/webrtc/tests/test_stream_session.py | 2 +-
tools/cabana/streams/pandastream.cc | 1 -
21 files changed, 25 insertions(+), 32 deletions(-)
diff --git a/cereal/log.capnp b/cereal/log.capnp
index d849f4840b44bd..dcf9463ac8bee9 100644
--- a/cereal/log.capnp
+++ b/cereal/log.capnp
@@ -336,9 +336,9 @@ enum LaneChangeDirection {
struct CanData {
address @0 :UInt32;
- busTime @1 :UInt16;
dat @2 :Data;
src @3 :UInt8;
+ busTimeDEPRECATED @1 :UInt16;
}
struct DeviceState @0xa4d8b5af2aa492eb {
diff --git a/opendbc b/opendbc
index cff2af8ff86904..8e9d3688412405 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit cff2af8ff8690466109f56be62129ebfb85cd5dc
+Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
diff --git a/panda b/panda
index f6375848ca393a..8c3bb0151e8907 160000
--- a/panda
+++ b/panda
@@ -1 +1 @@
-Subproject commit f6375848ca393a9483921665b6a2d131d7ec9b20
+Subproject commit 8c3bb0151e8907ade344ccb293d58cd543e28baa
diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py
index 87d43831e64361..28ec4ad18797f0 100644
--- a/selfdrive/car/__init__.py
+++ b/selfdrive/car/__init__.py
@@ -189,7 +189,7 @@ def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, fric
def make_can_msg(addr, dat, bus):
- return [addr, 0, dat, bus]
+ return [addr, dat, bus]
def make_tester_present_msg(addr, bus, subaddr=None, suppress_response=False):
diff --git a/selfdrive/car/ford/fordcan.py b/selfdrive/car/ford/fordcan.py
index 2cfd61a1919973..46d09ec22d830e 100644
--- a/selfdrive/car/ford/fordcan.py
+++ b/selfdrive/car/ford/fordcan.py
@@ -112,7 +112,7 @@ def create_lat_ctl2_msg(packer, CAN: CanBus, mode: int, path_offset: float, path
}
# calculate checksum
- dat = packer.make_can_msg("LateralMotionControl2", 0, values)[2]
+ dat = packer.make_can_msg("LateralMotionControl2", 0, values)[1]
values["LatCtlPath_No_Cs"] = calculate_lat_ctl2_checksum(mode, counter, dat)
return packer.make_can_msg("LateralMotionControl2", CAN.main, values)
diff --git a/selfdrive/car/gm/gmcan.py b/selfdrive/car/gm/gmcan.py
index e833e77636a551..a70bcccd063d13 100644
--- a/selfdrive/car/gm/gmcan.py
+++ b/selfdrive/car/gm/gmcan.py
@@ -64,7 +64,7 @@ def create_gas_regen_command(packer, bus, throttle, idx, enabled, at_full_stop):
"GasRegenAlwaysOne3": 1,
}
- dat = packer.make_can_msg("ASCMGasRegenCmd", bus, values)[2]
+ dat = packer.make_can_msg("ASCMGasRegenCmd", bus, values)[1]
values["GasRegenChecksum"] = (((0xff - dat[1]) & 0xff) << 16) | \
(((0xff - dat[2]) & 0xff) << 8) | \
((0x100 - dat[3] - idx) & 0xff)
diff --git a/selfdrive/car/hyundai/hyundaican.py b/selfdrive/car/hyundai/hyundaican.py
index b4b951f89e173b..d2002e23e0afc2 100644
--- a/selfdrive/car/hyundai/hyundaican.py
+++ b/selfdrive/car/hyundai/hyundaican.py
@@ -77,7 +77,7 @@ def create_lkas11(packer, frame, CP, apply_steer, steer_req,
# Genesis and Optima fault when forwarding while engaged
values["CF_Lkas_LdwsActivemode"] = 2
- dat = packer.make_can_msg("LKAS11", 0, values)[2]
+ dat = packer.make_can_msg("LKAS11", 0, values)[1]
if CP.flags & HyundaiFlags.CHECKSUM_CRC8:
# CRC Checksum as seen on 2019 Hyundai Santa Fe
@@ -156,7 +156,7 @@ def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, se
scc12_values["CF_VSM_ConfMode"] = 1
scc12_values["AEB_Status"] = 1 # AEB disabled
- scc12_dat = packer.make_can_msg("SCC12", 0, scc12_values)[2]
+ scc12_dat = packer.make_can_msg("SCC12", 0, scc12_values)[1]
scc12_values["CR_VSM_ChkSum"] = 0x10 - sum(sum(divmod(i, 16)) for i in scc12_dat) % 0x10
commands.append(packer.make_can_msg("SCC12", 0, scc12_values))
@@ -181,7 +181,7 @@ def create_acc_commands(packer, enabled, accel, upper_jerk, idx, hud_control, se
"FCA_DrvSetStatus": 1,
"FCA_Status": 1, # AEB disabled
}
- fca11_dat = packer.make_can_msg("FCA11", 0, fca11_values)[2]
+ fca11_dat = packer.make_can_msg("FCA11", 0, fca11_values)[1]
fca11_values["CR_FCA_ChkSum"] = hyundai_checksum(fca11_dat[:7])
commands.append(packer.make_can_msg("FCA11", 0, fca11_values))
diff --git a/selfdrive/car/isotp_parallel_query.py b/selfdrive/car/isotp_parallel_query.py
index 447c7093c5b4fc..b5158f212681d1 100644
--- a/selfdrive/car/isotp_parallel_query.py
+++ b/selfdrive/car/isotp_parallel_query.py
@@ -27,7 +27,7 @@ def __init__(self, sendcan: messaging.PubSocket, logcan: messaging.SubSocket, bu
assert tx_addr not in FUNCTIONAL_ADDRS, f"Functional address should be defined in functional_addrs: {hex(tx_addr)}"
self.msg_addrs = {tx_addr: get_rx_addr_for_tx_addr(tx_addr[0], rx_offset=response_offset) for tx_addr in real_addrs}
- self.msg_buffer: dict[int, list[tuple[int, int, bytes, int]]] = defaultdict(list)
+ self.msg_buffer: dict[int, list[tuple[int, bytes, int]]] = defaultdict(list)
def rx(self):
"""Drain can socket and sort messages into buffers based on address"""
@@ -36,11 +36,11 @@ def rx(self):
for packet in can_packets:
for msg in packet.can:
if msg.src == self.bus and msg.address in self.msg_addrs.values():
- self.msg_buffer[msg.address].append((msg.address, msg.busTime, msg.dat, msg.src))
+ self.msg_buffer[msg.address].append((msg.address, msg.dat, msg.src))
def _can_tx(self, tx_addr, dat, bus):
"""Helper function to send single message"""
- msg = [tx_addr, 0, dat, bus]
+ msg = [tx_addr, dat, bus]
self.sendcan.send(can_list_to_can_capnp([msg], msgtype='sendcan'))
def _can_rx(self, addr, sub_addr=None):
@@ -53,7 +53,7 @@ def _can_rx(self, addr, sub_addr=None):
# Filter based on subadress
msgs = []
for m in self.msg_buffer[addr]:
- first_byte = m[2][0]
+ first_byte = m[1][0]
if first_byte == sub_addr:
msgs.append(m)
else:
diff --git a/selfdrive/car/nissan/nissancan.py b/selfdrive/car/nissan/nissancan.py
index b9a1b4f843217e..28fb01d7e39df8 100644
--- a/selfdrive/car/nissan/nissancan.py
+++ b/selfdrive/car/nissan/nissancan.py
@@ -15,7 +15,7 @@ def create_steering_control(packer, apply_steer, frame, steer_on, lkas_max_torqu
"LKA_ACTIVE": steer_on,
}
- dat = packer.make_can_msg("LKAS", 0, values)[2]
+ dat = packer.make_can_msg("LKAS", 0, values)[1]
values["CHECKSUM"] = nissan_checksum(dat[:7])
return packer.make_can_msg("LKAS", 0, values)
diff --git a/selfdrive/car/subaru/subarucan.py b/selfdrive/car/subaru/subarucan.py
index 86d39ff885f74a..41bd177ff2de76 100644
--- a/selfdrive/car/subaru/subarucan.py
+++ b/selfdrive/car/subaru/subarucan.py
@@ -279,7 +279,7 @@ def create_es_static_2(packer):
# *** Subaru Pre-global ***
def subaru_preglobal_checksum(packer, values, addr, checksum_byte=7):
- dat = packer.make_can_msg(addr, 0, values)[2]
+ dat = packer.make_can_msg(addr, 0, values)[1]
return (sum(dat[:checksum_byte]) + sum(dat[checksum_byte+1:])) % 256
diff --git a/selfdrive/car/tesla/teslacan.py b/selfdrive/car/tesla/teslacan.py
index 6bb27b995f79d5..f8cd138e776bd9 100644
--- a/selfdrive/car/tesla/teslacan.py
+++ b/selfdrive/car/tesla/teslacan.py
@@ -25,7 +25,7 @@ def create_steering_control(self, angle, enabled, counter):
"DAS_steeringControlCounter": counter,
}
- data = self.packer.make_can_msg("DAS_steeringControl", CANBUS.chassis, values)[2]
+ data = self.packer.make_can_msg("DAS_steeringControl", CANBUS.chassis, values)[1]
values["DAS_steeringControlChecksum"] = self.checksum(0x488, data[:3])
return self.packer.make_can_msg("DAS_steeringControl", CANBUS.chassis, values)
@@ -69,7 +69,7 @@ def create_action_request(self, msg_stw_actn_req, cancel, bus, counter):
values["SpdCtrlLvr_Stat"] = 1
values["MC_STW_ACTN_RQ"] = counter
- data = self.packer.make_can_msg("STW_ACTN_RQ", bus, values)[2]
+ data = self.packer.make_can_msg("STW_ACTN_RQ", bus, values)[1]
values["CRC_STW_ACTN_RQ"] = self.crc(data[:7])
return self.packer.make_can_msg("STW_ACTN_RQ", bus, values)
@@ -88,7 +88,7 @@ def create_longitudinal_commands(self, acc_state, speed, min_accel, max_accel, c
}
for packer, bus in [(self.packer, CANBUS.chassis), (self.pt_packer, CANBUS.powertrain)]:
- data = packer.make_can_msg("DAS_control", bus, values)[2]
+ data = packer.make_can_msg("DAS_control", bus, values)[1]
values["DAS_controlChecksum"] = self.checksum(0x2b9, data[:7])
messages.append(packer.make_can_msg("DAS_control", bus, values))
return messages
diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py
index 02e99f0b821efa..1d05b7c73140a1 100644
--- a/selfdrive/car/tests/test_models.py
+++ b/selfdrive/car/tests/test_models.py
@@ -297,7 +297,7 @@ def test_car_controller(car_control):
now_nanos += DT_CTRL * 1e9
msgs_sent += len(sendcan)
- for addr, _, dat, bus in sendcan:
+ for addr, dat, bus in sendcan:
to_send = libpanda_py.make_CANPacket(addr, bus % 4, dat)
self.assertTrue(self.safety.safety_tx_hook(to_send), (addr, dat, bus))
diff --git a/selfdrive/controls/tests/test_startup.py b/selfdrive/controls/tests/test_startup.py
index 14b0788a3d594c..51b9887c96bfff 100644
--- a/selfdrive/controls/tests/test_startup.py
+++ b/selfdrive/controls/tests/test_startup.py
@@ -90,7 +90,7 @@ def test_startup_alert(expected_event, car_model, fw_versions, brand):
managed_processes['card'].start()
assert pm.wait_for_readers_to_update('can', 5)
- pm.send('can', can_list_to_can_capnp([[0, 0, b"", 0]]))
+ pm.send('can', can_list_to_can_capnp([[0, b"", 0]]))
assert pm.wait_for_readers_to_update('pandaStates', 5)
msg = messaging.new_message('pandaStates', 1)
@@ -103,7 +103,7 @@ def test_startup_alert(expected_event, car_model, fw_versions, brand):
else:
finger = _FINGERPRINTS[car_model][0]
- msgs = [[addr, 0, b'\x00'*length, 0] for addr, length in finger.items()]
+ msgs = [[addr, b'\x00'*length, 0] for addr, length in finger.items()]
for _ in range(1000):
# card waits for pandad to echo back that it has changed the multiplexing mode
if not params.get_bool("ObdMultiplexingChanged"):
diff --git a/selfdrive/pandad/__init__.py b/selfdrive/pandad/__init__.py
index 8081a62dd0f1d7..2c80cd03c473ec 100644
--- a/selfdrive/pandad/__init__.py
+++ b/selfdrive/pandad/__init__.py
@@ -6,5 +6,5 @@ def can_capnp_to_can_list(can, src_filter=None):
ret = []
for msg in can:
if src_filter is None or msg.src in src_filter:
- ret.append((msg.address, msg.busTime, msg.dat, msg.src))
+ ret.append((msg.address, msg.dat, msg.src))
return ret
diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc
index 9fc2648da27a62..d73541c17fb8c3 100644
--- a/selfdrive/pandad/can_list_to_can_capnp.cc
+++ b/selfdrive/pandad/can_list_to_can_capnp.cc
@@ -10,7 +10,6 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri
for (auto it = can_list.begin(); it != can_list.end(); it++, j++) {
auto c = canData[j];
c.setAddress(it->address);
- c.setBusTime(it->busTime);
c.setDat(kj::arrayPtr((uint8_t*)it->dat.data(), it->dat.size()));
c.setSrc(it->src);
}
diff --git a/selfdrive/pandad/panda.cc b/selfdrive/pandad/panda.cc
index fcb4ac67a41279..ed5ee62501948f 100644
--- a/selfdrive/pandad/panda.cc
+++ b/selfdrive/pandad/panda.cc
@@ -257,7 +257,6 @@ bool Panda::unpack_can_buffer(uint8_t *data, uint32_t &size, std::vector pandas) {
auto canData = evt.initCan(raw_can_data.size());
for (uint i = 0; i
Date: Tue, 30 Jul 2024 23:28:49 -0700
Subject: [PATCH 11/20] bump
---
opendbc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/opendbc b/opendbc
index 8e9d3688412405..0a095bc1a487a8 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
+Subproject commit 0a095bc1a487a8df669349cc923a9b3984219765
From 80f9278a734ad566d9484074d2f6834659ab1feb Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 23:29:46 -0700
Subject: [PATCH 12/20] Revert "bump"
This reverts commit 7824074aae74ff12bd56880a690234b582535748.
---
opendbc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/opendbc b/opendbc
index 0a095bc1a487a8..8e9d3688412405 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit 0a095bc1a487a8df669349cc923a9b3984219765
+Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
From 1b6ac2d876fe3170968944722df67ee815d8cb1b Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Tue, 30 Jul 2024 23:55:23 -0700
Subject: [PATCH 13/20] CarController: call to super's init (#33148)
* this should be common
* super!
* bump
* and frame is common
* bump
---
selfdrive/car/body/carcontroller.py | 2 +-
selfdrive/car/chrysler/carcontroller.py | 3 +--
selfdrive/car/chrysler/radar_interface.py | 1 -
selfdrive/car/ford/carcontroller.py | 3 +--
selfdrive/car/gm/carcontroller.py | 3 +--
selfdrive/car/honda/carcontroller.py | 3 +--
selfdrive/car/hyundai/carcontroller.py | 3 +--
selfdrive/car/interfaces.py | 4 +++-
selfdrive/car/mazda/carcontroller.py | 3 +--
selfdrive/car/nissan/carcontroller.py | 3 +--
selfdrive/car/subaru/carcontroller.py | 3 +--
selfdrive/car/tesla/carcontroller.py | 3 +--
selfdrive/car/tesla/radar_interface.py | 1 -
selfdrive/car/toyota/carcontroller.py | 3 +--
selfdrive/car/volkswagen/carcontroller.py | 3 +--
15 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/selfdrive/car/body/carcontroller.py b/selfdrive/car/body/carcontroller.py
index c45dc7f0d2d964..0771d7a47130db 100644
--- a/selfdrive/car/body/carcontroller.py
+++ b/selfdrive/car/body/carcontroller.py
@@ -17,7 +17,7 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.frame = 0
+ super().__init__(dbc_name, CP, VM)
self.packer = CANPacker(dbc_name)
# PIDs
diff --git a/selfdrive/car/chrysler/carcontroller.py b/selfdrive/car/chrysler/carcontroller.py
index c9e7e2c9ed4f05..c0c03e0e0549b9 100644
--- a/selfdrive/car/chrysler/carcontroller.py
+++ b/selfdrive/car/chrysler/carcontroller.py
@@ -7,9 +7,8 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.apply_steer_last = 0
- self.frame = 0
self.hud_count = 0
self.last_lkas_falling_edge = 0
diff --git a/selfdrive/car/chrysler/radar_interface.py b/selfdrive/car/chrysler/radar_interface.py
index d9829584228b4d..f1d863d1e15db2 100755
--- a/selfdrive/car/chrysler/radar_interface.py
+++ b/selfdrive/car/chrysler/radar_interface.py
@@ -39,7 +39,6 @@ def _address_to_track(address):
class RadarInterface(RadarInterfaceBase):
def __init__(self, CP):
super().__init__(CP)
- self.CP = CP
self.rcp = _create_radar_can_parser(CP.carFingerprint)
self.updated_messages = set()
self.trigger_msg = LAST_MSG
diff --git a/selfdrive/car/ford/carcontroller.py b/selfdrive/car/ford/carcontroller.py
index 09bba465658beb..d090adf694edc8 100644
--- a/selfdrive/car/ford/carcontroller.py
+++ b/selfdrive/car/ford/carcontroller.py
@@ -25,11 +25,10 @@ def apply_ford_curvature_limits(apply_curvature, apply_curvature_last, current_c
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.VM = VM
self.packer = CANPacker(dbc_name)
self.CAN = fordcan.CanBus(CP)
- self.frame = 0
self.apply_curvature_last = 0
self.main_on_last = False
diff --git a/selfdrive/car/gm/carcontroller.py b/selfdrive/car/gm/carcontroller.py
index 013e72ad0be221..cac4f13ed5ba8b 100644
--- a/selfdrive/car/gm/carcontroller.py
+++ b/selfdrive/car/gm/carcontroller.py
@@ -19,12 +19,11 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.start_time = 0.
self.apply_steer_last = 0
self.apply_gas = 0
self.apply_brake = 0
- self.frame = 0
self.last_steer_frame = 0
self.last_button_frame = 0
self.cancel_counter = 0
diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py
index 84ccf29d18dd91..57488126486393 100644
--- a/selfdrive/car/honda/carcontroller.py
+++ b/selfdrive/car/honda/carcontroller.py
@@ -105,11 +105,10 @@ def rate_limit_steer(new_steer, last_steer):
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.packer = CANPacker(dbc_name)
self.params = CarControllerParams(CP)
self.CAN = hondacan.CanBus(CP)
- self.frame = 0
self.braking = False
self.brake_steady = 0.
diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py
index 75aeb0efd6ba31..84b565f0cdc506 100644
--- a/selfdrive/car/hyundai/carcontroller.py
+++ b/selfdrive/car/hyundai/carcontroller.py
@@ -44,12 +44,11 @@ def process_hud_alert(enabled, fingerprint, hud_control):
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.CAN = CanBus(CP)
self.params = CarControllerParams(CP)
self.packer = CANPacker(dbc_name)
self.angle_limit_counter = 0
- self.frame = 0
self.accel_last = 0
self.apply_steer_last = 0
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index d37e171da7a8d9..e491de3ed6106d 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -344,6 +344,7 @@ def create_common_events(self, cs_out, extra_gears=None, pcm_enable=True, allow_
class RadarInterfaceBase(ABC):
def __init__(self, CP):
+ self.CP = CP
self.rcp = None
self.pts = {}
self.delay = 0
@@ -466,7 +467,8 @@ def get_loopback_can_parser(CP):
class CarControllerBase(ABC):
def __init__(self, dbc_name: str, CP, VM):
- pass
+ self.CP = CP
+ self.frame = 0
@abstractmethod
def update(self, CC: car.CarControl.Actuators, CS: car.CarState, now_nanos: int) -> tuple[car.CarControl.Actuators, list[SendCan]]:
diff --git a/selfdrive/car/mazda/carcontroller.py b/selfdrive/car/mazda/carcontroller.py
index 3d41634879051a..23441a3a78daae 100644
--- a/selfdrive/car/mazda/carcontroller.py
+++ b/selfdrive/car/mazda/carcontroller.py
@@ -10,11 +10,10 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.apply_steer_last = 0
self.packer = CANPacker(dbc_name)
self.brake_counter = 0
- self.frame = 0
def update(self, CC, CS, now_nanos):
can_sends = []
diff --git a/selfdrive/car/nissan/carcontroller.py b/selfdrive/car/nissan/carcontroller.py
index c7bd231398bcef..473282edfc4aca 100644
--- a/selfdrive/car/nissan/carcontroller.py
+++ b/selfdrive/car/nissan/carcontroller.py
@@ -10,9 +10,8 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.car_fingerprint = CP.carFingerprint
- self.frame = 0
self.lkas_max_torque = 0
self.apply_angle_last = 0
diff --git a/selfdrive/car/subaru/carcontroller.py b/selfdrive/car/subaru/carcontroller.py
index 3e1b62c9744f1d..6ce006df8be104 100644
--- a/selfdrive/car/subaru/carcontroller.py
+++ b/selfdrive/car/subaru/carcontroller.py
@@ -13,9 +13,8 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.apply_steer_last = 0
- self.frame = 0
self.cruise_button_prev = 0
self.steer_rate_counter = 0
diff --git a/selfdrive/car/tesla/carcontroller.py b/selfdrive/car/tesla/carcontroller.py
index e460111e32cab0..8ee2a2165eaa28 100644
--- a/selfdrive/car/tesla/carcontroller.py
+++ b/selfdrive/car/tesla/carcontroller.py
@@ -8,8 +8,7 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
- self.frame = 0
+ super().__init__(dbc_name, CP, VM)
self.apply_angle_last = 0
self.packer = CANPacker(dbc_name)
self.pt_packer = CANPacker(DBC[CP.carFingerprint]['pt'])
diff --git a/selfdrive/car/tesla/radar_interface.py b/selfdrive/car/tesla/radar_interface.py
index ae5077824bc6f2..1684e42e7f593d 100755
--- a/selfdrive/car/tesla/radar_interface.py
+++ b/selfdrive/car/tesla/radar_interface.py
@@ -8,7 +8,6 @@
class RadarInterface(RadarInterfaceBase):
def __init__(self, CP):
super().__init__(CP)
- self.CP = CP
if CP.carFingerprint == CAR.TESLA_MODELS_RAVEN:
messages = [('RadarStatus', 16)]
diff --git a/selfdrive/car/toyota/carcontroller.py b/selfdrive/car/toyota/carcontroller.py
index ea71dd536b06ae..f844b7dc44b72e 100644
--- a/selfdrive/car/toyota/carcontroller.py
+++ b/selfdrive/car/toyota/carcontroller.py
@@ -27,9 +27,8 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.params = CarControllerParams(self.CP)
- self.frame = 0
self.last_steer = 0
self.last_angle = 0
self.alert_active = False
diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py
index 8e8652d3bec8c1..228900b6e98244 100644
--- a/selfdrive/car/volkswagen/carcontroller.py
+++ b/selfdrive/car/volkswagen/carcontroller.py
@@ -13,7 +13,7 @@
class CarController(CarControllerBase):
def __init__(self, dbc_name, CP, VM):
- self.CP = CP
+ super().__init__(dbc_name, CP, VM)
self.CCP = CarControllerParams(CP)
self.CCS = pqcan if CP.flags & VolkswagenFlags.PQ else mqbcan
self.packer_pt = CANPacker(dbc_name)
@@ -21,7 +21,6 @@ def __init__(self, dbc_name, CP, VM):
self.apply_steer_last = 0
self.gra_acc_counter_last = None
- self.frame = 0
self.eps_timer_soft_disable_alert = False
self.hca_frame_timer_running = 0
self.hca_frame_same_torque = 0
From 0dddc97dca8bf4e023b29c35cb92fd3dd0a9a3a2 Mon Sep 17 00:00:00 2001
From: Dean Lee
Date: Wed, 31 Jul 2024 15:24:46 +0800
Subject: [PATCH 14/20] update to new opendbc API (#32009)
* use new opendbc api
* export pandad_python
* merge master
* merge master
* bump opendbc
* bump opendbc
* improve func
* keep interface unchanged
* fix test_car_interfaces
* bump opendbc
* bump opendbc
* fix test_models
* the interface now has to convert from can capnp to list, so we should include this time
* goes from ~210 to ~240 mean ms real time
* remoe busTime
* lowercase sendcan
* consistent msgtype
* bump
* bump
* not used in lat_mpc
* space
* bump to master
---------
Co-authored-by: Shane Smiskol
---
opendbc | 2 +-
selfdrive/car/interfaces.py | 4 ++-
selfdrive/car/tests/test_car_interfaces.py | 3 +-
selfdrive/car/tests/test_models.py | 3 +-
.../lib/longitudinal_mpc_lib/SConscript | 4 +--
selfdrive/controls/radard.py | 4 +--
.../debug/check_can_parser_performance.py | 6 ++--
selfdrive/pandad/SConscript | 4 ++-
selfdrive/pandad/__init__.py | 3 +-
selfdrive/pandad/can_list_to_can_capnp.cc | 35 +++++++++++++++++--
selfdrive/pandad/pandad_api_impl.pyx | 29 ++++++++++++++-
.../examples/subaru_long_accel.ipynb | 3 +-
.../examples/subaru_steer_temp_fault.ipynb | 3 +-
13 files changed, 86 insertions(+), 17 deletions(-)
diff --git a/opendbc b/opendbc
index 8e9d3688412405..39a5345924d241 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
+Subproject commit 39a5345924d2414f05c40d258d359eb8412a0b03
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index e491de3ed6106d..6ecf6daab371ef 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -18,6 +18,7 @@
from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
from openpilot.selfdrive.controls.lib.events import Events
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
+from openpilot.selfdrive.pandad import can_capnp_to_list
ButtonType = car.CarState.ButtonEvent.Type
GearShifter = car.CarState.GearShifter
@@ -231,9 +232,10 @@ def _update(self, c: car.CarControl) -> car.CarState:
def update(self, c: car.CarControl, can_strings: list[bytes]) -> car.CarState:
# parse can
+ can_list = can_capnp_to_list(can_strings)
for cp in self.can_parsers:
if cp is not None:
- cp.update_strings(can_strings)
+ cp.update_strings(can_list)
# get CarState
ret = self._update(c)
diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py
index 4ca19f019e6df0..9e3c7d157ef223 100644
--- a/selfdrive/car/tests/test_car_interfaces.py
+++ b/selfdrive/car/tests/test_car_interfaces.py
@@ -15,6 +15,7 @@
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID
from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque
from openpilot.selfdrive.controls.lib.longcontrol import LongControl
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator
ALL_ECUS = {ecu for ecus in FW_VERSIONS.values() for ecu in ecus.keys()}
@@ -128,7 +129,7 @@ def test_car_interfaces(self, car_name, data):
# Test radar fault
if not car_params.radarUnavailable and radar_interface.rcp is not None:
- cans = [messaging.new_message('can', 1).to_bytes() for _ in range(5)]
+ cans = can_capnp_to_list([messaging.new_message('can', 1).to_bytes() for _ in range(5)])
rr = radar_interface.update(cans)
assert rr is None or len(rr.errors) > 0
diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py
index 1d05b7c73140a1..22a80f359a93af 100644
--- a/selfdrive/car/tests/test_models.py
+++ b/selfdrive/car/tests/test_models.py
@@ -19,6 +19,7 @@
from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute
from openpilot.selfdrive.car.values import Platform
from openpilot.selfdrive.car.card import Car
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.helpers import read_segment_list
from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT
from openpilot.tools.lib.logreader import LogReader, internal_source, openpilotci_source
@@ -237,7 +238,7 @@ def test_radar_interface(self):
# start parsing CAN messages after we've left ELM mode and can expect CAN traffic
error_cnt = 0
for i, msg in enumerate(self.can_msgs[self.elm_frame:]):
- rr = RI.update((msg.as_builder().to_bytes(),))
+ rr = RI.update(can_capnp_to_list((msg.as_builder().to_bytes(),)))
if rr is not None and i > 50:
error_cnt += car.RadarData.Error.canError in rr.errors
self.assertEqual(error_cnt, 0)
diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
index fc1e844d504a69..22342c00785e1f 100644
--- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
+++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
@@ -1,4 +1,4 @@
-Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version')
+Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python', 'np_version')
gen = "c_generated_code"
@@ -66,7 +66,7 @@ lenv.Clean(generated_files, Dir(gen))
generated_long = lenv.Command(generated_files,
source_list,
f"cd {Dir('.').abspath} && python3 long_mpc.py")
-lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python])
+lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python, pandad_python])
lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES")
lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES")
diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py
index c3fb60c61ad1aa..a7e3c0211d3ec7 100755
--- a/selfdrive/controls/radard.py
+++ b/selfdrive/controls/radard.py
@@ -10,8 +10,8 @@
from openpilot.common.params import Params
from openpilot.common.realtime import DT_CTRL, Ratekeeper, Priority, config_realtime_process
from openpilot.common.swaglog import cloudlog
-
from openpilot.common.simple_kalman import KF1D
+from openpilot.selfdrive.pandad import can_capnp_to_list
# Default lead acceleration decay set to 50% at 1s
@@ -307,7 +307,7 @@ def main():
while 1:
can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True)
- rr = RI.update(can_strings)
+ rr = RI.update(can_capnp_to_list(can_strings))
sm.update(0)
if rr is None:
continue
diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py
index 604a1df1248e86..a5155f0126b8dc 100755
--- a/selfdrive/debug/check_can_parser_performance.py
+++ b/selfdrive/debug/check_can_parser_performance.py
@@ -6,6 +6,7 @@
from cereal import car
from openpilot.selfdrive.car.tests.routes import CarTestRoute
from openpilot.selfdrive.car.tests.test_models import TestCarModelBase
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.tools.plotjuggler.juggle import DEMO_ROUTE
N_RUNS = 10
@@ -25,12 +26,13 @@ class CarModelTestCase(TestCarModelBase):
CC = car.CarControl.new_message()
ets = []
for _ in tqdm(range(N_RUNS)):
- msgs = [(m.as_builder().to_bytes(),) for m in tm.can_msgs]
+ msgs = [m.as_builder().to_bytes() for m in tm.can_msgs]
start_t = time.process_time_ns()
for msg in msgs:
+ can_list = can_capnp_to_list([msg])
for cp in tm.CI.can_parsers:
if cp is not None:
- cp.update_strings(msg)
+ cp.update_strings(can_list)
ets.append((time.process_time_ns() - start_t) * 1e-6)
print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs')
diff --git a/selfdrive/pandad/SConscript b/selfdrive/pandad/SConscript
index 63a2c1e650d539..dcc1f9811ee0bd 100644
--- a/selfdrive/pandad/SConscript
+++ b/selfdrive/pandad/SConscript
@@ -6,6 +6,8 @@ panda = env.Library('panda', ['panda.cc', 'panda_comms.cc', 'spi.cc'])
env.Program('pandad', ['main.cc', 'pandad.cc'], LIBS=[panda] + libs)
env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc'])
-envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
+pandad_python = envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
+Export('pandad_python')
+
if GetOption('extras'):
env.Program('tests/test_pandad_usbprotocol', ['tests/test_pandad_usbprotocol.cc'], LIBS=[panda] + libs)
diff --git a/selfdrive/pandad/__init__.py b/selfdrive/pandad/__init__.py
index 2c80cd03c473ec..b72c8ccb57dd14 100644
--- a/selfdrive/pandad/__init__.py
+++ b/selfdrive/pandad/__init__.py
@@ -1,6 +1,7 @@
# Cython, now uses scons to build
-from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp
+from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp, can_capnp_to_list
assert can_list_to_can_capnp
+assert can_capnp_to_list
def can_capnp_to_can_list(can, src_filter=None):
ret = []
diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc
index d73541c17fb8c3..ad2393b986ccff 100644
--- a/selfdrive/pandad/can_list_to_can_capnp.cc
+++ b/selfdrive/pandad/can_list_to_can_capnp.cc
@@ -1,11 +1,12 @@
#include "cereal/messaging/messaging.h"
#include "selfdrive/pandad/panda.h"
+#include "opendbc/can/common.h"
-void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendCan, bool valid) {
+void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendcan, bool valid) {
MessageBuilder msg;
auto event = msg.initEvent(valid);
- auto canData = sendCan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
+ auto canData = sendcan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
int j = 0;
for (auto it = can_list.begin(); it != can_list.end(); it++, j++) {
auto c = canData[j];
@@ -18,3 +19,33 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri
kj::ArrayOutputStream output_stream(kj::ArrayPtr((unsigned char *)out.data(), msg_size));
capnp::writeMessage(output_stream, msg);
}
+
+// Converts a vector of Cap'n Proto serialized can strings into a vector of CanData structures.
+void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_list, bool sendcan) {
+ AlignedBuffer aligned_buf;
+ can_list.reserve(strings.size());
+
+ for (const auto &str : strings) {
+ // extract the messages
+ capnp::FlatArrayMessageReader reader(aligned_buf.align(str.data(), str.size()));
+ cereal::Event::Reader event = reader.getRoot();
+
+ auto frames = sendcan ? event.getSendcan() : event.getCan();
+
+ // Add new CanData entry
+ CanData &can_data = can_list.emplace_back();
+ can_data.nanos = event.getLogMonoTime();
+ can_data.frames.reserve(frames.size());
+
+ // Populate CAN frames
+ for (const auto &frame : frames) {
+ CanFrame &can_frame = can_data.frames.emplace_back();
+ can_frame.src = frame.getSrc();
+ can_frame.address = frame.getAddress();
+
+ // Copy CAN data
+ auto dat = frame.getDat();
+ can_frame.dat.assign(dat.begin(), dat.end());
+ }
+ }
+}
diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx
index dd3f3d702f6d15..8a12e1c4337b18 100644
--- a/selfdrive/pandad/pandad_api_impl.pyx
+++ b/selfdrive/pandad/pandad_api_impl.pyx
@@ -1,8 +1,10 @@
# distutils: language = c++
# cython: language_level=3
+from cython.operator cimport dereference as deref, preincrement as preinc
from libcpp.vector cimport vector
from libcpp.string cimport string
from libcpp cimport bool
+from libc.stdint cimport uint8_t, uint32_t, uint64_t
cdef extern from "panda.h":
cdef struct can_frame:
@@ -10,8 +12,19 @@ cdef extern from "panda.h":
string dat
long src
+cdef extern from "opendbc/can/common.h":
+ cdef struct CanFrame:
+ long src
+ uint32_t address
+ vector[uint8_t] dat
+
+ cdef struct CanData:
+ uint64_t nanos
+ vector[CanFrame] frames
+
cdef extern from "can_list_to_can_capnp.cc":
- void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendCan, bool valid)
+ void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendcan, bool valid)
+ void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan)
def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef can_frame *f
@@ -27,3 +40,17 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef string out
can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid)
return out
+
+def can_capnp_to_list(strings, msgtype='can'):
+ cdef vector[CanData] data
+ can_capnp_to_can_list_cpp(strings, data, msgtype == 'sendcan')
+
+ result = []
+ cdef CanData *d
+ cdef vector[CanData].iterator it = data.begin()
+ while it != data.end():
+ d = &deref(it)
+ frames = [[f.address, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames]
+ result.append([d.nanos, frames])
+ preinc(it)
+ return result
diff --git a/tools/car_porting/examples/subaru_long_accel.ipynb b/tools/car_porting/examples/subaru_long_accel.ipynb
index 9d18a114df3ee8..35b92702a7e991 100644
--- a/tools/car_porting/examples/subaru_long_accel.ipynb
+++ b/tools/car_porting/examples/subaru_long_accel.ipynb
@@ -24,6 +24,7 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import DBC\n",
+ "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -50,7 +51,7 @@
"\n",
" for msg in lr:\n",
" if msg.which() == \"can\":\n",
- " cp.update_strings([msg.as_builder().to_bytes()])\n",
+ " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
" es_distance_history.append(copy.copy(cp.vl[\"ES_Distance\"]))\n",
" es_brake_history.append(copy.copy(cp.vl[\"ES_Brake\"]))\n",
" es_status_history.append(copy.copy(cp.vl[\"ES_Status\"]))\n",
diff --git a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
index 3d5055cbc29b04..8b762fecb8461b 100644
--- a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
+++ b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
@@ -27,6 +27,7 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import CanBus, DBC\n",
+ "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -50,7 +51,7 @@
" examples = []\n",
"\n",
" for msg in can_msgs:\n",
- " cp.update_strings([msg.as_builder().to_bytes()])\n",
+ " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
" steering_torque_history.append(copy.copy(cp.vl[\"Steering_Torque\"]))\n",
"\n",
" steer_warning_last = False\n",
From ac130001cc83734118524f59a83a96a2065dd56e Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Wed, 31 Jul 2024 02:38:44 -0700
Subject: [PATCH 15/20] Revert "update to new opendbc API (#32009)"
This reverts commit 0dddc97dca8bf4e023b29c35cb92fd3dd0a9a3a2.
---
opendbc | 2 +-
selfdrive/car/interfaces.py | 4 +--
selfdrive/car/tests/test_car_interfaces.py | 3 +-
selfdrive/car/tests/test_models.py | 3 +-
.../lib/longitudinal_mpc_lib/SConscript | 4 +--
selfdrive/controls/radard.py | 4 +--
.../debug/check_can_parser_performance.py | 6 ++--
selfdrive/pandad/SConscript | 4 +--
selfdrive/pandad/__init__.py | 3 +-
selfdrive/pandad/can_list_to_can_capnp.cc | 35 ++-----------------
selfdrive/pandad/pandad_api_impl.pyx | 29 +--------------
.../examples/subaru_long_accel.ipynb | 3 +-
.../examples/subaru_steer_temp_fault.ipynb | 3 +-
13 files changed, 17 insertions(+), 86 deletions(-)
diff --git a/opendbc b/opendbc
index 39a5345924d241..8e9d3688412405 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit 39a5345924d2414f05c40d258d359eb8412a0b03
+Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index 6ecf6daab371ef..e491de3ed6106d 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -18,7 +18,6 @@
from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
from openpilot.selfdrive.controls.lib.events import Events
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
-from openpilot.selfdrive.pandad import can_capnp_to_list
ButtonType = car.CarState.ButtonEvent.Type
GearShifter = car.CarState.GearShifter
@@ -232,10 +231,9 @@ def _update(self, c: car.CarControl) -> car.CarState:
def update(self, c: car.CarControl, can_strings: list[bytes]) -> car.CarState:
# parse can
- can_list = can_capnp_to_list(can_strings)
for cp in self.can_parsers:
if cp is not None:
- cp.update_strings(can_list)
+ cp.update_strings(can_strings)
# get CarState
ret = self._update(c)
diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py
index 9e3c7d157ef223..4ca19f019e6df0 100644
--- a/selfdrive/car/tests/test_car_interfaces.py
+++ b/selfdrive/car/tests/test_car_interfaces.py
@@ -15,7 +15,6 @@
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID
from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque
from openpilot.selfdrive.controls.lib.longcontrol import LongControl
-from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator
ALL_ECUS = {ecu for ecus in FW_VERSIONS.values() for ecu in ecus.keys()}
@@ -129,7 +128,7 @@ def test_car_interfaces(self, car_name, data):
# Test radar fault
if not car_params.radarUnavailable and radar_interface.rcp is not None:
- cans = can_capnp_to_list([messaging.new_message('can', 1).to_bytes() for _ in range(5)])
+ cans = [messaging.new_message('can', 1).to_bytes() for _ in range(5)]
rr = radar_interface.update(cans)
assert rr is None or len(rr.errors) > 0
diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py
index 22a80f359a93af..1d05b7c73140a1 100644
--- a/selfdrive/car/tests/test_models.py
+++ b/selfdrive/car/tests/test_models.py
@@ -19,7 +19,6 @@
from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute
from openpilot.selfdrive.car.values import Platform
from openpilot.selfdrive.car.card import Car
-from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.helpers import read_segment_list
from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT
from openpilot.tools.lib.logreader import LogReader, internal_source, openpilotci_source
@@ -238,7 +237,7 @@ def test_radar_interface(self):
# start parsing CAN messages after we've left ELM mode and can expect CAN traffic
error_cnt = 0
for i, msg in enumerate(self.can_msgs[self.elm_frame:]):
- rr = RI.update(can_capnp_to_list((msg.as_builder().to_bytes(),)))
+ rr = RI.update((msg.as_builder().to_bytes(),))
if rr is not None and i > 50:
error_cnt += car.RadarData.Error.canError in rr.errors
self.assertEqual(error_cnt, 0)
diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
index 22342c00785e1f..fc1e844d504a69 100644
--- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
+++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
@@ -1,4 +1,4 @@
-Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python', 'np_version')
+Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version')
gen = "c_generated_code"
@@ -66,7 +66,7 @@ lenv.Clean(generated_files, Dir(gen))
generated_long = lenv.Command(generated_files,
source_list,
f"cd {Dir('.').abspath} && python3 long_mpc.py")
-lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python, pandad_python])
+lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python])
lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES")
lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES")
diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py
index a7e3c0211d3ec7..c3fb60c61ad1aa 100755
--- a/selfdrive/controls/radard.py
+++ b/selfdrive/controls/radard.py
@@ -10,8 +10,8 @@
from openpilot.common.params import Params
from openpilot.common.realtime import DT_CTRL, Ratekeeper, Priority, config_realtime_process
from openpilot.common.swaglog import cloudlog
+
from openpilot.common.simple_kalman import KF1D
-from openpilot.selfdrive.pandad import can_capnp_to_list
# Default lead acceleration decay set to 50% at 1s
@@ -307,7 +307,7 @@ def main():
while 1:
can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True)
- rr = RI.update(can_capnp_to_list(can_strings))
+ rr = RI.update(can_strings)
sm.update(0)
if rr is None:
continue
diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py
index a5155f0126b8dc..604a1df1248e86 100755
--- a/selfdrive/debug/check_can_parser_performance.py
+++ b/selfdrive/debug/check_can_parser_performance.py
@@ -6,7 +6,6 @@
from cereal import car
from openpilot.selfdrive.car.tests.routes import CarTestRoute
from openpilot.selfdrive.car.tests.test_models import TestCarModelBase
-from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.tools.plotjuggler.juggle import DEMO_ROUTE
N_RUNS = 10
@@ -26,13 +25,12 @@ class CarModelTestCase(TestCarModelBase):
CC = car.CarControl.new_message()
ets = []
for _ in tqdm(range(N_RUNS)):
- msgs = [m.as_builder().to_bytes() for m in tm.can_msgs]
+ msgs = [(m.as_builder().to_bytes(),) for m in tm.can_msgs]
start_t = time.process_time_ns()
for msg in msgs:
- can_list = can_capnp_to_list([msg])
for cp in tm.CI.can_parsers:
if cp is not None:
- cp.update_strings(can_list)
+ cp.update_strings(msg)
ets.append((time.process_time_ns() - start_t) * 1e-6)
print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs')
diff --git a/selfdrive/pandad/SConscript b/selfdrive/pandad/SConscript
index dcc1f9811ee0bd..63a2c1e650d539 100644
--- a/selfdrive/pandad/SConscript
+++ b/selfdrive/pandad/SConscript
@@ -6,8 +6,6 @@ panda = env.Library('panda', ['panda.cc', 'panda_comms.cc', 'spi.cc'])
env.Program('pandad', ['main.cc', 'pandad.cc'], LIBS=[panda] + libs)
env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc'])
-pandad_python = envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
-Export('pandad_python')
-
+envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
if GetOption('extras'):
env.Program('tests/test_pandad_usbprotocol', ['tests/test_pandad_usbprotocol.cc'], LIBS=[panda] + libs)
diff --git a/selfdrive/pandad/__init__.py b/selfdrive/pandad/__init__.py
index b72c8ccb57dd14..2c80cd03c473ec 100644
--- a/selfdrive/pandad/__init__.py
+++ b/selfdrive/pandad/__init__.py
@@ -1,7 +1,6 @@
# Cython, now uses scons to build
-from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp, can_capnp_to_list
+from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp
assert can_list_to_can_capnp
-assert can_capnp_to_list
def can_capnp_to_can_list(can, src_filter=None):
ret = []
diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc
index ad2393b986ccff..d73541c17fb8c3 100644
--- a/selfdrive/pandad/can_list_to_can_capnp.cc
+++ b/selfdrive/pandad/can_list_to_can_capnp.cc
@@ -1,12 +1,11 @@
#include "cereal/messaging/messaging.h"
#include "selfdrive/pandad/panda.h"
-#include "opendbc/can/common.h"
-void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendcan, bool valid) {
+void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendCan, bool valid) {
MessageBuilder msg;
auto event = msg.initEvent(valid);
- auto canData = sendcan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
+ auto canData = sendCan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
int j = 0;
for (auto it = can_list.begin(); it != can_list.end(); it++, j++) {
auto c = canData[j];
@@ -19,33 +18,3 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri
kj::ArrayOutputStream output_stream(kj::ArrayPtr((unsigned char *)out.data(), msg_size));
capnp::writeMessage(output_stream, msg);
}
-
-// Converts a vector of Cap'n Proto serialized can strings into a vector of CanData structures.
-void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_list, bool sendcan) {
- AlignedBuffer aligned_buf;
- can_list.reserve(strings.size());
-
- for (const auto &str : strings) {
- // extract the messages
- capnp::FlatArrayMessageReader reader(aligned_buf.align(str.data(), str.size()));
- cereal::Event::Reader event = reader.getRoot();
-
- auto frames = sendcan ? event.getSendcan() : event.getCan();
-
- // Add new CanData entry
- CanData &can_data = can_list.emplace_back();
- can_data.nanos = event.getLogMonoTime();
- can_data.frames.reserve(frames.size());
-
- // Populate CAN frames
- for (const auto &frame : frames) {
- CanFrame &can_frame = can_data.frames.emplace_back();
- can_frame.src = frame.getSrc();
- can_frame.address = frame.getAddress();
-
- // Copy CAN data
- auto dat = frame.getDat();
- can_frame.dat.assign(dat.begin(), dat.end());
- }
- }
-}
diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx
index 8a12e1c4337b18..dd3f3d702f6d15 100644
--- a/selfdrive/pandad/pandad_api_impl.pyx
+++ b/selfdrive/pandad/pandad_api_impl.pyx
@@ -1,10 +1,8 @@
# distutils: language = c++
# cython: language_level=3
-from cython.operator cimport dereference as deref, preincrement as preinc
from libcpp.vector cimport vector
from libcpp.string cimport string
from libcpp cimport bool
-from libc.stdint cimport uint8_t, uint32_t, uint64_t
cdef extern from "panda.h":
cdef struct can_frame:
@@ -12,19 +10,8 @@ cdef extern from "panda.h":
string dat
long src
-cdef extern from "opendbc/can/common.h":
- cdef struct CanFrame:
- long src
- uint32_t address
- vector[uint8_t] dat
-
- cdef struct CanData:
- uint64_t nanos
- vector[CanFrame] frames
-
cdef extern from "can_list_to_can_capnp.cc":
- void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendcan, bool valid)
- void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan)
+ void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendCan, bool valid)
def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef can_frame *f
@@ -40,17 +27,3 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef string out
can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid)
return out
-
-def can_capnp_to_list(strings, msgtype='can'):
- cdef vector[CanData] data
- can_capnp_to_can_list_cpp(strings, data, msgtype == 'sendcan')
-
- result = []
- cdef CanData *d
- cdef vector[CanData].iterator it = data.begin()
- while it != data.end():
- d = &deref(it)
- frames = [[f.address, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames]
- result.append([d.nanos, frames])
- preinc(it)
- return result
diff --git a/tools/car_porting/examples/subaru_long_accel.ipynb b/tools/car_porting/examples/subaru_long_accel.ipynb
index 35b92702a7e991..9d18a114df3ee8 100644
--- a/tools/car_porting/examples/subaru_long_accel.ipynb
+++ b/tools/car_porting/examples/subaru_long_accel.ipynb
@@ -24,7 +24,6 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import DBC\n",
- "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -51,7 +50,7 @@
"\n",
" for msg in lr:\n",
" if msg.which() == \"can\":\n",
- " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
+ " cp.update_strings([msg.as_builder().to_bytes()])\n",
" es_distance_history.append(copy.copy(cp.vl[\"ES_Distance\"]))\n",
" es_brake_history.append(copy.copy(cp.vl[\"ES_Brake\"]))\n",
" es_status_history.append(copy.copy(cp.vl[\"ES_Status\"]))\n",
diff --git a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
index 8b762fecb8461b..3d5055cbc29b04 100644
--- a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
+++ b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
@@ -27,7 +27,6 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import CanBus, DBC\n",
- "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -51,7 +50,7 @@
" examples = []\n",
"\n",
" for msg in can_msgs:\n",
- " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
+ " cp.update_strings([msg.as_builder().to_bytes()])\n",
" steering_torque_history.append(copy.copy(cp.vl[\"Steering_Torque\"]))\n",
"\n",
" steer_warning_last = False\n",
From bf003f297239afd75889814da0aa9d53ab0101a1 Mon Sep 17 00:00:00 2001
From: Maxime Desroches
Date: Wed, 31 Jul 2024 10:42:08 -0700
Subject: [PATCH 16/20] setup.sh: retry + timing (#33145)
* improve
* update readme
* stdin
* better
* allow non interactive
* specify dir
---
README.md | 2 +-
tools/op.sh | 16 +++++---
tools/setup.sh | 102 ++++++++++++++++++++++++++++++++++++++++++++-----
3 files changed, 104 insertions(+), 16 deletions(-)
diff --git a/README.md b/README.md
index 9772ad646f3ae6..8316e5226100eb 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
Try it on a comma 3X
-Quick start: `curl -fsSL openpilot.comma.ai | bash`
+Quick start: `bash <(curl -fsSL openpilot.comma.ai)`
![openpilot tests](https://github.com/commaai/openpilot/actions/workflows/selfdrive_tests.yaml/badge.svg)
[![codecov](https://codecov.io/gh/commaai/openpilot/branch/master/graph/badge.svg)](https://codecov.io/gh/commaai/openpilot)
diff --git a/tools/op.sh b/tools/op.sh
index 8533017d8e6ecd..3ebd413a799b28 100755
--- a/tools/op.sh
+++ b/tools/op.sh
@@ -181,20 +181,26 @@ function op_setup() {
op_check_python
echo "Installing dependencies..."
+ st="$(date +%s)"
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
op_run_command $OPENPILOT_ROOT/tools/ubuntu_setup.sh
elif [[ "$OSTYPE" == "darwin"* ]]; then
op_run_command $OPENPILOT_ROOT/tools/mac_setup.sh
fi
- echo -e " ↳ [${GREEN}✔${NC}] Dependencies installed successfully.\n"
+ et="$(date +%s)"
+ echo -e " ↳ [${GREEN}✔${NC}] Dependencies installed successfully in $((et - st)) seconds.\n"
echo "Getting git submodules..."
- op_run_command git submodule update --jobs 4 --init --recursive
- echo -e " ↳ [${GREEN}✔${NC}] Submodules installed successfully.\n"
+ st="$(date +%s)"
+ op_run_command git submodule update --filter=blob:none --jobs 4 --init --recursive
+ et="$(date +%s)"
+ echo -e " ↳ [${GREEN}✔${NC}] Submodules installed successfully in $((et - st)) seconds.\n"
echo "Pulling git lfs files..."
+ st="$(date +%s)"
op_run_command git lfs pull
- echo -e " ↳ [${GREEN}✔${NC}] Files pulled successfully.\n"
+ et="$(date +%s)"
+ echo -e " ↳ [${GREEN}✔${NC}] Files pulled successfully in $((et - st)) seconds.\n"
op_check
@@ -360,7 +366,7 @@ function _op() {
-d | --dir ) shift 1; OPENPILOT_ROOT="$1"; shift 1 ;;
--dry ) shift 1; DRY="1" ;;
-n | --no-verify ) shift 1; NO_VERIFY="1" ;;
- -v | --verbose ) shift 1; VERBOSE="1" ;;
+ -v | --verbose ) shift 1; VERBOSE="1" ;;
esac
# parse Commands
diff --git a/tools/setup.sh b/tools/setup.sh
index 9b1ee9c0c1a21a..e770ba48aa22a5 100755
--- a/tools/setup.sh
+++ b/tools/setup.sh
@@ -1,7 +1,10 @@
#!/usr/bin/env bash
+set -e
+
RED='\033[0;31m'
GREEN='\033[0;32m'
+BOLD='\033[1m'
NC='\033[0m'
if [ -z "$OPENPILOT_ROOT" ]; then
@@ -9,11 +12,84 @@ if [ -z "$OPENPILOT_ROOT" ]; then
OPENPILOT_ROOT="$(pwd)/openpilot"
fi
+function show_motd() {
+cat << 'EOF'
+
+ .~ssos+.
+ +8888888888i,
+ {888888888888o.
+ h8888888888888k
+ t888888888s888k
+ `t88888d/ h88k
+ ``` h88l
+ ,88k`
+ .d8h`
+ +d8h
+ _+d8h`
+ ;y8h+`
+ |-`
+
+ openpilot installer
+
+EOF
+}
+
+function check_stdin() {
+ if [ -t 0 ]; then
+ INTERACTIVE=1
+ else
+ echo "Checking for valid invocation..."
+ echo -e " ↳ [${RED}✗${NC}] stdin not found! Running in non-interactive mode."
+ echo -e " Run ${BOLD}'bash <(curl -fsSL openpilot.comma.ai)'${NC} to run in interactive mode.\n"
+ fi
+}
+
+function ask_dir() {
+ echo -n "Enter directory in which to install openpilot (default $OPENPILOT_ROOT): "
+
+ if [[ -z $INTERACTIVE ]]; then
+ echo -e "\nBecause your are running in non-interactive mode, the installation"
+ echo -e "will default to $OPENPILOT_ROOT\n"
+ return 0
+ fi
+
+ read
+ if [[ ! -z "$REPLY" ]]; then
+ mkdir -p $REPLY
+ OPENPILOT_ROOT="$(realpath $REPLY/openpilot)"
+ fi
+}
+
function check_dir() {
echo "Checking for installation directory..."
if [ -d "$OPENPILOT_ROOT" ]; then
- echo -e " ↳ [${RED}✗${NC}] can't install openpilot in $OPENPILOT_ROOT !"
- return 1
+ echo -e " ↳ [${RED}✗${NC}] Installation destination $OPENPILOT_ROOT already exists!"
+
+ # not a valid clone, can't continue
+ if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" && ! -f "$OPENPILOT_ROOT/launch_openpilot.sh" ]]; then
+ echo -e " $OPENPILOT_ROOT already contains files but does not seems"
+ echo -e " to be a valid openpilot git clone. Choose another location for"
+ echo -e " installing openpilot!\n"
+ return 1
+ fi
+
+ # by default, don't try installing in already existing directory
+ if [[ -z $INTERACTIVE ]]; then
+ return 1
+ fi
+
+ read -p " Would you like to attempt installation anyway? [Y/n] " -n 1 -r
+ echo -e "\n"
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+ return 1
+ fi
+
+ # already a "valid" openpilot clone, skip cloning again
+ if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" ]]; then
+ SKIP_GIT_CLONE=1
+ fi
+
+ return 0
fi
echo -e " ↳ [${GREEN}✔${NC}] Successfully chosen $OPENPILOT_ROOT as installation directory\n"
@@ -30,10 +106,12 @@ function check_git() {
}
function git_clone() {
+ st="$(date +%s)"
echo "Cloning openpilot..."
if $(git clone --filter=blob:none https://github.com/commaai/openpilot.git "$OPENPILOT_ROOT"); then
if [[ -f $OPENPILOT_ROOT/launch_openpilot.sh ]]; then
- echo -e " ↳ [${GREEN}✔${NC}] Successfully cloned openpilot.\n"
+ et="$(date +%s)"
+ echo -e " ↳ [${GREEN}✔${NC}] Successfully cloned openpilot in $((et - st)) seconds.\n"
return 0
fi
fi
@@ -47,13 +125,17 @@ function install_with_op() {
$OPENPILOT_ROOT/tools/op.sh install
$OPENPILOT_ROOT/tools/op.sh setup
- # make op usable right now
- alias op="source $OPENPILOT_ROOT/tools/op.sh \"\$@\""
+ echo -e "\n----------------------------------------------------------------------"
+ echo -e "openpilot was successfully installed into ${BOLD}$OPENPILOT_ROOT${NC}"
+ echo -e "Checkout the docs at https://docs.comma.ai"
+ echo -e "Checkout how to contribute at https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md"
}
-check_dir && check_git && git_clone && install_with_op
+show_motd
-unset OPENPILOT_ROOT
-unset RED
-unset GREEN
-unset NC
+check_stdin
+ask_dir
+check_dir
+check_git
+[ -z $SKIP_GIT_CLONE ] && git_clone
+install_with_op
From 1dd8bdc7912bef693c112816a5ac5066b036337b Mon Sep 17 00:00:00 2001
From: Maxime Desroches
Date: Wed, 31 Jul 2024 13:34:14 -0700
Subject: [PATCH 17/20] Remove hexdump package (#33155)
* remove hexdump
* uv lock
* cleanup
---
pyproject.toml | 1 -
selfdrive/debug/dump.py | 13 +-
uv.lock | 1275 ++++++++++++++++++++-------------------
3 files changed, 652 insertions(+), 637 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 1473cf57070ea4..b486df3870e68d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -111,7 +111,6 @@ dev = [
"tabulate",
"types-requests",
"types-tabulate",
- "hexdump",
# this is only pinned since 5.15.11 is broken
"pyqt5 ==5.15.2; platform_machine == 'x86_64'", # no aarch64 wheels for macOS/linux
diff --git a/selfdrive/debug/dump.py b/selfdrive/debug/dump.py
index 787e9bc738b09d..78cf51e3db5fb0 100755
--- a/selfdrive/debug/dump.py
+++ b/selfdrive/debug/dump.py
@@ -4,7 +4,6 @@
import json
import codecs
-from hexdump import hexdump
from cereal import log
from cereal.services import SERVICE_LIST
from openpilot.tools.lib.live_logreader import raw_live_logreader
@@ -12,6 +11,18 @@
codecs.register_error("strict", codecs.backslashreplace_errors)
+def hexdump(msg):
+ m = str.upper(msg.hex())
+ m = [m[i:i+2] for i in range(0,len(m),2)]
+ m = [m[i:i+16] for i in range(0,len(m),16)]
+ for row,dump in enumerate(m):
+ addr = '%08X:' % (row*16)
+ raw = ' '.join(dump[:8]) + ' ' + ' '.join(dump[8:])
+ space = ' ' * (48 - len(raw))
+ asci = ''.join(chr(int(x,16)) if 0x20 <= int(x,16) <= 0x7E else '.' for x in dump)
+ print(f'{addr} {raw} {space} {asci}')
+
+
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Dump communication sockets. See cereal/services.py for a complete list of available sockets.')
diff --git a/uv.lock b/uv.lock
index ded3ddec7c360a..7afdbb3c655d4f 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,16 +1,21 @@
version = 1
requires-python = ">=3.11"
+environment-markers = [
+ "python_version == '3.12' and platform_machine == 'aarch64'",
+ "python_version == '3.12' and platform_machine == 'aarch64' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64')",
+ "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'",
+]
[[distribution]]
name = "aiohttp"
version = "3.9.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "aiosignal" },
- { name = "attrs" },
- { name = "frozenlist" },
- { name = "multidict" },
- { name = "yarl" },
+ { name = "aiosignal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "attrs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "frozenlist", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "multidict", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "yarl", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/04/a4/e3679773ea7eb5b37a2c998e25b017cc5349edf6ba2739d1f32855cfb11b/aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551", size = 7504841 }
wheels = [
@@ -51,8 +56,8 @@ name = "aioice"
version = "0.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "dnspython" },
- { name = "ifaddr" },
+ { name = "dnspython", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "ifaddr", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/33/b6/e2b0e48ccb5b04fe29265e93f14a0915f416e359c897ae87d570566c430b/aioice-0.9.0.tar.gz", hash = "sha256:fc2401b1c4b6e19372eaaeaa28fd1bd9cbf6b0e412e48625297c53b495eebd1e", size = 40324 }
wheels = [
@@ -64,14 +69,14 @@ name = "aiortc"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "aioice" },
- { name = "av" },
- { name = "cffi" },
- { name = "cryptography" },
- { name = "google-crc32c" },
- { name = "pyee" },
- { name = "pylibsrtp" },
- { name = "pyopenssl" },
+ { name = "aioice", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "av", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "cffi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "google-crc32c", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyee", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pylibsrtp", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyopenssl", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/71/32/e9b01e2271124643e5dc15c273f2bb8155efebf5bc2115407441ac62f4c5/aiortc-1.9.0.tar.gz", hash = "sha256:03faa76d76ef0e5989ac10386898b029369756102217230e2fcd4b029c50b303", size = 1168973 }
wheels = [
@@ -89,7 +94,7 @@ name = "aiosignal"
version = "1.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "frozenlist" },
+ { name = "frozenlist", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ae/67/0952ed97a9793b4958e5736f6d2b346b414a2cd63e82d05940032f45b32f/aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", size = 19422 }
wheels = [
@@ -130,9 +135,9 @@ name = "azure-core"
version = "1.30.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "requests" },
- { name = "six" },
- { name = "typing-extensions" },
+ { name = "requests", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "six", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/99/d4/1f469fa246f554b86fb5cebc30eef1b2a38b7af7a2c2791bce0a4c6e4604/azure-core-1.30.2.tar.gz", hash = "sha256:a14dc210efcd608821aa472d9fb8e8d035d29b68993819147bc290a8ac224472", size = 271104 }
wheels = [
@@ -144,11 +149,11 @@ name = "azure-identity"
version = "1.17.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "azure-core" },
- { name = "cryptography" },
- { name = "msal" },
- { name = "msal-extensions" },
- { name = "typing-extensions" },
+ { name = "azure-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "msal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "msal-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/51/c9/f7e3926686a89670ce641b360bd2da9a2d7a12b3e532403462d99f81e9d5/azure-identity-1.17.1.tar.gz", hash = "sha256:32ecc67cc73f4bd0595e4f64b1ca65cd05186f4fe6f98ed2ae9f1aa32646efea", size = 246652 }
wheels = [
@@ -160,10 +165,10 @@ name = "azure-storage-blob"
version = "12.21.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "azure-core" },
- { name = "cryptography" },
- { name = "isodate" },
- { name = "typing-extensions" },
+ { name = "azure-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "isodate", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/97/c9/0e1e864eef8071102de2d6b11dfcf8d35410735145b2fbc2e0a5f58d1490/azure-storage-blob-12.21.0.tar.gz", hash = "sha256:b9722725072f5b7373c0f4dd6d78fbae2bb37bffc5c3e01731ab8c750ee8dd7e", size = 557430 }
wheels = [
@@ -174,8 +179,11 @@ wheels = [
name = "casadi"
version = "3.6.5"
source = { registry = "https://pypi.org/simple" }
+environment-markers = [
+ "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'",
+]
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5a/97/ca40c4d7d36162ddfd0bb96a89206469a95b925faf67046ba6e4b5b78283/casadi-3.6.5.tar.gz", hash = "sha256:409a5f6725eadea40fddfb8ba2321139b5252edac8bc115a72f68e648631d56a", size = 5070590 }
wheels = [
@@ -200,8 +208,11 @@ wheels = [
name = "casadi"
version = "3.6.6"
source = { url = "https://github.com/commaai/casadi/releases/download/nightly-release-3.6.6/casadi-3.6.6-cp312-none-manylinux2014_aarch64.whl" }
+environment-markers = [
+ "python_version == '3.12' and platform_machine == 'aarch64'",
+]
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version == '3.12' and platform_machine == 'aarch64'" },
]
wheels = [
{ url = "https://github.com/commaai/casadi/releases/download/nightly-release-3.6.6/casadi-3.6.6-cp312-none-manylinux2014_aarch64.whl", hash = "sha256:06a15e0099657b960620a2491e565c7f126030018da80c39f6bd33439160c669" },
@@ -221,7 +232,7 @@ name = "cffi"
version = "1.16.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pycparser" },
+ { name = "pycparser", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/68/ce/95b0bae7968c65473e1298efb042e10cafc7bafc14d9e4f154008241c91d/cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", size = 512873 }
wheels = [
@@ -331,7 +342,7 @@ name = "coloredlogs"
version = "15.0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "humanfriendly" },
+ { name = "humanfriendly", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520 }
wheels = [
@@ -343,7 +354,7 @@ name = "contourpy"
version = "1.2.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8d/9e/e4786569b319847ffd98a8326802d5cf8a5500860dbfc2df1f0f4883ed99/contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c", size = 13457196 }
wheels = [
@@ -499,7 +510,7 @@ version = "0.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "python-xlib", marker = "sys_platform == 'linux'" },
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/2f/3a/46ca34abf0725a754bc44ef474ad34aedcc3ea23b052d97b18b76715a6a9/EWMHlib-0.2-py3-none-any.whl", hash = "sha256:f5b07d8cfd4c7734462ee744c32d490f2f3233fa7ab354240069344208d2f6f5", size = 46657 },
@@ -628,12 +639,12 @@ name = "geopandas"
version = "1.0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
- { name = "packaging" },
- { name = "pandas" },
- { name = "pyogrio" },
- { name = "pyproj" },
- { name = "shapely" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pandas", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pyogrio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pyproj", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "shapely", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/39/08/2cf5d85356e45b10b8d066cf4c3ba1e9e3185423c48104eed87e8afd0455/geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab", size = 317736 }
wheels = [
@@ -645,7 +656,7 @@ name = "ghp-import"
version = "2.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "python-dateutil" },
+ { name = "python-dateutil", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 }
wheels = [
@@ -675,7 +686,7 @@ name = "grimp"
version = "3.4.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/94/6c/6b071cc23c6c643b333af6f54147b59687e79b3a49bba80b4a0627bc5d90/grimp-3.4.1.tar.gz", hash = "sha256:c743c989ea49582171a93ac5aa0d22ecf04fd57143f956b3e35b6a1c7cddafec", size = 833762 }
wheels = [
@@ -716,22 +727,16 @@ name = "gymnasium"
version = "0.29.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cloudpickle" },
- { name = "farama-notifications" },
- { name = "numpy" },
- { name = "typing-extensions" },
+ { name = "cloudpickle", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "farama-notifications", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0d/f8/5699ddb3e1c4f6d97b8930e573074849b921da8374fccd141f0f3a9bd713/gymnasium-0.29.1.tar.gz", hash = "sha256:1a532752efcb7590478b1cc7aa04f608eb7a2fdad5570cd217b66b6a35274bb1", size = 820485 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a8/4d/3cbfd81ed84db450dbe73a89afcd8bc405273918415649ac6683356afe92/gymnasium-0.29.1-py3-none-any.whl", hash = "sha256:61c3384b5575985bb7f85e43213bcb40f36fcdff388cae6bc229304c71f2843e", size = 953939 },
]
-[[distribution]]
-name = "hexdump"
-version = "3.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/55/b3/279b1d57fa3681725d0db8820405cdcb4e62a9239c205e4ceac4391c78e4/hexdump-3.3.zip", hash = "sha256:d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db", size = 12658 }
-
[[distribution]]
name = "humanfriendly"
version = "10.0"
@@ -749,8 +754,8 @@ name = "hypothesis"
version = "6.47.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "attrs" },
- { name = "sortedcontainers" },
+ { name = "attrs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "sortedcontainers", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/45/f2/f77da8271b1abb630cb2090ead2f5aa4acc9639d632e8e68187f52527e4b/hypothesis-6.47.5.tar.gz", hash = "sha256:e0c1e253fc97e7ecdb9e2bbff2cf815d8739e0d1d3d093d67c3af5bb6a7211b0", size = 326641 }
wheels = [
@@ -789,9 +794,9 @@ name = "import-linter"
version = "2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "click" },
- { name = "grimp" },
- { name = "typing-extensions" },
+ { name = "click", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "grimp", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d4/3a/6b433eace42d2f92cb96667f326b11582004b74acd045bf10a277761eed4/import-linter-2.0.tar.gz", hash = "sha256:b067cf0cdbf11c4f87524e32c2e3eaa62d46572e9e06511e6b453198b15b1c9a", size = 28678 }
wheels = [
@@ -803,7 +808,7 @@ name = "importlib-metadata"
version = "8.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "zipp" },
+ { name = "zipp", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f6/a1/db39a513aa99ab3442010a994eef1cb977a436aded53042e69bee6959f74/importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d", size = 53907 }
wheels = [
@@ -833,7 +838,7 @@ name = "isodate"
version = "0.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "six" },
+ { name = "six", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/db/7a/c0a56c7d56c7fa723988f122fa1f1ccf8c5c4ccc48efad0d214b49e5b1af/isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9", size = 28443 }
wheels = [
@@ -845,7 +850,7 @@ name = "jinja2"
version = "3.1.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "markupsafe" },
+ { name = "markupsafe", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ed/55/39036716d19cab0747a5020fc7e907f362fbf48c984b14e62127f7e68e5d/jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", size = 240245 }
wheels = [
@@ -1036,15 +1041,15 @@ name = "matplotlib"
version = "3.9.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "contourpy" },
- { name = "cycler" },
- { name = "fonttools" },
- { name = "kiwisolver" },
- { name = "numpy" },
- { name = "packaging" },
- { name = "pillow" },
- { name = "pyparsing" },
- { name = "python-dateutil" },
+ { name = "contourpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "cycler", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "fonttools", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "kiwisolver", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pillow", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyparsing", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "python-dateutil", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/22/06/9e8ba6ec8b716a215404a5d1938b61f5a28001be493cf35344dda9a4072a/matplotlib-3.9.1.tar.gz", hash = "sha256:de06b19b8db95dd33d0dc17c926c7c9ebed9f572074b6fac4f65068a6814d010", size = 36084124 }
wheels = [
@@ -1076,28 +1081,28 @@ name = "metadrive-simulator"
version = "0.4.2.3"
source = { git = "https://github.com/commaai/metadrive?rev=opencv_headless#9b6ddb791919249effa0573883076681514787e4" }
dependencies = [
- { name = "filelock" },
- { name = "geopandas" },
- { name = "gymnasium" },
- { name = "lxml" },
- { name = "matplotlib" },
- { name = "numpy" },
- { name = "opencv-python-headless" },
- { name = "panda3d" },
- { name = "panda3d-gltf" },
- { name = "pandas" },
- { name = "pillow" },
- { name = "progressbar" },
- { name = "psutil" },
- { name = "pygame" },
- { name = "pygments" },
- { name = "pytest" },
- { name = "requests" },
- { name = "scipy" },
- { name = "seaborn" },
- { name = "shapely" },
- { name = "tqdm" },
- { name = "yapf" },
+ { name = "filelock", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "geopandas", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "gymnasium", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "lxml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "matplotlib", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "opencv-python-headless", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "panda3d", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "panda3d-gltf", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pandas", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pillow", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "progressbar", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "psutil", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pygame", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pygments", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "requests", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "scipy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "seaborn", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "shapely", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "tqdm", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "yapf", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
[[distribution]]
@@ -1105,19 +1110,19 @@ name = "mkdocs"
version = "1.6.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "click" },
+ { name = "click", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "colorama", marker = "platform_system == 'Windows'" },
- { name = "ghp-import" },
- { name = "jinja2" },
- { name = "markdown" },
- { name = "markupsafe" },
- { name = "mergedeep" },
- { name = "mkdocs-get-deps" },
- { name = "packaging" },
- { name = "pathspec" },
- { name = "pyyaml" },
- { name = "pyyaml-env-tag" },
- { name = "watchdog" },
+ { name = "ghp-import", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "jinja2", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "markdown", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "markupsafe", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "mergedeep", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "mkdocs-get-deps", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pathspec", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyyaml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyyaml-env-tag", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "watchdog", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/6b/26b33cc8ad54e8bc0345cddc061c2c5c23e364de0ecd97969df23f95a673/mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512", size = 3888392 }
wheels = [
@@ -1129,9 +1134,9 @@ name = "mkdocs-get-deps"
version = "0.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "mergedeep" },
- { name = "platformdirs" },
- { name = "pyyaml" },
+ { name = "mergedeep", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "platformdirs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyyaml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 }
wheels = [
@@ -1143,7 +1148,7 @@ name = "mouseinfo"
version = "0.1.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyperclip" },
+ { name = "pyperclip", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "python3-xlib", marker = "platform_system == 'Linux'" },
{ name = "rubicon-objc", marker = "platform_system == 'Darwin'" },
]
@@ -1163,9 +1168,10 @@ name = "msal"
version = "1.30.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cryptography" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyjwt", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyjwt", extra = ["crypto"] },
- { name = "requests" },
+ { name = "requests", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/03/ce/45b9af8f43fbbf34d15162e1e39ce34b675c234c56638277cc05562b6dbf/msal-1.30.0.tar.gz", hash = "sha256:b4bf00850092e465157d814efa24a18f788284c9a479491024d62903085ea2fb", size = 142510 }
wheels = [
@@ -1177,8 +1183,8 @@ name = "msal-extensions"
version = "1.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "msal" },
- { name = "portalocker" },
+ { name = "msal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "portalocker", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2d/38/ad49272d0a5af95f7a0cb64a79bbd75c9c187f3b789385a143d8d537a5eb/msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef", size = 22391 }
wheels = [
@@ -1229,8 +1235,8 @@ name = "mypy"
version = "1.11.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "mypy-extensions" },
- { name = "typing-extensions" },
+ { name = "mypy-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b1/95/a6dbb4fef19402c488b001ff4bd9f1a770e44049ce049b904dcffc65356c/mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538", size = 3078260 }
wheels = [
@@ -1303,8 +1309,8 @@ name = "onnx"
version = "1.16.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
- { name = "protobuf" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "protobuf", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/74/be/242d02ebf7fe115bd695166eeea58b2206c9fa62de22cf9cbf8986fa8d27/onnx-1.16.1.tar.gz", hash = "sha256:8299193f0f2a3849bfc069641aa8e4f93696602da8d165632af8ee48ec7556b6", size = 12306956 }
wheels = [
@@ -1325,12 +1331,12 @@ name = "onnxruntime"
version = "1.18.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "coloredlogs" },
- { name = "flatbuffers" },
- { name = "numpy" },
- { name = "packaging" },
- { name = "protobuf" },
- { name = "sympy" },
+ { name = "coloredlogs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "flatbuffers", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "protobuf", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "sympy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/d7/ae/e257a5ffa4ef84e51255a38b62b4fdb538d92455e1f0f0ad056074f89c94/onnxruntime-1.18.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:f26582882f2dc581b809cfa41a125ba71ad9e715738ec6402418df356969774a", size = 15892594 },
@@ -1350,12 +1356,12 @@ name = "onnxruntime-gpu"
version = "1.18.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "coloredlogs" },
- { name = "flatbuffers" },
- { name = "numpy" },
- { name = "packaging" },
- { name = "protobuf" },
- { name = "sympy" },
+ { name = "coloredlogs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "flatbuffers", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "protobuf", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "sympy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/92/2e/5c6a3c94a8e4794a0ad1ba00f5b86c89673f271f43c77f537a90db4472c0/onnxruntime_gpu-1.18.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af2d3ee6fba72b57abf6f379b8aca30ee773959d4346271e7d92557dd5cf2901", size = 200794895 },
@@ -1369,7 +1375,7 @@ name = "opencv-python-headless"
version = "4.10.0.84"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2f/7e/d20f68a5f1487adf19d74378d349932a386b1ece3be9be9915e5986db468/opencv-python-headless-4.10.0.84.tar.gz", hash = "sha256:f2017c6101d7c2ef8d7bc3b414c37ff7f54d64413a1847d89970b6b7069b4e1a", size = 95117755 }
wheels = [
@@ -1398,8 +1404,8 @@ dependencies = [
{ name = "libusb1", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "onnx", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
- { name = "onnxruntime", marker = "(python_version == '3.12' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_version == '3.12' and platform_machine == 'aarch64' and platform_system == 'Linux' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64')) or (platform_machine == 'aarch64' and platform_system == 'Linux' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'))" },
- { name = "onnxruntime-gpu", marker = "platform_machine == 'x86_64' and platform_system == 'Linux' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64')" },
+ { name = "onnxruntime", marker = "platform_machine == 'aarch64' and platform_system == 'Linux'" },
+ { name = "onnxruntime-gpu", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" },
{ name = "psutil", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyaudio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pycapnp", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
@@ -1413,7 +1419,7 @@ dependencies = [
{ name = "setuptools", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "smbus2", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "sounddevice", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
- { name = "spidev", marker = "(python_version == '3.12' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_version == '3.12' and platform_machine == 'aarch64' and platform_system == 'Linux' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64')) or (platform_system == 'Linux' and (python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'))" },
+ { name = "spidev", marker = "platform_system == 'Linux'" },
{ name = "sympy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "tqdm", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "websocket-client", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
@@ -1422,50 +1428,49 @@ dependencies = [
[distribution.optional-dependencies]
dev = [
- { name = "av" },
- { name = "azure-identity" },
- { name = "azure-storage-blob" },
- { name = "dictdiffer" },
- { name = "flaky" },
- { name = "hexdump" },
- { name = "inputs" },
- { name = "lru-dict" },
- { name = "matplotlib" },
+ { name = "av", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "azure-identity", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "azure-storage-blob", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "dictdiffer", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "flaky", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "inputs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "lru-dict", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "matplotlib", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "metadrive-simulator", marker = "platform_machine != 'aarch64'" },
- { name = "parameterized" },
- { name = "pyautogui" },
+ { name = "parameterized", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyautogui", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyopencl", marker = "platform_machine != 'aarch64'" },
- { name = "pyprof2calltree" },
+ { name = "pyprof2calltree", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyqt5", marker = "platform_machine == 'x86_64'" },
{ name = "pytools", marker = "platform_machine != 'aarch64'" },
- { name = "pywinctl" },
- { name = "rerun-sdk" },
- { name = "tabulate" },
- { name = "types-requests" },
- { name = "types-tabulate" },
+ { name = "pywinctl", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "rerun-sdk", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "tabulate", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "types-requests", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "types-tabulate", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
docs = [
- { name = "jinja2" },
- { name = "mkdocs" },
- { name = "natsort" },
+ { name = "jinja2", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "mkdocs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "natsort", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
testing = [
- { name = "coverage" },
- { name = "hypothesis" },
- { name = "import-linter" },
- { name = "mypy" },
- { name = "pre-commit" },
- { name = "pytest" },
- { name = "pytest-asyncio" },
- { name = "pytest-cov" },
- { name = "pytest-cpp" },
- { name = "pytest-mock" },
- { name = "pytest-randomly" },
- { name = "pytest-repeat" },
- { name = "pytest-subtests" },
- { name = "pytest-timeout" },
- { name = "pytest-xdist" },
- { name = "ruff" },
+ { name = "coverage", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "hypothesis", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "import-linter", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "mypy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pre-commit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-asyncio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-cov", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-cpp", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-mock", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-randomly", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-repeat", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-subtests", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-timeout", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest-xdist", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "ruff", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
[[distribution]]
@@ -1500,8 +1505,8 @@ name = "panda3d-gltf"
version = "0.13"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "panda3d" },
- { name = "panda3d-simplepbr" },
+ { name = "panda3d", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "panda3d-simplepbr", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/07/7f/9f18fc3fa843a080acb891af6bcc12262e7bdf1d194a530f7042bebfc81f/panda3d-gltf-0.13.tar.gz", hash = "sha256:d06d373bdd91cf530909b669f43080e599463bbf6d3ef00c3558bad6c6b19675", size = 25573 }
wheels = [
@@ -1513,8 +1518,8 @@ name = "panda3d-simplepbr"
version = "0.12.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "panda3d" },
- { name = "typing-extensions" },
+ { name = "panda3d", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b1/af/505608eef09d7f9b822e69dc7631cd14102650b8fe1b6f60d9562d2788d9/panda3d-simplepbr-0.12.0.tar.gz", hash = "sha256:c71d490afeeb3a90455dcfde1d30c41f321a38742a97d18834e5c31016331ed5", size = 1929980 }
wheels = [
@@ -1643,11 +1648,11 @@ name = "pre-commit"
version = "3.8.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cfgv" },
- { name = "identify" },
- { name = "nodeenv" },
- { name = "pyyaml" },
- { name = "virtualenv" },
+ { name = "cfgv", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "identify", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "nodeenv", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyyaml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "virtualenv", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/64/10/97ee2fa54dff1e9da9badbc5e35d0bbaef0776271ea5907eccf64140f72f/pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af", size = 177815 }
wheels = [
@@ -1696,7 +1701,7 @@ name = "pyarrow"
version = "17.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/27/4e/ea6d43f324169f8aec0e57569443a38bab4b398d09769ca64f7b4d467de3/pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28", size = 1112479 }
wheels = [
@@ -1733,14 +1738,14 @@ name = "pyautogui"
version = "0.9.54"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "mouseinfo" },
- { name = "pygetwindow" },
- { name = "pymsgbox" },
+ { name = "mouseinfo", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pygetwindow", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pymsgbox", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-core", marker = "platform_system == 'Darwin'" },
{ name = "pyobjc-framework-quartz", marker = "platform_system == 'Darwin'" },
- { name = "pyscreeze" },
+ { name = "pyscreeze", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "python3-xlib", marker = "platform_system == 'Linux'" },
- { name = "pytweening" },
+ { name = "pytweening", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/65/ff/cdae0a8c2118a0de74b6cf4cbcdcaf8fd25857e6c3f205ce4b1794b27814/PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2", size = 61236 }
@@ -1814,7 +1819,7 @@ name = "pyee"
version = "11.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f7/22/b4c7f3d9579204a014c4eda0e019e6bfe56af52a96cacc82004b60eec079/pyee-11.1.0.tar.gz", hash = "sha256:b53af98f6990c810edd9b56b87791021a8f54fd13db4edd1142438d44ba2263f", size = 29806 }
wheels = [
@@ -1848,7 +1853,7 @@ name = "pygetwindow"
version = "0.0.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyrect" },
+ { name = "pyrect", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e1/70/c7a4f46dbf06048c6d57d9489b8e0f9c4c3d36b7479f03c5ca97eaa2541d/PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688", size = 9699 }
@@ -1872,7 +1877,7 @@ wheels = [
[distribution.optional-dependencies]
crypto = [
- { name = "cryptography" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
[[distribution]]
@@ -1880,7 +1885,7 @@ name = "pylibsrtp"
version = "0.10.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cffi" },
+ { name = "cffi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6b/ae/c95199144eed954976223bdce3f94564eb6c43567111aff8048a26a429bd/pylibsrtp-0.10.0.tar.gz", hash = "sha256:d8001912d7f51bd05b4ea3551747930631777fd37892cf3bfe0e541a742e699f", size = 10557 }
wheels = [
@@ -1902,7 +1907,7 @@ dependencies = [
{ name = "pyobjc", marker = "sys_platform == 'darwin'" },
{ name = "python-xlib", marker = "sys_platform == 'linux'" },
{ name = "pywin32", marker = "sys_platform == 'win32'" },
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/2d/13/076a20da28b82be281f7e43e16d9da0f545090f5d14b2125699232b9feba/PyMonCtl-0.92-py3-none-any.whl", hash = "sha256:2495d8dab78f9a7dbce37e74543e60b8bd404a35c3108935697dda7768611b5a", size = 45945 },
@@ -1919,20 +1924,20 @@ name = "pyobjc"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-accessibility", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-accounts", marker = "platform_release >= '12.0'" },
- { name = "pyobjc-framework-addressbook" },
+ { name = "pyobjc-framework-addressbook", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-adservices", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-adsupport", marker = "platform_release >= '18.0'" },
- { name = "pyobjc-framework-applescriptkit" },
+ { name = "pyobjc-framework-applescriptkit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-applescriptobjc", marker = "platform_release >= '10.0'" },
- { name = "pyobjc-framework-applicationservices" },
+ { name = "pyobjc-framework-applicationservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-apptrackingtransparency", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-audiovideobridging", marker = "platform_release >= '12.0'" },
{ name = "pyobjc-framework-authenticationservices", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-automaticassessmentconfiguration", marker = "platform_release >= '19.0'" },
- { name = "pyobjc-framework-automator" },
+ { name = "pyobjc-framework-automator", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-avfoundation", marker = "platform_release >= '11.0'" },
{ name = "pyobjc-framework-avkit", marker = "platform_release >= '13.0'" },
{ name = "pyobjc-framework-avrouting", marker = "platform_release >= '22.0'" },
@@ -1941,40 +1946,40 @@ dependencies = [
{ name = "pyobjc-framework-businesschat", marker = "platform_release >= '18.0'" },
{ name = "pyobjc-framework-calendarstore", marker = "platform_release >= '9.0'" },
{ name = "pyobjc-framework-callkit", marker = "platform_release >= '20.0'" },
- { name = "pyobjc-framework-cfnetwork" },
+ { name = "pyobjc-framework-cfnetwork", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-cinematic", marker = "platform_release >= '23.0'" },
{ name = "pyobjc-framework-classkit", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-cloudkit", marker = "platform_release >= '14.0'" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-collaboration", marker = "platform_release >= '9.0'" },
{ name = "pyobjc-framework-colorsync", marker = "platform_release >= '17.0'" },
{ name = "pyobjc-framework-contacts", marker = "platform_release >= '15.0'" },
{ name = "pyobjc-framework-contactsui", marker = "platform_release >= '15.0'" },
- { name = "pyobjc-framework-coreaudio" },
- { name = "pyobjc-framework-coreaudiokit" },
+ { name = "pyobjc-framework-coreaudio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreaudiokit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-corebluetooth", marker = "platform_release >= '14.0'" },
- { name = "pyobjc-framework-coredata" },
+ { name = "pyobjc-framework-coredata", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-corehaptics", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-corelocation", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-coremedia", marker = "platform_release >= '11.0'" },
{ name = "pyobjc-framework-coremediaio", marker = "platform_release >= '11.0'" },
- { name = "pyobjc-framework-coremidi" },
+ { name = "pyobjc-framework-coremidi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-coreml", marker = "platform_release >= '17.0'" },
{ name = "pyobjc-framework-coremotion", marker = "platform_release >= '19.0'" },
- { name = "pyobjc-framework-coreservices" },
+ { name = "pyobjc-framework-coreservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-corespotlight", marker = "platform_release >= '17.0'" },
- { name = "pyobjc-framework-coretext" },
+ { name = "pyobjc-framework-coretext", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-corewlan", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-cryptotokenkit", marker = "platform_release >= '14.0'" },
{ name = "pyobjc-framework-datadetection", marker = "platform_release >= '21.0'" },
{ name = "pyobjc-framework-devicecheck", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-dictionaryservices", marker = "platform_release >= '9.0'" },
- { name = "pyobjc-framework-discrecording" },
- { name = "pyobjc-framework-discrecordingui" },
- { name = "pyobjc-framework-diskarbitration" },
- { name = "pyobjc-framework-dvdplayback" },
+ { name = "pyobjc-framework-discrecording", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-discrecordingui", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-diskarbitration", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-dvdplayback", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-eventkit", marker = "platform_release >= '12.0'" },
- { name = "pyobjc-framework-exceptionhandling" },
+ { name = "pyobjc-framework-exceptionhandling", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-executionpolicy", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-extensionkit", marker = "platform_release >= '22.0'" },
{ name = "pyobjc-framework-externalaccessory", marker = "platform_release >= '17.0'" },
@@ -1989,17 +1994,17 @@ dependencies = [
{ name = "pyobjc-framework-healthkit", marker = "platform_release >= '22.0'" },
{ name = "pyobjc-framework-imagecapturecore", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-inputmethodkit", marker = "platform_release >= '9.0'" },
- { name = "pyobjc-framework-installerplugins" },
+ { name = "pyobjc-framework-installerplugins", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-instantmessage", marker = "platform_release >= '9.0'" },
{ name = "pyobjc-framework-intents", marker = "platform_release >= '16.0'" },
{ name = "pyobjc-framework-intentsui", marker = "platform_release >= '21.0'" },
- { name = "pyobjc-framework-iobluetooth" },
- { name = "pyobjc-framework-iobluetoothui" },
+ { name = "pyobjc-framework-iobluetooth", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-iobluetoothui", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-iosurface", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-ituneslibrary", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-kernelmanagement", marker = "platform_release >= '20.0'" },
- { name = "pyobjc-framework-latentsemanticmapping" },
- { name = "pyobjc-framework-launchservices" },
+ { name = "pyobjc-framework-latentsemanticmapping", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-launchservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-libdispatch", marker = "platform_release >= '12.0'" },
{ name = "pyobjc-framework-libxpc", marker = "platform_release >= '12.0'" },
{ name = "pyobjc-framework-linkpresentation", marker = "platform_release >= '19.0'" },
@@ -2026,30 +2031,30 @@ dependencies = [
{ name = "pyobjc-framework-networkextension", marker = "platform_release >= '15.0'" },
{ name = "pyobjc-framework-notificationcenter", marker = "platform_release >= '14.0'" },
{ name = "pyobjc-framework-opendirectory", marker = "platform_release >= '10.0'" },
- { name = "pyobjc-framework-osakit" },
+ { name = "pyobjc-framework-osakit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-oslog", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-passkit", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-pencilkit", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-phase", marker = "platform_release >= '21.0'" },
{ name = "pyobjc-framework-photos", marker = "platform_release >= '15.0'" },
{ name = "pyobjc-framework-photosui", marker = "platform_release >= '15.0'" },
- { name = "pyobjc-framework-preferencepanes" },
+ { name = "pyobjc-framework-preferencepanes", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-pubsub", marker = "platform_release >= '9.0' and platform_release < '18.0'" },
{ name = "pyobjc-framework-pushkit", marker = "platform_release >= '19.0'" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-quicklookthumbnailing", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-replaykit", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-safariservices", marker = "platform_release >= '16.0'" },
{ name = "pyobjc-framework-safetykit", marker = "platform_release >= '22.0'" },
{ name = "pyobjc-framework-scenekit", marker = "platform_release >= '11.0'" },
{ name = "pyobjc-framework-screencapturekit", marker = "platform_release >= '21.4'" },
- { name = "pyobjc-framework-screensaver" },
+ { name = "pyobjc-framework-screensaver", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-screentime", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-scriptingbridge", marker = "platform_release >= '9.0'" },
- { name = "pyobjc-framework-searchkit" },
- { name = "pyobjc-framework-security" },
- { name = "pyobjc-framework-securityfoundation" },
- { name = "pyobjc-framework-securityinterface" },
+ { name = "pyobjc-framework-searchkit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-security", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-securityfoundation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-securityinterface", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-sensitivecontentanalysis", marker = "platform_release >= '23.0'" },
{ name = "pyobjc-framework-servicemanagement", marker = "platform_release >= '10.0'" },
{ name = "pyobjc-framework-sharedwithyou", marker = "platform_release >= '22.0'" },
@@ -2061,8 +2066,8 @@ dependencies = [
{ name = "pyobjc-framework-spritekit", marker = "platform_release >= '13.0'" },
{ name = "pyobjc-framework-storekit", marker = "platform_release >= '11.0'" },
{ name = "pyobjc-framework-symbols", marker = "platform_release >= '23.0'" },
- { name = "pyobjc-framework-syncservices" },
- { name = "pyobjc-framework-systemconfiguration" },
+ { name = "pyobjc-framework-syncservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-systemconfiguration", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc-framework-systemextensions", marker = "platform_release >= '19.0'" },
{ name = "pyobjc-framework-threadnetwork", marker = "platform_release >= '22.0'" },
{ name = "pyobjc-framework-uniformtypeidentifiers", marker = "platform_release >= '20.0'" },
@@ -2072,7 +2077,7 @@ dependencies = [
{ name = "pyobjc-framework-videotoolbox", marker = "platform_release >= '12.0'" },
{ name = "pyobjc-framework-virtualization", marker = "platform_release >= '20.0'" },
{ name = "pyobjc-framework-vision", marker = "platform_release >= '17.0'" },
- { name = "pyobjc-framework-webkit" },
+ { name = "pyobjc-framework-webkit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e0/20/722e33f62631370c1475d773cadf4290d3c6f3a0e9d025fa6e2528270eaa/pyobjc-10.3.1.tar.gz", hash = "sha256:476dd5c72394e4cfcdac6dfd756839011a0159353247f45e3e07cc0b3536c9d4", size = 10975 }
wheels = [
@@ -2095,9 +2100,9 @@ name = "pyobjc-framework-accessibility"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/24/20/18a45998ae8bf9ce532a29f8eaebdaa7f15a7f77b3c34a8304714b393166/pyobjc_framework_accessibility-10.3.1.tar.gz", hash = "sha256:c973306417441e6bed5f9be6154e6399aa7f38fa9b6bcf3368fa42d92ef3030b", size = 29349 }
wheels = [
@@ -2112,8 +2117,8 @@ name = "pyobjc-framework-accounts"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cf/be/a4e4eeebfa140f0e00fe2fb882802cc4a5fa7f12c7fea01e35314fcf276c/pyobjc_framework_accounts-10.3.1.tar.gz", hash = "sha256:3d55738e7b3290af8cd4993fd2b670242a952deb995a69911be2a1be4c509a86", size = 16180 }
wheels = [
@@ -2125,8 +2130,8 @@ name = "pyobjc-framework-addressbook"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/21/0a/68769f71cbf9f46070059def94a5c7b0b218626652d7aa589e15f4e8b876/pyobjc_framework_addressbook-10.3.1.tar.gz", hash = "sha256:cde99b855c39b56ca52479b0a1e2daa3ef5de12cebfe780c3c802a5f59a484cc", size = 84696 }
wheels = [
@@ -2141,8 +2146,8 @@ name = "pyobjc-framework-adservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ab/9b/eaeb7c8f30899979113b91d8317efd30743d335bdaaa8fb88434e7bf7616/pyobjc_framework_adservices-10.3.1.tar.gz", hash = "sha256:28123eb111d023f708e1d86f5f3f76bd4f6bb0d932466863f84b3e322b11537a", size = 11838 }
wheels = [
@@ -2154,8 +2159,8 @@ name = "pyobjc-framework-adsupport"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/87/cf/9b40ef87f1315858e3dce9f807b359e43a6183616a6a8d2caab533d49a3e/pyobjc_framework_adsupport-10.3.1.tar.gz", hash = "sha256:ba85a00cf20c42501d8083092f7ca0fcd1e616b1725e6512e75bcb60a6d58528", size = 11991 }
wheels = [
@@ -2167,8 +2172,8 @@ name = "pyobjc-framework-applescriptkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5c/c4/42e37476f31dddecb3d7b83b076d5e94b754837e2326b0218227b20f96ec/pyobjc_framework_applescriptkit-10.3.1.tar.gz", hash = "sha256:add2e63598b699666bcf00ac59f6f1046266df1665bec71b142cd21b89037064", size = 11779 }
wheels = [
@@ -2180,8 +2185,8 @@ name = "pyobjc-framework-applescriptobjc"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/80/9e/db9d93764db336ed53da548cd7b52b6fbd7d493101b801b164f5c1f5fce8/pyobjc_framework_applescriptobjc-10.3.1.tar.gz", hash = "sha256:a87101d86b08e06e2c0e51630ac76d4c70f01cf1ed7af281f3138e63146e279b", size = 11797 }
wheels = [
@@ -2193,10 +2198,10 @@ name = "pyobjc-framework-applicationservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coretext" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coretext", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/a6/3704b63c6e844739e3b7e324d1268fb6f7cb485550267719660779266c60/pyobjc_framework_applicationservices-10.3.1.tar.gz", hash = "sha256:f27cb64aa4d129ce671fd42638c985eb2a56d544214a95fe3214a007eacc4790", size = 182738 }
wheels = [
@@ -2210,8 +2215,8 @@ name = "pyobjc-framework-apptrackingtransparency"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/75/63/b7039473d92211938645c44069b2e8bc65eefc229a3aac1ff8ccf0f13415/pyobjc_framework_apptrackingtransparency-10.3.1.tar.gz", hash = "sha256:2e381db5f7d3985207b5ff2975e41bf0f9147080345b2e1b4b242f8799290d04", size = 12547 }
wheels = [
@@ -2223,8 +2228,8 @@ name = "pyobjc-framework-audiovideobridging"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f9/f8/437666f24f295986ad9ea77a694f7db98889a8367fad46d93b84ae028e28/pyobjc_framework_audiovideobridging-10.3.1.tar.gz", hash = "sha256:b2c1d5977a92915f6af2203e3b4c9b8a8392bc51e0fc13ccb393589419387119", size = 59209 }
wheels = [
@@ -2238,8 +2243,8 @@ name = "pyobjc-framework-authenticationservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/35/3b/12082a13266fed356222a5c6c3eaf6ddcf21099f7a5b76b3fff58568042a/pyobjc_framework_authenticationservices-10.3.1.tar.gz", hash = "sha256:0ac834f4a5cbe3cf20acd4f6a96df77bc643a1ae248e394d06964db9fe0d6310", size = 86405 }
wheels = [
@@ -2254,8 +2259,8 @@ name = "pyobjc-framework-automaticassessmentconfiguration"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/67/0d/19f8aee86e91da5a9f6954870f21d839b835a20e84eb2221b839797be705/pyobjc_framework_automaticassessmentconfiguration-10.3.1.tar.gz", hash = "sha256:f7846d04493e90eddbacfb7cffebc11b3f76f0800d3dc2bec39441732a20ac56", size = 22477 }
wheels = [
@@ -2270,8 +2275,8 @@ name = "pyobjc-framework-automator"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/88/ca/fe39648043bf7ab2e5f09707cca9254277555c1a09973ade71fc029f7dff/pyobjc_framework_automator-10.3.1.tar.gz", hash = "sha256:330042475479f054ac98abd568b523fc0165c39eeefffc23bd65d35780939316", size = 195097 }
wheels = [
@@ -2286,11 +2291,11 @@ name = "pyobjc-framework-avfoundation"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coreaudio" },
- { name = "pyobjc-framework-coremedia" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreaudio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5b/4f/0f509c925c28d4b0ea709ccb9fd9a229c6552187f7506aa1e583d66cf658/pyobjc_framework_avfoundation-10.3.1.tar.gz", hash = "sha256:2f94bee3a4217b46d9416cad066e4f357bf0f344079c328736114451ae19ae94", size = 695146 }
wheels = [
@@ -2305,9 +2310,9 @@ name = "pyobjc-framework-avkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b5/de/7de605cea8176d69a41503dd544c0af02760c4518be3049b877563cc0c36/pyobjc_framework_avkit-10.3.1.tar.gz", hash = "sha256:97ca35b5f0cec98f5c8521fedb8537bb23d82739b7102e4ac732d3c3944c8ccc", size = 38986 }
wheels = [
@@ -2322,8 +2327,8 @@ name = "pyobjc-framework-avrouting"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/d5/b3012c90b18722b9d8e27f6a570ac534da89e4902bf5805f0bb39e340891/pyobjc_framework_avrouting-10.3.1.tar.gz", hash = "sha256:7026059b24daf8e1da05d7867f450e82abe412fe5c438faf9344f46e3b83da39", size = 18663 }
wheels = [
@@ -2338,8 +2343,8 @@ name = "pyobjc-framework-backgroundassets"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bb/be/6a0039ac75e7d9b84f7250d2301e0fe6529c0db6c137e398e31d04f65629/pyobjc_framework_backgroundassets-10.3.1.tar.gz", hash = "sha256:5e1198f81db6f30ead2a55e8ea39264f9fce83dcf8e31a68e5f0ea08c5cfe9b5", size = 21762 }
wheels = [
@@ -2354,11 +2359,11 @@ name = "pyobjc-framework-browserenginekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coreaudio" },
- { name = "pyobjc-framework-coremedia" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreaudio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/48/09/61f1688824a500f74e4fee94cec3ec3bef87e58a5205026761e4d292f027/pyobjc_framework_browserenginekit-10.3.1.tar.gz", hash = "sha256:0f6ea100bcf06f2b3f915dab27cf2f038698b39510fb47d3769f72ff62c1e80b", size = 21016 }
wheels = [
@@ -2373,8 +2378,8 @@ name = "pyobjc-framework-businesschat"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a5/19/7414a07489dbeef3b1bd40845cb9bd0e035062da3879ca20fb01a7901302/pyobjc_framework_businesschat-10.3.1.tar.gz", hash = "sha256:53e52981f9da336fcaf6783e82509e06faf8868931213ac70e6bd7395a5859a4", size = 12088 }
wheels = [
@@ -2386,8 +2391,8 @@ name = "pyobjc-framework-calendarstore"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/10/85/c4bb713e7e4d3f197ac975f5425ecf5469c1ea91d7b80d32eb4437b004f4/pyobjc_framework_calendarstore-10.3.1.tar.gz", hash = "sha256:21f627b0afb9a667794b451dd3a03f12ea3f74358dc5977c33b8ecc8b9736c27", size = 62920 }
wheels = [
@@ -2399,8 +2404,8 @@ name = "pyobjc-framework-callkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d3/b2/be5cf42e2b288073fa5d693d869ac2fbfb091a34e8edd5aa67f50fa6982f/pyobjc_framework_callkit-10.3.1.tar.gz", hash = "sha256:350390023e9ac98ff6c91b1f51da2489eef2e23aa649d0f63c13cf1d8be1e0df", size = 31907 }
wheels = [
@@ -2412,8 +2417,8 @@ name = "pyobjc-framework-cfnetwork"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/fb/e6/e1d6b0d0b21ba5241712389aea46dba4ee9d5c955738076f5ec9d75b5f29/pyobjc_framework_cfnetwork-10.3.1.tar.gz", hash = "sha256:0e4c51a75dbf4e2b1c0d4ee60a363f9d31d682d2dd2f6b74aded769d2d883aa8", size = 66882 }
wheels = [
@@ -2428,11 +2433,11 @@ name = "pyobjc-framework-cinematic"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-avfoundation" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coremedia" },
- { name = "pyobjc-framework-metal" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-avfoundation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-metal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2a/83/90a5f31fd89bfa030c812c869ab69cf0e333e13ee2e3c1e4877ed883d6d3/pyobjc_framework_cinematic-10.3.1.tar.gz", hash = "sha256:7edaaa7e325aeb39cd0c33329c25783dd54af294229884556daad36d1d1b9d72", size = 19342 }
wheels = [
@@ -2444,8 +2449,8 @@ name = "pyobjc-framework-classkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a9/b8/cc33b734656f6617394b410a9805d05511aecdb665591936acfd66060dfd/pyobjc_framework_classkit-10.3.1.tar.gz", hash = "sha256:e15700d32007bf77c5c740bc9931c864bb7739cdfcd2b0595377c3ed35ecfe25", size = 32503 }
wheels = [
@@ -2460,11 +2465,11 @@ name = "pyobjc-framework-cloudkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-accounts" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coredata" },
- { name = "pyobjc-framework-corelocation" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-accounts", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coredata", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-corelocation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/84/2d/22c51450dddeb9d851529f90ebd4f15fc12a4f3c9b2ceae4df8841fde64e/pyobjc_framework_cloudkit-10.3.1.tar.gz", hash = "sha256:4c7db72c2bb2fcf63365df91bf2eefa83cee4004606b901e1da89b75da652309", size = 98916 }
wheels = [
@@ -2476,7 +2481,7 @@ name = "pyobjc-framework-cocoa"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a7/6c/b62e31e6e00f24e70b62f680e35a0d663ba14ff7601ae591b5d20e251161/pyobjc_framework_cocoa-10.3.1.tar.gz", hash = "sha256:1cf20714daaa986b488fb62d69713049f635c9d41a60c8da97d835710445281a", size = 4941542 }
wheels = [
@@ -2490,8 +2495,8 @@ name = "pyobjc-framework-collaboration"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0d/cd/8bc8e3c4cf93b1044d5e582904ec5c55656f4385bd25f86f924b4ed25ae3/pyobjc_framework_collaboration-10.3.1.tar.gz", hash = "sha256:bbca3de3679b058cbb89ad911e3bdfe491a02b4fa219d5f9219c022774ba237a", size = 15830 }
wheels = [
@@ -2503,8 +2508,8 @@ name = "pyobjc-framework-colorsync"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/43/16/b5cf65d3cdae2127a868e06b21e9c59e2ef531e65c4ee58afcaef2c4fe69/pyobjc_framework_colorsync-10.3.1.tar.gz", hash = "sha256:180960ed6f76084b35073eff49fcca41a8fa883c3236949a40f75daa28ee8f94", size = 31940 }
wheels = [
@@ -2516,8 +2521,8 @@ name = "pyobjc-framework-contacts"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/eb/a9/112ee53259220322f6729c446fd7b779d3bae7b24804bd342f51764dc6bc/pyobjc_framework_contacts-10.3.1.tar.gz", hash = "sha256:7120b5593a20e936cb5589b93ef7fd5558c86bd6ec8003f427afb87c04bbea20", size = 68431 }
wheels = [
@@ -2532,9 +2537,9 @@ name = "pyobjc-framework-contactsui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-contacts" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-contacts", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ad/17/ce9b512e29ca92eb519328d0fc1e12b6b048ac379447c7f4f2be4266599e/pyobjc_framework_contactsui-10.3.1.tar.gz", hash = "sha256:51601501d5bc94c59ad458c7bb1d1994c497b373307dad8bd2ea2aa348f66c4a", size = 17921 }
wheels = [
@@ -2549,8 +2554,8 @@ name = "pyobjc-framework-coreaudio"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c5/fe/39351e6a58f4a9b1fce5a5e982830612277233084fe72b1d84b4de890f3b/pyobjc_framework_coreaudio-10.3.1.tar.gz", hash = "sha256:c81c709bf955aea474a4de380b187f3c2e56c864ca7de520b08362b73070c795", size = 125676 }
wheels = [
@@ -2564,9 +2569,9 @@ name = "pyobjc-framework-coreaudiokit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coreaudio" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreaudio", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1f/4e/79a20d1ab459467de5695f96057e034d6457b061da68951b41af211b1fe3/pyobjc_framework_coreaudiokit-10.3.1.tar.gz", hash = "sha256:81f35d5dc45cda043e01f0ca045311f4aebc36c51cb71e859b30ea0edf90b3db", size = 19761 }
wheels = [
@@ -2581,8 +2586,8 @@ name = "pyobjc-framework-corebluetooth"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f7/69/89afd7747f42d2eb1e8f4b7f2ba2739d98ccf36f6b5c72474802962494de/pyobjc_framework_corebluetooth-10.3.1.tar.gz", hash = "sha256:dc5d326ab5541b8b68e7e920aa8363851e779cb8c33842f6cfeef4674cc62f94", size = 50210 }
wheels = [
@@ -2597,8 +2602,8 @@ name = "pyobjc-framework-coredata"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/17/1929fabc88d265373ce2b5e5c3136aae03c30ee42df66bd0810fa71328da/pyobjc_framework_coredata-10.3.1.tar.gz", hash = "sha256:8a75094942c8f3ddc1bcbde920c87658d7bb4c7534a4652e60db42d17f4b4a4a", size = 229850 }
wheels = [
@@ -2613,8 +2618,8 @@ name = "pyobjc-framework-corehaptics"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6b/04/ef530d0c30cf81a772ddee64cbfeb7cafd9428d87df96bbc6eb41b77d80f/pyobjc_framework_corehaptics-10.3.1.tar.gz", hash = "sha256:5a7cc117c0b64428e1f08dc9c8b76dbc5d8f61f80dc41e911d11ddee4e0e2059", size = 36854 }
wheels = [
@@ -2626,8 +2631,8 @@ name = "pyobjc-framework-corelocation"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/06/35/8cf7ab8f9b7be5b81deac4d74fdc89607a3eeb901f785cc7d50332eaa275/pyobjc_framework_corelocation-10.3.1.tar.gz", hash = "sha256:8ae54e5bd4c07f7224639d815f7a6537fadee17c11cb35dd99c2804bac1825ab", size = 89219 }
wheels = [
@@ -2642,8 +2647,8 @@ name = "pyobjc-framework-coremedia"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/68/9f/5e500c16472053db65dc917b7ea9cdc0fa8fde140ea4c38500a4c341b0a4/pyobjc_framework_coremedia-10.3.1.tar.gz", hash = "sha256:bc3e0cddf5f546b5d8407d8f46b203f1bd4396ad5dbfdc0d064a560b3fe31221", size = 180773 }
wheels = [
@@ -2657,8 +2662,8 @@ name = "pyobjc-framework-coremediaio"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/08/67/1c22ff55baf5018d3ca4979f8c319e055ecff8b51ea91d53b8654503cc35/pyobjc_framework_coremediaio-10.3.1.tar.gz", hash = "sha256:5da3ed78475223dd3400fdb55fb97d543a248086f5cf8b77bf4aceac3df1513c", size = 88655 }
wheels = [
@@ -2673,8 +2678,8 @@ name = "pyobjc-framework-coremidi"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bf/9f/38d8668499e0c590e51b3f3091d972e09a1f45e4efba94373c22d23d2b88/pyobjc_framework_coremidi-10.3.1.tar.gz", hash = "sha256:818454b56edae082a3a4b4366a7e93b8bb54856be01ee21bb8527a22a4732efc", size = 78441 }
wheels = [
@@ -2689,8 +2694,8 @@ name = "pyobjc-framework-coreml"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5b/a2/08a73df17f344700f48444e3000ebdf0ca78765bf0816387de7392380255/pyobjc_framework_coreml-10.3.1.tar.gz", hash = "sha256:6b7091142cfaafee76f1a804329e7a4e3aeca921eea8644e9ceba4cc2751f705", size = 66750 }
wheels = [
@@ -2705,8 +2710,8 @@ name = "pyobjc-framework-coremotion"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6c/77/cef3cee6010e926754cc80faa455b5a7530d740f9b5a83a94fd4bd34484a/pyobjc_framework_coremotion-10.3.1.tar.gz", hash = "sha256:6ba61ffd360473b018702b9ae025eb16b8aaa45c6e533121522f26eef93a9f71", size = 54459 }
wheels = [
@@ -2720,9 +2725,9 @@ name = "pyobjc-framework-coreservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-fsevents" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-fsevents", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/18/c6/9214c4e64a22e92233f67f6518dc60269b30b317a169861f8cb8150adaef/pyobjc_framework_coreservices-10.3.1.tar.gz", hash = "sha256:2e46d008ee4ff586420175888c45f8eb0f002ed5b840c8f7893c560af01b2d72", size = 859909 }
wheels = [
@@ -2737,8 +2742,8 @@ name = "pyobjc-framework-corespotlight"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/9f/fa/e0ef8d255265a2aaa575244df3d629c46a4eda6c64a210a9faf62fd70772/pyobjc_framework_corespotlight-10.3.1.tar.gz", hash = "sha256:6b8ad243a65943d631434a9ff4696458cdd3d0cb631cfeb501a967fe29445c30", size = 69476 }
wheels = [
@@ -2753,9 +2758,9 @@ name = "pyobjc-framework-coretext"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/9e/9f/d363cb1548808f538d7ae267a9fcb999dfb5693056fdaa5bc93de089cfef/pyobjc_framework_coretext-10.3.1.tar.gz", hash = "sha256:b8fa2d5078ed774431ae64ba886156e319aec0b8c6cc23dabfd86778265b416f", size = 233428 }
wheels = [
@@ -2769,8 +2774,8 @@ name = "pyobjc-framework-corewlan"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/9f/b0/6e708d931e85db91de439c080d3af77422d7935b7527ce81888f8ff6ed8b/pyobjc_framework_corewlan-10.3.1.tar.gz", hash = "sha256:d340d976b5d072b917c6d3de130cb4e7a944ee0fdf4e1335b2aa6b1d4d6b4e14", size = 57781 }
wheels = [
@@ -2785,8 +2790,8 @@ name = "pyobjc-framework-cryptotokenkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/07/15/49981d93f8402c655cbda9181a55e0f5879715d3f6c344070ba41d2511f1/pyobjc_framework_cryptotokenkit-10.3.1.tar.gz", hash = "sha256:ef1c4a3b9bc5429eceda59724279428e1f8740df2c5a511d061b244113b6fd97", size = 48548 }
wheels = [
@@ -2801,8 +2806,8 @@ name = "pyobjc-framework-datadetection"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/28/9b/8b3a633ef4a215095bf1e008f4921bb9647a61a1f5b24e8ab94e89473df9/pyobjc_framework_datadetection-10.3.1.tar.gz", hash = "sha256:5394350cd7e7f40562dc0777f26dd9ddf4a595d20cb6e3cd601938e9490c963e", size = 12682 }
wheels = [
@@ -2814,8 +2819,8 @@ name = "pyobjc-framework-devicecheck"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/23/40/51f5e655f4d003227df3077151d20e8490e17e28043e0c4152cec9fcdfac/pyobjc_framework_devicecheck-10.3.1.tar.gz", hash = "sha256:7f6f95c84dc3d1f62aa07061f79b47d19463390d977e5afb444ef9fdd9177a9d", size = 13134 }
wheels = [
@@ -2827,8 +2832,8 @@ name = "pyobjc-framework-dictionaryservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-coreservices" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a9/ee/ecf4fc40acfdc71a42f6efb7de6cd12b43ee73b3a2397872145584157aef/pyobjc_framework_dictionaryservices-10.3.1.tar.gz", hash = "sha256:c9fb8ed1b92f63c6f568bcdbadf628baab1cb8bb4cd01dbd65424d59c236a552", size = 10131 }
wheels = [
@@ -2840,8 +2845,8 @@ name = "pyobjc-framework-discrecording"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e3/0a/07b7871e9bbfb59676be857046c8285549edaf285e8c1508b67db62ddf9c/pyobjc_framework_discrecording-10.3.1.tar.gz", hash = "sha256:47865c9a0d24366b6ede01d326d57404346c3d01e249f417bd2b0b3de00d6c54", size = 101624 }
wheels = [
@@ -2856,9 +2861,9 @@ name = "pyobjc-framework-discrecordingui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-discrecording" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-discrecording", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e6/5e/12669a09410b9707bd27ba93274cd9e817acc6d43ff358299974a52fa624/pyobjc_framework_discrecordingui-10.3.1.tar.gz", hash = "sha256:4b9c804a97c89001feddb58106cdc3e099e241314f7c4de062842d27b1318b68", size = 18181 }
wheels = [
@@ -2870,8 +2875,8 @@ name = "pyobjc-framework-diskarbitration"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4e/e8/9f1929c51bcfd78bde9763cc08200eb498528534664701730077beea31d3/pyobjc_framework_diskarbitration-10.3.1.tar.gz", hash = "sha256:0776318cb56f8e095066a880812c4fc5db2071687846e23a000a947a079f6c6c", size = 18667 }
wheels = [
@@ -2883,8 +2888,8 @@ name = "pyobjc-framework-dvdplayback"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/72/b6/7f7d140ce091b9813e11f1b980956e607b552ead399abed5a70662f721c0/pyobjc_framework_dvdplayback-10.3.1.tar.gz", hash = "sha256:1f7c22624dee9b1b54def15f12a3f7cacb28052cd864a845eb24b7f59de12257", size = 53047 }
wheels = [
@@ -2896,8 +2901,8 @@ name = "pyobjc-framework-eventkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ac/c4/995108bba1fb40eac108501038ae44c57099310982d1a6339b6a5fa47d82/pyobjc_framework_eventkit-10.3.1.tar.gz", hash = "sha256:3eef14ba439be1c5bc47da561ccea3941daba663577efac7a58e3031d27e056b", size = 64043 }
wheels = [
@@ -2909,8 +2914,8 @@ name = "pyobjc-framework-exceptionhandling"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/00/88/1328bdac98aa75de421ffea4e16f0b894e39b4ea6569b3a109b531798d20/pyobjc_framework_exceptionhandling-10.3.1.tar.gz", hash = "sha256:ff6208777739f8a886d0cbfe20692b41cc4e5e0607419c47d2c5d405b6b4c6ee", size = 17129 }
wheels = [
@@ -2922,8 +2927,8 @@ name = "pyobjc-framework-executionpolicy"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/54/8e/e5a3c06123a4ec3b845dac82450f4f1b4e5b80c0863881fb538f900762b0/pyobjc_framework_executionpolicy-10.3.1.tar.gz", hash = "sha256:cc066dc8378fc2a1a4e6129c4d09e2076dc9a5b09925f8dd959aad591cbf9a44", size = 12825 }
wheels = [
@@ -2935,8 +2940,8 @@ name = "pyobjc-framework-extensionkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e7/6a/2803c373283c66eb0d38f139aa1bfa7eb9dc909bc470856ae2308f064e39/pyobjc_framework_extensionkit-10.3.1.tar.gz", hash = "sha256:91946030195fa17c5248655b10786ea60b9aee7d83a4627ba56768600b4e7674", size = 17592 }
wheels = [
@@ -2951,8 +2956,8 @@ name = "pyobjc-framework-externalaccessory"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/db/51/61ed6de7d4950f3810e0b5f95cad1a225a1fff8eef13223ebcbc659a4888/pyobjc_framework_externalaccessory-10.3.1.tar.gz", hash = "sha256:3ba1a7242448126b4af0fb93963790d0066766bcba2770d935111093e87b7b83", size = 20735 }
wheels = [
@@ -2967,8 +2972,8 @@ name = "pyobjc-framework-fileprovider"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2e/69/c4ebc6738e8a3f5e0c9394791434813fa2656dbe2356fdf4c611a57e7391/pyobjc_framework_fileprovider-10.3.1.tar.gz", hash = "sha256:63a4160e6cbede0f682145f4303ed889bd9f3c9fccfecdc32636a8d95aeceeab", size = 63649 }
wheels = [
@@ -2982,8 +2987,8 @@ name = "pyobjc-framework-fileproviderui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-fileprovider" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-fileprovider", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bf/5c/b130db2b86ff41da6422cd9ed54959202052c0b7401992b467c6cc29ec16/pyobjc_framework_fileproviderui-10.3.1.tar.gz", hash = "sha256:2a3f3b9b81aff216df76bc72c8e8730d7ba7f3b2412720f68b722bae58f82797", size = 12546 }
wheels = [
@@ -2995,8 +3000,8 @@ name = "pyobjc-framework-findersync"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/67/70/0a2d490c88541912cab2d245093460190ddeed3bcde9faa3bc5e987c2247/pyobjc_framework_findersync-10.3.1.tar.gz", hash = "sha256:b4a08e0a87c54f62623038de1929fab018fe44fca5372a455bb524b9f90e9196", size = 14228 }
wheels = [
@@ -3008,8 +3013,8 @@ name = "pyobjc-framework-fsevents"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a6/fe/53eb4883293b4920544570feb1d8290e937df706ee063a26061f3aebfa72/pyobjc_framework_fsevents-10.3.1.tar.gz", hash = "sha256:6269fd8aa3f62d8a6312e316043aca6d7d792812bff09b617bbd6ca9f0f6e440", size = 27274 }
wheels = [
@@ -3024,8 +3029,8 @@ name = "pyobjc-framework-gamecenter"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/46/2f/82cea539bd5a3c764c7acb065face9d1176011f58643323fde30f05997cd/pyobjc_framework_gamecenter-10.3.1.tar.gz", hash = "sha256:221ae88ee69816b95861b1a0dc781c1c17775d38fcf0388327620535479b6a07", size = 30111 }
wheels = [
@@ -3040,8 +3045,8 @@ name = "pyobjc-framework-gamecontroller"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/49/6e/1ee46fe9870ce020529ce883c04291a7c7f43adad2b6fbc9b0c44d2549c0/pyobjc_framework_gamecontroller-10.3.1.tar.gz", hash = "sha256:f9f252b5fed5de2a8c7fdd2e302b6ed6e0b82015d7da75b28984c5ea5909345e", size = 94100 }
wheels = [
@@ -3056,9 +3061,9 @@ name = "pyobjc-framework-gamekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/84/aa/897e74e41c80f0eaec994c4b0852e680e5eb22868d3a4681b46f06cf4032/pyobjc_framework_gamekit-10.3.1.tar.gz", hash = "sha256:7d21a8f45c32ac94ce0e70b6c6fe72928fe75cb1a6bd6d7715e2bf39b291b70b", size = 137591 }
wheels = [
@@ -3073,9 +3078,9 @@ name = "pyobjc-framework-gameplaykit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-spritekit" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-spritekit", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/02/df/3a6e19a496dec873d26f255458a3e557f6e3aa004f04ca83f9de4e85e9e8/pyobjc_framework_gameplaykit-10.3.1.tar.gz", hash = "sha256:2035b81f7bc34b93636753cc3f9b06cd08171afc5c95bb2327a82fd3195f3c36", size = 55768 }
wheels = [
@@ -3090,8 +3095,8 @@ name = "pyobjc-framework-healthkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c0/68/fdda86963c5b3f86941623176acc2d7df03183ea9d3bbfff9088283d2bd2/pyobjc_framework_healthkit-10.3.1.tar.gz", hash = "sha256:45622fedb42bbd95dcc096248bbc41dacd857d9db120ff7310f74f3bad4b23e1", size = 113769 }
wheels = [
@@ -3106,8 +3111,8 @@ name = "pyobjc-framework-imagecapturecore"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2f/32/36b2b34e2ae902552854c1e5d24cb4d587875f4400791a30740213f57178/pyobjc_framework_imagecapturecore-10.3.1.tar.gz", hash = "sha256:9ce83c38b8ccee6b022faadb9cd7b8716119092cd41b6c2cabce3670101119bf", size = 81896 }
wheels = [
@@ -3122,8 +3127,8 @@ name = "pyobjc-framework-inputmethodkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3b/1b/28c9e10640e0b73dcd7b4693c9ee1fb5519443bd8fd5debb0066261a0abd/pyobjc_framework_inputmethodkit-10.3.1.tar.gz", hash = "sha256:637ba2da38da5f558443b4529b33bab276380336e977807347ee9dad81d42109", size = 24489 }
wheels = [
@@ -3138,8 +3143,8 @@ name = "pyobjc-framework-installerplugins"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a2/cd/a9594b8200b1460630d21af18c9fc38741ff748c5457bf5958c5599795c7/pyobjc_framework_installerplugins-10.3.1.tar.gz", hash = "sha256:280808bbce36090b59197756fdb56c19838845a5fc25966a435dbc5fc4ddbbf0", size = 26514 }
wheels = [
@@ -3151,9 +3156,9 @@ name = "pyobjc-framework-instantmessage"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c7/fc/51a0707b48507ca4963333452fd17119cc325bbbefdac460bd960f6a935e/pyobjc_framework_instantmessage-10.3.1.tar.gz", hash = "sha256:bb1560a2f92a2def179b6381c17d406331b7818fa0fd1ba98f09ed94415f8a7b", size = 32767 }
wheels = [
@@ -3165,8 +3170,8 @@ name = "pyobjc-framework-intents"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/64/dc/120a1891de4ea2c4c5fa382100ac9706dda75a64dd6185367ddc8d89710e/pyobjc_framework_intents-10.3.1.tar.gz", hash = "sha256:89f0ed49c515b75c8811d9f6771ac635e799dfaf11921172729f8e0857c8c0e9", size = 361884 }
wheels = [
@@ -3181,8 +3186,8 @@ name = "pyobjc-framework-intentsui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-intents" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-intents", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/df/51/3cff5de2db25fb516eba66480e90ceea293fc12d715d51a16ebb242c0893/pyobjc_framework_intentsui-10.3.1.tar.gz", hash = "sha256:68f42cabbd36889060d07b21f156f1dae78243d42b34c652448c687d07cbca62", size = 18822 }
wheels = [
@@ -3196,8 +3201,8 @@ name = "pyobjc-framework-iobluetooth"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e9/98/b6aade04f7e07de0e81f0312c19bbd21ea61986ab8158a0986aec6c5efd5/pyobjc_framework_iobluetooth-10.3.1.tar.gz", hash = "sha256:bca424889d7fdd5bcb728d312e91ee681e73c0c2ac16ba37068603d699043d39", size = 226060 }
wheels = [
@@ -3212,8 +3217,8 @@ name = "pyobjc-framework-iobluetoothui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-iobluetooth" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-iobluetooth", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d4/e2/3793269efe06505b1b4224ea395912c697896054bdc0bddcc3889796ceac/pyobjc_framework_iobluetoothui-10.3.1.tar.gz", hash = "sha256:6db82aeb360641b878f8ed73c2074db0425664d9411317b2e01962e0929fa29c", size = 19226 }
wheels = [
@@ -3225,8 +3230,8 @@ name = "pyobjc-framework-iosurface"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b1/45/8cc7def9b73ec0c3423b7c4878ee3e02fd27e72085574f4c5b7b284bebc5/pyobjc_framework_iosurface-10.3.1.tar.gz", hash = "sha256:94e4a109a94f0e365bd60ce68aab6ff166fef6f30a40f7682c76902f5fc3aa34", size = 19262 }
wheels = [
@@ -3238,8 +3243,8 @@ name = "pyobjc-framework-ituneslibrary"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/53/a8/63766d37cc93e2a92a53bb3b5dc769fed0ac27509bfb251cb94878792432/pyobjc_framework_ituneslibrary-10.3.1.tar.gz", hash = "sha256:3899f8555ae02f6441a711892cdc6537404215b3d5f8a7ea4594f7460c58c9b2", size = 40017 }
wheels = [
@@ -3251,8 +3256,8 @@ name = "pyobjc-framework-kernelmanagement"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2a/b2/0c894451b949023e00b76e17e46ce65dfa30e5005c5500958d6f90a20fcd/pyobjc_framework_kernelmanagement-10.3.1.tar.gz", hash = "sha256:04c41bc0d0ce014318acf9e333aba302092d2698ec408cbf0b022f3a507ecfa1", size = 11933 }
wheels = [
@@ -3264,8 +3269,8 @@ name = "pyobjc-framework-latentsemanticmapping"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6e/17/435b483033f21fa1d95132e93c0cedbf93567f00e6ffb579989e0c070f9c/pyobjc_framework_latentsemanticmapping-10.3.1.tar.gz", hash = "sha256:0bca94fd00f59f49874c8266bfacb09a7c56ad13b4d405c241421cef201f8943", size = 16630 }
wheels = [
@@ -3277,8 +3282,8 @@ name = "pyobjc-framework-launchservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-coreservices" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/34/dd/53ff73cc0fbf1ad21d3acdd387830f793541dd023150866853e4f00d8dc1/pyobjc_framework_launchservices-10.3.1.tar.gz", hash = "sha256:7f16af2acabca0c2953eb7333bfe652bf853bb9d9e59b771f9d228468bccdea3", size = 20012 }
wheels = [
@@ -3290,8 +3295,8 @@ name = "pyobjc-framework-libdispatch"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b7/37/1a7d9e5a04ab42aa8186f3493478c055601503ac7f8d58b8501d23db8b21/pyobjc_framework_libdispatch-10.3.1.tar.gz", hash = "sha256:f5c3475498cb32f54d75e21952670e4a32c8517fb2db2e90869f634edc942446", size = 44771 }
wheels = [
@@ -3305,8 +3310,8 @@ name = "pyobjc-framework-libxpc"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8e/9d/8a7eb8d3570f2f41fd265513655fbf28e2ab93155a0053f46277fd61b097/pyobjc_framework_libxpc-10.3.1.tar.gz", hash = "sha256:b3c9e9fd281b5610e3bef486e91570b0afa8ab8eb0c01c0baa5e2ec49ccb7329", size = 39868 }
wheels = [
@@ -3320,9 +3325,9 @@ name = "pyobjc-framework-linkpresentation"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b3/f2/8317cff954187875cc82dd8a08de69adbd1efb48451cd2b6836f347392db/pyobjc_framework_linkpresentation-10.3.1.tar.gz", hash = "sha256:535d452cc33d61074ba9bad7707d6c0a23d474fb045ed4322e5f87bfb0b7e865", size = 14174 }
wheels = [
@@ -3334,9 +3339,9 @@ name = "pyobjc-framework-localauthentication"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-security" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-security", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d7/a9/bb2c2c3171a600dad5c7db509cdeef5a1a3cd7a22266a515145ebd5497b0/pyobjc_framework_localauthentication-10.3.1.tar.gz", hash = "sha256:ad85411f1899a2ba89349df6a92db99fcaa80a4232a4934a1a176c60698d46b1", size = 26240 }
wheels = [
@@ -3348,9 +3353,9 @@ name = "pyobjc-framework-localauthenticationembeddedui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-localauthentication" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-localauthentication", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/00/36/ba89365d6bdbed5db435e0b4e2dc310a977dab5a306453c4f7ef8de745f2/pyobjc_framework_localauthenticationembeddedui-10.3.1.tar.gz", hash = "sha256:f915190f6106b9f9234750abf48f87445c364ccbca8f8dd565bba1b66ddd55a3", size = 13305 }
wheels = [
@@ -3362,8 +3367,8 @@ name = "pyobjc-framework-mailkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d3/1a/683f99e9af1966de9173c1696946ec52b7d45d346aee8a638d1104eade95/pyobjc_framework_mailkit-10.3.1.tar.gz", hash = "sha256:90ad82786ae01a275aeec842e73b1fef12d9f91a67edcde8ff6a145859dc9f92", size = 26043 }
wheels = [
@@ -3375,10 +3380,10 @@ name = "pyobjc-framework-mapkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-corelocation" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-corelocation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/53/f3/1f711e0311ddf3a838d1fe2ec1ab7c52cdb52d4a6144edcd2bd49becbe6c/pyobjc_framework_mapkit-10.3.1.tar.gz", hash = "sha256:f433228c404b9ef4a66e808995daccc1306f7123296317651078a6a734ac1ab0", size = 135465 }
wheels = [
@@ -3393,8 +3398,8 @@ name = "pyobjc-framework-mediaaccessibility"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c1/d9/e82531ed727311b54bbbeb9da0bec5c098b8cf8017d541fc77175f4bf322/pyobjc_framework_mediaaccessibility-10.3.1.tar.gz", hash = "sha256:c249e1eee636e77b5f00db3bf85174cb3e0cb53ca991a17e53a1f200377f4289", size = 16607 }
wheels = [
@@ -3406,9 +3411,9 @@ name = "pyobjc-framework-medialibrary"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/01/1c/c8355ad906e2051a3d73bef221ce559f417cd58e94dc5af1163bd3669c09/pyobjc_framework_medialibrary-10.3.1.tar.gz", hash = "sha256:703ffd0904fc86d4fbfbbd4952be43e91a6d477c53ce2868e4c18c3eb295f5c6", size = 17661 }
wheels = [
@@ -3420,8 +3425,8 @@ name = "pyobjc-framework-mediaplayer"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-avfoundation" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-avfoundation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/10/00/6d991d13624e8e9288ee289945737bd7e48cce6df7497ee25f2c39c4d173/pyobjc_framework_mediaplayer-10.3.1.tar.gz", hash = "sha256:97043df5ef89d4fbe217813e8f4ee1e226d8a43dee4eac00fff95e6b8a7772be", size = 77337 }
wheels = [
@@ -3433,8 +3438,8 @@ name = "pyobjc-framework-mediatoolbox"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a6/8e/a4abb578ad0207ef723fac1255738ea2a3fab3c5b0b0c49a3bb30463257f/pyobjc_framework_mediatoolbox-10.3.1.tar.gz", hash = "sha256:f141056dce0dc16ec21be596fea58acb4a668045f53e12a0f250990d936b44f2", size = 21516 }
wheels = [
@@ -3449,8 +3454,8 @@ name = "pyobjc-framework-metal"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8c/5e/2df5fdb85a5753ebe6e1a1b1905da565a408a4f090f7c1d89f3a3143d18b/pyobjc_framework_metal-10.3.1.tar.gz", hash = "sha256:495307db0bfd2063f28b7c8fa350af71afcfbf5f5f2186a6a751b4cb2ef46a1a", size = 299751 }
wheels = [
@@ -3465,8 +3470,8 @@ name = "pyobjc-framework-metalfx"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-metal" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-metal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5f/b0/a479ef7219d4176806e6f49718da59feb1dc222605f45f5e06777a6c6a3c/pyobjc_framework_metalfx-10.3.1.tar.gz", hash = "sha256:3ea0f259397523a84a320b3925dcaaa5c039494accc3cb412b63e6f7f66f9513", size = 21547 }
wheels = [
@@ -3481,9 +3486,9 @@ name = "pyobjc-framework-metalkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-metal" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-metal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f0/6d/c5a782ee9def0feda16cf41c7326680f306293f4446185f3b0040e3e956c/pyobjc_framework_metalkit-10.3.1.tar.gz", hash = "sha256:905eaad9dce29082efd5cc56195337d2e8bff86ccfad36ec5127f818155ec038", size = 38269 }
wheels = [
@@ -3498,8 +3503,8 @@ name = "pyobjc-framework-metalperformanceshaders"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-metal" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-metal", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4a/f5/d6b25e063691ab304ed39b3d8121262f661b2e56630bf3b07476134e08a4/pyobjc_framework_metalperformanceshaders-10.3.1.tar.gz", hash = "sha256:1a9e91dc9e748834c95b7a596b943203761f6533352631c7abe612f804b23d50", size = 215419 }
wheels = [
@@ -3514,8 +3519,8 @@ name = "pyobjc-framework-metalperformanceshadersgraph"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-metalperformanceshaders" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-metalperformanceshaders", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e6/0c/c00edcdc19f692d0d261d2a0c43f296f240c236704666e287e60dea23edd/pyobjc_framework_metalperformanceshadersgraph-10.3.1.tar.gz", hash = "sha256:4bf2045036f97dcaabbf16ee8527f1787c7e9366611b9b9ed4bfabc81c19343f", size = 81585 }
wheels = [
@@ -3527,8 +3532,8 @@ name = "pyobjc-framework-metrickit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b2/71/82f14e24708d44eb0c53b4fc57224bf5db8fa268c0632974abd6ea4b2e7f/pyobjc_framework_metrickit-10.3.1.tar.gz", hash = "sha256:f0b96fe9da0e26759f38d9e4cdf7d9c8be9c6ba35403bc8e675183a6f81dd0b3", size = 31749 }
wheels = [
@@ -3542,8 +3547,8 @@ name = "pyobjc-framework-mlcompute"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/db/9a/405b3091a514670d36d21a9f1a9441555ae3b6cc0e6913765484af1cf52f/pyobjc_framework_mlcompute-10.3.1.tar.gz", hash = "sha256:9ac94b0a9511fedceacda846865daa05358eec5a4bf62be534b69eb4d7aced9b", size = 68347 }
wheels = [
@@ -3555,9 +3560,9 @@ name = "pyobjc-framework-modelio"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/98/d1/3020a89e0e1145b831351b1e0b34b89b3af7055843384c2a138d3ef4979a/pyobjc_framework_modelio-10.3.1.tar.gz", hash = "sha256:b1da37d10c38c63006d5173b49d18891b2db2c9acdbb6dbd21c73f17c0ccab7e", size = 93075 }
wheels = [
@@ -3572,8 +3577,8 @@ name = "pyobjc-framework-multipeerconnectivity"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a6/bf/14b2e58b3462ab15fba8fb07fa493da6531d6c8da07382ef2b63e429be4a/pyobjc_framework_multipeerconnectivity-10.3.1.tar.gz", hash = "sha256:eb801d44194eb7eafcb0a21094c4ce78bcf41ed727125b048755838b59de3271", size = 23441 }
wheels = [
@@ -3588,8 +3593,8 @@ name = "pyobjc-framework-naturallanguage"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1f/37/a0af80f8bb4ce27b5d6ab5d6bb8a71ea950cbdf81ec73c03b03388d8c572/pyobjc_framework_naturallanguage-10.3.1.tar.gz", hash = "sha256:49f19d0dba34802696a270d690db310ff03f1c85d6fb411734cb13667db90dd9", size = 39154 }
wheels = [
@@ -3601,8 +3606,8 @@ name = "pyobjc-framework-netfs"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/90/94/d467f7bc9efdf633f6cb40b83357f1cb91308efea2738f37b7c682e6619a/pyobjc_framework_netfs-10.3.1.tar.gz", hash = "sha256:46466917f7b0aca3772bf4dfd586b583992c60ecd71c39f7d28ff7665d057637", size = 15212 }
wheels = [
@@ -3614,8 +3619,8 @@ name = "pyobjc-framework-network"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b7/a2/547e786e3ff87e4facf038b0375d8fd4a48a8f6c69762efc7aac87b2d379/pyobjc_framework_network-10.3.1.tar.gz", hash = "sha256:87a5839d4ab2ae452b4e563bd7a00569557ede4b8cd1eb77c973cdf45fb8f5ab", size = 104030 }
wheels = [
@@ -3630,8 +3635,8 @@ name = "pyobjc-framework-networkextension"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/dc/46/1af5ad27f16af7ef97cced31dc70d92cf85c08d1e15a32997f9e40496601/pyobjc_framework_networkextension-10.3.1.tar.gz", hash = "sha256:c5a094862061565ca6d37457db42f55f344ec24dd7604ddf5d72e20ae7f63fdd", size = 130653 }
wheels = [
@@ -3646,8 +3651,8 @@ name = "pyobjc-framework-notificationcenter"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/11/a4/105abbec54e815ab9de653bba08db37524589c369badab6e1a5e3bd598a3/pyobjc_framework_notificationcenter-10.3.1.tar.gz", hash = "sha256:3e6efe0fe6389601bb87086f5585fa7e74b2143236b7d5afd02b617a73656419", size = 21039 }
wheels = [
@@ -3662,8 +3667,8 @@ name = "pyobjc-framework-opendirectory"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/32/1e/85e8d9ea9ee43a111a6d278c5006a3a58c4573af60ba7932402cb3ca5e84/pyobjc_framework_opendirectory-10.3.1.tar.gz", hash = "sha256:cddc25632eebeb6bf0d886ae0fc919d574e458c597691226ba15bbf134ab51a6", size = 159659 }
wheels = [
@@ -3675,8 +3680,8 @@ name = "pyobjc-framework-osakit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ce/db/2ee141472cb30079b8881d4839f4d46d38bed2e78e04d5ecf44885d05cd7/pyobjc_framework_osakit-10.3.1.tar.gz", hash = "sha256:0af326b831fa29fca11ffe2b641807ad3c233be9eb403e62328fa784528da4ab", size = 18286 }
wheels = [
@@ -3688,10 +3693,10 @@ name = "pyobjc-framework-oslog"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coremedia" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/11/ba/45a84a9a26608c8dd2d909f8ad8183434c17b1d4071ce910388c80a07637/pyobjc_framework_oslog-10.3.1.tar.gz", hash = "sha256:592c3e50cf824c2c07779771aa0065de2dbb4c615de43e8949b39d19ba04d744", size = 22288 }
wheels = [
@@ -3706,8 +3711,8 @@ name = "pyobjc-framework-passkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a5/5a/8336d8fe6371e7696235d131d042572156299d6a0c566a5854f127270adc/pyobjc_framework_passkit-10.3.1.tar.gz", hash = "sha256:4c3eea19c1ae3edf6e7858ab815bcd8ecf517a146928ce6a843910729372f010", size = 94853 }
wheels = [
@@ -3722,8 +3727,8 @@ name = "pyobjc-framework-pencilkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d2/8e/9152ecf82135f5f6ec94f4b407948cdee9b8f01ead2896613422dbfe8ef1/pyobjc_framework_pencilkit-10.3.1.tar.gz", hash = "sha256:4dfd8e0179be5ecf67b768317a88d86d93df1c8674d422afa14957cf80e6e01f", size = 18784 }
wheels = [
@@ -3735,8 +3740,8 @@ name = "pyobjc-framework-phase"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-avfoundation" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-avfoundation", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f8/7c/57e7a130932027f11ce8bfb68e8a6a910b9ec11c8bd4647605d0c6ff1ade/pyobjc_framework_phase-10.3.1.tar.gz", hash = "sha256:5be2ea5d36ea9620f5278f5ad3b02cc243511be3b137aa28b1523e8f6da54f99", size = 43938 }
wheels = [
@@ -3748,8 +3753,8 @@ name = "pyobjc-framework-photos"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4f/e3/764707657dc2ee986510ac137dfcb98ca3498fa21ed7c79e711df3b85736/pyobjc_framework_photos-10.3.1.tar.gz", hash = "sha256:8d538c399720062523694f7669aa82dcb75a7b192fb4aca93cf782d04e4c39be", size = 74176 }
wheels = [
@@ -3764,8 +3769,8 @@ name = "pyobjc-framework-photosui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/aa/34/6ee322114383d37c4921fc15e41ba4595347f0b108e14d6232e540d77c5e/pyobjc_framework_photosui-10.3.1.tar.gz", hash = "sha256:e9eb961c6be1f3e00d76cc0a8ec15b50ac0692bd5b5c86268ad08f6d09cf390d", size = 38914 }
wheels = [
@@ -3780,8 +3785,8 @@ name = "pyobjc-framework-preferencepanes"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8a/56/da2d75cf4900a62cafde27d875bbe0dc0e9c3624b6d4c08adc69d9336033/pyobjc_framework_preferencepanes-10.3.1.tar.gz", hash = "sha256:eef150416a39a0109a8a37e9978ac4a55ad0b125ef6053a7431524ede5c69783", size = 25330 }
wheels = [
@@ -3793,8 +3798,8 @@ name = "pyobjc-framework-pubsub"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ad/94/7126b622790d16a422589938b97f8c7c13a0724d9b9c8bed7badd8016d01/pyobjc_framework_pubsub-10.3.1.tar.gz", hash = "sha256:d123e75288c2f9d785ed1c4d92a96e5118c4b6f1cd9c55605eb4b4a74c2e36f4", size = 15716 }
wheels = [
@@ -3806,8 +3811,8 @@ name = "pyobjc-framework-pushkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/30/d6/2fec9c42a76466902b14afeea7a9c8cc2c90aeafd3f3dbe72af474681dc5/pyobjc_framework_pushkit-10.3.1.tar.gz", hash = "sha256:cc4da5382cf48c29637af1c633490203358a6ab0c76f0c006079cf144eeb9568", size = 19167 }
wheels = [
@@ -3822,8 +3827,8 @@ name = "pyobjc-framework-quartz"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/f7/a2/f488d801197b9b4d28d0b8d85947f9e2c8a6e89c5e6d4a828fc7cccfb57a/pyobjc_framework_quartz-10.3.1.tar.gz", hash = "sha256:b6d7e346d735c9a7f147cd78e6da79eeae416a0b7d3874644c83a23786c6f886", size = 3775947 }
wheels = [
@@ -3837,9 +3842,9 @@ name = "pyobjc-framework-quicklookthumbnailing"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/29/04/ef2db0a73af5b2530de728529f5d637bbe5f09bf4165493db0ab3df2018b/pyobjc_framework_quicklookthumbnailing-10.3.1.tar.gz", hash = "sha256:ee26be78df9ce46ffa6f971f4ce167a0e98f38167aeb86cfc1b41270f15c96a3", size = 15534 }
wheels = [
@@ -3851,8 +3856,8 @@ name = "pyobjc-framework-replaykit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5b/37/dbadcb487150f4ea1a691c83d09f1ed58463bed6b4fa54dca6aeb1584d06/pyobjc_framework_replaykit-10.3.1.tar.gz", hash = "sha256:21762c8674b629fb670c3cbd515c593f1b5f98ee24ee4834a09055cb08849068", size = 23417 }
wheels = [
@@ -3867,8 +3872,8 @@ name = "pyobjc-framework-safariservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/69/63/c12192ed8b5a08cc5313aef6d4e6d86d9d17171d4325a7f6e2f8c0da7a19/pyobjc_framework_safariservices-10.3.1.tar.gz", hash = "sha256:9c5278576e7c28c3d93e74ebe5d39d07c5c91572ddf03ea01cc45d9a06dc8d0a", size = 29436 }
wheels = [
@@ -3883,9 +3888,9 @@ name = "pyobjc-framework-safetykit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d8/db/1d099ed2b3655caacad70315a6789b47277f9939f73d4f13810bf27f9e29/pyobjc_framework_safetykit-10.3.1.tar.gz", hash = "sha256:8421be801ce29053e67a2c91673913562c3ad9d4bb1fbaa934a3a365d8bff12d", size = 19035 }
wheels = [
@@ -3900,9 +3905,9 @@ name = "pyobjc-framework-scenekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/23/cb/0451b9463cc1d19eef523dfc6098c5d774cbd5f4cae9fbc6884b17cd5cd9/pyobjc_framework_scenekit-10.3.1.tar.gz", hash = "sha256:99cf0db3055d9bae0a8643400e528a8c012235db8ee6a1864ea0b03a0854c9d0", size = 155276 }
wheels = [
@@ -3917,9 +3922,9 @@ name = "pyobjc-framework-screencapturekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coremedia" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d4/20/51dbb697dc5d3bc522771afa375e05370e6357b49dacf1bafe7dae37908f/pyobjc_framework_screencapturekit-10.3.1.tar.gz", hash = "sha256:cb1a2e746e0f98ea14a11ea35d059d38587340beeeb905812085e2c7ceb14e0c", size = 34829 }
wheels = [
@@ -3933,8 +3938,8 @@ name = "pyobjc-framework-screensaver"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/dc/7c/55374bae0be8632e2c76b911af3bcdfd5b5ea417c125d8268f8207c77516/pyobjc_framework_screensaver-10.3.1.tar.gz", hash = "sha256:0bbc5b574f12e95f6f6e48ced40b601e46e560ef6786845c15c57d78e6cd083e", size = 22037 }
wheels = [
@@ -3949,8 +3954,8 @@ name = "pyobjc-framework-screentime"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/a5/b2b9c57eb364ccc1074442ce956b0052f71e903b7b944a93bc4888deb94d/pyobjc_framework_screentime-10.3.1.tar.gz", hash = "sha256:351179d5bf951aa754c72f50ba8785212adf1b26abe10149c750fafd0a3108ae", size = 13365 }
wheels = [
@@ -3962,8 +3967,8 @@ name = "pyobjc-framework-scriptingbridge"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/10/45/ef1ae83f84555c3cf7ba18e53be9ace9f4225e56b852d7f5d79b5c516d4f/pyobjc_framework_scriptingbridge-10.3.1.tar.gz", hash = "sha256:6bfb45efd0a1cda38a37154afe69f86ea086d5cbdfbc33b3e31c0bda97537fe9", size = 20828 }
wheels = [
@@ -3978,8 +3983,8 @@ name = "pyobjc-framework-searchkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-coreservices" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreservices", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/85/74/1ee0012987c203f6776b7ca3da12b68623d9861c96ddc9575809c38864bc/pyobjc_framework_searchkit-10.3.1.tar.gz", hash = "sha256:7efb76b7af9d8f0f08efb91543f4dba0b00261ed41abb121ada80175cc82d65d", size = 30449 }
wheels = [
@@ -3991,8 +3996,8 @@ name = "pyobjc-framework-security"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/20/db/3fa2a151c53f2d87d9da725948d33f8bb4c7f36d6cb468411ae4b46ad474/pyobjc_framework_security-10.3.1.tar.gz", hash = "sha256:0d4e679a8aebaef9b54bd24e2fe2794ad5c28d601b6d140ed38370594bcb6fa0", size = 252496 }
wheels = [
@@ -4006,9 +4011,9 @@ name = "pyobjc-framework-securityfoundation"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-security" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-security", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/40/d6/908dcceb7cd5dcfa3ff265dfcb945a8707256f7ab09ee709d86cb26ae1d4/pyobjc_framework_securityfoundation-10.3.1.tar.gz", hash = "sha256:414b13acabfae584729cd614e27247d250ec225d31140e8d971aa08536d6150c", size = 12595 }
wheels = [
@@ -4020,9 +4025,9 @@ name = "pyobjc-framework-securityinterface"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-security" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-security", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b6/8b/d2dfd658f279fe6d3416b45c5030a65342ded0150ba56e028f6dcc9b38e1/pyobjc_framework_securityinterface-10.3.1.tar.gz", hash = "sha256:cd25f342a2b53cbffd134443506d5e75c96ba7145135debb8932c1252d57269a", size = 31921 }
wheels = [
@@ -4037,9 +4042,9 @@ name = "pyobjc-framework-sensitivecontentanalysis"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ef/3d/7b50fb510374640c7562fc3cc83a75d91bd23f3f53a15579bd0061ffc3bd/pyobjc_framework_sensitivecontentanalysis-10.3.1.tar.gz", hash = "sha256:ac8dd18d77ccc0bb4eb24839cf39da9981db64e53f52b09636e47bd7b3066f84", size = 12006 }
wheels = [
@@ -4051,8 +4056,8 @@ name = "pyobjc-framework-servicemanagement"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ec/de/f60506eef312ea3cbd5eacd1308bfb7e68f8d1a032573840f46b7de3a122/pyobjc_framework_servicemanagement-10.3.1.tar.gz", hash = "sha256:d048a803ad34c997dcc99ba778fca9d91cc5adfa1d115202e4bf22d9b04fd92c", size = 15746 }
wheels = [
@@ -4064,8 +4069,8 @@ name = "pyobjc-framework-sharedwithyou"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-sharedwithyoucore" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-sharedwithyoucore", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a2/c8/261b3ae7063550b157fd33e9931c53007e4b7ff209a6d5a393b301af67c3/pyobjc_framework_sharedwithyou-10.3.1.tar.gz", hash = "sha256:7e35b631bc77b040151515e4fee9c8f47bc313924fc3e5970e940f1343db039b", size = 27924 }
wheels = [
@@ -4080,8 +4085,8 @@ name = "pyobjc-framework-sharedwithyoucore"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/58/ba/09d6cfb51167b14711d2a2526d69994566eec101578af0e39b84a4794e5b/pyobjc_framework_sharedwithyoucore-10.3.1.tar.gz", hash = "sha256:e4768b7fdb18730e225bbebc9c9f9acfa7e44e648875816aff8c7e7f0e82afbf", size = 24331 }
wheels = [
@@ -4096,8 +4101,8 @@ name = "pyobjc-framework-shazamkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/07/d7/5cf2157fd163084d75d1cf9cf2de774d373387162a7b03c19cbcd193f22f/pyobjc_framework_shazamkit-10.3.1.tar.gz", hash = "sha256:deef11a43e773b876df31eeadbfc447892fda0607e314ca2afb2c012284cfa32", size = 22923 }
wheels = [
@@ -4111,8 +4116,8 @@ name = "pyobjc-framework-social"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/94/a8/c5a8ea9eea5ec096e03fcda22f3bf5077710a988dbcdbc543afed7478d34/pyobjc_framework_social-10.3.1.tar.gz", hash = "sha256:d1303cf3860ad02a8795c099e17888923505a9c45be407da50721a9a8a5b2efd", size = 13749 }
wheels = [
@@ -4124,8 +4129,8 @@ name = "pyobjc-framework-soundanalysis"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cc/23/bb9bc28f3d96e1316ac257b6b0605bcefb4b38879b9594272bbc9505e341/pyobjc_framework_soundanalysis-10.3.1.tar.gz", hash = "sha256:faa533644231f99dbdc2fcc3ecb9181c5df4f4dc68d42856729214021c83c881", size = 15578 }
wheels = [
@@ -4137,8 +4142,8 @@ name = "pyobjc-framework-speech"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e6/8c/cc25b4267f884139b9677ea3fed8a8b99c423ef3f72dcc35eae6a01e4007/pyobjc_framework_speech-10.3.1.tar.gz", hash = "sha256:5b77b1d1ced0d1ad7244037b865dda2b83e8f9562d76d1e9fa4fea3b89e437b8", size = 29979 }
wheels = [
@@ -4153,9 +4158,9 @@ name = "pyobjc-framework-spritekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/fc/a3/037c63ce21d3a01d1d3c891b17979c5c1ce13a0893c97848bf2eb3e30442/pyobjc_framework_spritekit-10.3.1.tar.gz", hash = "sha256:2c11f35f48302f487c51ba8030f5cf79493a9dc0993dd901016ae4b8d8047c8b", size = 95557 }
wheels = [
@@ -4169,8 +4174,8 @@ name = "pyobjc-framework-storekit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bb/42/e0ebe600ca0572fea164c2308bdd8866cb09167ef1617ed66d5c9a9a6026/pyobjc_framework_storekit-10.3.1.tar.gz", hash = "sha256:913b4aad7dc31df7d8011c54a695da65cc57819f4b48c98abaed4e6d9ff7d323", size = 63667 }
wheels = [
@@ -4185,8 +4190,8 @@ name = "pyobjc-framework-symbols"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d7/2b/e32921c7f2e00ba41fdd6befc0f7aabf17bc4c136f2b6a0cf4f44939940e/pyobjc_framework_symbols-10.3.1.tar.gz", hash = "sha256:3e3f35ef3646b5f9c0653d9dbf5693cf87de3df04420cb2679dad74c75965d18", size = 11785 }
wheels = [
@@ -4198,9 +4203,9 @@ name = "pyobjc-framework-syncservices"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coredata" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coredata", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/77/eb/6b73844bc7a4f964128cde7fffbe4243b62c691626b4b101337b6ac7caff/pyobjc_framework_syncservices-10.3.1.tar.gz", hash = "sha256:1cd5e3eaf85a11996184afad1da47037cd921e302ccb35fe388b19f91a685669", size = 49572 }
wheels = [
@@ -4215,8 +4220,8 @@ name = "pyobjc-framework-systemconfiguration"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1f/34/4a8a79ae382296533cf0aa51377f53d9157aa41484c83a506d9dc43fc9e1/pyobjc_framework_systemconfiguration-10.3.1.tar.gz", hash = "sha256:1bf6ffe98faa4e208bf594c857ba23cd56fe404bc579188ff53b704844d9c402", size = 124143 }
wheels = [
@@ -4231,8 +4236,8 @@ name = "pyobjc-framework-systemextensions"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/dd/d2/eab93a69f95c757104112cb0bce3e1fc70de59ca47ff0c60d180f306819f/pyobjc_framework_systemextensions-10.3.1.tar.gz", hash = "sha256:34412e75c95a585d222ea23efc3eba436210ec0345cec6c7dc78d16e027d03e1", size = 19844 }
wheels = [
@@ -4247,8 +4252,8 @@ name = "pyobjc-framework-threadnetwork"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/dc/6c/c502594ac550436bb8d989b18734eeabd5ce189c2ebb1f4895e3e00d424d/pyobjc_framework_threadnetwork-10.3.1.tar.gz", hash = "sha256:1038210a8e5dfa86aefd10894563913e767e95d1c1bd4333ae5f9c6cabbb3ce9", size = 12639 }
wheels = [
@@ -4260,8 +4265,8 @@ name = "pyobjc-framework-uniformtypeidentifiers"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1f/54/10c56c741e7c95ee4dd8db06afac5e59722e5372e35f3c5a3e7c2954c746/pyobjc_framework_uniformtypeidentifiers-10.3.1.tar.gz", hash = "sha256:1985fee7e1f1157db36f3c19ee0ad273677eeff10467f575086246bbeffcdf50", size = 18476 }
wheels = [
@@ -4273,8 +4278,8 @@ name = "pyobjc-framework-usernotifications"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/12/d2/32432d2b579ca393f65f7ae7b53cf887f2efda861c4e1b372428f65dd4bf/pyobjc_framework_usernotifications-10.3.1.tar.gz", hash = "sha256:ddb5de88fb659c2241429b6408ddcabbfc0c2c9e4a7f5f543a6fab1c4953403b", size = 45987 }
wheels = [
@@ -4289,9 +4294,9 @@ name = "pyobjc-framework-usernotificationsui"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-usernotifications" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-usernotifications", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/df/10/a525f13919955d653fd431f527974e2604b0b8727c886de1ec7e2bf34189/pyobjc_framework_usernotificationsui-10.3.1.tar.gz", hash = "sha256:80390b5361bb6014dc32d0afbf581280e7762a4f67460a736f461f613d397094", size = 13288 }
wheels = [
@@ -4303,8 +4308,8 @@ name = "pyobjc-framework-videosubscriberaccount"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c8/a6/41d6afaa800bf8839c45642b60d7fa13a0e292d477762c33ce22ba1c0aa6/pyobjc_framework_videosubscriberaccount-10.3.1.tar.gz", hash = "sha256:f62509e976b805bc76ff5928444677ac542b52dd9f7781ac0731d7c4b22bed96", size = 23793 }
wheels = [
@@ -4316,10 +4321,10 @@ name = "pyobjc-framework-videotoolbox"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coremedia" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coremedia", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/65/e4/435561672801cb29a398b208e75e6823e6c369027cd51f0774f3b24f2baf/pyobjc_framework_videotoolbox-10.3.1.tar.gz", hash = "sha256:7ebc281523b2b37aff17ce6eabd0c81081864b3e3e4a83ae72b18fd70c57c521", size = 66253 }
wheels = [
@@ -4334,8 +4339,8 @@ name = "pyobjc-framework-virtualization"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2e/d1/427065aab5570855228fe0bc3d387fcc4c76e18538c28c5fc2497b0f75f2/pyobjc_framework_virtualization-10.3.1.tar.gz", hash = "sha256:8348ddef18eb943d151e5b5977e4d410012ee2e3f6048c16f7cfe0c1a73536cb", size = 61591 }
wheels = [
@@ -4350,10 +4355,10 @@ name = "pyobjc-framework-vision"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
- { name = "pyobjc-framework-coreml" },
- { name = "pyobjc-framework-quartz" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-coreml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-quartz", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/7c/55/ff278351cb47f939a932dc5d9d80a8a0d51a427e27e0419833d49219e757/pyobjc_framework_vision-10.3.1.tar.gz", hash = "sha256:aa071656d395afc2d624600a9f30d6a3344aa747bf37f613ff3972158c40881c", size = 108532 }
wheels = [
@@ -4368,8 +4373,8 @@ name = "pyobjc-framework-webkit"
version = "10.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyobjc-core" },
- { name = "pyobjc-framework-cocoa" },
+ { name = "pyobjc-core", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyobjc-framework-cocoa", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/15/6b/50c1000354e9de966a150b4a41c291c83517eec9bd162f43ea4e55444d64/pyobjc_framework_webkit-10.3.1.tar.gz", hash = "sha256:7ad9f4eb91a6dff39848d9c2ab71f170aeab4b6396bcec8e5a780739f9be4222", size = 610874 }
wheels = [
@@ -4384,9 +4389,9 @@ name = "pyogrio"
version = "0.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "certifi" },
- { name = "numpy" },
- { name = "packaging" },
+ { name = "certifi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4e/09/a13ffa71f617f3c76f31984bc4fc237aede9988d89056b278efcb97f6fb0/pyogrio-0.9.0.tar.gz", hash = "sha256:6a6fa2e8cf95b3d4a7c0fac48bce6e5037579e28d3eb33b53349d6e11f15e5a8", size = 352526 }
wheels = [
@@ -4407,9 +4412,9 @@ name = "pyopencl"
version = "2024.2.7"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
- { name = "platformdirs" },
- { name = "pytools" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "platformdirs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pytools", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/92/68/a26269be1ba101b740a7b47d81032cf71c50a8700cc71ab2c49f0fcccec9/pyopencl-2024.2.7.tar.gz", hash = "sha256:6ae4458a959b6ad9c138fb711a52c4d57c2c2f798eb3aecc4c26830cb2726140", size = 470964 }
wheels = [
@@ -4430,7 +4435,7 @@ name = "pyopenssl"
version = "24.2.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cryptography" },
+ { name = "cryptography", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5d/70/ff56a63248562e77c0c8ee4aefc3224258f1856977e0c1472672b62dadb8/pyopenssl-24.2.1.tar.gz", hash = "sha256:4247f0dbe3748d560dcbb2ff3ea01af0f9a1a001ef5f7c4c647956ed8cbf0e95", size = 184323 }
wheels = [
@@ -4463,7 +4468,7 @@ name = "pyproj"
version = "3.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "certifi" },
+ { name = "certifi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/7d/84/2b39bbf888c753ea48b40d47511548c77aa03445465c35cc4c4e9649b643/pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", size = 225131 }
wheels = [
@@ -4486,7 +4491,7 @@ name = "pyqt5"
version = "5.15.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyqt5-sip" },
+ { name = "pyqt5-sip", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/28/6c/640e3f5c734c296a7193079a86842a789edb7988dca39eab44579088a1d1/PyQt5-5.15.2.tar.gz", hash = "sha256:372b08dc9321d1201e4690182697c5e7ffb2e0770e6b4a45519025134b12e4fc", size = 3265445 }
wheels = [
@@ -4549,9 +4554,9 @@ version = "8.3.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
- { name = "iniconfig" },
- { name = "packaging" },
- { name = "pluggy" },
+ { name = "iniconfig", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "packaging", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pluggy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b4/8c/9862305bdcd6020bc7b45b1b5e7397a6caf1a33d3025b9a003b39075ffb2/pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce", size = 1439314 }
wheels = [
@@ -4563,7 +4568,7 @@ name = "pytest-asyncio"
version = "0.23.8"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pytest" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/de/b4/0b378b7bf26a8ae161c3890c0b48a91a04106c5713ce81b4b080ea2f4f18/pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3", size = 46920 }
wheels = [
@@ -4575,8 +4580,8 @@ name = "pytest-cov"
version = "5.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "coverage" },
- { name = "pytest" },
+ { name = "coverage", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/74/67/00efc8d11b630c56f15f4ad9c7f9223f1e5ec275aaae3fa9118c6a223ad2/pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857", size = 63042 }
wheels = [
@@ -4588,8 +4593,8 @@ name = "pytest-cpp"
version = "2.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "colorama" },
- { name = "pytest" },
+ { name = "colorama", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0f/72/6da4fd6ea5afd44e10dbed76ef666c0732e27317a753099bc163f3330a91/pytest-cpp-2.5.0.tar.gz", hash = "sha256:695604baa21bc95291bb4ea7263a7aa960753de57c2d17d224c4652fbcf65cdc", size = 465039 }
wheels = [
@@ -4601,7 +4606,7 @@ name = "pytest-mock"
version = "3.14.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pytest" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c6/90/a955c3ab35ccd41ad4de556596fa86685bf4fc5ffcc62d22d856cfd4e29a/pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0", size = 32814 }
wheels = [
@@ -4613,7 +4618,7 @@ name = "pytest-randomly"
version = "3.15.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pytest" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c9/d4/6e924a0b2855736d942703dec88dfc98b4fe0881c8fa849b6b0fbb9182fa/pytest_randomly-3.15.0.tar.gz", hash = "sha256:b908529648667ba5e54723088edd6f82252f540cc340d748d1fa985539687047", size = 21743 }
wheels = [
@@ -4625,7 +4630,7 @@ name = "pytest-repeat"
version = "0.9.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pytest" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/86/5e/99365eb229efff0b1bd475886150fc6db9937ab7e1bd21f6f65c1279e0eb/pytest_repeat-0.9.3.tar.gz", hash = "sha256:ffd3836dfcd67bb270bec648b330e20be37d2966448c4148c4092d1e8aba8185", size = 6272 }
wheels = [
@@ -4637,8 +4642,8 @@ name = "pytest-subtests"
version = "0.13.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "attrs" },
- { name = "pytest" },
+ { name = "attrs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/67/fe/e691d2f4ce061a475f488cad1ef58431556affea323dde5c764fd7515a70/pytest_subtests-0.13.1.tar.gz", hash = "sha256:989e38f0f1c01bc7c6b2e04db7d9fd859db35d77c2c1a430c831a70cbf3fde2d", size = 15936 }
wheels = [
@@ -4650,7 +4655,7 @@ name = "pytest-timeout"
version = "2.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pytest" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/93/0d/04719abc7a4bdb3a7a1f968f24b0f5253d698c9cc94975330e9d3145befb/pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9", size = 17697 }
wheels = [
@@ -4662,8 +4667,8 @@ name = "pytest-xdist"
version = "3.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "execnet" },
- { name = "pytest" },
+ { name = "execnet", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pytest", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/41/c4/3c310a19bc1f1e9ef50075582652673ef2bfc8cd62afef9585683821902f/pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d", size = 84060 }
wheels = [
@@ -4675,7 +4680,7 @@ name = "python-dateutil"
version = "2.9.0.post0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "six" },
+ { name = "six", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
wheels = [
@@ -4687,7 +4692,7 @@ name = "python-xlib"
version = "0.33"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "six" },
+ { name = "six", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/86/f5/8c0653e5bb54e0cbdfe27bf32d41f27bc4e12faa8742778c17f2a71be2c0/python-xlib-0.33.tar.gz", hash = "sha256:55af7906a2c75ce6cb280a584776080602444f75815a7aff4d287bb2d7018b32", size = 269068 }
wheels = [
@@ -4705,8 +4710,8 @@ name = "pytools"
version = "2024.1.10"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "platformdirs" },
- { name = "siphash24" },
+ { name = "platformdirs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "siphash24", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
{ name = "typing-extensions", marker = "python_version < '3.13'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ee/0f/56e109c0307f831b5d598ad73976aaaa84b4d0e98da29a642e797eaa940c/pytools-2024.1.10.tar.gz", hash = "sha256:9af6f4b045212c49be32bb31fe19606c478ee4b09631886d05a32459f4ce0a12", size = 81741 }
@@ -4751,7 +4756,7 @@ dependencies = [
{ name = "pyobjc", marker = "sys_platform == 'darwin'" },
{ name = "python-xlib", marker = "sys_platform == 'linux'" },
{ name = "pywin32", marker = "sys_platform == 'win32'" },
- { name = "typing-extensions" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/b1/37/d59397221e15d2a7f38afaa4e8e6b8c244d818044f7daa0bdc5988df0a69/PyWinBox-0.7-py3-none-any.whl", hash = "sha256:8b2506a8dd7afa0a910b368762adfac885274132ef9151b0c81b0d2c6ffd6f83", size = 12274 },
@@ -4763,12 +4768,12 @@ version = "0.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ewmhlib", marker = "sys_platform == 'linux'" },
- { name = "pymonctl" },
+ { name = "pymonctl", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
{ name = "pyobjc", marker = "sys_platform == 'darwin'" },
{ name = "python-xlib", marker = "sys_platform == 'linux'" },
{ name = "pywin32", marker = "sys_platform == 'win32'" },
- { name = "pywinbox" },
- { name = "typing-extensions" },
+ { name = "pywinbox", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ff/53/a7234a6b6d0c5cf295950166498623046422a333d8af79a26552ab40b9a6/PyWinCtl-0.4-py3-none-any.whl", hash = "sha256:8c4a92bd57e35fd280c5c04f048cc822e236abffe2fa17351096b0e28907172d", size = 60338 },
@@ -4802,7 +4807,7 @@ name = "pyyaml-env-tag"
version = "0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyyaml" },
+ { name = "pyyaml", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/fb/8e/da1c6c58f751b70f8ceb1eb25bc25d524e8f14fe16edcce3f4e3ba08629c/pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb", size = 5631 }
wheels = [
@@ -4849,10 +4854,10 @@ name = "requests"
version = "2.32.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "certifi" },
- { name = "charset-normalizer" },
- { name = "idna" },
- { name = "urllib3" },
+ { name = "certifi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "charset-normalizer", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "idna", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "urllib3", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
wheels = [
@@ -4864,11 +4869,11 @@ name = "rerun-sdk"
version = "0.17.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "attrs" },
- { name = "numpy" },
- { name = "pillow" },
- { name = "pyarrow" },
- { name = "typing-extensions" },
+ { name = "attrs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pillow", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "pyarrow", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "typing-extensions", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/30/5f/ce02381b9d7e1e14f60c421c76dce12b7d823690181784780b30266017b1/rerun_sdk-0.17.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:abd34f746eada83b8bb0bc50007183151981d7ccf18306f3d42165819a3f6fcb", size = 33166544 },
@@ -4917,7 +4922,7 @@ name = "scipy"
version = "1.14.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4e/e5/0230da034a2e1b1feb32621d7cd57c59484091d6dccc9e6b855b0d309fc9/scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b", size = 58618870 }
wheels = [
@@ -4953,9 +4958,9 @@ name = "seaborn"
version = "0.13.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "matplotlib" },
- { name = "numpy" },
- { name = "pandas" },
+ { name = "matplotlib", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "pandas", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 }
wheels = [
@@ -4967,8 +4972,8 @@ name = "sentry-sdk"
version = "2.11.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "certifi" },
- { name = "urllib3" },
+ { name = "certifi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "urllib3", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6d/b3/39e4cd04b75a1ada788342d0d30a781cf65b5e43da806d5bf2bad4846ea3/sentry_sdk-2.11.0.tar.gz", hash = "sha256:4ca16e9f5c7c6bc2fb2d5c956219f4926b148e511fffdbbde711dc94f1e0468f", size = 276242 }
wheels = [
@@ -4989,7 +4994,7 @@ name = "shapely"
version = "2.0.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "numpy" },
+ { name = "numpy", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ad/99/c47247f4d688bbb5346df5ff1de5d9792b6d95cbbb2fd7b71f45901c1878/shapely-2.0.5.tar.gz", hash = "sha256:bff2366bc786bfa6cb353d6b47d0443c570c32776612e527ee47b6df63fcfe32", size = 282188 }
wheels = [
@@ -5059,7 +5064,7 @@ name = "sounddevice"
version = "0.4.7"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cffi" },
+ { name = "cffi", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0d/88/5832219fa90595932d5f6d1b5125bfd8a55e95b19ad866e265c9bbb7cde4/sounddevice-0.4.7.tar.gz", hash = "sha256:69b386818d50a2d518607d4b973442e8d524760c7cd6c8b8be03d8c98fc4bce7", size = 52244 }
wheels = [
@@ -5080,7 +5085,7 @@ name = "sympy"
version = "1.13.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "mpmath" },
+ { name = "mpmath", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ca/99/5a5b6f19ff9f083671ddf7b9632028436167cd3d33e11015754e41b249a4/sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f", size = 7533040 }
wheels = [
@@ -5122,7 +5127,7 @@ name = "types-requests"
version = "2.32.0.20240712"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "urllib3" },
+ { name = "urllib3", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5e/9e/7663eb27c33568b8fc20ccdaf2a1ce53a9530c42a7cceb9f552a6ff4a1d8/types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358", size = 17896 }
wheels = [
@@ -5170,9 +5175,9 @@ name = "virtualenv"
version = "20.26.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "distlib" },
- { name = "filelock" },
- { name = "platformdirs" },
+ { name = "distlib", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "filelock", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "platformdirs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/68/60/db9f95e6ad456f1872486769c55628c7901fb4de5a72c2f7bdd912abf0c1/virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a", size = 9057588 }
wheels = [
@@ -5217,9 +5222,9 @@ name = "yapf"
version = "0.40.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "importlib-metadata" },
- { name = "platformdirs" },
- { name = "tomli" },
+ { name = "importlib-metadata", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "platformdirs", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
+ { name = "tomli", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b9/14/c1f0ebd083fddd38a7c832d5ffde343150bd465689d12c549c303fbcd0f5/yapf-0.40.2.tar.gz", hash = "sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b", size = 252068 }
wheels = [
@@ -5231,8 +5236,8 @@ name = "yarl"
version = "1.9.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "idna" },
- { name = "multidict" },
+ { name = "idna", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
+ { name = "multidict", marker = "python_version < '3.12' or python_version > '3.12' or platform_machine != 'aarch64' or (python_version == '3.12' and platform_machine == 'aarch64')" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e0/ad/bedcdccbcbf91363fd425a948994f3340924145c2bc8ccb296f4a1e52c28/yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf", size = 141869 }
wheels = [
From ebff7cab1ab897526800e229e30b01ec4cf1114c Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Wed, 31 Jul 2024 14:53:13 -0700
Subject: [PATCH 18/20] get_fw_versions: test the full stack (#33156)
* add the test
fix
* bump
* not sure why mypy didn't catch this
---
panda | 2 +-
selfdrive/car/interfaces.py | 6 ++----
selfdrive/car/tests/test_fw_fingerprint.py | 20 +++++++++++++++++++-
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/panda b/panda
index 8c3bb0151e8907..daa739efb76e29 160000
--- a/panda
+++ b/panda
@@ -1 +1 @@
-Subproject commit 8c3bb0151e8907ade344ccb293d58cd543e28baa
+Subproject commit daa739efb76e2908bf1b2ee064be9034a8e299c3
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index e491de3ed6106d..6c6e544f759a55 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -52,6 +52,7 @@ class LatControlInputs(NamedTuple):
aego: float
+SendCan = tuple[int, bytes, int]
TorqueFromLateralAccelCallbackType = Callable[[LatControlInputs, car.CarParams.LateralTorqueTuning, float, float, bool, bool], float]
@@ -109,7 +110,7 @@ def __init__(self, CP, CarController, CarState):
dbc_name = "" if self.cp is None else self.cp.dbc_name
self.CC: CarControllerBase = CarController(dbc_name, CP, self.VM)
- def apply(self, c: car.CarControl, now_nanos: int) -> tuple[car.CarControl.Actuators, list[tuple[int, int, bytes, int]]]:
+ def apply(self, c: car.CarControl, now_nanos: int) -> tuple[car.CarControl.Actuators, list[SendCan]]:
return self.CC.update(c, self.CS, now_nanos)
@staticmethod
@@ -462,9 +463,6 @@ def get_loopback_can_parser(CP):
return None
-SendCan = tuple[int, int, bytes, int]
-
-
class CarControllerBase(ABC):
def __init__(self, dbc_name: str, CP, VM):
self.CP = CP
diff --git a/selfdrive/car/tests/test_fw_fingerprint.py b/selfdrive/car/tests/test_fw_fingerprint.py
index f8729725422507..f6f6ed86d7bde9 100644
--- a/selfdrive/car/tests/test_fw_fingerprint.py
+++ b/selfdrive/car/tests/test_fw_fingerprint.py
@@ -5,11 +5,13 @@
from parameterized import parameterized
from cereal import car
+from openpilot.selfdrive.car import make_can_msg
from openpilot.selfdrive.car.car_helpers import interfaces
from openpilot.selfdrive.car.fingerprints import FW_VERSIONS
from openpilot.selfdrive.car.fw_versions import ESSENTIAL_ECUS, FW_QUERY_CONFIGS, FUZZY_EXCLUDE_ECUS, VERSIONS, build_fw_dict, \
match_fw_to_car, get_brand_ecu_matches, get_fw_versions, get_present_ecus
from openpilot.selfdrive.car.vin import get_vin
+from openpilot.selfdrive.pandad import can_list_to_can_capnp
CarFw = car.CarParams.CarFw
Ecu = car.CarParams.Ecu
@@ -19,7 +21,8 @@
class FakeSocket:
def receive(self, non_blocking=False):
- pass
+ return (can_list_to_can_capnp([make_can_msg(random.randint(0x600, 0x800), b'\x00' * 8, 0)])
+ if random.uniform(0, 1) > 0.5 else None)
def send(self, msg):
pass
@@ -313,3 +316,18 @@ def test_fw_query_timing(self, subtests, mocker):
total_time = round(total_times[num_pandas], 2)
self._assert_timing(total_time, total_ref_time[num_pandas])
print(f'all brands, total FW query time={total_time} seconds')
+
+ def test_get_fw_versions(self, subtests, mocker):
+ # some coverage on IsoTpParallelQuery and panda UDS library
+ # TODO: replace this with full fingerprint simulation testing
+ # https://github.com/commaai/panda/pull/1329
+
+ def fake_cloudlog_exception(*args, **kwargs):
+ raise
+
+ mocker.patch("openpilot.selfdrive.car.fw_versions.set_obd_multiplexing", lambda *args: None)
+ mocker.patch("openpilot.common.swaglog.cloudlog.exception", fake_cloudlog_exception)
+ fake_socket = FakeSocket()
+ for brand in FW_QUERY_CONFIGS.keys():
+ with subtests.test(brand=brand):
+ get_fw_versions(fake_socket, fake_socket, brand, num_pandas=1)
From 7c112341c358b57ee9d0209cb2b2c53383adcca9 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Wed, 31 Jul 2024 15:37:39 -0700
Subject: [PATCH 19/20] Reapply "update to new opendbc API (#32009)" (#33151)
This reverts commit ac130001cc83734118524f59a83a96a2065dd56e.
---
opendbc | 2 +-
selfdrive/car/interfaces.py | 4 ++-
selfdrive/car/tests/test_car_interfaces.py | 3 +-
selfdrive/car/tests/test_models.py | 3 +-
.../lib/longitudinal_mpc_lib/SConscript | 4 +--
selfdrive/controls/radard.py | 4 +--
.../debug/check_can_parser_performance.py | 6 ++--
selfdrive/pandad/SConscript | 4 ++-
selfdrive/pandad/__init__.py | 3 +-
selfdrive/pandad/can_list_to_can_capnp.cc | 35 +++++++++++++++++--
selfdrive/pandad/pandad_api_impl.pyx | 29 ++++++++++++++-
.../examples/subaru_long_accel.ipynb | 3 +-
.../examples/subaru_steer_temp_fault.ipynb | 3 +-
13 files changed, 86 insertions(+), 17 deletions(-)
diff --git a/opendbc b/opendbc
index 8e9d3688412405..39a5345924d241 160000
--- a/opendbc
+++ b/opendbc
@@ -1 +1 @@
-Subproject commit 8e9d3688412405154a8189c421cfdc9d5feea715
+Subproject commit 39a5345924d2414f05c40d258d359eb8412a0b03
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index 6c6e544f759a55..2121f433b7ea83 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -18,6 +18,7 @@
from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
from openpilot.selfdrive.controls.lib.events import Events
from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel
+from openpilot.selfdrive.pandad import can_capnp_to_list
ButtonType = car.CarState.ButtonEvent.Type
GearShifter = car.CarState.GearShifter
@@ -232,9 +233,10 @@ def _update(self, c: car.CarControl) -> car.CarState:
def update(self, c: car.CarControl, can_strings: list[bytes]) -> car.CarState:
# parse can
+ can_list = can_capnp_to_list(can_strings)
for cp in self.can_parsers:
if cp is not None:
- cp.update_strings(can_strings)
+ cp.update_strings(can_list)
# get CarState
ret = self._update(c)
diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py
index 4ca19f019e6df0..9e3c7d157ef223 100644
--- a/selfdrive/car/tests/test_car_interfaces.py
+++ b/selfdrive/car/tests/test_car_interfaces.py
@@ -15,6 +15,7 @@
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID
from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque
from openpilot.selfdrive.controls.lib.longcontrol import LongControl
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator
ALL_ECUS = {ecu for ecus in FW_VERSIONS.values() for ecu in ecus.keys()}
@@ -128,7 +129,7 @@ def test_car_interfaces(self, car_name, data):
# Test radar fault
if not car_params.radarUnavailable and radar_interface.rcp is not None:
- cans = [messaging.new_message('can', 1).to_bytes() for _ in range(5)]
+ cans = can_capnp_to_list([messaging.new_message('can', 1).to_bytes() for _ in range(5)])
rr = radar_interface.update(cans)
assert rr is None or len(rr.errors) > 0
diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py
index 1d05b7c73140a1..22a80f359a93af 100644
--- a/selfdrive/car/tests/test_models.py
+++ b/selfdrive/car/tests/test_models.py
@@ -19,6 +19,7 @@
from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute
from openpilot.selfdrive.car.values import Platform
from openpilot.selfdrive.car.card import Car
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.selfdrive.test.helpers import read_segment_list
from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT
from openpilot.tools.lib.logreader import LogReader, internal_source, openpilotci_source
@@ -237,7 +238,7 @@ def test_radar_interface(self):
# start parsing CAN messages after we've left ELM mode and can expect CAN traffic
error_cnt = 0
for i, msg in enumerate(self.can_msgs[self.elm_frame:]):
- rr = RI.update((msg.as_builder().to_bytes(),))
+ rr = RI.update(can_capnp_to_list((msg.as_builder().to_bytes(),)))
if rr is not None and i > 50:
error_cnt += car.RadarData.Error.canError in rr.errors
self.assertEqual(error_cnt, 0)
diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
index fc1e844d504a69..22342c00785e1f 100644
--- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
+++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript
@@ -1,4 +1,4 @@
-Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version')
+Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python', 'np_version')
gen = "c_generated_code"
@@ -66,7 +66,7 @@ lenv.Clean(generated_files, Dir(gen))
generated_long = lenv.Command(generated_files,
source_list,
f"cd {Dir('.').abspath} && python3 long_mpc.py")
-lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python])
+lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python, pandad_python])
lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES")
lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES")
diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py
index c3fb60c61ad1aa..a7e3c0211d3ec7 100755
--- a/selfdrive/controls/radard.py
+++ b/selfdrive/controls/radard.py
@@ -10,8 +10,8 @@
from openpilot.common.params import Params
from openpilot.common.realtime import DT_CTRL, Ratekeeper, Priority, config_realtime_process
from openpilot.common.swaglog import cloudlog
-
from openpilot.common.simple_kalman import KF1D
+from openpilot.selfdrive.pandad import can_capnp_to_list
# Default lead acceleration decay set to 50% at 1s
@@ -307,7 +307,7 @@ def main():
while 1:
can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True)
- rr = RI.update(can_strings)
+ rr = RI.update(can_capnp_to_list(can_strings))
sm.update(0)
if rr is None:
continue
diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py
index 604a1df1248e86..a5155f0126b8dc 100755
--- a/selfdrive/debug/check_can_parser_performance.py
+++ b/selfdrive/debug/check_can_parser_performance.py
@@ -6,6 +6,7 @@
from cereal import car
from openpilot.selfdrive.car.tests.routes import CarTestRoute
from openpilot.selfdrive.car.tests.test_models import TestCarModelBase
+from openpilot.selfdrive.pandad import can_capnp_to_list
from openpilot.tools.plotjuggler.juggle import DEMO_ROUTE
N_RUNS = 10
@@ -25,12 +26,13 @@ class CarModelTestCase(TestCarModelBase):
CC = car.CarControl.new_message()
ets = []
for _ in tqdm(range(N_RUNS)):
- msgs = [(m.as_builder().to_bytes(),) for m in tm.can_msgs]
+ msgs = [m.as_builder().to_bytes() for m in tm.can_msgs]
start_t = time.process_time_ns()
for msg in msgs:
+ can_list = can_capnp_to_list([msg])
for cp in tm.CI.can_parsers:
if cp is not None:
- cp.update_strings(msg)
+ cp.update_strings(can_list)
ets.append((time.process_time_ns() - start_t) * 1e-6)
print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs')
diff --git a/selfdrive/pandad/SConscript b/selfdrive/pandad/SConscript
index 63a2c1e650d539..dcc1f9811ee0bd 100644
--- a/selfdrive/pandad/SConscript
+++ b/selfdrive/pandad/SConscript
@@ -6,6 +6,8 @@ panda = env.Library('panda', ['panda.cc', 'panda_comms.cc', 'spi.cc'])
env.Program('pandad', ['main.cc', 'pandad.cc'], LIBS=[panda] + libs)
env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc'])
-envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
+pandad_python = envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"])
+Export('pandad_python')
+
if GetOption('extras'):
env.Program('tests/test_pandad_usbprotocol', ['tests/test_pandad_usbprotocol.cc'], LIBS=[panda] + libs)
diff --git a/selfdrive/pandad/__init__.py b/selfdrive/pandad/__init__.py
index 2c80cd03c473ec..b72c8ccb57dd14 100644
--- a/selfdrive/pandad/__init__.py
+++ b/selfdrive/pandad/__init__.py
@@ -1,6 +1,7 @@
# Cython, now uses scons to build
-from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp
+from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp, can_capnp_to_list
assert can_list_to_can_capnp
+assert can_capnp_to_list
def can_capnp_to_can_list(can, src_filter=None):
ret = []
diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc
index d73541c17fb8c3..ad2393b986ccff 100644
--- a/selfdrive/pandad/can_list_to_can_capnp.cc
+++ b/selfdrive/pandad/can_list_to_can_capnp.cc
@@ -1,11 +1,12 @@
#include "cereal/messaging/messaging.h"
#include "selfdrive/pandad/panda.h"
+#include "opendbc/can/common.h"
-void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendCan, bool valid) {
+void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendcan, bool valid) {
MessageBuilder msg;
auto event = msg.initEvent(valid);
- auto canData = sendCan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
+ auto canData = sendcan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
int j = 0;
for (auto it = can_list.begin(); it != can_list.end(); it++, j++) {
auto c = canData[j];
@@ -18,3 +19,33 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri
kj::ArrayOutputStream output_stream(kj::ArrayPtr((unsigned char *)out.data(), msg_size));
capnp::writeMessage(output_stream, msg);
}
+
+// Converts a vector of Cap'n Proto serialized can strings into a vector of CanData structures.
+void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_list, bool sendcan) {
+ AlignedBuffer aligned_buf;
+ can_list.reserve(strings.size());
+
+ for (const auto &str : strings) {
+ // extract the messages
+ capnp::FlatArrayMessageReader reader(aligned_buf.align(str.data(), str.size()));
+ cereal::Event::Reader event = reader.getRoot();
+
+ auto frames = sendcan ? event.getSendcan() : event.getCan();
+
+ // Add new CanData entry
+ CanData &can_data = can_list.emplace_back();
+ can_data.nanos = event.getLogMonoTime();
+ can_data.frames.reserve(frames.size());
+
+ // Populate CAN frames
+ for (const auto &frame : frames) {
+ CanFrame &can_frame = can_data.frames.emplace_back();
+ can_frame.src = frame.getSrc();
+ can_frame.address = frame.getAddress();
+
+ // Copy CAN data
+ auto dat = frame.getDat();
+ can_frame.dat.assign(dat.begin(), dat.end());
+ }
+ }
+}
diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx
index dd3f3d702f6d15..8a12e1c4337b18 100644
--- a/selfdrive/pandad/pandad_api_impl.pyx
+++ b/selfdrive/pandad/pandad_api_impl.pyx
@@ -1,8 +1,10 @@
# distutils: language = c++
# cython: language_level=3
+from cython.operator cimport dereference as deref, preincrement as preinc
from libcpp.vector cimport vector
from libcpp.string cimport string
from libcpp cimport bool
+from libc.stdint cimport uint8_t, uint32_t, uint64_t
cdef extern from "panda.h":
cdef struct can_frame:
@@ -10,8 +12,19 @@ cdef extern from "panda.h":
string dat
long src
+cdef extern from "opendbc/can/common.h":
+ cdef struct CanFrame:
+ long src
+ uint32_t address
+ vector[uint8_t] dat
+
+ cdef struct CanData:
+ uint64_t nanos
+ vector[CanFrame] frames
+
cdef extern from "can_list_to_can_capnp.cc":
- void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendCan, bool valid)
+ void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendcan, bool valid)
+ void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan)
def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef can_frame *f
@@ -27,3 +40,17 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True):
cdef string out
can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid)
return out
+
+def can_capnp_to_list(strings, msgtype='can'):
+ cdef vector[CanData] data
+ can_capnp_to_can_list_cpp(strings, data, msgtype == 'sendcan')
+
+ result = []
+ cdef CanData *d
+ cdef vector[CanData].iterator it = data.begin()
+ while it != data.end():
+ d = &deref(it)
+ frames = [[f.address, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames]
+ result.append([d.nanos, frames])
+ preinc(it)
+ return result
diff --git a/tools/car_porting/examples/subaru_long_accel.ipynb b/tools/car_porting/examples/subaru_long_accel.ipynb
index 9d18a114df3ee8..35b92702a7e991 100644
--- a/tools/car_porting/examples/subaru_long_accel.ipynb
+++ b/tools/car_porting/examples/subaru_long_accel.ipynb
@@ -24,6 +24,7 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import DBC\n",
+ "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -50,7 +51,7 @@
"\n",
" for msg in lr:\n",
" if msg.which() == \"can\":\n",
- " cp.update_strings([msg.as_builder().to_bytes()])\n",
+ " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
" es_distance_history.append(copy.copy(cp.vl[\"ES_Distance\"]))\n",
" es_brake_history.append(copy.copy(cp.vl[\"ES_Brake\"]))\n",
" es_status_history.append(copy.copy(cp.vl[\"ES_Status\"]))\n",
diff --git a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
index 3d5055cbc29b04..8b762fecb8461b 100644
--- a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
+++ b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb
@@ -27,6 +27,7 @@
"from opendbc.can.parser import CANParser\n",
"\n",
"from openpilot.selfdrive.car.subaru.values import CanBus, DBC\n",
+ "from openpilot.selfdrive.pandad import can_capnp_to_list\n",
"from openpilot.tools.lib.logreader import LogReader\n",
"\n",
"\"\"\"\n",
@@ -50,7 +51,7 @@
" examples = []\n",
"\n",
" for msg in can_msgs:\n",
- " cp.update_strings([msg.as_builder().to_bytes()])\n",
+ " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n",
" steering_torque_history.append(copy.copy(cp.vl[\"Steering_Torque\"]))\n",
"\n",
" steer_warning_last = False\n",
From 7de618a5cf38a759d3986d775f7d7f7a35167050 Mon Sep 17 00:00:00 2001
From: Shane Smiskol
Date: Wed, 31 Jul 2024 16:12:37 -0700
Subject: [PATCH 20/20] ensure alerts_generated.h is built (#33157)
don't build alerts_generated.h in test, and ensure scons builds it more reliably + clean up support
---
selfdrive/ui/SConscript | 2 +-
selfdrive/ui/update_translations.py | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/selfdrive/ui/SConscript b/selfdrive/ui/SConscript
index c6b4860bf7f1c4..509f2aebd1a921 100644
--- a/selfdrive/ui/SConscript
+++ b/selfdrive/ui/SConscript
@@ -40,7 +40,7 @@ translation_sources = [f"#selfdrive/ui/translations/{l}.ts" for l in languages.v
translation_targets = [src.replace(".ts", ".qm") for src in translation_sources]
lrelease_bin = 'third_party/qt5/larch64/bin/lrelease' if arch == 'larch64' else 'lrelease'
-lupdate = qt_env.Command(translation_sources, qt_src + widgets_src, "selfdrive/ui/update_translations.py")
+lupdate = qt_env.Command(translation_sources + ["translations/alerts_generated.h"], qt_src + widgets_src, "selfdrive/ui/update_translations.py")
lrelease = qt_env.Command(translation_targets, translation_sources, f"{lrelease_bin} $SOURCES")
qt_env.Depends(lrelease, lupdate)
qt_env.NoClean(translation_sources)
diff --git a/selfdrive/ui/update_translations.py b/selfdrive/ui/update_translations.py
index 0fe0f05ac4abbc..f13c65fdaed867 100755
--- a/selfdrive/ui/update_translations.py
+++ b/selfdrive/ui/update_translations.py
@@ -25,8 +25,6 @@ def generate_translations_include():
def update_translations(vanish: bool = False, translation_files: None | list[str] = None, translations_dir: str = TRANSLATIONS_DIR):
- generate_translations_include()
-
if translation_files is None:
with open(LANGUAGES_FILE) as f:
translation_files = json.load(f).values()
@@ -48,4 +46,5 @@ def update_translations(vanish: bool = False, translation_files: None | list[str
parser.add_argument("--vanish", action="store_true", help="Remove translations with source text no longer found")
args = parser.parse_args()
+ generate_translations_include()
update_translations(args.vanish)