dtype error with st.tl.cci.adj_pvals() #350

Description

@durr1602

Hi!

I'm trying to run this tutorial with:

  • stlearn==1.4.0
  • pandas==3.0.2
    on a different dataset.

and I get the following error:

TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
2143 try:
-> 2144 self.obj._mgr.column_setitem(
2145 loc, plane_indexer, value, inplace_only=True
2146 )
2147 except (ValueError, TypeError, LossySetitemError) as exc:
2148 # If we're setting an entire column and we can't do it inplace,
2149 # then we can use value's dtype (or inferred dtype)
2150 # instead of object
Hide Traceback
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
1517 if inplace_only:
-> 1518 col_mgr.setitem_inplace(idx, value)
1519 else:
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
2217 if isinstance(arr, np.ndarray):
2218 # Note: checking for ndarray instead of np.dtype means we exclude
2219 # dt64/td64, which do their own validation.
-> 2220 value = np_can_hold_element(arr.dtype, value)
2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
1738 if dtype.itemsize < tipo.itemsize:
-> 1739 raise LossySetitemError
1740 if not isinstance(tipo, np.dtype):
1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
1742 # losslessly iff it has no NAs
LossySetitemError: The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
Cell In[41], line 5
1 # ---------------------------------------------------------------------------
2 # 9. Adjusted p-values
3 # ---------------------------------------------------------------------------
4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
431 # Re-ranking LRs based on these counts & updating LR ordering #
--> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
933 self._has_valid_setitem_indexer(key)
935 iloc: _iLocIndexer = (
936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
937 )
--> 938 iloc._setitem_with_indexer(indexer, value, self.name)
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
1950 # align and set the values
1951 if take_split_path:
1952 # We have to operate column-wise
-> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
1954 else:
1955 self._setitem_single_block(indexer, value, name)
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
1993 self._setitem_with_indexer_2d_value(indexer, value)
1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
1996 # We are setting multiple rows in a single column.
-> 1997 self._setitem_single_column(ilocs[0], value, pi)
1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
2000 # We are trying to set N values into M entries of a single
2001 # column, which is invalid for N != M
2002 # Exclude zero-len for e.g. boolean masking that is all-false
2004 if len(value) == 1 and not is_integer(info_axis):
2005 # This is a case like df.iloc[:3, [1]] = [0]
2006 # where we treat as df.iloc[:3, 1] = 0
File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
2151 dtype = self.obj.dtypes.iloc[loc]
2152 if dtype not in (np.void, object) and not self.obj.empty:
2153 # - Exclude np.void, as that is a special case for expansion.
2154 # We want to raise for
(...) 2161 # - Exclude empty initial object with enlargement,
2162 # as then there's nothing to be inconsistent with.
-> 2163 raise TypeError(
2164 f"Invalid value '{value}' for dtype '{dtype}'"
2165 ) from exc
2166 self.obj.isetitem(loc, value)
2167 else:
2168 # set value into the column (first attempting to operate inplace, then
2169 # falling back to casting if necessary)

It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

  • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
  • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

I can try preparing a PR if that helps, thx!

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" + '
      
      Skip to content

      dtype error with st.tl.cci.adj_pvals() #350

      Description

      @durr1602

      Hi!

      I'm trying to run this tutorial with:

      • stlearn==1.4.0
      • pandas==3.0.2
        on a different dataset.

      and I get the following error:

      TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
      2143 try:
      -> 2144 self.obj._mgr.column_setitem(
      2145 loc, plane_indexer, value, inplace_only=True
      2146 )
      2147 except (ValueError, TypeError, LossySetitemError) as exc:
      2148 # If we're setting an entire column and we can't do it inplace,
      2149 # then we can use value's dtype (or inferred dtype)
      2150 # instead of object
      Hide Traceback
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
      1517 if inplace_only:
      -> 1518 col_mgr.setitem_inplace(idx, value)
      1519 else:
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
      2217 if isinstance(arr, np.ndarray):
      2218 # Note: checking for ndarray instead of np.dtype means we exclude
      2219 # dt64/td64, which do their own validation.
      -> 2220 value = np_can_hold_element(arr.dtype, value)
      2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
      2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
      1738 if dtype.itemsize < tipo.itemsize:
      -> 1739 raise LossySetitemError
      1740 if not isinstance(tipo, np.dtype):
      1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
      1742 # losslessly iff it has no NAs
      LossySetitemError: The above exception was the direct cause of the following exception:
      TypeError Traceback (most recent call last)
      Cell In[41], line 5
      1 # ---------------------------------------------------------------------------
      2 # 9. Adjusted p-values
      3 # ---------------------------------------------------------------------------
      4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
      ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
      429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
      431 # Re-ranking LRs based on these counts & updating LR ordering #
      --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
      433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
      434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
      933 self._has_valid_setitem_indexer(key)
      935 iloc: _iLocIndexer = (
      936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
      937 )
      --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
      1950 # align and set the values
      1951 if take_split_path:
      1952 # We have to operate column-wise
      -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
      1954 else:
      1955 self._setitem_single_block(indexer, value, name)
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
      1993 self._setitem_with_indexer_2d_value(indexer, value)
      1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
      1996 # We are setting multiple rows in a single column.
      -> 1997 self._setitem_single_column(ilocs[0], value, pi)
      1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
      2000 # We are trying to set N values into M entries of a single
      2001 # column, which is invalid for N != M
      2002 # Exclude zero-len for e.g. boolean masking that is all-false
      2004 if len(value) == 1 and not is_integer(info_axis):
      2005 # This is a case like df.iloc[:3, [1]] = [0]
      2006 # where we treat as df.iloc[:3, 1] = 0
      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
      2151 dtype = self.obj.dtypes.iloc[loc]
      2152 if dtype not in (np.void, object) and not self.obj.empty:
      2153 # - Exclude np.void, as that is a special case for expansion.
      2154 # We want to raise for
      (...) 2161 # - Exclude empty initial object with enlargement,
      2162 # as then there's nothing to be inconsistent with.
      -> 2163 raise TypeError(
      2164 f"Invalid value '{value}' for dtype '{dtype}'"
      2165 ) from exc
      2166 self.obj.isetitem(loc, value)
      2167 else:
      2168 # set value into the column (first attempting to operate inplace, then
      2169 # falling back to casting if necessary)
      

      It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

      • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
      • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

      I can try preparing a PR if that helps, thx!

      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('^' + ".*" + '
          Skip to content

          dtype error with st.tl.cci.adj_pvals() #350

          Description

          @durr1602

          Hi!

          I'm trying to run this tutorial with:

          • stlearn==1.4.0
          • pandas==3.0.2
            on a different dataset.

          and I get the following error:

          TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
          2143 try:
          -> 2144 self.obj._mgr.column_setitem(
          2145 loc, plane_indexer, value, inplace_only=True
          2146 )
          2147 except (ValueError, TypeError, LossySetitemError) as exc:
          2148 # If we're setting an entire column and we can't do it inplace,
          2149 # then we can use value's dtype (or inferred dtype)
          2150 # instead of object
          Hide Traceback
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
          1517 if inplace_only:
          -> 1518 col_mgr.setitem_inplace(idx, value)
          1519 else:
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
          2217 if isinstance(arr, np.ndarray):
          2218 # Note: checking for ndarray instead of np.dtype means we exclude
          2219 # dt64/td64, which do their own validation.
          -> 2220 value = np_can_hold_element(arr.dtype, value)
          2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
          2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
          1738 if dtype.itemsize < tipo.itemsize:
          -> 1739 raise LossySetitemError
          1740 if not isinstance(tipo, np.dtype):
          1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
          1742 # losslessly iff it has no NAs
          LossySetitemError: The above exception was the direct cause of the following exception:
          TypeError Traceback (most recent call last)
          Cell In[41], line 5
          1 # ---------------------------------------------------------------------------
          2 # 9. Adjusted p-values
          3 # ---------------------------------------------------------------------------
          4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
          ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
          429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
          431 # Re-ranking LRs based on these counts & updating LR ordering #
          --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
          433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
          434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
          933 self._has_valid_setitem_indexer(key)
          935 iloc: _iLocIndexer = (
          936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
          937 )
          --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
          1950 # align and set the values
          1951 if take_split_path:
          1952 # We have to operate column-wise
          -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
          1954 else:
          1955 self._setitem_single_block(indexer, value, name)
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
          1993 self._setitem_with_indexer_2d_value(indexer, value)
          1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
          1996 # We are setting multiple rows in a single column.
          -> 1997 self._setitem_single_column(ilocs[0], value, pi)
          1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
          2000 # We are trying to set N values into M entries of a single
          2001 # column, which is invalid for N != M
          2002 # Exclude zero-len for e.g. boolean masking that is all-false
          2004 if len(value) == 1 and not is_integer(info_axis):
          2005 # This is a case like df.iloc[:3, [1]] = [0]
          2006 # where we treat as df.iloc[:3, 1] = 0
          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
          2151 dtype = self.obj.dtypes.iloc[loc]
          2152 if dtype not in (np.void, object) and not self.obj.empty:
          2153 # - Exclude np.void, as that is a special case for expansion.
          2154 # We want to raise for
          (...) 2161 # - Exclude empty initial object with enlargement,
          2162 # as then there's nothing to be inconsistent with.
          -> 2163 raise TypeError(
          2164 f"Invalid value '{value}' for dtype '{dtype}'"
          2165 ) from exc
          2166 self.obj.isetitem(loc, value)
          2167 else:
          2168 # set value into the column (first attempting to operate inplace, then
          2169 # falling back to casting if necessary)
          

          It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

          • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
          • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

          I can try preparing a PR if that helps, thx!

          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('^' + ".*" + '
              Skip to content

              dtype error with st.tl.cci.adj_pvals() #350

              Description

              @durr1602

              Hi!

              I'm trying to run this tutorial with:

              • stlearn==1.4.0
              • pandas==3.0.2
                on a different dataset.

              and I get the following error:

              TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
              2143 try:
              -> 2144 self.obj._mgr.column_setitem(
              2145 loc, plane_indexer, value, inplace_only=True
              2146 )
              2147 except (ValueError, TypeError, LossySetitemError) as exc:
              2148 # If we're setting an entire column and we can't do it inplace,
              2149 # then we can use value's dtype (or inferred dtype)
              2150 # instead of object
              Hide Traceback
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
              1517 if inplace_only:
              -> 1518 col_mgr.setitem_inplace(idx, value)
              1519 else:
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
              2217 if isinstance(arr, np.ndarray):
              2218 # Note: checking for ndarray instead of np.dtype means we exclude
              2219 # dt64/td64, which do their own validation.
              -> 2220 value = np_can_hold_element(arr.dtype, value)
              2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
              2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
              1738 if dtype.itemsize < tipo.itemsize:
              -> 1739 raise LossySetitemError
              1740 if not isinstance(tipo, np.dtype):
              1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
              1742 # losslessly iff it has no NAs
              LossySetitemError: The above exception was the direct cause of the following exception:
              TypeError Traceback (most recent call last)
              Cell In[41], line 5
              1 # ---------------------------------------------------------------------------
              2 # 9. Adjusted p-values
              3 # ---------------------------------------------------------------------------
              4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
              ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
              429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
              431 # Re-ranking LRs based on these counts & updating LR ordering #
              --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
              433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
              434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
              933 self._has_valid_setitem_indexer(key)
              935 iloc: _iLocIndexer = (
              936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
              937 )
              --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
              1950 # align and set the values
              1951 if take_split_path:
              1952 # We have to operate column-wise
              -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
              1954 else:
              1955 self._setitem_single_block(indexer, value, name)
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
              1993 self._setitem_with_indexer_2d_value(indexer, value)
              1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
              1996 # We are setting multiple rows in a single column.
              -> 1997 self._setitem_single_column(ilocs[0], value, pi)
              1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
              2000 # We are trying to set N values into M entries of a single
              2001 # column, which is invalid for N != M
              2002 # Exclude zero-len for e.g. boolean masking that is all-false
              2004 if len(value) == 1 and not is_integer(info_axis):
              2005 # This is a case like df.iloc[:3, [1]] = [0]
              2006 # where we treat as df.iloc[:3, 1] = 0
              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
              2151 dtype = self.obj.dtypes.iloc[loc]
              2152 if dtype not in (np.void, object) and not self.obj.empty:
              2153 # - Exclude np.void, as that is a special case for expansion.
              2154 # We want to raise for
              (...) 2161 # - Exclude empty initial object with enlargement,
              2162 # as then there's nothing to be inconsistent with.
              -> 2163 raise TypeError(
              2164 f"Invalid value '{value}' for dtype '{dtype}'"
              2165 ) from exc
              2166 self.obj.isetitem(loc, value)
              2167 else:
              2168 # set value into the column (first attempting to operate inplace, then
              2169 # falling back to casting if necessary)
              

              It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

              • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
              • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

              I can try preparing a PR if that helps, thx!

              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" + '
                  Skip to content

                  dtype error with st.tl.cci.adj_pvals() #350

                  Description

                  @durr1602

                  Hi!

                  I'm trying to run this tutorial with:

                  • stlearn==1.4.0
                  • pandas==3.0.2
                    on a different dataset.

                  and I get the following error:

                  TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                  2143 try:
                  -> 2144 self.obj._mgr.column_setitem(
                  2145 loc, plane_indexer, value, inplace_only=True
                  2146 )
                  2147 except (ValueError, TypeError, LossySetitemError) as exc:
                  2148 # If we're setting an entire column and we can't do it inplace,
                  2149 # then we can use value's dtype (or inferred dtype)
                  2150 # instead of object
                  Hide Traceback
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
                  1517 if inplace_only:
                  -> 1518 col_mgr.setitem_inplace(idx, value)
                  1519 else:
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
                  2217 if isinstance(arr, np.ndarray):
                  2218 # Note: checking for ndarray instead of np.dtype means we exclude
                  2219 # dt64/td64, which do their own validation.
                  -> 2220 value = np_can_hold_element(arr.dtype, value)
                  2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
                  2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
                  1738 if dtype.itemsize < tipo.itemsize:
                  -> 1739 raise LossySetitemError
                  1740 if not isinstance(tipo, np.dtype):
                  1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
                  1742 # losslessly iff it has no NAs
                  LossySetitemError: The above exception was the direct cause of the following exception:
                  TypeError Traceback (most recent call last)
                  Cell In[41], line 5
                  1 # ---------------------------------------------------------------------------
                  2 # 9. Adjusted p-values
                  3 # ---------------------------------------------------------------------------
                  4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
                  ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
                  429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
                  431 # Re-ranking LRs based on these counts & updating LR ordering #
                  --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
                  433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
                  434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
                  933 self._has_valid_setitem_indexer(key)
                  935 iloc: _iLocIndexer = (
                  936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
                  937 )
                  --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
                  1950 # align and set the values
                  1951 if take_split_path:
                  1952 # We have to operate column-wise
                  -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
                  1954 else:
                  1955 self._setitem_single_block(indexer, value, name)
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
                  1993 self._setitem_with_indexer_2d_value(indexer, value)
                  1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
                  1996 # We are setting multiple rows in a single column.
                  -> 1997 self._setitem_single_column(ilocs[0], value, pi)
                  1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
                  2000 # We are trying to set N values into M entries of a single
                  2001 # column, which is invalid for N != M
                  2002 # Exclude zero-len for e.g. boolean masking that is all-false
                  2004 if len(value) == 1 and not is_integer(info_axis):
                  2005 # This is a case like df.iloc[:3, [1]] = [0]
                  2006 # where we treat as df.iloc[:3, 1] = 0
                  File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                  2151 dtype = self.obj.dtypes.iloc[loc]
                  2152 if dtype not in (np.void, object) and not self.obj.empty:
                  2153 # - Exclude np.void, as that is a special case for expansion.
                  2154 # We want to raise for
                  (...) 2161 # - Exclude empty initial object with enlargement,
                  2162 # as then there's nothing to be inconsistent with.
                  -> 2163 raise TypeError(
                  2164 f"Invalid value '{value}' for dtype '{dtype}'"
                  2165 ) from exc
                  2166 self.obj.isetitem(loc, value)
                  2167 else:
                  2168 # set value into the column (first attempting to operate inplace, then
                  2169 # falling back to casting if necessary)
                  

                  It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

                  • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
                  • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

                  I can try preparing a PR if that helps, thx!

                  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('^' + ".*" + '
                      Skip to content

                      dtype error with st.tl.cci.adj_pvals() #350

                      Description

                      @durr1602

                      Hi!

                      I'm trying to run this tutorial with:

                      • stlearn==1.4.0
                      • pandas==3.0.2
                        on a different dataset.

                      and I get the following error:

                      TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                      2143 try:
                      -> 2144 self.obj._mgr.column_setitem(
                      2145 loc, plane_indexer, value, inplace_only=True
                      2146 )
                      2147 except (ValueError, TypeError, LossySetitemError) as exc:
                      2148 # If we're setting an entire column and we can't do it inplace,
                      2149 # then we can use value's dtype (or inferred dtype)
                      2150 # instead of object
                      Hide Traceback
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
                      1517 if inplace_only:
                      -> 1518 col_mgr.setitem_inplace(idx, value)
                      1519 else:
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
                      2217 if isinstance(arr, np.ndarray):
                      2218 # Note: checking for ndarray instead of np.dtype means we exclude
                      2219 # dt64/td64, which do their own validation.
                      -> 2220 value = np_can_hold_element(arr.dtype, value)
                      2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
                      2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
                      1738 if dtype.itemsize < tipo.itemsize:
                      -> 1739 raise LossySetitemError
                      1740 if not isinstance(tipo, np.dtype):
                      1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
                      1742 # losslessly iff it has no NAs
                      LossySetitemError: The above exception was the direct cause of the following exception:
                      TypeError Traceback (most recent call last)
                      Cell In[41], line 5
                      1 # ---------------------------------------------------------------------------
                      2 # 9. Adjusted p-values
                      3 # ---------------------------------------------------------------------------
                      4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
                      ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
                      429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
                      431 # Re-ranking LRs based on these counts & updating LR ordering #
                      --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
                      433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
                      434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
                      933 self._has_valid_setitem_indexer(key)
                      935 iloc: _iLocIndexer = (
                      936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
                      937 )
                      --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
                      1950 # align and set the values
                      1951 if take_split_path:
                      1952 # We have to operate column-wise
                      -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
                      1954 else:
                      1955 self._setitem_single_block(indexer, value, name)
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
                      1993 self._setitem_with_indexer_2d_value(indexer, value)
                      1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
                      1996 # We are setting multiple rows in a single column.
                      -> 1997 self._setitem_single_column(ilocs[0], value, pi)
                      1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
                      2000 # We are trying to set N values into M entries of a single
                      2001 # column, which is invalid for N != M
                      2002 # Exclude zero-len for e.g. boolean masking that is all-false
                      2004 if len(value) == 1 and not is_integer(info_axis):
                      2005 # This is a case like df.iloc[:3, [1]] = [0]
                      2006 # where we treat as df.iloc[:3, 1] = 0
                      File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                      2151 dtype = self.obj.dtypes.iloc[loc]
                      2152 if dtype not in (np.void, object) and not self.obj.empty:
                      2153 # - Exclude np.void, as that is a special case for expansion.
                      2154 # We want to raise for
                      (...) 2161 # - Exclude empty initial object with enlargement,
                      2162 # as then there's nothing to be inconsistent with.
                      -> 2163 raise TypeError(
                      2164 f"Invalid value '{value}' for dtype '{dtype}'"
                      2165 ) from exc
                      2166 self.obj.isetitem(loc, value)
                      2167 else:
                      2168 # set value into the column (first attempting to operate inplace, then
                      2169 # falling back to casting if necessary)
                      

                      It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

                      • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
                      • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

                      I can try preparing a PR if that helps, thx!

                      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('^' + ".*" + '
                          Skip to content

                          dtype error with st.tl.cci.adj_pvals() #350

                          Description

                          @durr1602

                          Hi!

                          I'm trying to run this tutorial with:

                          • stlearn==1.4.0
                          • pandas==3.0.2
                            on a different dataset.

                          and I get the following error:

                          TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                          2143 try:
                          -> 2144 self.obj._mgr.column_setitem(
                          2145 loc, plane_indexer, value, inplace_only=True
                          2146 )
                          2147 except (ValueError, TypeError, LossySetitemError) as exc:
                          2148 # If we're setting an entire column and we can't do it inplace,
                          2149 # then we can use value's dtype (or inferred dtype)
                          2150 # instead of object
                          Hide Traceback
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
                          1517 if inplace_only:
                          -> 1518 col_mgr.setitem_inplace(idx, value)
                          1519 else:
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
                          2217 if isinstance(arr, np.ndarray):
                          2218 # Note: checking for ndarray instead of np.dtype means we exclude
                          2219 # dt64/td64, which do their own validation.
                          -> 2220 value = np_can_hold_element(arr.dtype, value)
                          2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
                          2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
                          1738 if dtype.itemsize < tipo.itemsize:
                          -> 1739 raise LossySetitemError
                          1740 if not isinstance(tipo, np.dtype):
                          1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
                          1742 # losslessly iff it has no NAs
                          LossySetitemError: The above exception was the direct cause of the following exception:
                          TypeError Traceback (most recent call last)
                          Cell In[41], line 5
                          1 # ---------------------------------------------------------------------------
                          2 # 9. Adjusted p-values
                          3 # ---------------------------------------------------------------------------
                          4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
                          ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
                          429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
                          431 # Re-ranking LRs based on these counts & updating LR ordering #
                          --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
                          433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
                          434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
                          933 self._has_valid_setitem_indexer(key)
                          935 iloc: _iLocIndexer = (
                          936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
                          937 )
                          --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
                          1950 # align and set the values
                          1951 if take_split_path:
                          1952 # We have to operate column-wise
                          -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
                          1954 else:
                          1955 self._setitem_single_block(indexer, value, name)
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
                          1993 self._setitem_with_indexer_2d_value(indexer, value)
                          1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
                          1996 # We are setting multiple rows in a single column.
                          -> 1997 self._setitem_single_column(ilocs[0], value, pi)
                          1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
                          2000 # We are trying to set N values into M entries of a single
                          2001 # column, which is invalid for N != M
                          2002 # Exclude zero-len for e.g. boolean masking that is all-false
                          2004 if len(value) == 1 and not is_integer(info_axis):
                          2005 # This is a case like df.iloc[:3, [1]] = [0]
                          2006 # where we treat as df.iloc[:3, 1] = 0
                          File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                          2151 dtype = self.obj.dtypes.iloc[loc]
                          2152 if dtype not in (np.void, object) and not self.obj.empty:
                          2153 # - Exclude np.void, as that is a special case for expansion.
                          2154 # We want to raise for
                          (...) 2161 # - Exclude empty initial object with enlargement,
                          2162 # as then there's nothing to be inconsistent with.
                          -> 2163 raise TypeError(
                          2164 f"Invalid value '{value}' for dtype '{dtype}'"
                          2165 ) from exc
                          2166 self.obj.isetitem(loc, value)
                          2167 else:
                          2168 # set value into the column (first attempting to operate inplace, then
                          2169 # falling back to casting if necessary)
                          

                          It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

                          • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
                          • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

                          I can try preparing a PR if that helps, thx!

                          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); } })(); })();
                              Skip to content

                              dtype error with st.tl.cci.adj_pvals() #350

                              Description

                              @durr1602

                              Hi!

                              I'm trying to run this tutorial with:

                              • stlearn==1.4.0
                              • pandas==3.0.2
                                on a different dataset.

                              and I get the following error:

                              TypeError: Invalid value '[70 68 64 61 55 55 54 45 45 41 38 37 35 35 25 19 19 16 10 3 3 2]' for dtype 'int32'
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2144, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                              2143 try:
                              -> 2144 self.obj._mgr.column_setitem(
                              2145 loc, plane_indexer, value, inplace_only=True
                              2146 )
                              2147 except (ValueError, TypeError, LossySetitemError) as exc:
                              2148 # If we're setting an entire column and we can't do it inplace,
                              2149 # then we can use value's dtype (or inferred dtype)
                              2150 # instead of object
                              Hide Traceback
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:1518, in BlockManager.column_setitem(self, loc, idx, value, inplace_only)
                              1517 if inplace_only:
                              -> 1518 col_mgr.setitem_inplace(idx, value)
                              1519 else:
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/internals/managers.py:2220, in SingleBlockManager.setitem_inplace(self, indexer, value)
                              2217 if isinstance(arr, np.ndarray):
                              2218 # Note: checking for ndarray instead of np.dtype means we exclude
                              2219 # dt64/td64, which do their own validation.
                              -> 2220 value = np_can_hold_element(arr.dtype, value)
                              2222 if isinstance(value, np.ndarray) and value.ndim == 1 and len(value) == 1:
                              2223 # NumPy 1.25 deprecation: [https://github.com/numpy/numpy/pull/10615]
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py:1739, in np_can_hold_element(dtype, element)
                              1738 if dtype.itemsize < tipo.itemsize:
                              -> 1739 raise LossySetitemError
                              1740 if not isinstance(tipo, np.dtype):
                              1741 # i.e. nullable IntegerDtype; we can put this into an ndarray
                              1742 # losslessly iff it has no NAs
                              LossySetitemError: The above exception was the direct cause of the following exception:
                              TypeError Traceback (most recent call last)
                              Cell In[41], line 5
                              1 # ---------------------------------------------------------------------------
                              2 # 9. Adjusted p-values
                              3 # ---------------------------------------------------------------------------
                              4 log.info("\n--- Step 9: Adjusting p-values (FDR BH, spot axis) ---")
                              ----> 5 st.tl.cci.adj_pvals(grid, correct_axis="spot", pval_adj_cutoff=0.05, adj_method="fdr_bh")
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/stlearn/tl/cci/analysis.py:432, in adj_pvals(adata, pval_adj_cutoff, correct_axis, adj_method)
                              429 lr_counts_pval = (ps < pval_adj_cutoff).sum(axis=0)
                              431 # Re-ranking LRs based on these counts & updating LR ordering #
                              --> 432 adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts
                              433 adata.uns["lr_summary"].loc[:, "n_spots_sig_pval"] = lr_counts_pval
                              434 new_order = np.argsort(-adata.uns["lr_summary"].loc[:, "n_spots_sig"].values)
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:938, in _LocationIndexer.__setitem__(self, key, value)
                              933 self._has_valid_setitem_indexer(key)
                              935 iloc: _iLocIndexer = (
                              936 cast("_iLocIndexer", self) if self.name == "iloc" else self.obj.iloc
                              937 )
                              --> 938 iloc._setitem_with_indexer(indexer, value, self.name)
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1953, in _iLocIndexer._setitem_with_indexer(self, indexer, value, name)
                              1950 # align and set the values
                              1951 if take_split_path:
                              1952 # We have to operate column-wise
                              -> 1953 self._setitem_with_indexer_split_path(indexer, value, name)
                              1954 else:
                              1955 self._setitem_single_block(indexer, value, name)
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:1997, in _iLocIndexer._setitem_with_indexer_split_path(self, indexer, value, name)
                              1993 self._setitem_with_indexer_2d_value(indexer, value)
                              1995 elif len(ilocs) == 1 and lplane_indexer == len(value) and not is_scalar(pi):
                              1996 # We are setting multiple rows in a single column.
                              -> 1997 self._setitem_single_column(ilocs[0], value, pi)
                              1999 elif len(ilocs) == 1 and 0 != lplane_indexer != len(value):
                              2000 # We are trying to set N values into M entries of a single
                              2001 # column, which is invalid for N != M
                              2002 # Exclude zero-len for e.g. boolean masking that is all-false
                              2004 if len(value) == 1 and not is_integer(info_axis):
                              2005 # This is a case like df.iloc[:3, [1]] = [0]
                              2006 # where we treat as df.iloc[:3, 1] = 0
                              File ~/envs/stlearn/.venv/lib/python3.13/site-packages/pandas/core/indexing.py:2163, in _iLocIndexer._setitem_single_column(self, loc, value, plane_indexer)
                              2151 dtype = self.obj.dtypes.iloc[loc]
                              2152 if dtype not in (np.void, object) and not self.obj.empty:
                              2153 # - Exclude np.void, as that is a special case for expansion.
                              2154 # We want to raise for
                              (...) 2161 # - Exclude empty initial object with enlargement,
                              2162 # as then there's nothing to be inconsistent with.
                              -> 2163 raise TypeError(
                              2164 f"Invalid value '{value}' for dtype '{dtype}'"
                              2165 ) from exc
                              2166 self.obj.isetitem(loc, value)
                              2167 else:
                              2168 # set value into the column (first attempting to operate inplace, then
                              2169 # falling back to casting if necessary)
                              

                              It seems that the problem lies in casting (int) in a column that expects float (likely because of initialization). If so, I see two possible solutions:

                              • fixing initialization (i'm not sure when adata.uns["lr_summary"] is created.. somewhere in st.tl.cci.run()?
                              • casting at line adata.uns["lr_summary"].loc[:, "n_spots_sig"] = lr_counts

                              I can try preparing a PR if that helps, thx!

                              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