Migration Guide#
phasecurvefit orders phase-space tracers through a single, pluggable entry
point: pcf.order(positions, velocities[, orderer]). The velocity-following
local-flow walk is one orderer among several, alongside the MST-backbone orderer.
Warning
walk_local_flow is deprecated and will be removed in v0.4. It still
works β unchanged signature and WalkLocalFlowResult return β but calling it now
emits a DeprecationWarning. Use pcf.order(positions, velocities) instead: it
runs the same local-flow walk by default, without the warning. combine_results,
order_w, the metrics, the query strategies, and pcf.nn are unchanged.
order() is the entry point#
pcf.order(positions, velocities) runs the velocity-following walk by default
(via LocalFlowOrderer), exactly reproducing walk_local_flow(positions, velocities). Pass an explicit orderer to select a different algorithm.
The deprecated free function:
# Before (deprecated; warns, removed in v0.4):
result = pcf.walk_local_flow(pos, vel, start_idx=0, metric_scale=1.0)
The replacement:
import jax.numpy as jnp
import phasecurvefit as pcf
pos = {"x": jnp.array([0.0, 1.0, 2.0, 3.0, 4.0])}
vel = {"x": jnp.ones(5)}
# The default orderer is the local-flow walk:
result = pcf.order(pos, vel)
assert result.ordering.shape == (5,)
# For non-default walk parameters, configure a LocalFlowOrderer:
tuned = pcf.order(pos, vel, pcf.orderers.LocalFlowOrderer(metric_scale=0.5))
start_idx, metric_scale, max_dist, direction, config, and the other
walk knobs move from walk_local_flow(...) keyword arguments onto
LocalFlowOrderer(...); a usys argument for Quantity inputs moves to
order(..., metadata=pcf.StateMetadata(usys=...)).
New: the MST orderer#
MSTOrderer orders tracers along the longest path
(graph diameter) of the minimum spanning tree of a kNN graph. It needs no
progenitor or start index, which makes it the tool of choice for near-closed
loops where the velocity field reverses and a single walk covers only one arm.
import jax.numpy as jnp
import phasecurvefit as pcf
t = jnp.linspace(0.0, 1.0, 60)
pos = {"x": 10.0 * t, "y": jnp.sin(3.0 * t)}
vel = {"x": jnp.ones(60), "y": 3.0 * jnp.cos(3.0 * t)}
mst = pcf.order(pos, vel, pcf.orderers.MSTOrderer(k=8, jump_cap=2.0))
assert mst.gamma_range == (-1.0, 1.0)
MSTOrderer runs host-side (NumPy/SciPy) and requires the optional mst extra β
see below. Its opt-in velocity mechanisms are covered in the
Orderers Guide.
Unified result type#
WalkLocalFlowResult is a thin subclass of the unified
OrderingResult. Its public name, fields
(positions, velocities, indices, gamma_range), properties (ordering,
ordered, n_visited, β¦), and __call__ interpolation are all unchanged:
import jax.numpy as jnp
import phasecurvefit as pcf
pos = {"x": jnp.array([0.0, 1.0, 2.0, 3.0, 4.0])}
vel = {"x": jnp.ones(5)}
result = pcf.order(pos, vel)
# A walk result *is* an OrderingResult now
assert isinstance(result, pcf.orderers.OrderingResult)
# ...with all the same accessors
assert result.ordering.shape == (5,)
midpoint = result(0.5)
Two consequences worth knowing:
train_autoencoderaccepts anyOrderingResult(it previously dispatched onWalkLocalFlowResult). Walk results still work unchanged, and MST results feed the autoencoder without any adapter.If you want to accept any ordererβs output in your own code, annotate against
OrderingResultrather thanWalkLocalFlowResult.
Optional dependency: the mst extra#
MSTOrderer depends on scipy, which is an optional dependency (it is not
required for the local-flow walk or the autoencoder):
pip install phasecurvefit[mst] # or: uv add phasecurvefit --extra mst
pip install phasecurvefit[all] # includes mst, interop, and kdtree
import phasecurvefit works without scipy; only MSTOrderer.order() requires
it, and raises a clear error telling you to install the extra if it is missing.
Removed#
phasecurvefit._src.abstract_walk_result(and itsAbstractWalkResult) β an unused internal duplicate ofAbstractResult. It was never part of the public API. TargetOrderingResult(orphasecurvefit._src.abstract_result.AbstractResult) instead.
Compatibility summary#
Symbol |
Status |
|---|---|
|
Primary ordering API |
|
Deprecated; warns, removed in v0.4. Use |
|
Unchanged |
|
Unchanged public API; subclasses |
|
Unchanged |
|
Accepts any |
|
Optional |
|
Removed (internal, unused) |