Skip to content

pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

Description

@marcouderzo

Hello,
I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
adata_gd75 = st.convert_scanpy(adata_gd75)
adata_gd75.obs['clusters'].value_counts()
clusters
7 490
16 383
6 325
14 271
22 269
0 260
4 249
15 241
10 226
2 224
21 215
8 212
5 176
1 169
17 153
20 111
12 100
9 82
13 74
23 63
27 48
3 42
29 38
28 35
11 28
19 23
25 18
30 7
24 7
32 7
18 5
sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
sc.tl.umap(adata_gd75, random_state=30)
sc.pl.umap(adata_gd75, color="clusters")
adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely

At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

networkx/algorithms/simple_paths.py: all_simple_paths(...)
networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)

The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

However, afterwards, I run:

for lin in lineage:
lin = [str(c) for c in lin]
lineage_str = array_to_string(lin)
try:
st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
except Exception as e:
print(f'{lineage_str}:{e}')

This yields:

...
Start to construct the trajectory: 28 -> 17 -> 15
28-17-15:Connectivity is undefined for the null graph.
Start to construct the trajectory: 28 -> 16 -> 1
28-1-16:Connectivity is undefined for the null graph.
Start to construct the trajectory: 2 -> 28 -> 16
28-2-16:Connectivity is undefined for the null graph.
Start to construct the trajectory: 28 -> 4 -> 16
28-4-16:Connectivity is undefined for the null graph.
Start to construct the trajectory: 28 -> 16 -> 7
28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
Start to construct the trajectory: 28 -> 12 -> 16
28-12-16:Connectivity is undefined for the null graph.
Start to construct the trajectory: 28 -> 16 -> 15
28-15-16:Connectivity is undefined for the null graph.
...

So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

Any advice? Thanks.

Best,
Marco Uderzo

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
      Skip to content

      pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

      Description

      @marcouderzo

      Hello,
      I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

      adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
      adata_gd75 = st.convert_scanpy(adata_gd75)
      adata_gd75.obs['clusters'].value_counts()
      clusters
      7 490
      16 383
      6 325
      14 271
      22 269
      0 260
      4 249
      15 241
      10 226
      2 224
      21 215
      8 212
      5 176
      1 169
      17 153
      20 111
      12 100
      9 82
      13 74
      23 63
      27 48
      3 42
      29 38
      28 35
      11 28
      19 23
      25 18
      30 7
      24 7
      32 7
      18 5
      sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
      sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
      sc.tl.umap(adata_gd75, random_state=30)
      sc.pl.umap(adata_gd75, color="clusters")
      adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
      st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
      

      At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

      networkx/algorithms/simple_paths.py: all_simple_paths(...)
      networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
      networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
      

      The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

      However, afterwards, I run:

      for lin in lineage:
      lin = [str(c) for c in lin]
      lineage_str = array_to_string(lin)
      try:
      st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
      st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
      show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
      fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
      except Exception as e:
      print(f'{lineage_str}:{e}')
      

      This yields:

      ...
      Start to construct the trajectory: 28 -> 17 -> 15
      28-17-15:Connectivity is undefined for the null graph.
      Start to construct the trajectory: 28 -> 16 -> 1
      28-1-16:Connectivity is undefined for the null graph.
      Start to construct the trajectory: 2 -> 28 -> 16
      28-2-16:Connectivity is undefined for the null graph.
      Start to construct the trajectory: 28 -> 4 -> 16
      28-4-16:Connectivity is undefined for the null graph.
      Start to construct the trajectory: 28 -> 16 -> 7
      28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
      Start to construct the trajectory: 28 -> 12 -> 16
      28-12-16:Connectivity is undefined for the null graph.
      Start to construct the trajectory: 28 -> 16 -> 15
      28-15-16:Connectivity is undefined for the null graph.
      ...
      

      So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

      Any advice? Thanks.

      Best,
      Marco Uderzo

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
          Skip to content

          pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

          Description

          @marcouderzo

          Hello,
          I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

          adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
          adata_gd75 = st.convert_scanpy(adata_gd75)
          adata_gd75.obs['clusters'].value_counts()
          clusters
          7 490
          16 383
          6 325
          14 271
          22 269
          0 260
          4 249
          15 241
          10 226
          2 224
          21 215
          8 212
          5 176
          1 169
          17 153
          20 111
          12 100
          9 82
          13 74
          23 63
          27 48
          3 42
          29 38
          28 35
          11 28
          19 23
          25 18
          30 7
          24 7
          32 7
          18 5
          sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
          sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
          sc.tl.umap(adata_gd75, random_state=30)
          sc.pl.umap(adata_gd75, color="clusters")
          adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
          st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
          

          At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

          networkx/algorithms/simple_paths.py: all_simple_paths(...)
          networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
          networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
          

          The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

          However, afterwards, I run:

          for lin in lineage:
          lin = [str(c) for c in lin]
          lineage_str = array_to_string(lin)
          try:
          st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
          st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
          show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
          fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
          except Exception as e:
          print(f'{lineage_str}:{e}')
          

          This yields:

          ...
          Start to construct the trajectory: 28 -> 17 -> 15
          28-17-15:Connectivity is undefined for the null graph.
          Start to construct the trajectory: 28 -> 16 -> 1
          28-1-16:Connectivity is undefined for the null graph.
          Start to construct the trajectory: 2 -> 28 -> 16
          28-2-16:Connectivity is undefined for the null graph.
          Start to construct the trajectory: 28 -> 4 -> 16
          28-4-16:Connectivity is undefined for the null graph.
          Start to construct the trajectory: 28 -> 16 -> 7
          28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
          Start to construct the trajectory: 28 -> 12 -> 16
          28-12-16:Connectivity is undefined for the null graph.
          Start to construct the trajectory: 28 -> 16 -> 15
          28-15-16:Connectivity is undefined for the null graph.
          ...
          

          So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

          Any advice? Thanks.

          Best,
          Marco Uderzo

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
              Skip to content

              pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

              Description

              @marcouderzo

              Hello,
              I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

              adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
              adata_gd75 = st.convert_scanpy(adata_gd75)
              adata_gd75.obs['clusters'].value_counts()
              clusters
              7 490
              16 383
              6 325
              14 271
              22 269
              0 260
              4 249
              15 241
              10 226
              2 224
              21 215
              8 212
              5 176
              1 169
              17 153
              20 111
              12 100
              9 82
              13 74
              23 63
              27 48
              3 42
              29 38
              28 35
              11 28
              19 23
              25 18
              30 7
              24 7
              32 7
              18 5
              sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
              sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
              sc.tl.umap(adata_gd75, random_state=30)
              sc.pl.umap(adata_gd75, color="clusters")
              adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
              st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
              

              At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

              networkx/algorithms/simple_paths.py: all_simple_paths(...)
              networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
              networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
              

              The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

              However, afterwards, I run:

              for lin in lineage:
              lin = [str(c) for c in lin]
              lineage_str = array_to_string(lin)
              try:
              st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
              st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
              show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
              fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
              except Exception as e:
              print(f'{lineage_str}:{e}')
              

              This yields:

              ...
              Start to construct the trajectory: 28 -> 17 -> 15
              28-17-15:Connectivity is undefined for the null graph.
              Start to construct the trajectory: 28 -> 16 -> 1
              28-1-16:Connectivity is undefined for the null graph.
              Start to construct the trajectory: 2 -> 28 -> 16
              28-2-16:Connectivity is undefined for the null graph.
              Start to construct the trajectory: 28 -> 4 -> 16
              28-4-16:Connectivity is undefined for the null graph.
              Start to construct the trajectory: 28 -> 16 -> 7
              28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
              Start to construct the trajectory: 28 -> 12 -> 16
              28-12-16:Connectivity is undefined for the null graph.
              Start to construct the trajectory: 28 -> 16 -> 15
              28-15-16:Connectivity is undefined for the null graph.
              ...
              

              So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

              Any advice? Thanks.

              Best,
              Marco Uderzo

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
                  Skip to content

                  pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

                  Description

                  @marcouderzo

                  Hello,
                  I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

                  adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
                  adata_gd75 = st.convert_scanpy(adata_gd75)
                  adata_gd75.obs['clusters'].value_counts()
                  clusters
                  7 490
                  16 383
                  6 325
                  14 271
                  22 269
                  0 260
                  4 249
                  15 241
                  10 226
                  2 224
                  21 215
                  8 212
                  5 176
                  1 169
                  17 153
                  20 111
                  12 100
                  9 82
                  13 74
                  23 63
                  27 48
                  3 42
                  29 38
                  28 35
                  11 28
                  19 23
                  25 18
                  30 7
                  24 7
                  32 7
                  18 5
                  sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
                  sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
                  sc.tl.umap(adata_gd75, random_state=30)
                  sc.pl.umap(adata_gd75, color="clusters")
                  adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
                  st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
                  

                  At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

                  networkx/algorithms/simple_paths.py: all_simple_paths(...)
                  networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
                  networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
                  

                  The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

                  However, afterwards, I run:

                  for lin in lineage:
                  lin = [str(c) for c in lin]
                  lineage_str = array_to_string(lin)
                  try:
                  st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
                  st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
                  show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
                  fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
                  except Exception as e:
                  print(f'{lineage_str}:{e}')
                  

                  This yields:

                  ...
                  Start to construct the trajectory: 28 -> 17 -> 15
                  28-17-15:Connectivity is undefined for the null graph.
                  Start to construct the trajectory: 28 -> 16 -> 1
                  28-1-16:Connectivity is undefined for the null graph.
                  Start to construct the trajectory: 2 -> 28 -> 16
                  28-2-16:Connectivity is undefined for the null graph.
                  Start to construct the trajectory: 28 -> 4 -> 16
                  28-4-16:Connectivity is undefined for the null graph.
                  Start to construct the trajectory: 28 -> 16 -> 7
                  28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
                  Start to construct the trajectory: 28 -> 12 -> 16
                  28-12-16:Connectivity is undefined for the null graph.
                  Start to construct the trajectory: 28 -> 16 -> 15
                  28-15-16:Connectivity is undefined for the null graph.
                  ...
                  

                  So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

                  Any advice? Thanks.

                  Best,
                  Marco Uderzo

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
                      Skip to content

                      pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

                      Description

                      @marcouderzo

                      Hello,
                      I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

                      adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
                      adata_gd75 = st.convert_scanpy(adata_gd75)
                      adata_gd75.obs['clusters'].value_counts()
                      clusters
                      7 490
                      16 383
                      6 325
                      14 271
                      22 269
                      0 260
                      4 249
                      15 241
                      10 226
                      2 224
                      21 215
                      8 212
                      5 176
                      1 169
                      17 153
                      20 111
                      12 100
                      9 82
                      13 74
                      23 63
                      27 48
                      3 42
                      29 38
                      28 35
                      11 28
                      19 23
                      25 18
                      30 7
                      24 7
                      32 7
                      18 5
                      sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
                      sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
                      sc.tl.umap(adata_gd75, random_state=30)
                      sc.pl.umap(adata_gd75, color="clusters")
                      adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
                      st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
                      

                      At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

                      networkx/algorithms/simple_paths.py: all_simple_paths(...)
                      networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
                      networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
                      

                      The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

                      However, afterwards, I run:

                      for lin in lineage:
                      lin = [str(c) for c in lin]
                      lineage_str = array_to_string(lin)
                      try:
                      st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
                      st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
                      show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
                      fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
                      except Exception as e:
                      print(f'{lineage_str}:{e}')
                      

                      This yields:

                      ...
                      Start to construct the trajectory: 28 -> 17 -> 15
                      28-17-15:Connectivity is undefined for the null graph.
                      Start to construct the trajectory: 28 -> 16 -> 1
                      28-1-16:Connectivity is undefined for the null graph.
                      Start to construct the trajectory: 2 -> 28 -> 16
                      28-2-16:Connectivity is undefined for the null graph.
                      Start to construct the trajectory: 28 -> 4 -> 16
                      28-4-16:Connectivity is undefined for the null graph.
                      Start to construct the trajectory: 28 -> 16 -> 7
                      28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
                      Start to construct the trajectory: 28 -> 12 -> 16
                      28-12-16:Connectivity is undefined for the null graph.
                      Start to construct the trajectory: 28 -> 16 -> 15
                      28-15-16:Connectivity is undefined for the null graph.
                      ...
                      

                      So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

                      Any advice? Thanks.

                      Best,
                      Marco Uderzo

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
                          Skip to content

                          pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

                          Description

                          @marcouderzo

                          Hello,
                          I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

                          adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
                          adata_gd75 = st.convert_scanpy(adata_gd75)
                          adata_gd75.obs['clusters'].value_counts()
                          clusters
                          7 490
                          16 383
                          6 325
                          14 271
                          22 269
                          0 260
                          4 249
                          15 241
                          10 226
                          2 224
                          21 215
                          8 212
                          5 176
                          1 169
                          17 153
                          20 111
                          12 100
                          9 82
                          13 74
                          23 63
                          27 48
                          3 42
                          29 38
                          28 35
                          11 28
                          19 23
                          25 18
                          30 7
                          24 7
                          32 7
                          18 5
                          sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
                          sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
                          sc.tl.umap(adata_gd75, random_state=30)
                          sc.pl.umap(adata_gd75, color="clusters")
                          adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
                          st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
                          

                          At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

                          networkx/algorithms/simple_paths.py: all_simple_paths(...)
                          networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
                          networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
                          

                          The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

                          However, afterwards, I run:

                          for lin in lineage:
                          lin = [str(c) for c in lin]
                          lineage_str = array_to_string(lin)
                          try:
                          st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
                          st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
                          show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
                          fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
                          except Exception as e:
                          print(f'{lineage_str}:{e}')
                          

                          This yields:

                          ...
                          Start to construct the trajectory: 28 -> 17 -> 15
                          28-17-15:Connectivity is undefined for the null graph.
                          Start to construct the trajectory: 28 -> 16 -> 1
                          28-1-16:Connectivity is undefined for the null graph.
                          Start to construct the trajectory: 2 -> 28 -> 16
                          28-2-16:Connectivity is undefined for the null graph.
                          Start to construct the trajectory: 28 -> 4 -> 16
                          28-4-16:Connectivity is undefined for the null graph.
                          Start to construct the trajectory: 28 -> 16 -> 7
                          28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
                          Start to construct the trajectory: 28 -> 12 -> 16
                          28-12-16:Connectivity is undefined for the null graph.
                          Start to construct the trajectory: 28 -> 16 -> 15
                          28-15-16:Connectivity is undefined for the null graph.
                          ...
                          

                          So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

                          Any advice? Thanks.

                          Best,
                          Marco Uderzo

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception · Issue #340 · BiomedicalMachineLearning/stLearn · GitHub
                              Skip to content

                              pseudotimespace_global() always yields "Connectivity is undefined for the null graph" exception #340

                              Description

                              @marcouderzo

                              Hello,
                              I have a strange issue with running st.spatial.trajectory.pseudotimespace_global() on one particular dataset, which is a spatial subset of a full Visium HD sample. This is my code:

                              adata_gd75 = ad.read_h5ad("analysis_output/adata_subset.h5ad")
                              adata_gd75 = st.convert_scanpy(adata_gd75)
                              adata_gd75.obs['clusters'].value_counts()
                              clusters
                              7 490
                              16 383
                              6 325
                              14 271
                              22 269
                              0 260
                              4 249
                              15 241
                              10 226
                              2 224
                              21 215
                              8 212
                              5 176
                              1 169
                              17 153
                              20 111
                              12 100
                              9 82
                              13 74
                              23 63
                              27 48
                              3 42
                              29 38
                              28 35
                              11 28
                              19 23
                              25 18
                              30 7
                              24 7
                              32 7
                              18 5
                              sc.pp.pca(adata_gd75, n_comps=30, random_state=30)
                              sc.pp.neighbors(adata_gd75, n_neighbors=15, use_rep="X_pca")
                              sc.tl.umap(adata_gd75, random_state=30)
                              sc.pl.umap(adata_gd75, color="clusters")
                              adata_gd75.uns["iroot"] = st.spatial.trajectory.set_root(adata_gd75,use_label="clusters",cluster=21,use_raw=False)
                              st.spatial.trajectory.pseudotime(adata_gd75,eps=50,use_rep="X_pca",use_label="clusters") # runs indefinitely
                              

                              At first, the pseudotime() call never finished running, and kept one of my CPU cores at 100% for three days straight. By analyzing the call stack, it kept recursing around those nx calls:

                              networkx/algorithms/simple_paths.py: all_simple_paths(...)
                              networkx/algorithms/simple_paths.py: all_simple_edge_paths(...)
                              networkx/algorithms/simple_paths.py: _all_simple_edge_paths(...)
                              

                              The same code, on a subset of another sample, worked just fine and finished the computation in less than an hour. I then found out that by taking a wider subset of the adata_gd75 subset, the call finished running and returned some trajectories. Maybe it wasn't finding any trajectories at all?

                              However, afterwards, I run:

                              for lin in lineage:
                              lin = [str(c) for c in lin]
                              lineage_str = array_to_string(lin)
                              try:
                              st.spatial.trajectory.pseudotimespace_global(adata_gd75,use_label="clusters", list_clusters=lin)
                              st.pl.cluster_plot(adata_gd75,use_label="clusters", list_clusters=lin, show_trajectories=True,
                              show_subcluster=True, figsize = [12,12], cmap='cet_glasbey',
                              fname = f"./figures/all_samples/lineage_tracing/GD7.5_niches_subset/GD75_{lineage_str}_pseudotimespace_global.png")
                              except Exception as e:
                              print(f'{lineage_str}:{e}')
                              

                              This yields:

                              ...
                              Start to construct the trajectory: 28 -> 17 -> 15
                              28-17-15:Connectivity is undefined for the null graph.
                              Start to construct the trajectory: 28 -> 16 -> 1
                              28-1-16:Connectivity is undefined for the null graph.
                              Start to construct the trajectory: 2 -> 28 -> 16
                              28-2-16:Connectivity is undefined for the null graph.
                              Start to construct the trajectory: 28 -> 4 -> 16
                              28-4-16:Connectivity is undefined for the null graph.
                              Start to construct the trajectory: 28 -> 16 -> 7
                              28-7-16:too many indices for array: array is 1-dimensional, but 2 were indexed
                              Start to construct the trajectory: 28 -> 12 -> 16
                              28-12-16:Connectivity is undefined for the null graph.
                              Start to construct the trajectory: 28 -> 16 -> 15
                              28-15-16:Connectivity is undefined for the null graph.
                              ...
                              

                              So I'm going to ask: in stLearn, what causes it to yield this "Connectivity is undefined for the null graph." exception?

                              Any advice? Thanks.

                              Best,
                              Marco Uderzo

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions