cursus.steps.scripts.graph_feature_processing

GraphFeatureProcessing step script (Nexus feature_processing → Cursus).

Ports Nexus’s run_feature_processing.py orchestrator: it runs the bundled prepare_graphstorm_format.py → custom features → sanity_check.py from the BYO GraphStorm image’s code bundle (mounted at /opt/ml/processing/input/code). The heavy feature-engineering modules (prepare_graphstorm_format.py + graph_utils + compute_order_features + custom_features + sanity_check.py, ~46KB) live in that image, NOT in cursus — this is a BYO-container step, so cursus vendors only the thin contract-driven orchestrator.

Contract (from graph_feature_processing.step.yaml):

inputs: SUBGRAPHS (/opt/ml/processing/input/subgraphs), SEEDS (/opt/ml/processing/input/seeds) args: –config (the materialized config.yaml, staged in the code/source dir)

–num-chunks

output: /opt/ml/processing/output (the GConstruct input tree: nodes/ edges/ *_idx.parquet

gconstruct_config.json), uploaded EndOfJob.

Load-bearing behaviors (preserved by delegating to the bundled scripts verbatim):
  • type-aware node/edge feature extraction (numerical log1p, temporal, spatial-haversine, aggregation, structural), reverse-edge generation, 1e-6 constant-column noise, label clip ≥0,

  • node-ID-keyed multi-task train/val/test masks, gconstruct_config.json emission,

  • sanity_check.py validation of the output tree.

run(cmd)[source]
apply_custom_features(config_path)[source]

Apply custom features if the config declares a custom_features section (bundled module).

main()[source]