Skip to main content

mobility-mode-sequence-search

Rust package for mode-sequence search in mobility.

Scope

This package owns:

  • compact indexing of mode and cost data
  • top-k mode-sequence search
  • chain-level parallelism
  • a Python extension API that accepts and returns columnar data

The main mobility repository remains responsible for orchestration, validation, and any fallback Python implementation.

How It Works

This package searches feasible mode sequences for an ordered chain of places.

For example, if someone goes from home to a shop, feasible answers might include:

  • walk, walk
  • car outbound, car return
  • bike outbound, bike return

Feasibility is constrained by a few simple rules:

  • a vehicle can only be used if it is currently at the traveler's location
  • if a vehicle leaves home, it must end back at home
  • some outbound choices come in matched pairs, requiring a linked return mode later in the same subtour

Conceptually, the algorithm has four stages:

  1. Split long chains into smaller home-to-home segments when possible.
  2. Search each segment incrementally, always expanding the cheapest partial answer first.
  3. Merge the best segment-level answers into full-chain answers.
  4. Keep only the leading answers needed to reach the requested cumulative probability threshold.

Before search, each input chain is closed internally by appending the starting location to the end. This matches the legacy Python backend, which searches a closed tour rather than the raw caller-provided chain.

Pseudocode

for each chain:
  split the chain into home-to-home segments

  for each segment:
    start with one empty partial answer

    while there are still partial answers to explore:
      take the cheapest partial answer so far

      if it already covers every leg:
        if all vehicles are back home:
          save it as a feasible full answer
        continue

      look up the next leg's available modes

      for each allowed mode:
        update vehicle locations
        update any forced future return-mode rule

        if the partial answer is still feasible:
          put the extended partial answer back into the queue

  merge the best segment answers into full-chain answers
  prune the low-probability tail
  write the retained answers as output rows

Implementation details are in rust/search.rs and rust/input.rs.

Python API

import polars as pl
from mobility_mode_sequence_search import search_mode_sequences

result = search_mode_sequences(
    location_chain_steps=pl.DataFrame(...),
    leg_mode_costs=pl.DataFrame(...),
    mode_metadata=pl.DataFrame(...),
    k_sequences=20,
    cumulative_prob_threshold=0.98,
    n_threads=None,
)

Input Schemas

location_chain_steps

Grouped form:

  • utility_profile_id: UInt32 (optional, defaults to zero)
  • dest_seq_id: UInt64
  • locations: List[UInt32]

Long-form:

  • utility_profile_id: UInt32 (optional, defaults to zero)
  • dest_seq_id: UInt64
  • seq_step_index: UInt32
  • location: UInt32

leg_mode_costs

  • utility_profile_id: UInt32 (optional, defaults to zero)
  • origin: UInt32
  • destination: UInt32
  • mode_id: UInt16
  • cost: Float64

mode_metadata

  • mode_id: UInt16
  • needs_vehicle: Boolean
  • vehicle_id: UInt8 | Utf8 | null
  • multimodal: Boolean
  • is_return_mode: Boolean
  • return_mode_id: UInt16 | null

At the package boundary, vehicle_id may be integer/null or string/null. String labels are normalized internally into numeric ids before search. Mixed integer and string representations within one call are rejected.

Several utility profiles can be searched in one call. Chains read the costs with the same utility_profile_id, while mode metadata and the Rayon thread pool are shared across all profiles. Each referenced profile must provide the mode costs needed by its chains. Calls without the column keep the original single-profile behavior.

Output Schema

  • utility_profile_id: UInt32 (when supplied on the chains)
  • dest_seq_id: UInt64
  • mode_seq_index: UInt32
  • seq_step_index: UInt32
  • location: UInt32
  • mode_index: UInt16

Development

mamba run -n mobility python -m pip install -e .[dev]
mamba run -n mobility python -m pytest
mamba run -n mobility python -m maturin build --release

Performance Fixture

A standalone synthetic performance case is available at tests/perf_synthetic_case.py.

Example:

mamba run -n mobility python tests/perf_synthetic_case.py --n-chains 2000 --chain-len 18 --n-locations 128 --k-sequences 20

Metadata

Release files for mobility-mode-sequence-search 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mobility-mode-sequence-search 0.1.1
File Size Uploaded
mobility_mode_sequence_search-0.1.1.tar.gz 22.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for mobility-mode-sequence-search 0.1.1
File Interpreter ABI Platform
mobility_mode_sequence_search-0.1.1-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
mobility_mode_sequence_search-0.1.1-cp311-abi3-manylinux_2_34_x86_64.whl CPython 3.11 abi3 Linux glibc 2.34+ x86-64 Details
mobility_mode_sequence_search-0.1.1-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details

Total release size: 856.3 kB

Release files / mobility_mode_sequence_search-0.1.1.tar.gz

Download URL mobility_mode_sequence_search-0.1.1.tar.gz
Size 22.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cd937d469b711eefe30629051c8da66a87ea87b0cc93462e265fecb5eade98f4
BLAKE2b-256 checksum
How to use checksums
bee4fc736e577653f3e254373967e16aa3d806695753dacf79f3a977fb52100d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release files / mobility_mode_sequence_search-0.1.1-cp311-abi3-win_amd64.whl

Download URL mobility_mode_sequence_search-0.1.1-cp311-abi3-win_amd64.whl
Size 208.8 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
0b4aaebaaea87efafb5afa56d50213ebf4e41d5f1ba23dfcd55fd86a0c36566f
BLAKE2b-256 checksum
How to use checksums
65b8e4d90cf6378ce752c2f5f64060bad7a7fa3ccebf92023f703b4b9760d4b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release files / mobility_mode_sequence_search-0.1.1-cp311-abi3-manylinux_2_34_x86_64.whl

Download URL mobility_mode_sequence_search-0.1.1-cp311-abi3-manylinux_2_34_x86_64.whl
Size 333.3 kB
Tags CPython 3.11 Linux glibc 2.34+ x86-64 abi3
SHA-256 checksum
How to use checksums
003f09c137b039a0cdccc15c8003948566a0cd7e6c861fb9ed37b1bb71da9569
BLAKE2b-256 checksum
How to use checksums
0fa4131b433ea8be49ae662522320404277643b3d5f796413978276f75d9bbe5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release files / mobility_mode_sequence_search-0.1.1-cp311-abi3-macosx_11_0_arm64.whl

Download URL mobility_mode_sequence_search-0.1.1-cp311-abi3-macosx_11_0_arm64.whl
Size 292.2 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8286da0e7f215747675cd5b825dc5696ceca7e0a6d7cfd44204569638c33f35d
BLAKE2b-256 checksum
How to use checksums
6627fea29f8d0a20729ab746d23713cc85a0d829e21953347405a9143dfd334d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

4 release files

0.1.0

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page