Daily edition

Oct 26, 2026

The edition exactly as it was published. Nothing here is re-selected on a later reading.

Oct 27, 20265 reads · 151 merged PRs screened

core implementation

pandas-dev/pandas · #70740

Files changed →View PR ↗

ENH: implement ExtensionArray.__array_function__ (GH#26380)Python · 80 + / 0 −

Introduces 4 new declarations in pandas/core/arrays/base.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

pandas/core/arrays/base.py ↗ · 5 files

@@ -3235,6 +3268,53 @@ def _groupby_first_last(         return self.take(result_indices, allow_fill=True)  +# -----------------------------------------------------------------------------+# __array_function__ helpers++# True while ExtensionArray.__array_function__ is handling a call+_IN_ARRAY_FUNCTION = contextvars.ContextVar("_IN_ARRAY_FUNCTION", default=False)+++# Overrides so these keep the extension dtype. Returning NotImplemented falls+#  back to numpy's implementation.+++def _delete(arr, obj, axis=None):+    # the ExtensionArray may be obj rather than arr+    if (+        not isinstance(arr, ExtensionArray)+        or arr.ndim != 1+        or axis not in (None, 0, -1)+    ):+        return NotImplemented+    return arr.delete(obj)+++def _concatenate(arrays, axis=0, out=None, dtype=None, casting="same_kind"):+    if (+        not isinstance(arrays, (list, tuple))+        or not arrays+        or axis not in (None, 0, -1)+        or out is not None+        or dtype is not None+        or casting != "same_kind"

core implementation

huggingface/transformers · #49980

Files changed →View PR ↗

[Fix] Fix NUMA and cpuset detection in CBPython · 80 + / 9 −

Introduces 3 new declarations in src/transformers/generation/continuous_batching/utils.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

src/transformers/generation/continuous_batching/utils.py ↗ · 2 files

@@ -319,6 +325,73 @@ def memory_pool_context(mem_pool: Any) -> AbstractContextManager: # --------------------------------------------------- MEMORY UTILS --------------------------------------------------- #  +def _parse_numa_node_list(node_list: str) -> set[int]:+    """Parses a node list in the kernel format, e.g. "0-1,3" -> {0, 1, 3}."""+    nodes = set()+    for node_range in node_list.split(","):+        first_node, _, last_node = node_range.partition("-")+        nodes.update(range(int(first_node), int(last_node or first_node) + 1))+    return nodes+++def _get_allowed_numa_nodes() -> set[int]:+    """Returns the NUMA nodes the process can allocate memory from, i.e. the nodes allowed both by its cpuset (cgroups,+    `docker --cpuset-mems`, ...) and by its memory policy (`numactl --membind`, ...). Returns an empty set if they+    cannot be read, e.g. if we are not on Linux or there is no NUMA support."""+    allowed_sets: list[set[int]] = []++    # Retrieve the allowed nodes from the cpuset+    mems_allowed = None+    try:+        # The cpuset restricts memory to the nodes in "Mems_allowed_list: <nodes>"+        with open("/proc/self/status", encoding="utf-8", errors="replace") as f:+            for line in f:+                if line.startswith("Mems_allowed_list:"):+                    mems_allowed = line.split(":")[1].strip()+                    break+    except OSError:+        pass++    if mems_allowed is not None:+        allowed_sets.append(_parse_numa_node_list(mems_allowed))+

systems design

kubernetes/kubernetes · #143353

Files changed →View PR ↗

Pass initial events through input channel preparing for moving the initial event fetching to separate goroutineGo · 69 + / 34 −

Introduces 3 new declarations in staging/src/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go.

Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.

staging/src/k8s.io/apiserver/pkg/storage/cacher/cache_watcher.go ↗ · 3 files

@@ -466,22 +472,60 @@ func (c *cacheWatcher) sendWatchCacheEvent(event *watchCacheEvent) (builtAt, sen 	return builtAt, sentAt } -func (c *cacheWatcher) process(ctx context.Context, cacheInterval *watchCacheInterval) {+func (c *cacheWatcher) process(ctx context.Context) { 	defer utilruntime.HandleCrashWithContext(ctx) 	defer close(c.result) 	defer c.Stop()+	initialized := false+	var resourceVersion uint64 -	if err := c.processInitialEvents(cacheInterval); err != nil {-		return+	for {+		select {+		case item, ok := <-c.input:+			if !ok {+				return+			}+			switch {+			case item.interval != nil:+				if initialized {+					klog.ErrorS(nil, "Unexpected interval after watch was already initialized", "resource", c.groupResource, "identifier", c.identifier)+					if consistency.PanicOnCacheInconsistency {+						panic(fmt.Sprintf("Unexpected interval after watch was already initialized, resource: %q, identifier: %q", c.groupResource, c.identifier))+					}+					return+				}+				if err := c.processInitialEvents(item.interval); err != nil {+					return+				}+				resourceVersion = item.interval.resourceVersion+				// At this point we already start processing incoming watch events.

language design

rust-lang/rust · #164964

Files changed →View PR ↗

Rollup of 5 pull requestsRust · 146 + / 127 −

Introduces 3 new declarations in compiler/rustc_lint/src/levels.rs.

Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.

compiler/rustc_lint/src/levels.rs ↗ · 16 files

@@ -713,41 +702,27 @@ where             ShouldEmit::ErrorsAndLints { recovery: Recovery::Allowed },             Some(self.registered_lint_tools),         );-        parsed-            .into_iter()-            .find_map(|p| {-                if let Attribute::Parsed(AttributeKind::LintCheck(lints)) = p {-                    Some(lints)-                } else {-                    None-                }-            })-            .unwrap_or_default()+        self.add_hir_inner(&parsed, is_crate_node)     } -    fn add(&mut self, attrs: &[impl AttributeExt + 'static], is_crate_node: bool) {+    fn add_hir(&mut self, attrs: &[Attribute], is_crate_node: bool) {         if attrs.is_empty() {             return;         }-        for attr in attrs {-            if attr.is_automatically_derived_attr() {-                self.provider.insert(-                    LintId::of(SINGLE_USE_LIFETIMES),-                    LevelSpec::new(Level::Allow, None, LintLevelSource::Default),-                );-                continue;-            }--            // `#[doc(hidden)]` disables missing_docs check.-            if attr.is_doc_hidden() {-                self.provider.insert(

framework internals

vercel/next.js · #100272

Files changed →View PR ↗

Support fs.stat in Turbopack webpack loadersRust · 310 + / 26 −

Introduces 11 new declarations in turbopack/crates/turbo-tasks-fs/src/watcher/mod.rs.

Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.

turbopack/crates/turbo-tasks-fs/src/watcher/mod.rs ↗ · 19 files

@@ -1327,6 +1362,109 @@ mod tests {         .unwrap();     } +    #[cfg(not(miri))]+    #[tokio::test]+    async fn metadata_events_only_invalidate_metadata_readers() {+        let tt = TurboTasks::new(TurboTasksBackend::new(+            BackendOptions::default(),+            noop_backing_storage(),+        ));+        tt.run_once(async move {+            let invalidator_map = InvalidatorMap::new();+            let dir_invalidator_map = InvalidatorMap::new();+            let metadata_invalidator_map = InvalidatorMap::new();+            let path = PathBuf::from("root/file");+            let invalidator = turbo_tasks::get_invalidator().unwrap();+            invalidator_map.insert(Arc::new(path.clone()), invalidator);+            metadata_invalidator_map.insert(Arc::new(path.clone()), invalidator);++            let mut batch =+                BatchedInvalidations::new(DiskWatcherRecursiveMode::NonRecursive, false);+            let event = notify::Event::new(EventKind::Modify(ModifyKind::Metadata(+                MetadataKind::Permissions,+            )))+            .add_path(path.clone());+            assert!(batch.add_event(+                event,+                &invalidator_map,+                &dir_invalidator_map,+                &metadata_invalidator_map+            ));+            batch.execute(+                &invalidator_map,

Read today’s edition →