Selected changesmerged Oct 4, 2026
enh: Modernize the admin dashboard with panel.ui and add admin access controlPython · 741 + / 199 −
Introduces 44 new declarations in panel/io/admin.py.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
panel/io/admin.py ↗ · 21 files
@@ -419,74 +445,215 @@ def _unwatch_session_info(session_context): return total, active, render, duration def get_overview(doc=None):- layout = FlexBox(*get_session_info(doc), margin=0, sizing_mode='stretch_width')- info = get_version_info()+ ui = _ui()+ trends = list(get_session_info(doc)) try: import psutil # noqa except Exception:- layout.append(info)- return layout+ process_info = [ui.Alert(+ 'Install psutil to monitor the memory and CPU usage of the server.',+ severity='info', sizing_mode='stretch_width', margin=(0, 0, 0, 0)+ )] else:- layout.extend([*get_process_info(), info])- return layout---def log_component():- # Without this tabulator is empty after reload of website- log_terminal.param.trigger("value")-- return Column(- Accordion(- ('Filters & Download', Row(- level_filter,- app_filter,- session_filter,- message_filter,- Column(
Move media & home dirs tests to fs tests.Rust · 63 + / 67 −
Introduces 3 new declarations in library/std/src/fs/dirs.rs.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
library/std/src/fs/dirs.rs ↗ · 2 files
@@ -519,70 +519,3 @@ impl MediaDirs { self } }--#[cfg(test)]-mod tests {- use super::*;-- fn test_dir(what: &str) -> PathBuf {- crate::env::current_dir().unwrap().ancestors().last().unwrap().join(what)- }-- #[test]- fn test_home_dirs_field_hookup_matches() {- let mut dirs = HomeDirs::empty();-- assert_eq!(dirs.config_home(), None);- assert_eq!(dirs.data_home(), None);- assert_eq!(dirs.state_home(), None);- assert_eq!(dirs.cache_home(), None);-- let config = test_dir("config");- let data = test_dir("data");- let state = test_dir("state");- let cache = test_dir("cache");-- dirs.set_config_home(config.clone());- dirs.set_data_home(data.clone());- dirs.set_state_home(state.clone());- dirs.set_cache_home(cache.clone());-- assert_eq!(dirs.config_home(), Some(config.as_ref()));- assert_eq!(dirs.data_home(), Some(data.as_ref()));
add generic list type hints to double_linear_search_recursionPython · 21 + / 1 −
Introduces 5 new declarations in searches/double_linear_search_recursion.py.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
searches/double_linear_search_recursion.py ↗ · 1 files
@@ -1,4 +1,20 @@-def search(list_data: list, key: int, left: int = 0, right: int = 0) -> int:+from dataclasses import dataclass+from typing import Protocol+++class Comparable(Protocol):+ def __eq__(self, other: object) -> bool: ...+ def __gt__(self, other: Comparable) -> bool: ...+++@dataclass+class Person:+ first_name: str+++def search[T: Comparable](+ list_data: list[T], key: T, left: int = 0, right: int = 0+) -> int: """ Iterate through the array to find the index of key using recursion. :param list_data: the list to be searched
BUG: .loc setitem with an integer slice on a Decimal indexPython · 4 + / 80 −
Reworks 38 lines of existing logic in pandas/core/indexes/base.py.
Changes how existing core implementation behaves. Tests changed with it, with code of their own.
pandas/core/indexes/base.py ↗ · 9 files
@@ -4289,37 +4283,9 @@ def _convert_slice_indexer( self._validate_indexer("slice", key.step, "getitem") return key - # convert the slice to an indexer here; checking that the user didn't- # pass a positional slice to loc- is_positional = is_index_slice and self._should_fallback_to_positional-- # if we are mixed and have integers- if is_positional:- try:- # Validate start & stop- if start is not None:- self.get_loc(start)- if stop is not None:- self.get_loc(stop)- is_positional = False- except KeyError:- pass- if com.is_null_slice(key):- # It doesn't matter if we are positional or label based- indexer = key- elif is_positional:- if kind == "loc":- # GH#16121, GH#24612, GH#31810- raise TypeError(- "Slicing a positional slice with .loc is not allowed, "- "Use .loc with labels or .iloc with positions instead.",- )- indexer = key- else:- indexer = self.slice_indexer(start, stop, step)-
llama: support both embd + raw tokens in batchC++ · 289 + / 94 −
Reworks 117 lines of existing logic in src/llama-batch.cpp.
Changes how existing runtime behaves. Tests changed with it, with code of their own.
src/llama-batch.cpp ↗ · 29 files
@@ -49,32 +49,60 @@ bool llama_batch_allocr::init( // // determine the content types of the batch // an entry can carry a token id, a token embedding, or both (e.g. MTP hook batches)- // all entries must carry the same combination+ // all entries must carry the same combination, or be a mix of token and embd entries // - const bool has_token = batch_inp.tokens[0].id != LLAMA_TOKEN_NULL;- const bool has_embd = batch_inp.tokens[0].has_embd;+ int32_t n_tok_only = 0;+ int32_t n_embd_only = 0;+ int32_t n_both = 0; - for (int32_t i = 1; i < n_tok; ++i) {- if ((batch_inp.tokens[i].id != LLAMA_TOKEN_NULL) != has_token ||- batch_inp.tokens[i].has_embd != has_embd) {- LLAMA_LOG_ERROR("%s: all entries in the batch must have the same content types\n", __func__);+ for (int32_t i = 0; i < n_tok; ++i) {+ const bool is_tok = batch_inp.tokens[i].id != LLAMA_TOKEN_NULL;+ const bool is_emb = batch_inp.tokens[i].has_embd;++ if (!is_tok && !is_emb) {+ LLAMA_LOG_ERROR("%s: entry %d has neither a token id nor an embedding\n", __func__, i); return false; }++ n_tok_only += is_tok && !is_emb;+ n_embd_only += is_emb && !is_tok;+ n_both += is_tok && is_emb; } - if (!has_token && !has_embd) {- LLAMA_LOG_ERROR("%s: batch has neither token ids nor embeddings\n", __func__);