Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Dataframe for graphs. Built in Rust.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Polars-shaped dataframes for graph data.
Ursa is a graph analytics library for Python. You write a query the way you write a Polars query. A Rust engine runs it: Apache Arrow for the data, DataFusion for the plan, and parallel, deterministic kernels for the algorithms.
There is no Graph object. An edge table is the graph. Every operation returns a table.
Documentation: https://cldixon.github.io/ursa/
pip install ursa-graph # then: import ursa
# or
uv add ursa-graph
The package on PyPI is ursa-graph. The import name is ursa. Wheels include the compiled core, so you need no Rust toolchain. Python 3.10 or later.
polars is optional. Install pip install 'ursa-graph[polars]' for .to_polars() and ur.from_polars(). Data crosses the boundary as Arrow either way.
Paste this into a Python session. It needs no files and no network.
import ursa as ur
edges = ur.datasets.load_karate() # 34 nodes, 78 edges, bundled with the package
top = (
edges.nodes()
.with_columns(
degree=ur.degree(edges, direction="both"),
triangles=ur.triangle_count(edges),
community=ur.louvain(edges, seed=1),
)
.sort("degree", descending=True)
.head(5)
.collect() # one query in the engine; the result is Arrow data
)
print(top)
shape: (5, 4)
┌───────┬────────┬───────────┬───────────┐
│ id ┆ degree ┆ triangles ┆ community │
│ --- ┆ --- ┆ --- ┆ --- │
│ int64 ┆ uint32 ┆ uint32 ┆ uint32 │
╞═══════╪════════╪═══════════╪═══════════╡
│ 33 ┆ 17 ┆ 15 ┆ 2 │
│ 0 ┆ 16 ┆ 18 ┆ 0 │
│ 32 ┆ 12 ┆ 13 ┆ 2 │
│ 2 ┆ 10 ┆ 11 ┆ 0 │
│ 1 ┆ 9 ┆ 12 ┆ 0 │
└───────┴────────┴───────────┴───────────┘
To run the same query over your own data, change the first line:
edges = ur.scan_edges("edges.parquet", src="from_id", dst="to_id")
Nothing after that line changes. See the quickstart.
with_columns, filter, sort, select, group_by, join. Lazy until collect(). If you know Polars, you know the shape.Ursa is version 0.4 and in active development. The Limits page lists what does not run yet.
| Layer | Language | Role |
|---|---|---|
python/ursa | Python | The API: signatures and docs, converting your data to Arrow, getting results out. Each frame method calls into Rust. |
ursa-plan | Rust | The plan a frame holds: it validates each step as you add it, and runs the whole plan as one DataFusion query, with graph operations as plan nodes. |
ursa-core | Rust | The CSR topology index and the kernels. Parallel with rayon; compiles for wasm32 without it. |
ursa-py | Rust | PyO3 bindings. Arrow crosses as zero-copy capsules; the GIL is released during compute. |
The design document is design/SPEC.md.
uv sync # builds the extension and installs the dev tools
uv run pytest # the Python suite, including every example in the docs
cargo test --workspace # the Rust suites
uv run ruff check . && uv run ty check
uv sync --group docs && uv run zensical serve # the documentation site, served locally
The docs are in docs/, built with Zensical and served by GitHub Pages. Every ```python block in them runs in the test suite, so an example that stops working fails CI. The benchmark harness is in benchmarks/.
MIT OR Apache-2.0.