code: def test_local_fiber_tracking_workflow():
      with TemporaryDirectory() as out_dir:
          data_path, bval_path, bvec_path = get_fnames("small_64D")
          volume, affine = load_nifti(data_path)
          mask = np.ones_like(volume[:, :, :, 0], dtype=np.uint8)
          mask_path = join(out_dir, "tmp_mask.nii.gz")
          save_nifti(mask_path, mask, affine)
  
          reconst_csd_flow = ReconstCSDFlow()
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore",
                  message=descoteaux07_legacy_msg,
                  category=PendingDeprecationWarning,
              )
              reconst_csd_flow.run(
                  data_path,
                  bval_path,
                  bvec_path,
                  mask_path,
                  out_dir=out_dir,
                  extract_pam_values=True,
              )
  
          pam_path = reconst_csd_flow.last_generated_outputs["out_pam"]
          gfa_path = reconst_csd_flow.last_generated_outputs["out_gfa"]
  
          # Create seeding mask by thresholding the gfa
          mask_flow = MaskFlow()
          mask_flow.run(gfa_path, 0.8, out_dir=out_dir)
          seeds_path = mask_flow.last_generated_outputs["out_mask"]
          mask_path = mask_flow.last_generated_outputs["out_mask"]
  
          gfa_img, gfa_affine = load_nifti(gfa_path)
          save_nifti(gfa_path, gfa_img, gfa_affine)
  
          # Test tracking with pam no sh
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          assert_equal(lf_track_pam.get_short_name(), "track_local")
          lf_track_pam.run(pam_path, gfa_path, seeds_path)
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test tracking with binary stopping criterion
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          lf_track_pam.run(
              pam_path, mask_path, seeds_path, use_binary_mask=True
          )
  
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test tracking with pam with sh
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          lf_track_pam.run(
              pam_path, gfa_path, seeds_path, tracking_method="eudx"
          )
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test tracking with pam with sh and deterministic getter
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore",
                  message=descoteaux07_legacy_msg,
                  category=PendingDeprecationWarning,
              )
              lf_track_pam.run(
                  pam_path,
                  gfa_path,
                  seeds_path,
                  tracking_method="deterministic",
              )
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test tracking with pam with sh and probabilistic getter
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore",
                  message=descoteaux07_legacy_msg,
                  category=PendingDeprecationWarning,
              )
              lf_track_pam.run(
                  pam_path,
                  gfa_path,
                  seeds_path,
                  tracking_method="probabilistic",
              )
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test tracking with pam with sh and closest peaks getter
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore",
                  message=descoteaux07_legacy_msg,
                  category=PendingDeprecationWarning,
              )
              lf_track_pam.run(
                  pam_path,
                  gfa_path,
                  seeds_path,
                  tracking_method="closestpeaks",
              )
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_false(is_tractogram_empty(tractogram_path))
  
          # Test that tracking returns seeds
          lf_track_pam = LocalFiberTrackingPAMFlow()
          lf_track_pam._force_overwrite = True
          with warnings.catch_warnings():
              warnings.filterwarnings(
                  "ignore",
                  message=descoteaux07_legacy_msg,
                  category=PendingDeprecationWarning,
              )
              lf_track_pam.run(
                  pam_path,
                  gfa_path,
                  seeds_path,
                  tracking_method="deterministic",
                  save_seeds=True,
              )
          tractogram_path = lf_track_pam.last_generated_outputs[
              "out_tractogram"
          ]
          assert_true(tractogram_has_seeds(tractogram_path))
          assert_true(
              seeds_are_same_space_as_streamlines(tractogram_path)
          )
  
file_path: dipy/dipy/workflows/tests/test_tracking.py
imports: from os.path import join
  from tempfile import TemporaryDirectory
  import warnings
  import nibabel
  import numpy
  from numpy.testing import assert_equal
  from dipy.testing import assert_false, assert_true
  from dipy.data import get_fnames
  from dipy.io.image import save_nifti, load_nifti
  from dipy.io.streamline import load_tractogram
  from dipy.reconst.shm import descoteaux07_legacy_msg
  from dipy.workflows.mask import MaskFlow
  from dipy.workflows.reconst import ReconstCSDFlow
  from dipy.workflows.tracking import LocalFiberTrackingPAMFlow, PFTrackingPAMFlow
label_desc: Use image node_id 2 for calling a global function with example usage: test_local_fiber_tracking_workflow() without return types